H100x8マシンのセットアップでつまづいたのでメモを残しておくことにする
ひょんなことからH100x8マシンを触る機会に恵まれた。
ドライバなしのベアメタル状態からだったのでドライバを入れるとこから。もうこのへんはお手のもの。
とりあえず限られた時間で何か有意義なことをしようと思ってaxolotlでなにか学習しようと考えたのだが、axolotlを動かそうとしてつまづいた。
どうもtorchでCUDAが初期化できない
(c310) shi3z@ubuntu-server:~/axolotl$ python
Python 3.10.0 (default, Mar 3 2022, 09:58:08) [GCC 7.5.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> torch.cuda.is_available()
/home/shi3z/.pyenv/versions/anaconda3-2023.07-0/envs/c310/lib/python3.10/site-packages/torch/cuda/__init__.py:138: UserWarning: CUDA initialization: Unexpected error from cudaGetDeviceCount(). Did you run some cuda functions before calling NumCudaDevices() that might have already set an error? Error 802: system not yet initialized (Triggered internally at /opt/conda/conda-bld/pytorch_1702400410390/work/c10/cuda/CUDAFunctions.cpp:108.)
return torch._C._cuda_getDeviceCount() > 0
False
不可解なのは、CUDAは初期化できないのにDeviceCountはとれてしまうことだ。
>>> torch.cuda.device_count()
8
ChatGPTに聞いてみたが例が少なすぎるらしく当たり障りのないことしか言わない。知識のないテクニカルサポートか。
もちろんドライバを抜いたり入れたりCUDAを変えたりPytorchを変えたりいろいろしたがダメ。途方にくれる。
しかし人類の叡智はわいを見捨てなかった。
どうやらこのエラーが出る原因は、NVlinkとNVSwitchが動いてないときらしい。
まずはNCCLを入れてみる。
勝手に入るものじゃないのね。A100x8のときは入れるという意識をもっていたが、最近安いサーバーばかりいじっていたからNCCLのことは忘れていた。
しかしこれだけではエラーは改善しない。
fablicmanagerというのを入れないとダメらしい。
これがドライバーとハードに結びついているので同じバージョンのを探して入れる
$ nvidia-smi
Fri Jan 26 07:14:51 2024
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 545.23.08 Driver Version: 545.23.08 CUDA Version: 12.3 |
|-----------------------------------------+----------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+======================+======================|
| 0 NVIDIA H100 80GB HBM3 On | 00000000:18:00.0 Off | 0 |
| N/A 29C P0 75W / 700W | 4MiB / 81559MiB | 0% Default |
| | | Disabled |
+-----------------------------------------+----------------------+----------------------+
| 1 NVIDIA H100 80GB HBM3 On | 00000000:2A:00.0 Off | 0 |
| N/A 31C P0 73W / 700W | 4MiB / 81559MiB | 0% Default |
| | | Disabled |
+-----------------------------------------+----------------------+----------------------+
| 2 NVIDIA H100 80GB HBM3 On | 00000000:3A:00.0 Off | 0 |
| N/A 31C P0 71W / 700W | 4MiB / 81559MiB | 0% Default |
| | | Disabled |
+-----------------------------------------+----------------------+----------------------+
| 3 NVIDIA H100 80GB HBM3 On | 00000000:5D:00.0 Off | 0 |
| N/A 29C P0 71W / 700W | 4MiB / 81559MiB | 0% Default |
| | | Disabled |
+-----------------------------------------+----------------------+----------------------+
| 4 NVIDIA H100 80GB HBM3 On | 00000000:9A:00.0 Off | 0 |
| N/A 29C P0 75W / 700W | 4MiB / 81559MiB | 0% Default |
| | | Disabled |
+-----------------------------------------+----------------------+----------------------+
| 5 NVIDIA H100 80GB HBM3 On | 00000000:AB:00.0 Off | 0 |
| N/A 31C P0 72W / 700W | 4MiB / 81559MiB | 0% Default |
| | | Disabled |
+-----------------------------------------+----------------------+----------------------+
| 6 NVIDIA H100 80GB HBM3 On | 00000000:BA:00.0 Off | 0 |
| N/A 31C P0 72W / 700W | 4MiB / 81559MiB | 0% Default |
| | | Disabled |
+-----------------------------------------+----------------------+----------------------+
| 7 NVIDIA H100 80GB HBM3 On | 00000000:DB:00.0 Off | 0 |
| N/A 28C P0 77W / 700W | 4MiB / 81559MiB | 0% Default |
| | | Disabled |
+-----------------------------------------+----------------------+----------------------+
+---------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=======================================================================================|
| No running processes found |
+---------------------------------------------------------------------------------------+
$ sudo apt-get install cuda-drivers-fabricmanager-545
すると動いた
$ python
Python 3.10.0 (default, Mar 3 2022, 09:58:08) [GCC 7.5.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
torch.cuda.is_available()
True
>>>
というわけで、NVLink/NVSwitch環境ではNCCLとfablicmanagerを入れるのを忘れちゃダメだぜ。