Team 甲(きのえ) ノード壊れていないか?
もう一つの事件
新たな悲劇の話の前に、前回2100stepの壁の話の裏で同時に起こっていたもう一つの事件の話を今回はします。
3ノードか2ノードか
我々のチームではPhase1の開始早々にモデルがVRAMに乗らない状態で苦戦したという話も前々回に触れておりましたが、言及していなかった事実として3ノードではうまく動かないという現象にも悩まされていました。
我々のチームでは複数あるノードのうち6番~8番の3ノードが割り当てられ、それぞれ名前をnode-6、node-7、node-8と呼称しますが、node-6、node-8の2ノードでは、それなりのパフォーマンスが出るがnode-7を入れた3ノードではパフォーマンスが出ないという状態でした。当時はパラメータ調整など知識は知っていても誰も正解を知らない状態です。そのため試行錯誤を繰り返していたのですがパフォーマンスが出ないというのは何かしらのパラメータ設定を疑ってやまない状態でした。
NCCLエラーは発生していない
「NCCLエラーはよく発生し、特定ノードに関連するのであればノードの故障を疑うべき」と、前知識としては聞いていました。しかし今回はNCCLエラーが発生せずパフォーマンスが悪いという状況です。懐疑的にはなりながらも故障を訴えるだけの決定的な証拠がありませんでした。
証拠をつかむ
タイムリミットを迎える最終日、ふと2点気づいた事実がありました。
- node-7の8枚あるうちの1枚のGPUだけが温度が高い
- W&BのSystemの中にGPU Tempというグラフが表示されますが、それで確認できます
- node-7の1枚のGPUだけしか仕事をしていないことをnvidia-smiコマンドで発見
以下が3ノードで学習をしている時のnode-7のnvidia-smiコマンドの結果です。5番目のGPUは99%で他のGPUは0%となっています。
Mon Apr 29 11:10:44 2024
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 535.104.05 Driver Version: 535.104.05 CUDA Version: 12.2 |
|-----------------------------------------+----------------------+----------------------+
| 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:04:00.0 Off | 0 |
| N/A 42C P0 117W / 700W | 40075MiB / 81559MiB | 0% Default |
| | | Disabled |
+-----------------------------------------+----------------------+----------------------+
| 1 NVIDIA H100 80GB HBM3 On | 00000000:05:00.0 Off | 0 |
| N/A 39C P0 112W / 700W | 36550MiB / 81559MiB | 0% Default |
| | | Disabled |
+-----------------------------------------+----------------------+----------------------+
| 2 NVIDIA H100 80GB HBM3 On | 00000000:0A:00.0 Off | 0 |
| N/A 42C P0 117W / 700W | 36548MiB / 81559MiB | 0% Default |
| | | Disabled |
+-----------------------------------------+----------------------+----------------------+
| 3 NVIDIA H100 80GB HBM3 On | 00000000:0B:00.0 Off | 0 |
| N/A 38C P0 113W / 700W | 36548MiB / 81559MiB | 0% Default |
| | | Disabled |
+-----------------------------------------+----------------------+----------------------+
| 4 NVIDIA H100 80GB HBM3 On | 00000000:84:00.0 Off | 0 |
| N/A 41C P0 120W / 700W | 36548MiB / 81559MiB | 0% Default |
| | | Disabled |
+-----------------------------------------+----------------------+----------------------+
| 5 NVIDIA H100 80GB HBM3 On | 00000000:85:00.0 Off | 0 |
| N/A 86C P0 260W / 700W | 36548MiB / 81559MiB | 99% Default |
| | | Disabled |
+-----------------------------------------+----------------------+----------------------+
| 6 NVIDIA H100 80GB HBM3 On | 00000000:8A:00.0 Off | 0 |
| N/A 40C P0 115W / 700W | 36548MiB / 81559MiB | 0% Default |
| | | Disabled |
+-----------------------------------------+----------------------+----------------------+
| 7 NVIDIA H100 80GB HBM3 On | 00000000:8B:00.0 Off | 0 |
| N/A 37C P0 113W / 700W | 36052MiB / 81559MiB | 0% Default |
| | | Disabled |
+-----------------------------------------+----------------------+----------------------+
+---------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=======================================================================================|
| 0 N/A N/A 1028875 C /tcpgpudmarxd/build/app/tcpgpudmarxd 4616MiB |
| 0 N/A N/A 1029345 C .../miniconda3/envs/.cuda12/bin/python 31736MiB |
| 0 N/A N/A 1029346 C .../miniconda3/envs/.cuda12/bin/python 520MiB |
| 0 N/A N/A 1029347 C .../miniconda3/envs/.cuda12/bin/python 520MiB |
| 0 N/A N/A 1029348 C .../miniconda3/envs/.cuda12/bin/python 520MiB |
| 0 N/A N/A 1029349 C .../miniconda3/envs/.cuda12/bin/python 520MiB |
| 0 N/A N/A 1029350 C .../miniconda3/envs/.cuda12/bin/python 520MiB |
| 0 N/A N/A 1029351 C .../miniconda3/envs/.cuda12/bin/python 520MiB |
| 0 N/A N/A 1029352 C .../miniconda3/envs/.cuda12/bin/python 520MiB |
| 1 N/A N/A 1028875 C /tcpgpudmarxd/build/app/tcpgpudmarxd 4616MiB |
| 1 N/A N/A 1029346 C .../miniconda3/envs/.cuda12/bin/python 31912MiB |
| 2 N/A N/A 1028875 C /tcpgpudmarxd/build/app/tcpgpudmarxd 4616MiB |
| 2 N/A N/A 1029347 C .../miniconda3/envs/.cuda12/bin/python 31912MiB |
| 3 N/A N/A 1028875 C /tcpgpudmarxd/build/app/tcpgpudmarxd 4616MiB |
| 3 N/A N/A 1029348 C .../miniconda3/envs/.cuda12/bin/python 31912MiB |
| 4 N/A N/A 1028875 C /tcpgpudmarxd/build/app/tcpgpudmarxd 4616MiB |
| 4 N/A N/A 1029349 C .../miniconda3/envs/.cuda12/bin/python 31912MiB |
| 5 N/A N/A 1028875 C /tcpgpudmarxd/build/app/tcpgpudmarxd 4616MiB |
| 5 N/A N/A 1029350 C .../miniconda3/envs/.cuda12/bin/python 31912MiB |
| 6 N/A N/A 1028875 C /tcpgpudmarxd/build/app/tcpgpudmarxd 4616MiB |
| 6 N/A N/A 1029351 C .../miniconda3/envs/.cuda12/bin/python 31912MiB |
| 7 N/A N/A 1028875 C /tcpgpudmarxd/build/app/tcpgpudmarxd 4616MiB |
| 7 N/A N/A 1029352 C .../miniconda3/envs/.cuda12/bin/python 31416MiB |
+---------------------------------------------------------------------------------------+
2ノードでの学習
node-7がおかしいという証拠を掴んだので、3ノードでの学習を諦め2ノードで学習を開始する決断をしました。また、運営側へ問い合わせを行い学習に向けた最終準備を整えていきます。
node-7の行く末
怪しい現象を掴んだあとは、運営側から教えていただいたベンチマークを実行しnode-7単体では動くものの温度が異なる現象を確認し、突き詰めていきます。
また、インスタンス自体を切り替えてもらうなどの対応もお願いしていきます。しかし、インスタンスの切り替えが中々うまくいかず、Google Cloudまでエスカレーションすることになってしまい回答はGWの休み明けとなってしまいました。
無事に解決・・・そして悲劇へ
GW明けに回答をいただきnode-7のインスタンス切り替えは正常に行えて、無事に動作することが確認できました。また2ノードで事前学習をしていた状態でしたので、正常になった1ノードを利用して事後学習等に使う計画等を検討していました。
しかし事はそれほどうまくは行かずnode-7の解決との入れ替えで次回で記載する悲劇へと続くのです。
補足と謝辞
今回の障害はチームにとって不利な状態となっていることが認められ特例処置として3日間の延長による補填対応をしていただきました。問題の切り分けという点ではハードウェアなのかソフトウェアなのか、結果的にはハードウェアでしたが、中々難しい事象だったのかと思います。でも逆に考えれば良い経験になったことは確かです。
関係各所の皆様のご協力ありがとうございました。この場を借りて感謝申し上げます。
東京大学 松尾・岩澤研究室が運営する松尾研LLMコミュニティのLLM開発プロジェクト[GENIAC] の開発記録、情報発信になります。 各種リンクはこちら linktr.ee/matsuolab_community
Discussion