Ryzen AI 1.3のインストール手順とトラブルシューティング

AI

Ryzen AI 1.3がリリースされていたので、環境構築とテストを行う。

Ryzen AI 1.2 から 1.3 へのアップデート概要

  • Quark量子化器の最初のリリース
  • 混合精度データ型のサポート
  • Copilot+アプリケーションとの互換性

リリースノート

※前回の記事はこちら: RyzenAI 1.2 インストール手順

Ryzen AI NPUドライバーのインストール手順

既存ドライバーのアンインストール

Windowsの「デバイスマネージャー」から既存のNPUドライバーを削除する。再起動してください。

新しいNPUドライバーの導入

  1. AMD公式サイトから npu_sw_installer.exe をダウンロード
  2. 管理者権限で実行
  3. 再起動
  4. Neural processorsが表示されていればドライバのインストールは完了

RyzenAIの環境をインストール

  1. ryzen-ai-rt-1.3.0-20241204.msiをダウンロード&実行
  2. Anacondaにryzen-ai-1.3.0の環境が作成される
  3. AnacondaのTerminalryzen-ai-1.3.0を立ち上げる

QUICKテスト実行時のUnicodeDecodeError対策

Uコマンドプロンプトで以下を実行してからスクリプトを起動してください。

前の記事と同じように変更して実行するエラーになった。

chcp 65001

コードを以下にように変更した。
変更箇所は文字コードになる

    if "PCI\\VEN_1022&DEV_1502&REV_00" in stdout.decode("latin1"):
        apu_type = "PHX/HPT"
    if "PCI\\VEN_1022&DEV_17F0&REV_00" in stdout.decode("latin1"):
        apu_type = "STX"
    if "PCI\\VEN_1022&DEV_17F0&REV_10" in stdout.decode("latin1"):
        apu_type = "STX"
    if "PCI\\VEN_1022&DEV_17F0&REV_11" in stdout.decode("latin1"):
        apu_type = "STX"
    if "PCI\\VEN_1022&DEV_17F0&REV_20" in stdout.decode("latin1"):
        apu_type = "KRK"
    return apu_type

テストモデルの実行と対策

文字コードの対策はしたが今度は、モデルパスが指定できていないことでエラーが発生した。モデルパスを直接指定を行った。

try:
    model_path = os.path.join(
        os.environ["RYZEN_AI_INSTALLATION_PATH"],
        "quicktest",
        "test_model.onnx",
    )
    print(f"Model path: {model_path}")
    sess_options = ort.SessionOptions()
    sess_options.graph_optimization_level = (
        ort.GraphOptimizationLevel.ORT_ENABLE_EXTENDED
    )
    session = ort.InferenceSession(model_path, sess_options)
    print("InferenceSession created successfully")
except Exception as e:
    print(f"Failed to create InferenceSession: {e}")
(ryzen-ai-1.3.0) PS C:\Program Files\RyzenAI\1.3.0\quicktest> python .\quicktest.py
Detected APU type: PHX/HPT
Setting environment for PHX/HPT
Firmware path: C:\Program Files\RyzenAI\1.3.0\voe-4.0-win_amd64\xclbins\phoenix\1x4.xclbin
Model path: C:\Program Files\RyzenAI\1.3.0\quicktest\test_model.onnx
InferenceSession created successfully
Test Passed

コード全体

# Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved.

import os
import sys
import subprocess
import numpy as np
import onnxruntime as ort


def get_apu_info():
    # Run pnputil as a subprocess to enumerate PCI devices
    command = r"pnputil /enum-devices /bus PCI /deviceids "
    process = subprocess.Popen(
        command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE
    )
    stdout, stderr = process.communicate()
    # Check for supported Hardware IDs
    apu_type = ""
    if "PCI\\VEN_1022&DEV_1502&REV_00" in stdout.decode("latin1"):
        apu_type = "PHX/HPT"
    if "PCI\\VEN_1022&DEV_17F0&REV_00" in stdout.decode("latin1"):
        apu_type = "STX"
    if "PCI\\VEN_1022&DEV_17F0&REV_10" in stdout.decode("latin1"):
        apu_type = "STX"
    if "PCI\\VEN_1022&DEV_17F0&REV_11" in stdout.decode("latin1"):
        apu_type = "STX"
    if "PCI\\VEN_1022&DEV_17F0&REV_20" in stdout.decode("latin1"):
        apu_type = "KRK"
    return apu_type


def set_environment_variable(apu_type):
    install_dir = os.environ["RYZEN_AI_INSTALLATION_PATH"]
    match apu_type:
        case "PHX/HPT":
            print("Setting environment for PHX/HPT")
            firmware_path = os.path.join(
                install_dir, "voe-4.0-win_amd64", "xclbins", "phoenix", "1x4.xclbin"
            )
            print(f"Firmware path: {firmware_path}")
            os.environ["XLNX_VART_FIRMWARE"] = firmware_path
            os.environ["NUM_OF_DPU_RUNNERS"] = "1"
            os.environ["XLNX_TARGET_NAME"] = "AMD_AIE2_Nx4_Overlay"
        case "STX" | "KRK":
            print("Setting environment for STX")
            firmware_path = os.path.join(
                install_dir,
                "voe-4.0-win_amd64",
                "xclbins",
                "strix",
                "AMD_AIE2P_Nx4_Overlay.xclbin",
            )
            print(f"Firmware path: {firmware_path}")
            os.environ["XLNX_VART_FIRMWARE"] = firmware_path
            os.environ["NUM_OF_DPU_RUNNERS"] = "1"


# デバッグ用の出力を追加
apu_type = get_apu_info()
print(f"Detected APU type: {apu_type}")
set_environment_variable(apu_type)

# ONNX Runtimeの初期化部分を確認
try:
    model_path = os.path.join(
        os.environ["RYZEN_AI_INSTALLATION_PATH"],
        "quicktest",
        "test_model.onnx",
    )
    print(f"Model path: {model_path}")
    sess_options = ort.SessionOptions()
    sess_options.graph_optimization_level = (
        ort.GraphOptimizationLevel.ORT_ENABLE_EXTENDED
    )
    session = ort.InferenceSession(model_path, sess_options)
    print("InferenceSession created successfully")
except Exception as e:
    print(f"Failed to create InferenceSession: {e}")


def preprocess_random_image():
    image_array = np.random.rand(3, 32, 32).astype(np.float32)
    return np.expand_dims(image_array, axis=0)


# inference on random image data
input_data = preprocess_random_image()
try:
    outputs = session.run(None, {"input": input_data})
except Exception as e:
    print(f"Failed to run the InferenceSession: {e}")
    sys.exit(1)  # Exit the program with a non-zero status to indicate an error

else:
    print("Test Passed")

関連記事: Ryzen AI 1.3 リリース記事

© 2024 Yanoasa Engineer

コメント

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