簡単
このセクションでは、インポートしたモデルをカスタマイズするためにModelfileを使用する方法について、以下のセクションに分けて学びます。
- GGUFからのインポート
- PytorchまたはSafetensorsからのインポート
- モデルから直接インポート
- カスタムプロンプト
I. GGUFからの輸入
GGUF(GPT-Generated Unified Format)は、微調整された言語モデルを保存するためのファイル形式です。このフォーマットは、異なるプラットフォームや環境間でモデルを簡単に共有し、インポートできるように設計されています。複数の数量化フォーマットをサポートしており、モデルファイルのサイズを効果的に削減することができます。
その前身はGGML(GPT-Generated Model Language)で、機械学習用に特別に設計されたテンソル・ライブラリであり、シングル・ファイル形式を持ち、CPUやGPUの異なるアーキテクチャ上で推論しやすいように設計されていたが、その後、開発における柔軟性の欠如、互換性の欠如、メンテナンスの困難さなどの問題に直面した。
オーラマ GGUFファイルからのモデルのインポートは、以下の手順でサポートされています:
- ダウンロード
.gguf
書類
ダウンロードリンク: https://huggingface.co/RichardErkhov/Qwen_-_Qwen2-0.5B-gguf/resolve/main/Qwen2-0.5B.Q3_K_M.gguf?download=true
デモ用に、Qwen2-0.5Bモデルを選択しました。これをダウンロードし、最初のパートのルート・ディレクトリにコピーしてください。以下のディレクトリ構造を参考にしてください:
├─ 1.gguf/からの直接インポート
│ ├── main.ipynb
モデルファイル
│ ├──Qwen-0.5B.Q3_K_M.gguf
├── 2.safetensors import/
│ ├── llama-3-8b-bnb-4bit/
│ ├── main.ipynb
│ ├── モデルファイル
モデル直接インポート │ ├── llama-3-8b-bnb-4bit
│ ├─ llama.cpp/ │ ├─ main.ipynb │ ├─ 3.
│ ├──Qwen-0.5b/ │ ├──main.cpp/ │ ├──Qwen-0.5b/
│ ├── main.ipynb
モデルファイル
└── Qwen_instruct_0.5b.gguf
カスタムプロンプトの実践/ │ ├── main.ipynb │ ├── main.ipynb
├─ main.ipynb └─ Modelelfile └─ 4.
モデルファイル
チップ
第3章のコードと関連文書はノートブックにあります。 モデルファイルがどこにインストールされているかわからない場合は ノート/C3
- 新規モデルファイル作成
FROM ./Qwen2-0.5B.Q3_K_M.gguf
- Ollamaでモデルを作成する
注
以下のターミナルコマンドは、常にModelfileファイルがあるディレクトリから実行してください!
ollama create mymodel -f Modelfile
- ターミナルでモデルを実行する(ノートブックでは実行されないことがテストされています。)
オラマ・ラン・マイモデル
PytorchまたはSafetensorsからのインポート
Safetensorsはディープラーニングモデルの重みを保存するためのファイルフォーマットで、セキュリティ、効率性、使いやすさの問題に対処するように設計されている。この部分の機能はまだコミュニティメンバーによって開発されておらず、ドキュメントのリソースは現在のところ限られている。
もちろん、safetensorsファイルをggufファイルに変換してから処理することもできます。
セーフティセンサーとGGUFの詳細については、こちらのリンク(https://www.linkedin.com/pulse/llama-3-safetensors-vs-gguf-talles-carvalho-jjcqf)をご参照ください。
- ラマフォーカサルLM
- ミストラルフォーコーサルLM
- GemmaForCausalLM
このセクションはまだコミュニティによって最適化されていないため、ここで提供されるサンプルコードとプロセスは参考用であり、正常に動作することを保証するものではありません。詳細は公式ドキュメントを参照してください。
- llama-3モデルをダウンロードする
pip install huggingface_hub
#ダウンロードモデル
from huggingface_hub import snapshot_download
モデルID = "unsloth/llama-3-8b-bnb-4bit"
snapshot_download(
repo_id=model_id、
local_dir="llama-3-8b-bnb-4bit",
local_dir_use_symlinks=False、
revision="main"、
# の取得方法、セクション3参照
use_auth_token="")
- ルート・ディレクトリに以下の内容のModelfileファイルを作成する:
FROM ./llama-3-8b-bnb-4bit
- Ollamaでモデルを作成する
ollama create mymodel2 -f Modelfile
- 運用モデル
ollama run mymodel2
III.モデルからの直接インポート
通常、我々はHuggingFaceで多くのモデルファイルにさらされている、幸いなことに、hfはこれらのモデルをダウンロードして処理するために非常に便利なAPIを提供しています、上記のような直接ダウンロードは、ネットワーク環境によって制限され、速度は非常に遅いです、この小さなセクションでは、我々は完了するためにスクリプトとhfを使用します。
ラマ.cpp GGUFはCLIとサーバー機能を提供するオープンソースプロジェクトです。
Ollamaで直接変換できないアーキテクチャについては、llama.cppを使って数値化し、GGUF形式に変換してから、最初の方法でインポートすることができる。 私たちの変換プロセス全体は、以下のステップに分かれています:
- huggingfaceからモデルをダウンロードする;
- 変換にはllama.cppを使う;
- モデルの定量化にはllama.cppを使う;
- モデルを実行し、アップロードする。
3.1 HuggingFaceからモデルをダウンロードする
[](https://github.com/datawhalechina/handy-ollama/blob/main/docs/C3/1..md#31--huggingface--model)最も直感的なダウンロード方法は git clone やリンクですが、llm は各パーツを GB 単位でカウントしているため、git clone やリンクからダウンロードすることはできません。 OOMエラー(メモリ不足)
Pythonで簡単なdownload.pyを書くことができます。
まず、hfにアクセスしてユーザーの個人情報を入手する。 アクセス・トークン
をクリックして、huggingfaceの個人設定ページを開きます。
この時点で アクセス・トークン
次に huggingface_hub
な スナップショット・ダウンロード
モデルをダウンロードするには、ここかQwen-0.5bを選んだ。
pip install huggingface_hub
from huggingface_hub import snapshot_download
model_id = "Qwen/Qwen1.5-0.5B" # hugginFaceのモデル名
snapshot_download(
repo_id=model_id, local_dir="Qwen/Qwen1.5-0.5B")
local_dir="Qwen-0.5b",
local_dir_use_symlinks=False、
revision="main"、
use_auth_token="")
ダウンロードに時間がかかるかもしれませんが、我慢してください。
3.2 llama.cppによる変換
llama.cppは、GGMLの主要な作者によって、CPUを使って様々なLLMを推論することを目的として、llamaの初期のc/c++版をベースに開発されたもので、コミュニティの継続的な努力のおかげで、現在ではマルチモーダルモデルまで、主流のモデルのほとんどをサポートしています。
まず、ダウンロードしたモデルと同じディレクトリにあるllama.cppライブラリをローカルにクローンする:
git clone https://github.com/ggerganov/llama.cpp.git
llama.cppを使ったモデルの変換処理はpythonでの開発をベースにしているため、関連するライブラリをインストールする必要があり、condaかvenvを使って新しい環境を作ることをお勧めします。
cd llama.cpp
pip install -r requirements.txt
python convert_hf_to_gguf.py -h
以下のように表示されれば、変換プログラムの準備は完了です。
次に、HuggingFaceからダウンロードしたモデルを、以下のスクリプトを使ってGGUF形式に変換する:
python convert_hf_to_gguf.py .../Qwen-0.5b --outfile Qwen_instruct_0.5b.gguf --outtype f16
llama.cppディレクトリにQwen_instruct_0.5b.ggufファイルが追加されており、この処理には数秒しかかからない。
推論時のオーバーヘッドを節約するため、モデルを数値化し、次に実践的な練習を数値化する。
3.3 llama.cppを使ったモデルの定量化
モデルの量子化とは、高精度の浮動小数点モデルを低精度のモデルに変換する技術である。 モデルの量子化の主な目的は、モデルのサイズと計算コストを削減し、モデルの精度を可能な限り維持することである。
同様に、まずModelfileファイルを作成し、次に オラマ・クリエイト
コマンドを実行し、ggufファイルからモデルを作成します。しかし、最初のステップとは少し異なる方法で、単純に オラマ・クリエイト
はパラメーターを追加するだけだ。
まず、前のステップで入手したQwen_instruct_0.5b.ggufを第3部のルートディレクトリに移動し、次の内容のModelfileファイルを作成します。
FROM ./Qwen_instruct_0.5b.gguf
端末は、作成スクリプトと定量化スクリプトを実行する。
ルートディレクトリの#パート3
ollama create -q Q4_K_M mymodel3 -f ./モデルファイル
この時点でモデルは定量化され、作成された。
3.4 モデルの実行とアップロード
ggufでモデルを実行する手順は第1部に詳述されているので、ここでは繰り返さない。
ローカルに保存されたモデルファイルでは容量が大きすぎる場合は、ステップ1と同じ考え方で、ggufモデルをhuggingfaceの自分のリポジトリにアップロードすることができます。
チップ
アップロードを完了するには、HF_ACCESS_TOKENパーミッションを書き込み、model_idを変更する必要があります。your_hf_nameは、あなたのhuggingfaceアカウント名を指します。
from huggingface_hub import HfApi
インポート os
api = HfApi()
hf_access_token = ""
#TODO ここでmodel_idを設定する必要があります。
#例えば model_id = "little1d/QWEN-0.5b"
model_id = "あなたの_hf_name/QWEN-0.5b"
api.create_repo(
model_id、
exist_ok=True、
repo_type="model", モデルの#アップロードフォーマット
use_auth_token=HF_ACCESS_TOKEN、
)
#でモデルをハブにアップロードする
#アップロードモデル名には、同じフォルダにあるBailong-instruct-7Bが含まれます。
for file in os.listdir(): if file.endswith()
if file.endswith(".gguf"): model_name = file.lower(".gguf").
モデル名 = file.lower()
api.upload_file(
path_in_repo=model_name、
path_or_fileobj=f"{os.getcwd()}/{file}"、
repo_type="モデル", モデルとしてフォーマットされた#アップロード
use_auth_token=HF_ACCESS_TOKE)
アップロードされると、hfリポジトリで見ることができます!
IV.プロンプトのカスタマイズ
Ollamaはカスタマイズされたプロンプトをサポートしており、ユーザーのニーズに合ったテキストを生成することができます。
プロンプトをカスタマイズする手順は以下の通り:
- ルート・ディレクトリにModelfileファイルを作成する。
llama3.1より
# は温度を 1 に設定する [高いほどクリエイティブ、低いほどコヒーレント]。
パラメータ temperature 1
#はコンテキストのウィンドウサイズを4096に設定します。 トークン LLMはコンテキストとして次の トークン
パラメータ num_ctx 4096
#はチャットアシスタントの動作を指定するカスタムシステムメッセージを設定します。
SYSTEM あなたはスーパーマリオブラザーズのマリオです。
- モデルの作成
ollama create mymodel -f ./モデルファイル
モデルの作成には、モデルを引っ張るよりも少し時間がかかるかもしれません。
もう一度やってくれ。 オラマリスト
既存のモデルを見ると、mymodelが正しく作成されていることがわかります。
- 運用モデル
オラマ・ラン・マイモデル
ご覧の通り、アルパカ🦙がマリオに変身しました!プロンプトのカスタマイズは成功しました!😘😘😘😘😘😘
参照リンク
- https://www.linkedin.com/pulse/llama-3-safetensors-vs-gguf-talles-carvalho-jjcqf
- https://www.sysgeek.cn/ollama-on-windows
- https://ollama.com/blog/openai-compatibility