GPU、CPU、インテル® Gaudi® AI アクセラレーターで動作する学習処理スクリプトの記述

https://www.intel.com/content/www/us/en/developer/articles/training/writing-training-scripts-that-can-run.html

＜インテル® Gaudi® AI アクセラレーターを活用した最適化＞
　• 新たなディープラーニング・モデルの作成も既存コードの移植も数分で完了
　• シンプルな開発と生産性の向上を両立しながら生成 AI のパフォーマンスを実現

詳細情報
https://www.intel.com/content/www/us/en/developer/platform/gaudi/overview.html

このチュートリアルでは、マシンに搭載されている AI アクセラレーターのタイプ (GPU、CPU、インテル® Gaudi® AI アクセラレーター) を自動で検出するコードの記述方法と、そのコードをスムーズに実行するために必要な変更の手順について説明します。開発者ならば、異なるタイプの AI アクセラレーターを同じモデルコードで動かしたいと考えるのではないでしょうか。例えば、GPU が搭載された開発用のノートブック PC で PyTorch コードを記述したいけれども、コードを実行するのはインテル® Gaudi® AI アクセラレーターが搭載された学習処理サーバーを想定している場合、最小限のコード変更だけで、共通のコードをベースに複数のハードウェア・プラットフォームを簡単に動かすことが可能です。

このチュートリアルでは、インテル® Gaudi® AI アクセラレーターを使用して学習処理を開始する のページで説明している torch_compile.py を例に、数カ所の調整だけで異なるプラットフォームにわたり利用可能なコードの記述方法を紹介します。torch_compile.py のコード例は次のとおりです。
https://docs.habana.ai/en/latest/PyTorch/Getting_Started_with_PyTorch_and_Gaudi/Getting_Started_with_PyTorch.html

![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/1a80bae6-95e4-4bf0-9b7d-7fffd3528062.png)

![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/4d9a3c5e-1864-4124-b286-de8c01b31422.png)

![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/446918d1-a2ff-4a65-9c2a-dc3abfd19b78.png)

![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/efe322de-2b0c-4b9d-879f-eeff062bde6d.png)

このコードを対象のプラットフォーム上にある torch_compile.py ファイルにコピーすると、次のコマンドを使用して実行できるようになります。

![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/fa16390e-7961-4c3d-a1f8-82d15d5f212c.png)

PyTorch は有効だけれどもインテル® Gaudi® ソフトウェアがインストールされていない環境でこのコードを実行すると、次のようなエラーが発生します。

![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/c7c8056e-6441-4872-986f-081beb35aad6.png)

この不具合を回避するには、次のように import habana_frameworks ステートメントを try/except ブロックで括ります。

![7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/7dfa42c1-fba8-409c-a719-b8905c88084b.png)

インポートの失敗が原因で例外がスローされた場合、このコードから htcore と hthpu の両方に None 値が渡されます。これはインテル® Gaudi® ソフトウェア・スタックがインストールされていない、または対象のプラットフォームで利用できないことを示しています。コードを再度実行してください。以下のようなエラーが出力されます。

![8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/90220daa-2ff4-4413-86bc-e6a811b3d394.png)

コードは import ステートメントで失敗してはいないものの、やはりモデルをインテル® Gaudi® アクセラレーターのバックエンドへ移動させようとしています。これはインテル® Gaudi® ソフトウェアまたはドライバーなしではサポートされていません。アクセラレーター (HPU) を有効化する元の行は、以下のとおりです。

![9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/587cd2f4-4233-464f-86e2-5ca30c98fa3c.png)

この行を、最も有効なハードウェアを動的に選択するコードに置き換えます。

![10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/03ba84e4-cbfc-48ea-bdfa-2228a800a6f2.png)

None 値は、habana_frameworks モジュールがインストールされていない場合に hthpu へ渡され、インテル® Gaudi® ソフトウェアがインストールされているかの判断に使用できることを覚えておいてください。インストールされている場合、コードは is_available() API を使用して、サーバーにインテル® Gaudi® アクセラレーターが搭載されているかを動的に識別します。インテル® Gaudi® アクセラレーターを利用できない場合は、この API に相当する CUDA API によってサーバーに GPU が搭載されているかを判断します。見つからない場合、コードは CPU を使用します。
https://docs.habana.ai/en/latest/PyTorch/PyTorch_User_Guide/Python_Packages.html#hpu-apis

次に、インテル® Gaudi® ソフトウェアがインストールされている場合のみ、hpu_backend オプションを使用してモデルをコンパイルします。

![11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/6b56b603-b18f-4c28-b0b8-47b04b29e7aa.png)

これで GPU、CPU、インテル® Gaudi® AI アクセラレーターのいずれでも、このコードを実行できるようになりました。

関連記事
インテル® Gaudi® アクセラレーター, PyTorch, Python API
https://docs.habana.ai/en/latest/PyTorch/PyTorch_User_Guide/Python_Packages.html

製品およびパフォーマンスに関する情報
性能は、使用状況、構成、その他の要因によって異なります。詳細については、https://www.Intel.com/PerformanceIndex/ (英語) を参照してください。


関連情報：
インテル® Gaudi® 3 アクセラレーター
https://www.intel.co.jp/content/www/jp/ja/products/details/processors/ai-accelerators/gaudi.html