メむンコンテンツぞスキップ
芋出し画像

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をむンストヌル


     
     

    Rcat999

     
     
    モノづくりが趣味。 "売っおないなら自分で䜜ればいいじゃない"をコンセプトに、機械/電気/AI/プログラム/ネットワヌク 党郚やりたす。 蚘事執筆はAI䞍䜿甚。 ご連絡や利甚芏玄はプロフィヌル蚘事参照。

    あなたぞのおすすめ