はじめに
https://huggingface.co/mmnga/rinna-llama-3-youko-8b-gguf
Rinnaプロジェクトのyoukoモデルの量子化版(llama3日本語量子化モデル)が、有志の方によって配布されていた。軽量のモデルで、その精度を検証したい。 量子化モデルは、Q1からQ8まで多数種類が展開されていたが、Q4_K_Mがバランスいいとのことで、それを使用していきます。
DockerにてOllama導入
Docker Hubのollama/ollama
イメージを使ってDockerで起動する手順は、以下の通りです。
- Dockerインストール
Dockerがまだインストールされていない場合は、[公式サイト](https://www.docker.com/get-started/)にアクセスして、インストール手順に従ってください。
- Docker Hubからイメージを取得
ターミナルを開き、次のコマンドを実行してollama/ollama
イメージをプルします。
docker pull ollama/ollama
- コンテナを起動
イメージのプルが完了したら、次のコマンドでコンテナを起動します。-d
オプションはデタッチモードでの起動を意味します(バックグラウンド実行)。
docker run -d --name ollama_container ollama/ollama
- ポートのマッピングを行って、起動する場合
もし、コンテナ内のアプリケーションにホストからアクセスしたい場合は、ポートを指定して実行することができます。例えば、ホストのポート8080をコンテナのポート80にマッピングする場合は、次のコマンドを使用します。
docker run -d -p 8080:80 --name ollama_container ollama/ollama
マッピングについて、コマンドの説明
docker run
#コンテナを起動
-d
#デタッチモードで実行するオプションです。コンテナがバックグラウンドで実行されるようにします。
-p 8080:80
#ポートマッピングの設定です。ホストのポート8080をコンテナのポート80にマッピング。
--name my_web_container
#コンテナの名前を指定するオプションです。
my_web_image
#使用するDockerイメージの名前です。
- コンテナの動作確認
正常に起動しているか確認するために、次のコマンドでコンテナの状態を確認します。
docker ps
- コンテナにアクセスする
コンテナにアクセスしたい場合は、次のコマンドでbash
セッションを開けます。
docker exec -it ollama_container /bin/bash
これで、ollama
がDocker上で動作するはずです。 これは、つまるところ、こののコマンドで、コンテナ内に入った状態になります。
- コンテナを止める場合
docker stop 905aa3e4cc81
動作結果
PS C:\Work> docker exec -it ollama_container /bin/bash
root@905aa3e4cc81:/#
と出てきます。そしたら、Ollamaのコマンドを打ってみましょう
root@905aa3e4cc81:/# ollama --help
そうすると、
root@905aa3e4cc81:/# ollama --help
Large language model runner
Usage:
ollama [flags]
ollama [command]
Available Commands:
serve Start ollama
create Create a model from a Modelfile
show Show information for a model
run Run a model
stop Stop a running model
pull Pull a model from a registry
push Push a model to a registry
list List models
ps List running models
cp Copy a model
rm Remove a model
help Help about any command
Flags:
-h, --help help for ollama
-v, --version Show version information
このようにコマンド一覧が確認できます。Ollamaのコンテナ内で使えるコマンドがいくつか表示されていますね。
ここから、「run」コマンドを使用してモデルを実行する必要があります。ここからの手順としては、次のようにOllamaの「run」コマンドを使って、言語モデルを起動してみましょう。本題まで、飛ばしてもらって大丈夫です。
簡単なllama2モデル起動手順 (本題まで飛ばして大丈夫です。)
1. モデルを取得する
まず、モデルがコンテナ内にあるかどうか確認する必要があります。モデルがない場合は、「pull」コマンドを使って取得できます。例えば、次のようにモデルをプルします:
ollama pull llama2
このコマンドで、llama2モデルを取得できます(使用するモデルは目的に応じて変更してください)。
2. モデルを実行する
モデルを取得したら、「run」コマンドを使ってモデルを実行します。以下のようにコマンドを実行してください:
ollama run llama2
これで、Ollamaが指定したモデルを使って動作を開始します。モデルが起動すると対話が可能になります。
3. モデルの状態を確認する
もし、どのモデルが起動しているかを確認したい場合は、以下のコマンドを使います:
ollama ps
これにより、現在実行中のモデルのリストを確認できます。
4. モデルを停止する
モデルを停止したい場合は、「stop」コマンドを使います。例えば、llama2を停止するには次のようにします:
ollama stop llama2
まず、Llama 2のモデルをプルし、それを実行して対話する場合の具体的な流れは次のようになります:
ollama pull llama2
ollama run llama2
この後、プロンプトが表示されたら対話を始められます。run
を使うと、対話型で入力を行い、応答を受け取ることができます。
(本題)日本語版量子化モデルを使用してみよう!
rinna/llama-3-youko-8b
モデルを使用する
rinna/llama-3-youko-8b
モデルをOllamaで使用するためには、Modelfileを利用してカスタムモデルを定義する必要があります。以下に、具体的な手順を示します。今回は、軽量な量子化モデルを使用したいので、下記にアクセスします。
https://huggingface.co/mmnga/rinna-llama-3-youko-8b-gguf
モデルファイルの種類を指定します。(Q4_K_M) 。 容量的に問題なければ、ダウンロードをクリック。
Modelfile(設定ファイル)の作成手順
- Modelfileの作成 (Ollamaを動かすうえでの設定ファイルのこと) まず、Hugging Faceのモデルを使うために、OllamaのModelfileを作成します。Modelfileは、Ollamaがモデルを認識して扱うための設定ファイルです。
- Modelfileの編集
- ベースモデルファイル”rinna-llama-3-youko-8b-Q4_K_M.gguf”をDockerへコピー
- モデルの作成
手順1: コンテナ内にModelfileを作成する
コンテナ内に入っている状態でModelfileを作成します。次の手順に従ってください。
- Dockerコンテナ内にいることを確認する
まず、Dockerコンテナ内にいることを確認します。コンテナ内に入るには、次のコマンドを使用します。
docker exec -it ollama_container /bin/bash
このコマンドで、コンテナ内に入った状態になります。
- Modelfileを作成するディレクトリを決める
コンテナ内でModelfileを作成する場所を決めます。例えば、/models
ディレクトリにModelfileを作成するとしましょう。
mkdir -p /models
cd /models
これで、/models
ディレクトリが作成され、そのディレクトリに移動しました。
- Modelfileを作成する
次に、Modelfileという名前のファイルを作成します。このために、nanoやviといったテキストエディタを使います。ここではnanoを使った例を示しますが、viを使っても問題ありません。
※nanoインストール方法について
もしnano
を使いたい場合、以下のコマンドでnano
をインストールすることができます。ただし、コンテナの環境によってはインストールが許可されていない場合があります。
apt-get update
apt-get install -y nano
手順2: Modelfileの編集(
nano
エディタ->ない人はインストール)
nano Modelfile
ファイルが開けたら、以下のようにファイルを編集します
FROM ./rinna-llama-3-youko-8b-Q4_K_M.gguf
PARAMETER temperature 0.1
PARAMETER num_ctx 4096
TEMPLATE """
ユーザー: {{.Prompt}}
AI: {{.Response}}
ユーザー:
"""
SYSTEM あなたは親切で知識豊富なAIアシスタントです。日本語で会話をします。
PARAMETER stop "ユーザー: "
PARAMETER stop "AI: "
Ollama モデル ファイルの設定要件
命令 | 説明 |
FROM(必須) | 使用する基本モデルを定義します。 |
PARAMETER | Ollama がモデルを実行する方法のパラメータを設定します。 |
TEMPLATE | モデルに送信される完全なプロンプト テンプレート。 |
SYSTEM | テンプレートに設定されるシステム メッセージを指定します。 |
ADAPTER | モデルに適用する (Q)LoRA アダプターを定義します。 |
LICENSE | 法的ライセンスを指定します。 |
MESSAGE | メッセージ履歴を指定します。 |
PARAMETERについて
パラメータ | 説明 | 値のタイプ | 使用例 |
mirostat | 周期性を制御するためのMirostatサンプリングを有効にする (デフォルト: 0, 0 = 無効, 1 = Mirostat, 2 = Mirostat 2.0) | int | mirostat 0 |
mirostat_eta | 生成されたテキストからのフィードバックに対するアルゴリズムの反応速度を制御 (デフォルト: 0.1) | float | mirostat_eta 0.1 |
mirostat_tau | 出力の一貫性と多様性のバランスを制御 (デフォルト: 5.0) | float | mirostat_tau 5.0 |
num_ctx | 次のトークンを生成するために使用するコンテキストウィンドウのサイズを設定 (デフォルト: 2048) | int | num_ctx 4096 |
repeat_last_n | 繰り返しを防ぐためにモデルが戻る長さを設定 (デフォルト: 64, 0 = 無効, -1 = num_ctx) | int | repeat_last_n 64 |
repeat_penalty | 繰り返しに対するペナルティの強さを設定 (デフォルト: 1.1) | float | repeat_penalty 1.1 |
temperature | モデルの温度を設定 (デフォルト: 0.8) | float | temperature 0.7 |
seed | 生成に使用する乱数シードを設定 (デフォルト: 0) | int | seed 42 |
stop | 停止シーケンスを設定 (複数の停止パターンを指定可能) | string | stop “AI assistant:” |
tfs_z | 出力から確率の低いトークンの影響を減らすためにテイルフリーサンプリングを使用 (デフォルト: 1) | float | tfs_z 1 |
num_predict | テキスト生成時の最大トークン数を設定 (デフォルト: 128, -1 = 無限生成, -2 = コンテキストを満たす) | int | num_predict 42 |
top_k | ナンセンスな生成を防ぐために使用 (デフォルト: 40) | int | top_k 40 |
top_p | top-kと連携して動作 (デフォルト: 0.9) | float | top_p 0.9 |
手順3 :ベースモデルファイルをローカルからコンテナにコピー
一度、Exitコマンドでコンテナから抜けましょう。
root@905aa3e4cc81:/models exit
- ダウンロードした
rinna-llama-3-youko-8b-Q4_K_M.gguf
ファイルをコンテナ内の/models
ディレクトリにコピーします。
docker cp rinna-llama-3-youko-8b-Q4_K_M.gguf ollama_container:/models/
- ファイルが正しくコピーされたか確認
コンテナ内に再度アクセスして、ファイルが正しく配置されているか確認します。
docker exec -it ollama_container /bin/bash
cd /models
ls
rinna-llama-3-youko-8b-Q4_K_M.gguf
が表示されていれば、正しくコピーされています。
これで、Modelfileで指定したモデルファイルのパスと実際のファイルの配置が一致しますので、次の手順でモデルを作成してください。モデルファイルが正しく配置されているのを確認してから、次に進みましょう。
モデルの作成手順
Modelfileとベースモデルファイルがコンテナ内の/models
ディレクトリに揃ったので、以下のコマンドでモデルを作成します。
ollama create llama-3-youko-8b -f /models/Modelfile
これにより、rinna-llama-3-youko-8b
という名前のモデルがOllama内に作成されます。この手順でモデルがうまく作成できるはずです。作成が完了したら、以下のコマンドでモデルを実行できます。
root@905aa3e4cc81:/models# ollama create llama-3-youko-8b -f /models/Modelfile
結果: successとでました!
transferring model data 100%
using existing layer sha256:1a8e68191abc6f6713a627c8119a291408df5b0b60766ba647c15fa7d7cc1614
creating new layer sha256:4a25b2b74712fb7ed227de490044095a90acf426b329675f3a4546ffbdbd350f
creating new layer sha256:a4d64b21c44a6b376c1e4301aed0c9e64f7401ca8abc5a797bf9dc852ab1ab02
using existing layer sha256:953d93eaac7ca75bd07dc8223cc19c998410111a84084b38b3df341230831667
creating new layer sha256:619612bd913623e3b6fb1a8d0b4c2c841f15d0726206b283ab39241ecf1b5f4a
writing manifest
success
これで、下記のコマンドでモデルファイルを指定して、 Ollamaを使用してモデルを対話形式で利用することが可能です。
ollama run llama-3-youko-8b
試しに実行してみましょう!
root@905aa3e4cc81:/models# ollama run llama-3-youko-8b
>>> こんにちは、犬はなぜ吠えるの?
こんにちは、犬はなぜ吠えるの?
犬は、他の動物や人間に対して警戒心を示すために吠えます。また、興奮したり、不安になったりするときにも吠えることがあり
ます。
ちなみに、/?でヘルプを表示できました。
Available Commands:
/set Set session variables
/show Show model information
/load <model> Load a session or model
/save <model> Save your current session
/clear Clear session context
/bye Exit
/?, /help Help for a command
/? shortcuts Help for keyboard shortcuts
Use """ to begin a multi-line message.
終了する時は、/byeで抜けます。
さらに、Docker環境から作業ディレクトリに抜けるには、exitコマンドを使用しましょう。
root@905aa3e4cc81:/models exit
注意点
- ファイルのパスに注意:
Modelfileの作成場所を必ず確認してください。Modelfileを間違った場所に保存すると、ollama create
コマンドでファイルが見つからず、エラーになる可能性があります。
- モデルの設定の詳細
OllamaのModelfileの詳細については、Ollamaの公式ドキュメントを確認してください:
https://github.com/ollama/ollama/blob/main/docs/modelfile.md
参考記事:
https://qiita.com/kiyotaman/items/2effed548e7be32da546
https://yashikota.com/blog/ollama-youko
https://hamaruki.com/ollama-model-file/#toc3
コメントを残す