Application Development#
This page captures requirements and recommendations for developers looking to create, package and distribute applications targeting NPU-enabled AMD processors.
VitisAI EP / NPU Driver Compatibility#
For each version of the VitisAI EP, the EP bounds compatible drivers by a minimum version and a maximum release date.
The following table summarizes the driver requirements for the different versions of the VitisAI EP.
VitisAI EP version |
Minimum NPU Driver version |
Maximum NPU Driver release date |
|---|---|---|
1.7 |
32.0.203.280 |
Jan 22nd, 2029 |
1.6 |
32.0.203.280 |
Oct 7th, 2028 |
1.5 |
32.0.203.280 |
July 1st, 2028 |
1.4.1 |
32.0.203.259 |
May 13th, 2028 |
1.4 |
32.0.203.257 |
March 25th, 2028 |
1.3.1 |
32.0.203.242 |
January 17th, 2028 |
1.3 |
32.0.203.237 |
November 26th, 2027 |
1.2 |
32.0.201.204 |
July 30th, 2027 |
The application must verify that the user has installed NPU drivers compatible with the version of the Vitis AI EP in use.
APU Types#
The Ryzen AI Software supports various types of NPU-enabled APUs, referred to as PHX, HPT, STX, and KRK. To programmatically determine the type of the local APU, you can enumerate the PCI devices and look for an instance with a matching Hardware ID.
Vendor |
Device |
Revision |
APU Type |
|---|---|---|---|
0x1022 |
0x1502 |
0x00 |
PHX or HPT |
0x1022 |
0x17F0 |
0x00 |
STX |
0x1022 |
0x17F0 |
0x10 |
STX |
0x1022 |
0x17F0 |
0x11 |
STX |
0x1022 |
0x17F0 |
0x20 |
KRK |
The application must verify that it runs on an AMD processor with NPU, and that the Vitis AI EP version supports the NPU type.
NPU Utilities#
When deploying applications across various NPU devices, users can determine the specific type of NPU device using Python/C++ code. Based on the detected device—such as PHX, STX, KRK, or other device—users should configure the appropriate provider options as outlined in Model Compilation and Deployment.
For Python, the user can get the specific NPU type using the following example get_npu_info function in the %RYZEN_AI_INSTALLATION_PATH%\quicktest\quicktest.py
For C++, a set of APIs are provided to extract information about the NPU and check driver compatibility of the VitisAI EP with the rest of the environment. For details refer to C++ NPU Utilities
Application Development Requirements#
ONNX-RT Session#
The application should only use the Vitis AI Execution Provider if the user meets the following
The application is running on an AMD processor with an NPU type supported by the version of the Vitis AI EP in use. See list.
The user installs NPU drivers compatible with the version of the Vitis AI EP they are using. See compatibility table .
📝 NOTE: Sample C++ code that implements the compatibility checks to be performed before using the Vitis AI EP is available here
VitisAI EP Provider Options#
For INT8 models, the application should detect the type of APU present (PHX, HPT, STX, or KRK) and set the target and xclbin provider options accordingly. Refer to the section on using INT8 models for more details.
For BF16 models, the application should set the config_file provider option to the same file that the compiler used to precompile the BF16 model. Refer to the section on using BF16 models for more details.
Pre-Compiled Models#
Precompiled models load instantly and execute immediately on the NPU, significantly improving session creation time and overall end-user experience.
AMD recommends using the ONNXRuntime EP Context Cache feature for saving and reloading compiled models.
BF16 models
The deployment version of the VitisAI Execution Provider (EP) does not support the on-the-fly compilation of BF16 models. Applications utilizing BF16 models must include pre-compiled versions of these models. The VitisAI EP can then load the pre-compiled models and deploy them efficiently on the NPU.
INT8 models
The compiler recommends including pre-compiled versions of INT8 models, but it is not mandatory.
Application Packaging Requirements#
Ryzen AI 1.8.0 beta version is available for download at the following link. This beta version requires updated NPU driver.
A C++ application built on the Ryzen AI ONNX Runtime must include the following components in its distribution package:
For INT8 models
DLLs:
%RYZEN_AI_INSTALLATION_PATH%\deployment\aiecompiler_client.dll
%RYZEN_AI_INSTALLATION_PATH%\deployment\DirectML.dll
%RYZEN_AI_INSTALLATION_PATH%\deployment\dyn_dispatch_core.dll
%RYZEN_AI_INSTALLATION_PATH%\deployment\onnxruntime_providers_shared.dll
%RYZEN_AI_INSTALLATION_PATH%\deployment\onnxruntime_providers_vitisai.dll
%RYZEN_AI_INSTALLATION_PATH%\deployment\onnxruntime_vitis_ai_custom_ops.dll
%RYZEN_AI_INSTALLATION_PATH%\deployment\onnxruntime_vitisai_ep.dll
%RYZEN_AI_INSTALLATION_PATH%\deployment\onnxruntime.dll
NPU Binary files (.xclbin) from the
%RYZEN_AI_INSTALLATION_PATH%\voe-4.0-win_amd64\xclbinsfolderRecommended but not mandatory: pre-compiled models in the form of Onnx Runtime EP context models
For BF16 models
DLLs:
%RYZEN_AI_INSTALLATION_PATH%\deployment\onnxruntime.dll
%RYZEN_AI_INSTALLATION_PATH%\deployment\onnxruntime_providers_shared.dll
%RYZEN_AI_INSTALLATION_PATH%\deployment\onnxruntime_providers_vitisai.dll
%RYZEN_AI_INSTALLATION_PATH%\deployment\onnxruntime_vitisai_ep.dll
%RYZEN_AI_INSTALLATION_PATH%\deployment\dyn_dispatch_core.dll
%RYZEN_AI_INSTALLATION_PATH%\deployment\aiecompiler_client.dll
%RYZEN_AI_INSTALLATION_PATH%\deployment\vaiml.dll
Pre-compiled models in the form of Vitis AI EP cache folders
For LLMs
DLLs:
%RYZEN_AI_INSTALLATION_PATH%\deployment\onnxruntime-genai.dll
%RYZEN_AI_INSTALLATION_PATH%\deployment\onnxruntime.dll
%RYZEN_AI_INSTALLATION_PATH%\deployment\ryzen_mm.dll
%RYZEN_AI_INSTALLATION_PATH%\deployment\onnx_custom_ops.dll
%RYZEN_AI_INSTALLATION_PATH%\deployment\libutf8_validity.dll
%RYZEN_AI_INSTALLATION_PATH%\deployment\abseil_dll.dll
%RYZEN_AI_INSTALLATION_PATH%\deployment\DirectML.dll