この記事は、インテルのサイトで公開されている「Intel Developer Cloud Docs」の「Gaudi2 Deep Learning Server」の日本語参考訳です。原文は更新される可能性があります。原文と翻訳文の内容が異なる場合は原文を優先してください。
インテル® HLS-Gaudi® 2 AI アクセラレーター・サーバー (旧称 Gaudi® 2 ディープラーニング・サーバー) を使用して、シンプルな PyTorch* モデルなどをトレーニングするメリットを確認します。第 1 世代インテル® Gaudi® AI アクセラレーターと比較して、インテル® Gaudi® 2 AI アクセラレーターは以下の利点をもたらします。
テンソル・プロセッサー・コア (TPC) クラスターの数が 8 から 24 に増加しています。
FP8 データ形式がサポートされています。
統合メディア・コントロールを提供しています。
7nm プロセス・テクノロジーに代わって 16nm プロセス・テクノロジーを採用しています。
注: インテル® Gaudi® 2 AI アクセラレーターは、FP32、TF32、BF16、FP16、FP8 形式でデータを処理します。
計算インスタンス
インスタンス・ |
プロセッサー |
コア数 |
RAM |
ディスク |
---|---|---|---|---|
ベアメタル (BM) |
インテル® Gaudi® 2 AI アクセラレーター・サーバー |
NA |
1TB |
30TB |
必要条件
訳者注: 現在、インテル® Tiber™ デベロッパー・クラウドでは、Enterprise ELA プランの利用者向けにインテル® Gaudi® 2 AI アクセラレーターへのアクセスを承認制で提供しています。
インテル® Tiber™ デベロッパー・クラウドの詳細については、以下のサイトを参照してください。
このチュートリアルを開始する前に、以下を完了してください。
初期設定
ダッシュボードの [QuickStart] から [Hardware Catalog] を選択します。
インテル® Gaudi® 2 AI アクセラレーター・サーバーを選択します。
インスタンスの設定ウィンドウでインスタンス名を入力し、事前に作成しておいた SSH キーを選択します。
[Launch] をクリックしてインスタンスを起動します。ノードの [State] がプロビジョニングされるのを待機します。
[State] が「provisioning」から「ready」に変わったら、インスタンス名をクリックします。そして、[How to Connect] ボタンをクリックします。
インテル® Tiber™ デベロッパー・クラウドのインスタンスに SSH 接続するすべてのオプションが表示されます。SSH コマンドをコピーして、ターミナルウィンドウに貼り付けます。
注: インテル® Gaudi® 2 AI アクセラレーター・サーバー・インスタンスにアクセスできない場合は、待機リストに追加されるようアクセスを要求します。
インテル® Gaudi® 2 AI アクセラレーター・サーバーで PyTorch* モデルのトレーニングを開始する
Habana* Docker* イメージを実行します。
docker run -it --runtime=habana -e HABANA_VISIBLE_DEVICES=all -e OMPI_MCA_btl_vader_single_copy_mechanism=none --cap-add=sys_nice --net=host --ipc=host vault.habana.ai/gaudi-docker/1.12.0/ubuntu20.04/habanalabs/pytorch-installer-2.0.1:latest
開始したコンテナ内に Model-References (英語) リポジトリーをクローンします。
cd ~ git clone https://github.com/HabanaAI/Model-References.git
hello_world
サンプルのディレクトリーに移動します。cd Model-References/PyTorch/examples/computer_vision/hello_world/
PYTHONPATH を更新して Model-References リポジトリーを含め、PYTHON を Python* 実行に設定します。
export PYTHONPATH=$PYTHONPATH:/root/Model-References export PYTHON=/usr/bin/python3.8
単一のインテル® Gaudi® AI アクセラレーター (HPU) でのトレーニング
自動キャストを有効にして、BF16 データ形式で単一の HPU 上でトレーニングを実行します。これは単純な線形回帰モデルです。次の実行コマンドをターミナルウィンドウにコピーします。
$PYTHON mnist.py --batch-size=64 --epochs=1 --lr=1.0 --gamma=0.7 --hpu --autocast
以下のような出力結果が表示されます。
============================= HABANA PT BRIDGE CONFIGURATION =========================== PT_HPU_LAZY_MODE = 1 PT_RECIPE_CACHE_PATH = PT_CACHE_FOLDER_DELETE = 0 PT_HPU_RECIPE_CACHE_CONFIG = PT_HPU_MAX_COMPOUND_OP_SIZE = 9223372036854775807 PT_HPU_LAZY_ACC_PAR_MODE = 1 PT_ HPU_ENABLE_REFINE_DYNAMIC_SHAPES = 0 ---------------------------: System Configuration :--------------------------- Num CPU Cores : 160 CPU RAM : 1056446944 KB ------------------------------------------------------------------------------ Train Epoch: 1 [0/60000.0 (0%)] Loss: 2.296875 Train Epoch: 1 [640/60000.0 (1%)] Loss: 1.546875 *** Train Epoch: 1 [58880/60000.0 (98%)] Loss: 0.020264 Train Epoch: 1 [59520/60000.0 (99%)] Loss: 0.001488 Total test set: 10000, number of workers: 1 * Average Acc 98.620 Average loss 0.043
8 基のインテル® Gaudi® AI アクセラレーター (HPU) で分散トレーニング
8 基の HPU をすべて使用して同じモデルのトレーニングを実行します。次の実行コマンドをターミナルウィンドウにコピーします。
mpirun -n 8 --bind-to core --map-by slot:PE=6 \ --rank-by core --report-bindings \ --allow-run-as-root \ $PYTHON mnist.py \ --batch-size=64 --epochs=1 \ --lr=1.0 --gamma=0.7 \ --hpu --autocast
以下は、想定される出力結果の一部です。
| distributed init (rank 0): env:// | distributed init (rank 3): env:// | distributed init (rank 5): env:// | distributed init (rank 6): env:// | distributed init (rank 4): env:// | distributed init (rank 7): env:// | distributed init (rank 1): env:// | distributed init (rank 2): env:// ============================= HABANA PT BRIDGE CONFIGURATION =========================== PT_HPU_LAZY_MODE = 1 PT_RECIPE_CACHE_PATH = PT_CACHE_FOLDER_DELETE = 0 PT_HPU_RECIPE_CACHE_CONFIG = PT_HPU_MAX_COMPOUND_OP_SIZE = 9223372036854775807 PT_HPU_LAZY_ACC_PAR_MODE = 1 PT_ HPU_ENABLE_REFINE_DYNAMIC_SHAPES = 0 ---------------------------: System Configuration :--------------------------- Num CPU Cores : 160 CPU RAM : 1056446944 KB ------------------------------------------------------------------------------ Train Epoch: 1 [0/7500.0 (0%)] Loss: 2.296875 Train Epoch: 1 [640/7500.0 (9%)] Loss: 1.578125 Train Epoch: 1 [1280/7500.0 (17%)] Loss: 0.494141 *** Train Epoch: 1 [5760/7500.0 (77%)] Loss: 0.100098 Train Epoch: 1 [6400/7500.0 (85%)] Loss: 0.088379 Train Epoch: 1 [7040/7500.0 (94%)] Loss: 0.067871 Total test set: 10000, number of workers: 8 * Average Acc 97.790 Average loss 0.066
Hugging Face* Optimum Habana* ライブラリーを使用したファイン・チューニング
Optimum Habana* ライブラリーは、Hugging Face* Transformers ライブラリーおよび Diffusers ライブラリーとインテル® Gaudi® AI アクセラレーター間のインターフェイスです。さまざまな下流タスクに対して、単一および複数のインテル® Gaudi® AI アクセラレーター設定でモデルの読み込み、トレーニング、推論を簡単に実行できるツールセットを提供します。次の例では、テキスト分類タスクを使用して、MRPC (Microsoft Research Paraphrase Corpus) データセットで BERT-Large モデルをファイン・チューニングし、推論も実行します。
注: 続行する前に、「インテル® Gaudi® 2 AI アクセラレーター・サーバーで PyTorch* modelのトレーニングを開始する」セクションを完了してください。
以下の手順に従って、Optimum Habana* ライブラリーと例をインストールします。
Habana* で最適化された例にアクセスするには、Optimum-Habana プロジェクトをクローンします。
cd ~ git clone https://github.com/huggingface/optimum-habana.git
habana-optimum ライブラリーをインストールします。最新の安定バージョンがインストールされます。
pip install --upgrade-strategy eager optimum[habana]
インテル® Gaudi® 2 AI アクセラレーター で DeepSpeed ライブラリーを使用するには、Habana* DeepSpeed フォークをインストールします。
pip install git+https://github.com/HabanaAI/DeepSpeed.git@1.12.0
以下の例は、Optimum-Habana Text Classification タスクの例をベースにしています。text-classification ディレクトリーに移動して、この例に必要な追加のソフトウェアをインストールします。
cd ~ cd optimum-habana/examples/text-classification/ pip install -r requirements.txt
これで、BERT-Large モデルでファイン・チューニングを実行する準備が整いました。
シングルカードのトレーニング実行
注: 続行する前に、「インテル® Gaudi® 2 AI アクセラレーター・サーバーで PyTorch* modelのトレーニングを開始する」セクションを完了してください。
~/optimum-habana/examples/text-classification/
ディレクトリーで次のコマンドをコピーしてターミナルウィンドウに貼り付け、単一のインテル® Gaudi® カード上で BERT-Large Model のファイン・チューニングを実行します。$PYTHON run_glue.py \ --model_name_or_path bert-large-uncased-whole-word-masking \ --gaudi_config_name Habana/bert-large-uncased-whole-word-masking \ --task_name mrpc \ --do_train \ --do_eval \ --per_device_train_batch_size 32 \ --learning_rate 3e-5 \ --num_train_epochs 3 \ --max_seq_length 128 \ --output_dir ./output/mrpc/ \ --use_habana \ --use_lazy_mode \ --bf16 \ --use_hpu_graphs_for_inference \ --throughput_warmup_steps 3 \ --overwrite_output_dir
結果にはトレーニングと評価の両方が表示されます。
{'train_runtime': 54.8875, 'train_samples_per_second': 266.059, 'train_steps_per_second': 8.342, 'train_loss': 0.3403122169384058, 'epoch': 3.0, 'memory_allocated (GB)': 7.47, 'max_memory_allocated (GB)': 9.97, 'total_memory_available (GB)': 94.61} 100%|██████████████ 345/345 [00:54<00:00, 6.29it/s] ***** train metrics ***** epoch = 3.0 max_memory_allocated (GB) = 9.97 memory_allocated (GB) = 7.47 total_memory_available (GB) = 94.61 train_loss = 0.3403 train_runtime = 0:00:54.88 train_samples = 3668 train_samples_per_second = 266.059 train_steps_per_second = 8.342 ***** eval metrics ***** epoch = 3.0 eval_accuracy = 0.8775 eval_combined_score = 0.8959 eval_f1 = 0.9144 eval_loss = 0.4336 eval_runtime = 0:00:01.73 eval_samples = 408 eval_samples_per_second = 234.571 eval_steps_per_second = 29.321 max_memory_allocated (GB) = 9.97 memory_allocated (GB) = 7.47 total_memory_available (GB) = 94.61
マルチカードのトレーニング実行
この例では、8 枚のインテル® Gaudi® 2 カードで同じファイン・チューニング・タスクを実行します。
以下のコマンドをコピーしてターミナルウィンドウに貼り付けます。
$PYTHON ../gaudi_spawn.py --world_size 8 --use_mpi run_glue.py \ --model_name_or_path bert-large-uncased-whole-word-masking \ --gaudi_config_name Habana/bert-large-uncased-whole-word-masking \ --task_name mrpc \ --do_train \ --do_eval \ --per_device_train_batch_size 32 \ --per_device_eval_batch_size 8 \ --learning_rate 3e-5 \ --num_train_epochs 3 \ --max_seq_length 128 \ --output_dir /tmp/mrpc_output/ \ --use_habana \ --use_lazy_mode \ --bf16 \ --use_hpu_graphs_for_inference \ --throughput_warmup_steps 3
8 枚のインテル® Gaudi® 2 カードをすべて使用した場合、1 秒あたりのトレーニング・サンプル数が大幅に向上することが分かります。
{'train_runtime': 41.8426, 'train_samples_per_second': 1663.393, 'train_steps_per_second': 6.825, 'train_loss': 0.5247347513834636, 'epoch': 3.0, 'memory_allocated (GB)': 8.6, 'max_memory_allocated (GB)': 34.84, 'total_memory_available (GB)': 94.61} 100%|██████████| 45/45 [00:41<00:00, 1.07it/s] ***** train metrics ***** epoch = 3.0 max_memory_allocated (GB) = 34.84 memory_allocated (GB) = 8.6 total_memory_available (GB) = 94.61 train_loss = 0.5247 train_runtime = 0:00:41.84 train_samples = 3668 train_samples_per_second = 1663.393 train_steps_per_second = 6.825 ***** eval metrics ***** epoch = 3.0 eval_accuracy = 0.7623 eval_combined_score = 0.7999 eval_f1 = 0.8375 eval_loss = 0.4668 eval_runtime = 0:00:02.06 eval_samples = 408 eval_samples_per_second = 198.062 eval_steps_per_second = 3.398 max_memory_allocated (GB) = 34.84 memory_allocated (GB) = 8.6 total_memory_available (GB) = 94.61
DeepSpeed を使用したトレーニング
DeepSpeed パッケージがすでにインストールされている場合は、DeepSpeed を使用してマルチカードのトレーニングを実行します。ds_config.json
ファイルを作成して指定し、DeepSpeed 実行のパラメーターを設定します。Hugging Face* GitHub* ページ (英語) にアクセスして、サンプル設定ファイルをコピーします。
ds_config.json
ファイルを作成したら、以下の コマンドをコピーしてターミナルに貼り付けます。
$PYTHON ../gaudi_spawn.py \ --world_size 8 --use_deepspeed run_glue.py \ --model_name_or_path bert-large-uncased-whole-word-masking \ --gaudi_config_name Habana/bert-large-uncased-whole-word-masking \ --task_name mrpc \ --do_train \ --do_eval \ --per_device_train_batch_size 32 \ --per_device_eval_batch_size 8 \ --learning_rate 3e-5 \ --num_train_epochs 3 \ --max_seq_length 128 \ --output_dir /tmp/mrpc_output/ \ --use_habana \ --use_lazy_mode \ --use_hpu_graphs_for_inference \ --throughput_warmup_steps 3 \ --deepspeed /root/optimum-habana/examples/text-generation/ds_config.json
DeepSpeed の詳細については、「トレーニング向け DeepSpeed ユーザーガイド」 (英語) を参照してください。
推論サンプルの実行
推論を使用すると、上記と同じ評価メトリック (精度、F1 スコア) が実行され、モデルのパフォーマンスが表示されます。
cd ~/optimum-habana/examples/text-classification/
python run_glue.py --model_name_or_path bert-large-uncased-whole-word-masking \ --gaudi_config_name Habana/bert-large-uncased-whole-word-masking \ --task_name mrpc \ --do_eval \ --max_seq_length 128 \ --output_dir ./output/mrpc/ \ --use_habana \ --use_lazy_mode \ --use_hpu_graphs_for_inference
ここでは、インテル® Tiber™ デベロッパー・クラウドを使用してインテル® Gaudi® 2 AI アクセラレーターでトレーニングと推論を実行しました。
次のステップ
Model-References (英語) リポジトリーにはさまざまなモデルがあります。
Hugging Face* を使用したその他のサンプル (英語) も実行してみてください。
PyTorch* モデルを移行 (英語) して、その他のモデルをインテル® Gaudi® 2 AI アクセラレーターに移行してみてください。