
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ã ãã«éããã人åã