見出し画像

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を入れるのを忘れちゃダメだぜ。