llama.cpp をローカル PC で実行するための Docker 環境構築ファイル群
手元の Linux ホスト環境をあまりいじらずに llama.cpp を試せるようにしたもの
- 扱いやすいように compose.yml を用意
- オフィシャルのコンテナイメージ を使うが、 CLI としては使い勝手が悪いので llama-cli 用にコンテナイメージを微修正
- WebUI はオフィシャルの
server-rocmタグイメージをそのまま使用- Ollama と同様に root ではないユーザで実行しようと画策したが、 パラメータとして引き渡す環境変数が多すぎるて同じ方法は困難なので断念
- CLI はオフィシャルの
light-rocmを流用し、ユーザ権限や起動方法を変更 server-rocmとlight-rocmの 2 つのイメージを pull することになるが、 Dockerfile を見るとllama-cliかllama-serverかの違いしかないので、 差分を pull するだけで専有する容量はあまり変わらない
使用している Linux ホスト環境に合わせて .env を修正する
UID: llama-cli 実行する際のユーザ ID- 使用者の Linux ホストの UID を指定するとパーミッション的に扱いやすい
- 自身の UID は
id -uコマンドで取得できる
RENDER_GID【必須】: Linux ホストのrenderグループ ID- 値は
getent group renderコマンドで確認できる - この値が間違っていると GPU が使えなくなる
- 値は
USER_NAME: Ollama をインタラクティブに実行する際のユーザ名UIDに対応したユーザ名- これを指定しないと
userというユーザが作られる - ubuntu 版で UID = 1000 の場合は既存の
ubuntuユーザがそのまま使われる(名前だけ変更) - ユーザ名の指定そのものにはさしたる意味はないが、 実行時にホームディレクトリをマウントする際に使われる
LANG: 実行環境の locale- これを指定しなければ Linux ホストの LANG 環境変数が渡される
- 日本語ファイル名をリストする際等で文字化けしないようにするため
docker compose (或いは docker-compose) コマンドを使って Build する
$ docker compose build llama-cli必要に応じて compose.yml ファイルを修正する
AMD の GPU で公式にサポートされているのは Supported GPUs だけ
しかしながら実際には Compatibility matrix にあるように
RDNA2 〜 RDNA4 アーキであれば動いてくれる可能性がある
Linux ホストに rocminfo パッケージがインストールされていれば以下の手順で GPU のアーキがわかる
$ rocminfo | grep gfx
Name: gfx1031
Name: amdgcn-amd-amdhsa--gfx1031 表示された gfxXXXX の LLVM target が Supported GPUs にリストされていない場合には
近い LLVM target に偽装するために以下の環境変数を指定する
GFX_ARCH: 偽装する LLVM target- 例:
gfx1030
- 例:
HSA_OVERRIDE_GFX_VERSION: LLVM target の数字部分をバージョンに読み替えたもの- 例:
10.3.0
- 例:
※ 偽装しても動かない可能性はある
AMD GPU アーキの詳細については User Guide for AMDGPU Backend を参照
参考: Pytorch Performance on AMD Radeon and Instinct GPUs Page 20
一般的な volumes の記述方法に従い mount する volume を指定する
この compose.yml では ./home 配下に CLI 用のホームディレクトリがあり、
./home/models 配下にモデルファイルがあることを前提にしている
必要に応じて環境変数を設定する (以下のページの env: に書かれている LLAMA_ARG_*)
自身の環境に応じ値の決定にチューニングが必要なため、
まずは llama-cli で引数によりいろいろ試した後で適切な値を環境変数に指定する
必要に応じポート番号の 8080 を変更する
この設定では localhost からしか WebUI にアクセスできない
他のクライアントからもアクセスしたい場合でも、
この ports の IP アドレス設定は変えずにホスト上に
nginx 等でリバースプロキシを構築するのが望ましい
※ Docker はファイアウォールをバイパスして port を公開してしまうため
まずは Hugging Face 等にあるモデルをダウンロードする
この compose.yml をそのまま使う場合には ./home/models/ 配下にモデルを置く
CLI で操作する
CLI は試すのが楽なので、これで自分の環境に合う環境変数を模索できる
$ docker compose run -it --rm llama-cli bashDocker 内のシェルで llama-cli だけでなく各種コマンドを実行できる
$ ls
$ llama-cli -m models/gpt-oss-20b-mxfp4.gguf
$ LLAMA_ARG_SPLIT_MODE=none LLAMA_ARG_MAIN_GPU=0 LLAMA_ARG_N_CPU_MOE=12 llama-cli -m models/gpt-oss-20b-mxfp4.gguf$ docker compose run -it --rm llama-cli --split-mode none --main-gpu 0 --n-cpu-moe 12 -m models/gpt-oss-20b-mxfp4.ggufWebUI と CLI は独立しているので WebUI が必要な時にサービスを起動する
$ docker compose up -d※ 上記でサービス名を指定していないが、
llama-cli service には cli profile を付けているのでここで起動されることはない
WebUI が使えるようになるまでに数分かかることがあるので、
起動後すぐにアクセスせずにしばらく待つ
docker compose ps で llama-server が healthy となればアクセス可能
$ docker compose psサービスを起動したホスト上で Web ブラウザから WebUI にアクセスする
URL: http://localhost:8080 (ポート番号を変更している場合にはその値)