弾性分散学習 (Elastic Distributed Training) は、AIモデルトレーニングにおいて効率性と柔軟性を高めるために活用される技術です。簡単に言えば、トレーニングが単一のマシンや固定されたコンテナ数に制約されることなく、ニーズに応じて動的に計算リソースを調整・活用できるようにします。
INFINITIXは、この弾性分散学習をAI-Stackにシームレスに統合しており、Horovod、DeepSpeed、Megatron-LM、Slurmといった主要なフレームワークをサポートしています。これにより、企業が直面するリソーススケジューリングのボトルネックを解消し、大規模AIモデルのトレーニングを加速させます。
本記事では、AI-Stack上でHorovodを使って弾性分散学習を実行する手順を、ステップごとにご紹介します。
Horovod と DeepSpeed の操作手順は似ているため、本記事では Horovod を例に解説します。使用前に、【パブリックイメージ一覧】に DeepSpeed/Horovod の実行に適したイメージが用意されていることを必ずご確認ください。
Horovod 分散学習
- AI-Stackのユーザーポータルにログインし、「コンテナ管理」をクリックし、「分散型トレーニングクラスタ」を選択します。
- 「クラスタの作成」ボタンをクリックします。
- 作成ページでは、「Horovod」を選択し、「クラスタ名」を入力します。ここでは例として tthvd と入力します。
- 使用したいコンテナ数を設定します。ここでは例として2を入力し、必要なイメージを選択します。
- ここで注意すべき点:
- コンテナ数は「2以上」である必要があります(1つの launcher コンテナと、それ以外の worker コンテナを含むため)。
- クラスタの種類に応じて、学習フレームワークを含むイメージを選択する必要があります。
- 「GPUを有効にする」をクリックし、各コンテナに割り当てるGPU仕様を選択します。ここでは、各コンテナに NVIDIA-P4 GPUを1枚割り当てる設定を選択します。(共有メモリを有効化するかどうかを選択でき、必要に応じて容量を入力することも可能です。)
- マウントするストレージを選択します。
- 全ての設定を完了したら、「送信」をクリックします。1〜2分ほど待つと、2つのコンテナが作成され、「Running」状態になります。それぞれのコンテナには、NVIDIA-P4 GPUが1枚ずつ 割り当てられています。
- クラスタ作成完了後、サービスから SSH またはより便利な JupyterLab を選択して接続できます。ここでは、JupyterLab を選択します。
- JupyterLab から Terminal をクリックします。(SSHで接続するのと同じ意味)
- home に戻ると、外部のストレージクラスタからマウントしたボリュームが確認できます。そこには事前に Horovod のテストプログラムを配置してあるため、これを使って使用方法をデモンストレーションします。
- 以下のコマンドでトレーニングスクリプトを実行します。
horovodrun -np 2 –hostfile /etc/mpi/hostfile python tensorflow2_mist.py
- -np 2:–num-processes の省略形で、起動するPythonプロセス数を設定します。ここでは 2 とし、2つのコンテナの計算リソースを使って分散処理を行います。
- –hostfile /etc/mpi/hostfile:hostfile には、この分散クラスタ内で利用可能なコンテナや、それぞれに搭載されているGPU数が記載されています。AI-Stackはこのファイルを自動生成・管理します。–hostfile パラメータは、Horovodに対してそのファイルのパスを指定し、記載内容に基づいてGPUリソースを利用できるようにするものです。
- python tensorflow2_mnist.py:実行する学習スクリプトです。
今回のトレーニングスクリプトには 1万件のデータ があり、それを2つのコンテナに分配すると、各コンテナには 5,000件ずつ 割り当てられてトレーニングが実行されます。
ここまでで、AI-Stackを使ったHorovod分散学習の操作手順を学びました!
次は、コンテナのスケールイン・スケールアウトの方法を紹介します。
AI-Stack で horovod コンテナをスケーリング
コンテナのスケーリングを行うことで、リソースを柔軟かつ効率的に割り当てることができます。トレーニングを加速したいときはワンクリックでコンテナ数を増やし、トレーニングが完了したらすぐにコンテナ数を減らしてリソースを他のタスクへ解放可能です。これにより、開発効率を大幅に向上させるだけでなく、運用コストの最適化にもつながります。
では、実際にAI-Stackでどのようにコンテナをスケーリングするのかを見ていきましょう。
- 「分散型トレーニングクラスタ」の画面に戻り、先ほど作成した tthvd クラスタ にチェックを入れ、「コンテナスケーリング」をクリックします。
- 右側のパネルで、コンテナ数を変更できます。ここでは、 2個から4個へ変更します。
- 「確認」ボタンをクリックし、「コンテナ一覧」に戻ると、新しく追加された2つのコンテナが表示されます。1〜2分ほど待つと、状態が「Running」に更新され、これで新しいコンテナが正常にデプロイされたことがわかります。
現在の画面では、tthvdクラスタ内に合計4つのコンテナ が稼働していることが確認できます。,
- スケールアウト後は、hostfile の内容も自動的に4つのコンテナ分に更新されます。その状態で、先ほど使用したスクリプトをもう一度実行します。今回は 2コンテナから4コンテナ に変更してトレーニングを実行します。
horovodrun -np 4 –hostfile /etc/mpi/hostfile python tensorflow2_mist.py
同じく 1万件のデータ を使用しますが、今回は 4つのコンテナ に分散してトレーニングを実行します。その結果、各コンテナには 2,500件ずつ のデータが割り当てられ、全体の学習速度も向上します。
以上で、AI-StackにおけるHorovodの操作手順を紹介しました!
AI-Stackを使えば、データサイエンティストは簡単にコンテナを構築・拡張でき、トレーニングにかかる時間を大幅に削減し、より効率的にトレーニングを進められます。
さらに「弾性分散学習」について詳しく知りたい方は、こちらの記事をご覧ください:弾性分散トレーニング(Elastic Distributed Training)とは?より効率的なAIモデル学習を実現する新しいトレーニング手法
AI-Stackソリューションについてご興味をお持ちの方は、ぜひお気軽にお問合せください!