AMD - Vitis AI
Vitis AI実行プロバイダー
Section titled “Vitis AI実行プロバイダー”Vitis AIは、Ryzen AI、AMD Adaptable SoC、Alveo Data Center Acceleration Cardsを含むAMDプラットフォーム上でハードウェア加速AI推論を行うためのAMDの開発スタックです。
以下の表は、Vitis AI ONNX Runtime実行プロバイダーでサポートされているAMDターゲットを示しています。
| アーキテクチャ | ファミリー | サポートされているターゲット | サポートされているOS |
|---|---|---|---|
| AMD64 | Ryzen AI | NPU搭載AMD Ryzenプロセッサー | Windows |
| Arm® Cortex®-A53 | Zynq UltraScale+ MPSoC | ZCU102, ZCU104, KV260 | Linux |
| Arm® Cortex®-A72 | Versal AI Core / Premium | VCK190 | Linux |
| Arm® Cortex®-A72 | Versal AI Edge | VEK280 | Linux |
NPU搭載AMD Ryzenプロセッサーの完全なリストについては、プロセッサー仕様ページを参照してください(表の右側にある「AMD Ryzen AI」列を探し、プルダウンメニューから「Available」を選択してください)。
AMD Adaptable SoC開発者は、Vitis AI ONNX Runtime実行プロバイダーを活用してカスタム(チップダウン)設計をサポートすることもできます。
インストール
Section titled “インストール”AMD Ryzen AIプロセッサー用インストール
Section titled “AMD Ryzen AIプロセッサー用インストール”AMD Ryzen AIプロセッサーをターゲットとするMicrosoft WindowsでVitis AI ONNX Runtime実行プロバイダーを有効にするには、開発者はRyzen AI Softwareをインストールする必要があります。Ryzen AI Softwareのダウンロードとインストールに関する詳細な手順は、https://ryzenai.docs.amd.com/en/latest/inst.html で確認できます。
AMD Ryzen AIプロセッサーをターゲットとする完全な例については、開発者はRyzenAI-SW Githubリポジトリを参照してください。
AMD Adaptable SoC用インストール
Section titled “AMD Adaptable SoC用インストール”AMD Adaptable SoCターゲットの場合、組み込みLinux上でONNXモデルをデプロイするためのプリビルドパッケージが提供されています。ユーザーは、ターゲット上でVitis AIを有効にするために標準のVitis AI ターゲットセットアップ手順を参照してください。ターゲット上でVitis AIが有効になったら、開発者はインストールとAPIの詳細についてVitis AIドキュメントのこのセクションを参照できます。
AMD Adaptable SoCをターゲットとする完全な例については、開発者はONNX Runtime Vitis AI実行プロバイダーの例を参照してください。
Ryzen AI Vitis AI ONNX Runtime実行プロバイダーをソースからビルドするには、ビルド手順を参照してください。
量子化は、モデルの精度を維持しながら高精度の重みや活性化を低精度フォーマットにマッピングするプロセスです。この技術により、NPUデバイス上でのデプロイメント用にモデルの計算効率とメモリ効率が向上します。これは訓練後に適用でき、既存のモデルを再訓練することなく最適化できます。
Vitis AI EPは、INT8またはBF16フォーマットに量子化された入力モデルをサポートしています。
Ryzen AIモデルの量子化は、AMD Quark量子化器、Vitis AI量子化器、またはOliveで実行できます。
AMD Quark
Section titled “AMD Quark”AMD Quarkは、深層学習モデルの量子化を簡素化し強化するために設計された包括的なクロスプラットフォーム深層学習ツールキットです。PyTorchとONNXモデルの両方をサポートし、Quarkは開発者が幅広いハードウェアバックエンドでのデプロイメント用にモデルを最適化し、精度を損なうことなく大幅なパフォーマンス向上を実現できるようにします。
完全な詳細については、Ryzen AI用AMD Quarkドキュメントを参照してください。
Vitis AI量子化器
Section titled “Vitis AI量子化器”Vitis AI量子化器は、PyTorch、TensorFlow、ONNXモデルの量子化をサポートしています。
PyTorchとTensorFlowモデルの量子化をサポートするために、Pytorch、Tensorflow 2.x、Tensorflow 1.xのDockerが利用可能です。Vitis AI ONNX Runtime実行プロバイダーをサポートするために、Vitis AI量子化器では量子化後にONNXフォーマットで量子化されたモデルをエクスポートするオプションが提供されています。
完全な詳細については、モデルの量子化に関するVitis AIドキュメントを参照してください。
Microsoft Oliveの実験的サポートも有効になっています。Vitis AI量子化器はOliveにプラグインとして統合されており、アップストリームされる予定です。これが完了すると、ユーザーはOlive Vitis AI例ディレクトリで提供される例を参照できます。
ランタイムオプション
Section titled “ランタイムオプション”Vitis AI ONNX Runtimeは、モデルグラフと重みをマイクロコード化された実行可能ファイルとしてコンパイルするコンパイラーを統合しています。この実行可能ファイルは、ターゲットアクセラレーター(Ryzen AI NPUまたはVitis AI DPU)上にデプロイされます。
モデルは、ONNX Runtimeセッションが開始されたときにコンパイルされ、最初の推論パスの前にコンパイルが完了する必要があります。コンパイルに必要な時間は異なりますが、完了まで数分かかる場合があります。モデルがコンパイルされると、モデル実行可能ファイルがキャッシュされ、後続の推論実行では、キャッシュされた実行可能モデルをオプションで使用できます(詳細は以下)。
以下の表は、推論セッションの設定に使用できるプロバイダーオプションと環境変数の概要を示しています。
AMD Ryzen AIプロセッサー上でBF16およびINT8モデルの推論セッションを設定する方法の詳細な手順については、Ryzen AI Softwareドキュメントを参照してください。
| プロバイダーオプション | デフォルト値 | 詳細 |
|---|---|---|
| cache_dir | Linux: “/tmp/{user}/vaip/.cache/” Windows: “C:\temp\{user}\vaip\.cache” | オプション、キャッシュディレクトリ |
| cache_key | {onnx_model_md5} | オプション、キャッシュキー、異なるモデルを区別するために使用 |
| log_level | ”error” | 有効な値は info、warning、error、fatal |
最終的なキャッシュディレクトリは {cache_dir}/{cache_key} です。
使用方法については、以下のC++の例を参照してください。
Ryzen AI API例
Section titled “Ryzen AI API例”C++ APIを活用するには、以下の例を参考にしてください:
// ...#include <onnxruntime_cxx_api.h>// ユーザーヘッダーファイルをインクルード// ...
std::basic_string<ORTCHAR_T> model_file = "resnet50.onnx" // resnet50.onnxをあなたのモデル名に置き換えてくださいOrt::Env env(ORT_LOGGING_LEVEL_WARNING, "resnet50_pt");auto session_options = Ort::SessionOptions();
auto options = std::unorderd_map<std::string,std::string>({});// オプション、例:キャッシュパス : /tmp/my_cache/abcdefg // abcdefgをあなたのモデル名(例:onnx_model_md5)に置き換えてくださいoptions["cache_dir"] = "/tmp/my_cache";options["cache_key"] = "abcdefg"; // abcdefgをあなたのモデル名(例:onnx_model_md5)に置き換えてくださいoptions["log_level"] = "info";
// Vitis AI実行プロバイダーを使用して推論セッションを作成session_options.AppendExecutionProvider_VitisAI(options);
auto session = Ort::Session(env, model_file.c_str(), session_options);
// 入力と出力を取得Ort::AllocatorWithDefaultOptions allocator;std::vector<std::string> input_names;std::vector<std::int64_t> input_shapes;auto input_count = session.GetInputCount();for (std::size_t i = 0; i < input_count; i++) { input_names.emplace_back(session.GetInputNameAllocated(i, allocator).get()); input_shapes = session.GetInputTypeInfo(i).GetTensorTypeAndShapeInfo().GetShape();}std::vector<std::string> output_names;auto output_count = session.GetOutputCount();for (std::size_t i = 0; i < output_count; i++) { output_names.emplace_back(session.GetOutputNameAllocated(i, allocator).get());}// 入力テンソルを作成し、入力データを設定std::vector<Ort::Value> input_tensors;...
auto output_tensors = session.Run(Ort::RunOptions(), input_names.data(), input_tensors.data(), input_count, output_names.data(), output_count);// 出力データを後処理// ...Python APIを活用するには、以下の例を参考にしてください:
import onnxruntime
# ユーザーのインポートを追加# ...
# 入力を読み込み、前処理を実行# ...
# Vitis AI実行プロバイダーを使用して推論セッションを作成session = onnxruntime.InferenceSession( '[model_file].onnx', providers=["VitisAIExecutionProvider"], provider_options=[{"log_level": "info"}])
input_shape = session.get_inputs()[0].shapeinput_name = session.get_inputs()[0].name
# input_shapeに基づいて入力を読み込み、前処理を実行input_data = [...]result = session.run([], {input_name: input_data})AMD Ryzen AIプロセッサーをターゲットとする完全な例については、開発者はRyzenAI-SW Githubリポジトリを参照してください。
AMD Adaptable SoCをターゲットとする完全な例については、開発者はONNX Runtime Vitis AI実行プロバイダーの例を参照してください。