これまでUSB接続の2.5インチHDDにUbuntuを入れていたため、Ubuntuを立ち上げるだけで数分かかっていた。せっかくSSDを増設できる内臓スロットがあるのでSSDを増設し、ここにUbuntuでのLLM環境を構築することにした。
SSDの購入
Amazonで1TBのSSDを購入した。表示価格は13,800円だが1,000円割引クーポンが付いていたので実質価格は12,800円だった。タイムセールで購入すれば更に1,000円くらい安く買えると思う。
SSD増設作業
このタイプのSSDを増設するのは初めてだったが、作業自体はそれほど難しくなかった。注意するのは以下の2点くらいだ。
- 裏蓋にWiFiアンテナのケーブルがつながった状態での作業になるため、ケーブルが外れたり断線したりしないようにすること。
- SSDを差し込んだ後、反対側をネジで固定する時に、ネジを基板の隙間に落とさないようにすること。(私は落としたが筐体を逆さにしたら無事取り出せた)
以前にMac miniにSSDを増設した時は、特殊なネジがあり専用のドライバーを用意したりして大変だった。それに比べれば、今回は普通のプラスとマイナスのドライバーだけで作業できた。詳細な説明はNET上に多数あるので割愛する。
Ubuntuの導入
最新のUbuntu24の導入を試みたができなかった。導入ツールで導入先ディスクを指定する辺りで先に進めなくなった。作業中に「システムのエラーが検出された」という嫌なメッセージも表示された。無理に最新バージョンにする必要もないので、Ubuntu22.04を導入することにした。詳細な説明はNET上に多数あるので割愛する。
ROCmの導入
本家のサイトはこちら。
いつか自分がまた作業するときのため、主な手順をメモしておきたい。
必要なリポジトリの追加
$ sudo apt install "linux-headers-$(uname -r)" "linux-modules-extra-$(uname -r)" $ sudo usermod -a -G render,video $LOGNAME # Add the current user to the render and video groups
$ sudo apt update $ wget https://repo.radeon.com/amdgpu-install/6.2.2/ubuntu/jammy/amdgpu-install_6.2.60202-1_all.deb $ sudo apt install ./amdgpu-install_6.2.60202-1_all.deb
amdgpu-dkms(Dynamic Kernel Module Support)の導入
$ sudo apt update $ sudo apt install amdgpu-dkms rocm
ここで再起動が必要
再起動後に動作確認
$ rocm-smi ============================================ ROCm System Management Interface ============================================ ====================================================== Concise Info ====================================================== Device Node IDs Temp Power Partitions SCLK MCLK Fan Perf PwrCap VRAM% GPU% (DID, GUID) (Edge) (Socket) (Mem, Compute, ID) ========================================================================================================================== 0 1 0x15bf, 12641 47.0°C 12.092W N/A, N/A, 0 None 2800Mhz 0% auto Unsupported 5% 0% ========================================================================================================================== ================================================== End of ROCm SMI Log ===================================================
PyTorch ROCm版の導入(機械学習や推論でGPUをpythonから使うために必要)
$ pip3 install --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/rocm6.2/
動作確認
$ python3 -c 'import torch; print(torch.cuda.is_available())' True $ python3 -c "import torch; print(f'device name [0]:', torch.cuda.get_device_name(0))" device name [0]: AMD Radeon Graphics $ python3 -m torch.utils.collect_env /usr/lib/python3.10/runpy.py:126: RuntimeWarning: 'torch.utils.collect_env' found in sys.modules after import of package 'torch.utils', but prior to execution of 'torch.utils.collect_env'; this may result in unpredictable behaviour warn(RuntimeWarning(msg)) Collecting environment information... PyTorch version: 2.4.1+rocm6.1 Is debug build: False CUDA used to build PyTorch: N/A ROCM used to build PyTorch: 6.1.40091-a8dbc0c19 OS: Ubuntu 22.04.5 LTS (x86_64) GCC version: (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0 Clang version: Could not collect CMake version: Could not collect Libc version: glibc-2.35 Python version: 3.10.12 (main, Sep 11 2024, 15:47:36) [GCC 11.4.0] (64-bit runtime) Python platform: Linux-6.8.0-45-generic-x86_64-with-glibc2.35 Is CUDA available: True CUDA runtime version: Could not collect CUDA_MODULE_LOADING set to: LAZY GPU models and configuration: AMD Radeon Graphics (gfx1103) Nvidia driver version: Could not collect cuDNN version: Could not collect HIP runtime version: 6.1.40091 MIOpen runtime version: 3.1.0 Is XNNPACK available: True CPU: アーキテクチャ: x86_64 CPU 操作モード: 32-bit, 64-bit Address sizes: 48 bits physical, 48 bits virtual バイト順序: Little Endian CPU: 16 オンラインになっている CPU のリスト: 0-15 ベンダー ID: AuthenticAMD モデル名: AMD Ryzen 9 7940HS w/ Radeon 780M Graphics CPU ファミリー: 25 モデル: 116 コアあたりのスレッド数: 2 ソケットあたりのコア数: 8 ソケット数: 1 ステッピング: 1 CPU 最大 MHz: 6228.0000 CPU 最小 MHz: 400.0000 BogoMIPS: 7984.91 フラグ: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc rep_good amd_lbr_v2 nopl nonstop_tsc cpuid extd_apicid aperfmperf rapl pni pclmulqdq monitor ssse3 fma cx16 sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs skinit wdt tce topoext perfctr_core perfctr_nb bpext perfctr_llc mwaitx cpb cat_l3 cdp_l3 hw_pstate ssbd mba perfmon_v2 ibrs ibpb stibp ibrs_enhanced vmmcall fsgsbase bmi1 avx2 smep bmi2 erms invpcid cqm rdt_a avx512f avx512dq rdseed adx smap avx512ifma clflushopt clwb avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local user_shstk avx512_bf16 clzero irperf xsaveerptr rdpru wbnoinvd cppc arat npt lbrv svm_lock nrip_save tsc_scale vmcb_clean flushbyasid decodeassists pausefilter pfthreshold v_vmsave_vmload vgif x2avic v_spec_ctrl vnmi avx512vbmi umip pku ospke avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg avx512_vpopcntdq rdpid overflow_recov succor smca flush_l1d 仮想化: AMD-V L1d キャッシュ: 256 KiB (8 instances) L1i キャッシュ: 256 KiB (8 instances) L2 キャッシュ: 8 MiB (8 instances) L3 キャッシュ: 16 MiB (1 instance) NUMA ノード数: 1 NUMA ノード 0 CPU: 0-15 Vulnerability Gather data sampling: Not affected Vulnerability Itlb multihit: Not affected Vulnerability L1tf: Not affected Vulnerability Mds: Not affected Vulnerability Meltdown: Not affected Vulnerability Mmio stale data: Not affected Vulnerability Reg file data sampling: Not affected Vulnerability Retbleed: Not affected Vulnerability Spec rstack overflow: Vulnerable: Safe RET, no microcode Vulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl Vulnerability Spectre v1: Mitigation; usercopy/swapgs barriers and __user pointer sanitization Vulnerability Spectre v2: Mitigation; Enhanced / Automatic IBRS; IBPB conditional; STIBP always-on; RSB filling; PBRSB-eIBRS Not affected; BHI Not affected Vulnerability Srbds: Not affected Vulnerability Tsx async abort: Not affected Versions of relevant libraries: [pip3] numpy==2.1.2 [pip3] onnxruntime==1.19.2 [pip3] pytorch-triton-rocm==3.0.0 [pip3] torch==2.4.1+rocm6.1 [pip3] torchaudio==2.4.1+rocm6.1 [pip3] torchvision==0.19.1+rocm6.1 [pip3] triton==3.0.0 [conda] Could not collect
GPUで動くアプリを動かして動作確認(python版dlshogi同士で対局中に取得)
$ rocm-smi ============================================ ROCm System Management Interface ============================================ ====================================================== Concise Info ====================================================== Device Node IDs Temp Power Partitions SCLK MCLK Fan Perf PwrCap VRAM% GPU% (DID, GUID) (Edge) (Socket) (Mem, Compute, ID) ========================================================================================================================== 0 1 0x15bf, 45362 58.0°C 50.184W N/A, N/A, 0 None 2800Mhz 0% auto Unsupported 7% 70% ========================================================================================================================== ================================================== End of ROCm SMI Log =================================================== $ rocm-smi --showpids ============================ ROCm System Management Interface ============================ ===================================== KFD Processes ====================================== KFD process information: PID PROCESS NAME GPU(s) VRAM USED SDMA USED CU OCCUPANCY 61927 pt_main_thread 1 367423488 0 UNKNOWN 61951 pt_main_thread 1 367423488 0 UNKNOWN ========================================================================================== ================================== End of ROCm SMI Log ===================================
作業に失敗してやり直しが必要な場合のアンインストールコマンド
$ sudo amdgpu-install --uninstall $ sudo amdgpu-install --uninstall --rocmrelease=all
他アプリの導入
私の愛用する以下のアプリを導入した。
- Google Chrome
- LM-studio
- Jan
- Ollama
- Emacs29+Ellama
ROCmを導入後にChromeが起動できなくなった。端末から「google-chrome」コマンドで起動すると、「GPUを正しく認識できない」というようなエラーが出てコアダンプを吐き終了していた。同じ現象がJanでも発生した。
この問題の解決に最も時間をとられた。原因がわからず、ROCmを再インストールしたり、OSを再インストールしたりした。
結論としては、この問題はアプリ起動時に「--disable-accelerated-video-decode」を付けて起動することで回避できることがわかったのだが、これを説明すると話が長くなるので別の記事としてまとめたい。
感想
最も感動したのは、やはり起動時間である。ブートドライブを選択する手順は追加になるのだが、それが終わればすぐにログイン画面が現れる。ログインするとすぐにデスクトップ画面が現れる。
ブラウザ等のアプリの立ち上がりも早い。外付けHDDのUbuntuの場合はChromeを立ち上げるだけでかなりモタモタしていたのだが、SSDの場合は瞬時に立ち上がる。
Ubuntuを導入した理由は、Emacs29でEllamaが使えることが最も大きい理由だが、もう一つの理由は、Windows環境が最近非常に不安定になっていることがある。突然ブルー画面になったり、黒画面にマウスカーソルのみが表示された状態で止まってしまったり、そんなことが短い時間に何度も起きるようになった。
Ubuntu環境で使うときにはそのようなことはないので、ハードの問題ではなく、Windowsの問題(おそらくドライバレベルの問題)かと思われる。
正確な原因は不明なので、主な環境をUbuntuに移してから、Windowsを再インストールするしかないかと思っている。