👏

Team 甲(きのえ) ノード壊れていないか?

2024/05/22に公開

もう一つの事件

新たな悲劇の話の前に、前回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開発 プロジェクト[GENIAC]

Discussion