シンギュラリティ実験ノート

購入した1000ドルPCで何がどこまでできるのか実験した記録です。

UbuntuにLLM環境を再構築したら予想以上に快適だった

これまで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点くらいだ。

  1. 裏蓋にWiFiアンテナのケーブルがつながった状態での作業になるため、ケーブルが外れたり断線したりしないようにすること。
  2. SSDを差し込んだ後、反対側をネジで固定する時に、ネジを基板の隙間に落とさないようにすること。(私は落としたが筐体を逆さにしたら無事取り出せた)

以前にMac miniSSDを増設した時は、特殊なネジがあり専用のドライバーを用意したりして大変だった。それに比べれば、今回は普通のプラスとマイナスのドライバーだけで作業できた。詳細な説明は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

AMDGPUのドライバの導入

$ 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版の導入(機械学習や推論でGPUpythonから使うために必要)

$ 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

 

他アプリの導入

私の愛用する以下のアプリを導入した。

ROCmを導入後にChromeが起動できなくなった。端末から「google-chrome」コマンドで起動すると、「GPUを正しく認識できない」というようなエラーが出てコアダンプを吐き終了していた。同じ現象がJanでも発生した。

この問題の解決に最も時間をとられた。原因がわからず、ROCmを再インストールしたり、OSを再インストールしたりした。

結論としては、この問題はアプリ起動時に「--disable-accelerated-video-decode」を付けて起動することで回避できることがわかったのだが、これを説明すると話が長くなるので別の記事としてまとめたい。

 

感想

最も感動したのは、やはり起動時間である。ブートドライブを選択する手順は追加になるのだが、それが終わればすぐにログイン画面が現れる。ログインするとすぐにデスクトップ画面が現れる。

ブラウザ等のアプリの立ち上がりも早い。外付けHDDのUbuntuの場合はChromeを立ち上げるだけでかなりモタモタしていたのだが、SSDの場合は瞬時に立ち上がる。

Ubuntuを導入した理由は、Emacs29でEllamaが使えることが最も大きい理由だが、もう一つの理由は、Windows環境が最近非常に不安定になっていることがある。突然ブルー画面になったり、黒画面にマウスカーソルのみが表示された状態で止まってしまったり、そんなことが短い時間に何度も起きるようになった。

Ubuntu環境で使うときにはそのようなことはないので、ハードの問題ではなく、Windowsの問題(おそらくドライバレベルの問題)かと思われる。

正確な原因は不明なので、主な環境をUbuntuに移してから、Windowsを再インストールするしかないかと思っている。