この記事は、The Parallel Universe Magazine 49 号に掲載されている「Distributed Training on Intel® Xeon® Scalable Processors」の日本語参考訳です。原文は更新される可能性があります。原文と翻訳文の内容が異なる場合は原文を優先してください。
ディープラーニング (DL) モデルのトレーニングには GPU が必要であるというのはよくある誤解です。複雑な DL モデルの多くは、分散トレーニングを利用して CPU でより効率良くトレーニングできます。インテル® Xeon® スケーラブル・プロセッサーには、インテル® ディープラーニング・ブースト命令による AI アクセラレーションが組込まれています。この記事では、TensorFlow* と Horovod* を使用してクラスター上で分散トレーニングを設定する方法を説明します。
TensorFlow* は、DL アプリケーション向けのオープンソースでクロスプラットフォームのライブラリーであるインテル® oneAPI ディープ・ニューラル・ネットワーク (インテル® oneDNN) を使用して、インテル® プロセッサーやその他のアーキテクチャー (英語) 向けに最適化され、広く使用されている DL フレームワークです。インテル® oneDNN による TensorFlow* の最適化は、畳み込み、行列乗算、バッチ正規化など、パフォーマンスを重視する主要な操作を高速化します。Horovod* は、TensorFlow* や PyTorch* などの一般的なフレームワークで分散 DL を容易にするオープンソースのパッケージです。複数の GPU や CPU によるモデルのトレーニングに広く使用されています。
Tencent が提供する AI Arena は、マルチエージェント・インテリジェンスと複雑な意思決定の研究を行うオープン・プラットフォームであり、AI 研究者が実験環境を容易に構築できるよう、幅広いサービスが含まれています。Tencent の大ヒットしたモバイルゲーム「王者栄耀」は、AI Arena プラットフォームを使用して、マルチエージェントの競合と協調、不完全な情報、複雑な行動制御、巨大な状態行動空間を含む AI エージェントを構築した実例です。この AI エージェントは、プレーヤーがもっと楽しめるようにゲームの操作性を向上します。この記事では、インテル® Xeon® スケーラブル・プロセッサー・ベースの 16 ノードのクラスター上でTencent のプロダクションレベルのモデル・トレーニングを使用し、単一ノードと比較して最大 15.2 倍のスピードアップを達成した事例を紹介します。
分散ディープラーニング (DL) トレーニングの実行
分散 DL トレーニングを実行する方法は 2 つあります。1 つ目の方法は、インテル® oneDNN が有効な TensorFlow* を含むビルド済みの Docker* コンテナを使います。これには、必要なものがすべて揃っています。
docker pull intel/intel-optimized-tensorflow:2.6.0-ubuntu-18.04-mpi-horovod
2 つ目の方法は、インテル® oneDNN が有効な TensorFlow* 2.6 以降 (英語)、Horovod* 0.22.1 以降 (英語)、および Open MPI 4.0 以降 (英語) を手動でインストールします。GCC バージョンの確認を忘れないでください。Ubuntu* 16.04 以降を使用している場合は、GCC 8.4.1 以降をインストールします。
次のコマンドを使用して、Linux* クラスター上で Horovod* フレームワークを使用して分散 TensorFlow* を実行します。最初に、次の環境変数を設定します。
export LD_LIBRARY_PATH=<path to OpenMP lib>:$LD_LIBRARY_PATH export PATH=<path to Open MPI bin>:$PATH export OMP_NUM_THREADS=#of_cores of the machine [e.g., lscpu | grep "Core"] export KMP_AFFNITY=granularity=fine,compact,1,0 export KMP_BLOCKTIME=1
トレーニングを開始する前に、次のコマンドを使用してシステムのソケット数を確認できます。
lscpu | grep "Socket"
次のコマンドは、2 ソケットのサーバーでトレーニングを実行します。ここでは、ワーカーの総数は 2 です。
horovodrun -np 2 -H localhost:2 --autotune python train.py
次のコマンドは、それぞれ 2 ソケットを搭載した 4 台のサーバーでトレーニングを実行します。ここでは、ワーカーの総数は 8 (ソケットごとに 1 ワーカー) です。
horovodrun -np 8 -H server1:2,server2:2,server3:2,server4:2 --autotune python train.py
次のコマンドは、それぞれ 1 ソケットを搭載した 8 台のサーバーでトレーニングを実行します。ここでも、ワーカーの総数は 8 です。
horovodrun -np 8 \ -H server1:1,server2:1,server3:1,server4:1,server5:1,server6:1,server7:1,server8:1 \ --autotune python train.py
このように、モデルで達成したいトレーニング時間に応じて、サーバーの台数を増減できます。トレーニング時間は、使用するサーバーの台数に対してほぼ線形にスケーリングすることが期待されます。ハイパーパラメーターの最適化も、複数の GPU でトレーニングする場合と同様に行われます。学習率と有効バッチサイズは、多くの場合、ワーカー数によってスケーリングできます。学習率の向上は、多くの場合、バッチサイズの増加を相殺できます。
ケーススタディー: Wukong* AI のトレーニング
人工知能プログラム Wukong* AI は、Tencent の人気 MOBA ゲーム「王者栄耀」をプレイし、トップ・プロ・プレーヤーのパフォーマンスを超えました。Wukong* AI は強化学習 (RL) を使用しています。RL の目標は、AI エージェントを強化するため、適切なポリシーを選択して最適化することです。ポリシーの選択は、ディープ RL トレーニングで最適化できます。分散トレーニングを使用して、第 2 世代インテル® Xeon® スケーラブル・プロセッサー・ベースのクラスター上の複数の RL 学習器に学習プロセスを拡張します。
製品とパフォーマンス情報
1実際の性能は利用法、構成、その他の要因によって異なります。詳細については、www.Intel.com/PerformanceIndex (英語) を参照してください。