Dockerで最新ROCmを環境を汚さずに試す ~仮想コンテナで重要ソフトを安全に試す llama-cppでLLMテスト~
こんにちはRcatです。
今回はDockerが主人公です。
今までDifyやゲームサーバーなどでなんとなく使っていただけですが、仕事で使うようになり理解が必要になったので調べたところ、"超使える"ということに今更ながら気づきましたので、ちょっと試していきたいと思います。
テーマは再インストールがだるいROCm最新版を手軽に試したいです
はじめに
利用規約
情報や作品の活用時は事前に利用規約をご確認ください。
コメントについて
利用規約のガイドラインを確認の上コメントしてください。
則っていないコメントは削除します。
概要
Dockerとは
Dockerは、Linux上で動作するコンテナ型仮想環境を提供するツールです。
この辺はいろんなところで説明されているので詳細は省きますが、OSのカーネルを共用しそれ以上の部分をコンテナで隔離する仮想環境のため、通常の仮想マシンに比べ圧倒的に低リソースであることが特徴です。
確かにLinuxって、カーネルだけではOSとしては使えなくて、シェルやデスクトップなどを組み合わせたUbuntuやCentOSなどのディストリビューションになって使っていますよね。
Dockerはカーネルだけ共用なので、仮想マシンのように上に積み上げるのではなく、横に広がるイメージでしょうか。
ホストOSとコンテナが横並び?みたいな感じだと思います。
メリット
ぱっと見ですがこんなメリットがありそうです
OSを汚さずにいろいろ試せる
ドライバなど心臓部に近いものでなければ、コンテナ内の仮想環境はまっさらな状態にできます。
今回やるROCmも、Radeonのドライバではないので、アップグレード前に試せるってわけですね。
もし失敗したら戻すの大変ですし、最悪OS再インストールかもですし。すぐできてすぐ消せる
使い終わったコンテナは解体すればなくなります。
OSをインストールするわけではないので軽いため、作るのも消すのも早い。移植に強い
作ったコンテナのイメージを保持しておけば同じOSのほかのマシンに最短コマンド一発で環境を移植できます。Docker Hubに様々なイメージがある
基本的にコンテナのベースは何かしらのLinuxのディストリビューションです。
それに対して何かをインストール済みにして使いやすい状態にしたものがたくさんあります。
今回は、AMDが公式で公開しているROCmとPytorchがインストール済みのイメージを使います。
ホストマシンにドライバさえ入っていればもう動くんですよ。Windowsでも使える
Linuxがベースなのですが、WindowsではWSLという力業でWin => Linux => Dockerという形で使えます。
効率悪い気がしますが、一発で移植などを考えるとものによってはありかと。DBとか。
事前準備
Dockerのインストール
公式で導入手順がありますので、導入しましょう
イメージの取得
今回はこちらのAMDが公式で公開している、RCOmとPytorchがインストール済みのイメージを使います。
RCOmのバージョン及びPythonのバージョン及びUbuntuのバージョンのバリエーションでいくつかあるので好きなのを選びましょう。
私はRCOm7.1 Python3.12にしました。
公式のコマンドをコピペしてイメージをプル(落とす)します

完了したら下記コマンドを入力するとマシン内に存在するイメージを確認できます。
このイメージでかいですね。さすがROCmにPytorch入ってるやつw
まぁ今回はllama-cppなので使わないんですがw
ただ、Pytorch入ってるということはCコンパイラやgitコマンドなどがすでにあるということなので、そういうのも兼ねてこのイメージにしてます。
もしかしたらStableDiffusionとか使うかもですしね!
rcat@rcat-EVO-X2:~$ docker image ls
IMAGE ID DISK USAGE CONTENT SIZE EXTRA
rocm/pytorch:rocm7.1_ubuntu24.04_py3.12_pytorch_release_2.9.1 c61158cfb7f3 31.3GB 0Bイメージからコンテナを起動する
では早速試してみます
このコマンドは、指定したイメージをベースにコンテナを作成したら、その中のシェルにルートでログインするコマンドです。
また、--rmがあるのでログアウトするとコンテナが解体されます。再利用したいときは外してください。
rcat@rcat-EVO-X2:~$ docker run --rm -it rocm/pytorch:rocm7.1_ubuntu24.04_py3.12_pytorch_release_2.9.1なるほど、こんな感じか

いろいろ忘れてた
このままだとAIのモデルを転送できない…
ネットワークも共有できない
GPUも認識できない
というわけでコマンド変更。からの--rmも外す。
docker run -it --network=host --device=/dev/kfd --device=/dev/dri --group-add=video --ipc=host --cap-add=SYS_PTRACE --security-opt seccomp=unconfined --shm-size 16G -v ~/dockerdir:/usr/local/bin/host rocm/pyt
orch:rocm7.1_ubuntu24.04_py3.12_pytorch_release_2.9.1"-v ~/dockerdir:/usr/local/bin/host"を追加しました。
これは、ホストマシンのユーザーフォルダ内の"dockerdir"と、コンテナ内の"/usr/local/bin/host"をつなげるオプションです。この中はお互いにつながり同期されます。
ホストマシンでは以下の場所にデータを置きました

"--network=host --device=/dev/kfd --device=/dev/dri --group-add=video --ipc=host --cap-add=SYS_PTRACE --security-opt seccomp=unconfined --shm-size 16G"
この辺はネットワークの共有やGPUを認識させるための設定です。
※公式に書いてあります
というわけでやり直しっと!
amd-smiと入力して認識されてればOK。ちゃんとROCm7.1です。

ホストマシンだとこう。7.0.2。共存してるww

LLMを動かしてみる
というわけでpythonの仮想環境作って、Llama-cppを入れます。

入れたらとりあえずインタプリタで見てみます
(venv) root@rcat-EVO-X2:/usr/local/bin# python
Python 3.12.3 (main, Aug 14 2025, 17:47:21) [GCC 13.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from llama_cpp import Llama
>>> llm = Llama(model_path='/usr/local/bin/host/gemma-3-4b-it-Q4_K_M.gguf', n_ctx=2048,n_gpu_layers=-1)
ggml_cuda_init: GGML_CUDA_FORCE_MMQ: no
ggml_cuda_init: GGML_CUDA_FORCE_CUBLAS: no
ggml_cuda_init: found 1 ROCm devices:
Device 0: AMD Radeon 8060S, gfx1151 (0x1151), VMM: no, Wave Size: 32
llama_model_load_from_file_impl: using device ROCm0 (AMD Radeon 8060S) - 41666 MiB free
llama_model_loader: loaded meta data with 40 key-value pairs and 444 tensors from /usr/local/bin/host/gemma-3-4b-it-Q4_K_M.gguf (version GGUF V3 (latest))
llama_model_loader: Dumping metadata keys/values. Note: KV overrides do not apply in this output.
省略モデルを読み込んだら、ホストマシンで確認したところVRAMが使われています。うまくいったみたいですね。

続き
>>> stop_tokens: list = ["<|eot_id|>", "<|im_end|>","<end_of_turn>"]
>>> messages = [
... {"role": "system", "content": "あなたは親切なアシスタントです。問いかけに対して丁寧に回答します"},
... {"role": "user", "content": "こんにちわ!ねこってかわいいよね?"}
... ]
>>> output = llm.create_chat_completion(
... messages=messages,
... max_tokens=1024,
... stream=False,
... stop=stop_tokens,
... )
llama_perf_context_print: load time = 101.74 ms
llama_perf_context_print: prompt eval time = 101.60 ms / 36 tokens ( 2.82 ms per token, 354.34 tokens per second)
llama_perf_context_print: eval time = 1656.74 ms / 103 runs ( 16.08 ms per token, 62.17 tokens per second)
llama_perf_context_print: total time = 1936.83 ms / 139 tokens
llama_perf_context_print: graphs reused = 99
>>> print(output["choices"][0]["message"]["content"])
こんにちは!そうですね、猫は本当に可愛いです!ふわふわの毛並みや、つぶらな瞳、そして気まぐれな仕草…見ているだけで癒されますよね。
猫について何か話したいことや、知りたいことなどありますか?例えば、
* 猫の品種について
* 猫の飼い方について
* 猫の好きな食べ物について
* 猫の面白い行動について
など、どんなことでも構いませんよ!😊と、まぁこんな感じで無事GPUでの演算を確認しました。
Pythonの仮想環境だけではなく、ROCmなど周りを巻き込むときはかなり使えそうですね!
再利用するとき
今回は--rmを外したので、exitでログアウト後はコンテナが停止状態で残っています。
もう一度立ち上げて入るときは下記コマンドでコンテナのIDを確認しては入れます。
rcat@rcat-EVO-X2:~$ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
60ca8d47a5ec rocm/pytorch:rocm7.1_ubuntu24.04_py3.12_pytorch_release_2.9.1 "/bin/bash" 27 minutes ago Exited (0) 17 seconds ago goofy_knuth
rcat@rcat-EVO-X2:~$ docker start -ai 60ca8d47a5ec
root@rcat-EVO-X2:/# ls
apex-1.9.0a0+rocm7.1.0.git07c3ee53-cp312-cp312-linux_x86_64.whl lib opt tmp
bin lib.usr-is-merged proc torch-2.9.1+rocm7.1.0.lw.git351ff442-cp312-cp312-linux_x86_64.whl
boot lib32 root torchaudio-2.9.0+rocm7.1.0.gite3c6ee2b-cp312-cp312-linux_x86_64.whl
dev lib64 run torchvision-0.24.0+rocm7.1.0.gitb919bd0c-cp312-cp312-linux_x86_64.whl
etc libx32 sbin triton-3.5.1+rocm7.1.0.gita272dfa8-cp312-cp312-linux_x86_64.whl
home media srv usr
install mnt sys var
root@rcat-EVO-X2:/# cd usr/local/bin/
root@rcat-EVO-X2:/usr/local/bin# ls
host venv要らなくなったらdocker container rmで解体するか、その前にcommitでイメージ化しましょう。
本当ならここをDockerfile化しておくべきなんですが、今回はテストなのでスキップします。
今後はどこかのツールがDockerfileにして配布になるかもしれません。
まとめ
今回はDockerを使い、ROCmを再インストールすることなく新バージョンを試すことができました。
コンテナ型仮想環境、舐めてはいけませんね!
隔離できるということは、apacheなどのWEBサーバーは決まったフォルダを使うので、1個しか入らないのをたくさん増殖できると…。幅が広がりますね。
DBも、コンテナにしちゃえばスキーマ分けずにDB自体分けられるのか。
そして-vでつないだフォルダを物理バックアップするのがDumpより手っ取り早いと…。移行も検討ですね。
紹介にまで至れるかはわかりませんが、もっと便利なdocker composeも使っていきたいです。
それではまたお会いしましょう。
リンク集
感想投稿フォーム
コメントは公開で恥ずかしい!! Rcatだけに送りたい人向け
ミニPCにLinuxをインストール
いいなと思ったら応援しよう!
情報が役に立ったと思えば、僅かでも投げ銭していただけるとありがたいです。