インテル® Tiber™ デベロッパー・クラウドのチュートリアル: インテル® HLS-Gaudi® 2 AI アクセラレーター・サーバー

インテル® Tiber™ デベロッパー・クラウド

この記事は、インテルのサイトで公開されている「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 アクセラレーター・サーバー
(8 x インテル® Gaudi® 2 AI アクセラレーター HL-225H メザニン・カードおよび第 3 世代インテル® Xeon® Platinum 8380 プロセッサー搭載)

NA

1TB

30TB

必要条件

訳者注: 現在、インテル® Tiber™ デベロッパー・クラウドでは、Enterprise ELA プランの利用者向けにインテル® Gaudi® 2 AI アクセラレーターへのアクセスを承認制で提供しています。

インテル® Tiber™ デベロッパー・クラウドの詳細については、以下のサイトを参照してください。

このチュートリアルを開始する前に、以下を完了してください。

初期設定

  1. ダッシュボードの [QuickStart] から [Hardware Catalog] を選択します。

    Hardware Catalog

    Hardware Catalog

  2. インテル® Gaudi® 2 AI アクセラレーター・サーバーを選択します。

    インテル® Gaudi® 2 AI アクセラレーター・サーバー

    インテル® Gaudi® 2 AI アクセラレーター・サーバー

  3. インスタンスの設定ウィンドウでインスタンス名を入力し、事前に作成しておいた SSH キーを選択します。

  4. [Launch] をクリックしてインスタンスを起動します。ノードの [State] がプロビジョニングされるのを待機します。

    インスタンスのプロビジョニング

    インスタンスのプロビジョニング

  5. [State] が「provisioning」から「ready」に変わったら、インスタンス名をクリックします。そして、[How to Connect] ボタンをクリックします。

    How to Connect

    How to Connect

  6. インテル® Tiber™ デベロッパー・クラウドのインスタンスに SSH 接続するすべてのオプションが表示されます。SSH コマンドをコピーして、ターミナルウィンドウに貼り付けます。

    インスタンスに接続する SSH コマンド

    インスタンスに接続する SSH コマンド

注: インテル® Gaudi® 2 AI アクセラレーター・サーバー・インスタンスにアクセスできない場合は、待機リストに追加されるようアクセスを要求します。

インテル® Gaudi® 2 AI アクセラレーター・サーバーで PyTorch* モデルのトレーニングを開始する

  1. 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
  2. 開始したコンテナ内に Model-References (英語) リポジトリーをクローンします。

    cd ~
    git clone https://github.com/HabanaAI/Model-References.git
  3. hello_world サンプルのディレクトリーに移動します。

    cd Model-References/PyTorch/examples/computer_vision/hello_world/
  4. PYTHONPATH を更新して Model-References リポジトリーを含め、PYTHON を Python* 実行に設定します。

    export PYTHONPATH=$PYTHONPATH:/root/Model-References
    export PYTHON=/usr/bin/python3.8

単一のインテル® Gaudi® AI アクセラレーター (HPU) でのトレーニング

  1. 自動キャストを有効にして、BF16 データ形式で単一の HPU 上でトレーニングを実行します。これは単純な線形回帰モデルです。次の実行コマンドをターミナルウィンドウにコピーします。

    $PYTHON mnist.py --batch-size=64 --epochs=1 --lr=1.0 --gamma=0.7 --hpu --autocast
  2. 以下のような出力結果が表示されます。

    ============================= 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) で分散トレーニング

  1. 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
    
  2. 以下は、想定される出力結果の一部です。

    | 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 モデルをファイン・チューニングし、推論も実行します。

以下の手順に従って、Optimum Habana* ライブラリーと例をインストールします。

  1. Habana* で最適化された例にアクセスするには、Optimum-Habana プロジェクトをクローンします。

    cd ~
    git clone https://github.com/huggingface/optimum-habana.git
  2. habana-optimum ライブラリーをインストールします。最新の安定バージョンがインストールされます。

    pip install --upgrade-strategy eager optimum[habana]
  3. インテル® Gaudi® 2 AI アクセラレーター で DeepSpeed ライブラリーを使用するには、Habana* DeepSpeed フォークをインストールします。

    pip install git+https://github.com/HabanaAI/DeepSpeed.git@1.12.0
  4. 以下の例は、Optimum-Habana Text Classification タスクの例をベースにしています。text-classification ディレクトリーに移動して、この例に必要な追加のソフトウェアをインストールします。

    cd ~
    cd optimum-habana/examples/text-classification/
    pip install -r requirements.txt
    

これで、BERT-Large モデルでファイン・チューニングを実行する準備が整いました。

シングルカードのトレーニング実行

  1. ~/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
    
  2. 結果にはトレーニングと評価の両方が表示されます。

    {'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 カードで同じファイン・チューニング・タスクを実行します。

  1. 以下のコマンドをコピーしてターミナルウィンドウに貼り付けます。

    $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
    
  2. 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 アクセラレーターでトレーニングと推論を実行しました。

次のステップ

タイトルとURLをコピーしました