D

Deep Research Archives

  • new
  • |
  • threads
  • |
  • comments
  • |
  • show
  • |
  • ask
  • |
  • jobs
  • |
  • submit

Popular Stories

  • 공학적 반론: 현대 한국 운전자를 위한 15,000km 엔진오일 교환주기 해부2 points
  • Ray Kurzweil Influence, Predictive Accuracy, and Future Visions for Humanity2 points
  • 인지적 주권: 점술 심리 해체와 정신적 방어 체계 구축2 points
  • 성장기 시력 발달에 대한 종합 보고서: 근시의 원인과 빛 노출의 결정적 역할 분석2 points
  • The Scientific Basis of Diverse Sexual Orientations A Comprehensive Review2 points
  • New
  • |
  • Threads
  • |
  • Comments
  • |
  • Show
  • |
  • Ask
  • |
  • Jobs
  • |
  • Submit
  • |
  • Contact
Search…
threads
submit
login
  1. Home/
  2. Stories/
  3. AMD Ryzen™ AI Max+ 395 프로세서 및 XDNA 2 NPU 아키텍처 기반의 Python AI 애플리케이션 개발을 위한 심층 기술 보고서
▲

AMD Ryzen™ AI Max+ 395 프로세서 및 XDNA 2 NPU 아키텍처 기반의 Python AI 애플리케이션 개발을 위한 심층 기술 보고서

1 point by adroot1 2 days ago | flag | hide | 0 comments

AMD Ryzen™ AI Max+ 395 프로세서 및 XDNA 2 NPU 아키텍처 기반의 Python AI 애플리케이션 개발을 위한 심층 기술 보고서

1. 서론: 이기종 컴퓨팅(Heterogeneous Computing)과 AI PC의 도래

현대 컴퓨팅 환경은 중앙 처리 장치(CPU) 중심의 범용 연산에서 벗어나, 특정 워크로드에 최적화된 가속기를 활용하는 이기종 컴퓨팅(Heterogeneous Computing) 시대로 급격히 전환되고 있다. 특히 인공지능(AI), 그중에서도 딥러닝(Deep Learning)과 생성형 AI(Generative AI) 모델의 폭발적인 성장은 기존의 CPU 아키텍처만으로는 감당하기 어려운 연산량과 전력 소비 문제를 야기했다. 클라우드 데이터센터에 의존하던 AI 추론(Inference) 워크로드는 개인 정보 보호, 지연 시간(Latency) 최소화, 그리고 오프라인 가용성 확보를 위해 엣지(Edge) 디바이스, 즉 사용자의 PC로 이동하고 있다.

이러한 기술적 요구에 부응하여 AMD는 'Ryzen™ AI'라는 브랜드를 통해 x86 프로세서 생태계에 신경망 처리 장치(NPU, Neural Processing Unit)를 도입하였다. 본 보고서의 핵심 분석 대상인 AMD Ryzen™ AI Max+ 395 프로세서는 이러한 흐름의 정점에 위치한 고성능 모바일 워크스테이션용 프로세서로, 코드명 'Strix Halo'로 알려진 차세대 아키텍처를 기반으로 한다. 이 프로세서는 단순히 NPU를 탑재한 것을 넘어, CPU, GPU, NPU가 유기적으로 결합된 통합 AI 플랫폼을 제공한다.

본 연구 보고서는 AMD Ryzen™ AI Max+ 395 프로세서에 탑재된 하드웨어 가속기인 NPU(XDNA 2 아키텍처)를 Python 프로그래밍 환경에서 효과적으로 활용하는 방법을 포괄적으로 다룬다. 하드웨어의 아키텍처적 특성 분석에서 시작하여, 소프트웨어 스택의 구조, 환경 설정, 일반적인 머신러닝 모델의 변환 및 양자화, 그리고 최신 거대 언어 모델(LLM)의 구동에 이르기까지 개발자가 직면할 수 있는 모든 기술적 측면을 상세히 조명한다. 이를 통해 엔지니어와 연구자는 이 강력한 하드웨어의 잠재력을 100% 끌어내어 실무에 적용할 수 있는 구체적인 지침을 얻게 될 것이다.


2. 하드웨어 아키텍처 심층 분석: Ryzen AI Max+ 395와 XDNA 2

소프트웨어 최적화는 하드웨어에 대한 깊은 이해에서 시작된다. Ryzen AI Max+ 395에서 Python 코드가 실행될 때, 실제 하드웨어 레벨에서 어떤 일이 일어나는지 이해하는 것은 성능 병목을 해결하는 열쇠가 된다.

2.1 AMD Ryzen™ AI Max+ 395 (Strix Halo) 프로세서 개요

AMD Ryzen™ AI Max+ 395는 AMD의 모바일 프로세서 라인업 중 최상위 모델인 'Ryzen AI Max' 시리즈의 플래그십 제품이다. 이 프로세서는 기존의 모놀리식(Monolithic) 설계나 일반적인 노트북용 칩렛 구조를 넘어서는, 워크스테이션급 성능을 목표로 설계되었다.

사양 항목상세 스펙비고
제품명AMD Ryzen™ AI Max+ 395Strix Halo (Chiplet Design)
CPU 코어16 코어 / 32 스레드 (Zen 5)최대 부스트 클럭 5.1GHz, 기본 클럭 3.0GHz
GPUAMD Radeon™ 8060S Graphics40 Compute Units (RDNA 3.5), AI 가속 지원
NPUAMD Ryzen™ AI (XDNA 2 아키텍처)55 TOPS (NPU 단독), 8-bit 정수 연산 최적화 2
TDP55W (기본), 최대 120W+ 구성 가능고성능 랩탑 및 워크스테이션 타겟
메모리LPDDR5x-8000 / 256-bit 인터페이스AI 모델 구동의 핵심인 광대역폭 제공

Ryzen AI Max+ 395의 가장 큰 특징은 **NPU 단독으로 55 TOPS(Trillion Operations Per Second)**의 성능을 제공한다는 점이다. 이는 이전 세대인 Ryzen 7040 시리즈(XDNA 1, 약 10 TOPS) 대비 5배 이상, 직전 세대인 Ryzen 8040 시리즈(약 16 TOPS) 대비 3배 이상 향상된 성능이다. 여기에 40 CU에 달하는 대형 내장 GPU(iGPU)와 강력한 16코어 CPU가 더해져, 시스템 전체로는 100 TOPS를 상회하는 AI 처리 능력을 갖춘다.

2.2 XDNA 2 NPU 아키텍처: 공간적 데이터 흐름(Spatial Dataflow)

NPU를 이해하기 위해서는 기존 CPU/GPU와 근본적으로 다른 연산 방식을 이해해야 한다. CPU와 GPU는 기본적으로 폰 노이만(Von Neumann) 구조에 기반한 제어 흐름(Control Flow) 중심의 아키텍처를 가진다. 이는 데이터를 캐시와 메모리에서 끊임없이 읽고 쓰는 과정에서 병목 현상과 전력 소모를 유발한다. 반면, AMD의 XDNA 아키텍처는 FPGA 기술에 뿌리를 둔 공간적 데이터 흐름(Spatial Dataflow) 아키텍처를 채택하고 있다.

2.2.1 AI 엔진(AIE) 타일 구조

Ryzen AI NPU는 수십 개의 AI 엔진(AIE, AI Engine) 타일(Tile)들이 2차원 배열 형태로 배치된 구조를 가진다. 각 타일은 다음의 요소로 구성된다.

  • 벡터 프로세서(Vector Processor): VLIW(Very Long Instruction Word) 기반의 고성능 벡터 연산 유닛으로, 딥러닝의 핵심인 행렬 곱셈과 누적(MAC) 연산을 수행한다.
  • 로컬 데이터 메모리(Local Data Memory): 각 타일은 자신만의 전용 SRAM을 가지고 있다. 이는 외부 DDR 메모리로의 접근을 획기적으로 줄여주며, "데이터가 있는 곳에서 연산한다(Compute-near-Memory)"는 원칙을 실현한다.
  • 인터커넥트(Interconnect): 타일들은 상하좌우 인접 타일과 데이터를 직접 주고받을 수 있는 고속 스트림 스위치 네트워크로 연결되어 있다.

2.2.2 데이터 흐름의 결정론적 특성

Python 코드(예: ONNX Runtime)가 실행되면, 컴파일러는 신경망의 각 레이어를 물리적인 AIE 타일에 매핑(Mapping)한다. 데이터는 메모리를 거치지 않고 타일에서 타일로 물 흐르듯 이동(Streaming)한다. 예를 들어, 타일 A가 컨볼루션 연산을 수행한 결과가 즉시 타일 B로 전달되어 활성화 함수(ReLU) 처리를 거치는 식이다.
이러한 구조는 **결정론적 지연 시간(Deterministic Latency)**을 보장한다. 캐시 미스(Cache Miss)나 스레드 스케줄링에 의한 지연 변동이 거의 없기 때문에, 실시간 비디오 처리나 음성 인식과 같이 일정한 응답 속도가 중요한 애플리케이션에서 CPU/GPU 대비 월등한 효율을 보여준다.

2.2.3 정밀도(Precision)와 XDNA 2의 진화

XDNA 1 세대에서는 주로 정수형(Int8, Int16, Int32) 연산에 집중되었으나, Ryzen AI Max+ 395에 탑재된 XDNA 2는 Block Floating Point 16 (BFP16) 형식을 하드웨어적으로 지원한다. 4 BFP16은 부동소수점의 정확도와 정수 연산의 효율성을 결합한 포맷으로, 개발자가 복잡한 양자화(Quantization) 과정을 거치지 않고도 높은 성능을 낼 수 있게 돕는다. 그러나 현재 시점에서 최고의 성능(55 TOPS)을 달성하기 위해서는 여전히 Int8 양자화가 표준적인 방법론으로 권장된다.


3. 소프트웨어 스택 및 개발 환경 아키텍처

하드웨어가 아무리 강력해도 이를 제어할 소프트웨어 스택이 없다면 무용지물이다. AMD는 'Ryzen AI Software'라는 이름으로 하드웨어 드라이버부터 상위 레벨 Python SDK까지 포괄하는 솔루션을 제공한다. 이 스택의 구조를 이해하는 것은 설치 과정에서 발생하는 오류를 해결하는 데 필수적이다.

3.1 Ryzen AI 소프트웨어 계층 구조 (Layered Architecture)

소프트웨어 스택은 크게 4단계 계층으로 구분된다.

  1. 하드웨어 및 펌웨어 계층 (Hardware & Firmware)
    • NPU Hardware: 실리콘 레벨의 연산 장치.
    • Firmware (XCLBIN): NPU의 로직을 정의하는 바이너리 파일이다. FPGA의 비트스트림과 유사한 개념으로, NPU가 어떤 연산을 수행할 수 있는지 정의한다. 시스템 부팅 시 또는 드라이버 로드 시 NPU에 로드된다.
  2. 드라이버 및 커널 계층 (Kernel & Driver)
    • MCDM Driver (Microsoft Compute Driver Model): Windows 환경에서 NPU를 제어하는 핵심 드라이버이다. Microsoft와 AMD가 협력하여 개발한 표준으로, NPU를 마치 그래픽 카드처럼 Windows 작업 관리자에서 모니터링하고 전원을 관리할 수 있게 한다.5
    • IPU Driver: 하드웨어와 OS 사이의 저수준 통신을 담당한다.
  3. 런타임 및 컴파일러 계층 (Runtime & Compiler)
    • XRT (Xilinx Runtime): 호스트(CPU)와 디바이스(NPU) 간의 데이터 전송 및 커널 실행을 관리하는 런타임 라이브러리이다.
    • Vitis AI Execution Provider (VOE): 이 보고서에서 가장 중요한 미들웨어이다. ONNX Runtime의 플러그인 형태로 작동하며, ONNX 모델 그래프를 분석하여 NPU 가속이 가능한 서브그래프(Subgraph)를 추출하고 컴파일한다.
  4. 애플리케이션 및 프레임워크 계층 (Application & Framework)
    • ONNX Runtime: 산업 표준 추론 엔진으로, Python 개발자가 NPU에 접근하는 주된 통로이다.
    • Lemonade SDK (Ryzen AI LLM SDK): LLM 구동을 위해 ONNX Runtime을 한 번 더 추상화한 고수준 API이다.6
    • PyTorch / TensorFlow: 모델 학습 및 내보내기(Export) 도구로 사용된다.

3.2 개발 환경 구축 (Step-by-Step Installation)

Ryzen AI Max+ 395에서 Python으로 NPU를 활용하기 위해서는 정확한 순서와 버전에 맞는 설치가 요구된다. 다음은 검증된 설치 절차이다.

단계 1: 시스템 필수 요구사항 확인

  • OS: Windows 11 (버전 22H2 빌드 22621.3527 이상 권장). 최신 Windows 업데이트가 필수적인데, 이는 MCDM 드라이버 지원 및 작업 관리자 통합 때문이다.
  • BIOS: 최신 BIOS 업데이트를 통해 NPU가 활성화되어 있는지 확인해야 한다. 일부 시스템에서는 BIOS에서 NPU를 끄거나 켤 수 있다.

단계 2: NPU 드라이버 설치

가장 먼저 하드웨어 드라이버를 설치해야 한다. AMD 공식 드라이버 페이지 또는 랩탑 제조사 페이지에서 NPU Driver (IPU Driver라고도 함)를 다운로드한다.

  • 버전 확인: 설치 후 작업 관리자(Task Manager) -> 성능 탭을 열었을 때 'NPU' 그래프가 보여야 한다.7 만약 보이지 않는다면 드라이버가 제대로 로드되지 않았거나 Windows 버전이 낮은 것이다. 장치 관리자에서 'AMD IPU Device'가 정상 작동 중인지 확인한다.
  • 설치 파일: 보통 npu_sw_installer.exe 형태의 파일로 제공된다. 관리자 권한으로 실행해야 한다.8

단계 3: 개발 도구 및 의존성 설치

Ryzen AI Software는 내부적으로 모델 컴파일을 위해 C++ 컴파일러를 사용한다.

  1. Visual Studio 2022: 설치 시 'C++를 사용한 데스크톱 개발(Desktop development with C++)' 워크로드를 반드시 체크해야 한다.
  2. CMake: 버전 3.26 이상을 설치하고 시스템 PATH에 추가한다.
  3. Miniconda 또는 Anaconda: Python 환경 관리를 위해 필수적이다.

단계 4: Ryzen AI Software (Python 패키지) 설치

AMD는 설치 편의를 위해 모든 라이브러리를 포함한 설치 관리자(ryzenai-lt-1.x.x.exe)를 제공한다.

  1. AMD Ryzen AI Software 다운로드 페이지에서 최신 설치 파일(예: ryzenai-lt-1.6.1.exe)을 받는다.
  2. 설치 프로그램을 실행하면 자동으로 Conda 환경(예: ryzen-ai-1.6.1)을 생성하고 필요한 패키지(onnxruntime, voe, xrt 등)를 설치한다.8
  3. 설치 완료 후 conda activate ryzen-ai-1.6.1 명령어로 환경을 활성화한다.

수동 설치 (고급 사용자용):
특정 Python 버전을 사용해야 한다면 수동 설치가 가능하다. AMD 전용 PyPI 저장소를 이용해야 함에 유의한다.

Bash

conda create -n my_npu_env python=3.10
conda activate my_npu_env
pip install lemonade-sdk[dev,oga-ryzenai] --extra-index-url=https://pypi.amd.com/simple
pip install onnxruntime-vitisai --extra-index-url=https://pypi.amd.com/simple
pip install voe --extra-index-url=https://pypi.amd.com/simple

주의: onnxruntime을 일반 pip install onnxruntime으로 설치하면 CPU 버전이 설치되어 NPU를 사용할 수 없다. 반드시 AMD 채널을 이용하거나 제공된 whl 파일을 사용해야 한다.


4. 개발 방법론 I: 일반 AI 모델 (ONNX 및 양자화)

Ryzen AI NPU를 활용하는 가장 표준적인 방법은 ONNX(Open Neural Network Exchange) 포맷을 사용하는 것이다. 이는 PyTorch, TensorFlow 등 다양한 프레임워크에서 학습된 모델을 NPU가 이해할 수 있는 공통 언어로 변환하는 과정이다.

4.1 워크플로우 개요

  1. 모델 학습 (Training): PyTorch/TensorFlow로 모델 학습.
  2. ONNX 변환 (Export): 학습된 모델을 .onnx 파일로 변환.
  3. 양자화 (Quantization): Float32 모델을 Int8/UInt8로 변환 (가장 중요).
  4. 추론 (Inference): Python 스크립트에서 VitisAIExecutionProvider를 호출하여 실행.

4.2 양자화 (Quantization): 성능의 핵심

Ryzen AI NPU(XDNA)는 정수 연산에서 압도적인 효율을 발휘한다. 물론 FP16 등을 지원하지만, 최대 성능(55 TOPS)을 달성하고 메모리 대역폭을 절약하기 위해서는 Int8 양자화가 필수적이다. 양자화는 32비트 부동소수점 데이터를 8비트 정수로 매핑하는 과정으로, 모델 크기를 1/4로 줄이고 연산 속도를 높인다.

AMD는 두 가지 양자화 도구를 지원한다:

  1. Vitis AI Quantizer (vai_q_onnx): AMD가 직접 제공하는 도구로, XDNA 아키텍처에 가장 최적화된 결과물을 만든다.9
  2. Microsoft Olive: 다양한 하드웨어 백엔드를 지원하는 자동화된 최적화 도구로, 내부적으로 Vitis AI Quantizer를 호출할 수 있다.10

[실전 예제] Vitis AI Quantizer를 이용한 모델 양자화 Python 코드

다음은 사전 학습된 ResNet 모델을 NPU용으로 양자화하는 전체 코드이다.

Python

import onnx
from onnxruntime.quantization import CalibrationDataReader, QuantType, QuantFormat
import vai_q_onnx
import numpy as np
import os
from PIL import Image

# 1. 보정(Calibration) 데이터 리더 클래스 구현
# 양자화를 위해서는 실제 데이터의 분포(Distribution)를 파악해야 합니다.
# 이를 위해 소량(약 100~500장)의 샘플 이미지를 모델에 통과시키는 과정이 필요합니다.
class ResNetDataReader(CalibrationDataReader):
def __init__(self, image_folder, model_path):
self.image_folder = image_folder
self.preprocess_flag = True
self.enum_data_dicts = iter()
self.datasource = self._create_datasource()

def \_create\_datasource(self):  
    \# 실제 환경에서는 이미지 파일을 읽어 전처리(Resize, Normalize)를 수행해야 함  
    \# 여기서는 예시를 위해 더미 데이터를 생성하지만, 실제로는  
    \# OpenCV나 PIL을 사용하여 모델 입력 규격(예: 224x224, float32)에 맞춰야 함.  
    import glob  
    images \= glob.glob(os.path.join(self.image\_folder, "\*.jpg"))  
    for image\_path in images\[:100\]: \# 100장의 이미지만 사용  
        \# 전처리 로직 (예시)  
        img \= Image.open(image\_path).resize((224, 224))  
        img\_data \= np.array(img).transpose(2, 0, 1).astype(np.float32) / 255.0  
        img\_data \= np.expand\_dims(img\_data, axis=0) \# Batch 차원 추가  
        yield {'input': img\_data} \# 'input'은 ONNX 모델의 입력 노드 이름이어야 함

def get\_next(self):  
    return next(self.datasource, None)

# 2. 경로 설정
input_model_path = "resnet50_float.onnx"
output_model_path = "resnet50_quantized_for_npu.onnx"
calibration_image_folder = "./calib_data"

# 3. 양자화 실행
print("양자화 시작... (이 과정은 데이터셋 크기에 따라 시간이 소요됩니다)")
dr = ResNetDataReader(calibration_image_folder, input_model_path)

vai_q_onnx.quantize_static(
model_input=input_model_path,
model_output=output_model_path,
calibration_data_reader=dr,
quant_format=QuantFormat.QDQ, # NPU 컴파일러는 QDQ(Quantize-DeQuantize) 포맷을 선호함
calibrate_method=vai_q_onnx.PowerOfTwoMethod.MinMSE, # 보정 알고리즘
activation_type=QuantType.QUInt8, # XDNA는 활성화 함수로 Unsigned Int8을 선호
weight_type=QuantType.QInt8, # 가중치는 Signed Int8 사용
enable_dpu=True, # NPU(DPU) 호환성 검사 및 최적화 활성화
extra_options={
'ActivationSymmetric': True, # 대칭 양자화 옵션 (하드웨어 효율성 증대)
}
)
print(f"양자화 완료: {output_model_path}")

코드 분석 및 인사이트:

  • CalibrationDataReader: 이 클래스는 필수적이다. NPU는 데이터의 범위(Min/Max)를 알아야 정수 변환 시 스케일(Scale)을 정할 수 있다. 실제 추론할 데이터와 유사한 분포를 가진 이미지를 사용해야 정확도가 떨어지지 않는다.
  • QuantType.QUInt8: XDNA 아키텍처의 특징 중 하나는 활성화(Activation) 값 처리에 있어 부호 없는 8비트 정수(QUInt8)가 효율적이라는 점이다. 반면 가중치(Weight)는 부호 있는 8비트 정수(QInt8)를 주로 사용한다.9
  • enable_dpu=True: 이 플래그는 양자화 도구가 생성된 연산자들이 AMD DPU(Deep Learning Processing Unit, 즉 NPU)에서 지원 가능한지 체크하고, 지원되지 않는 연산자는 CPU로 폴백(Fallback)하도록 그래프를 구성하게 한다.

4.3 NPU 추론 구현 (Inference with ONNX Runtime)

양자화된 모델이 준비되었다면, 이제 Python에서 이를 실행할 차례이다. onnxruntime 라이브러리의 VitisAIExecutionProvider를 사용하는 것이 핵심이다.

Python

import onnxruntime as ort
import numpy as np
import os
import time

# 1. 설정 파일 (vaip_config.json) 준비
# NPU 컴파일러에게 캐시 경로 등을 알려주기 위한 설정 파일입니다.
config_file_path = "vaip_config.json"
with open(config_file_path, "w") as f:
f.write('{"cache_dir": "model_cache", "cache_key": "resnet_npu_v1"}')

# 2. 실행 공급자(Provider) 설정
# VitisAIExecutionProvider를 최우선으로 설정합니다.
# CPUExecutionProvider는 NPU가 처리 못하는 연산을 대비한 백업입니다.
providers = ['VitisAIExecutionProvider', 'CPUExecutionProvider']
provider_options =

model_path = "resnet50_quantized_for_npu.onnx"

print("모델 로딩 및 컴파일 중... (첫 실행 시 수 분 소요될 수 있음)")
start_load = time.time()
session = ort.InferenceSession(model_path, providers=providers, provider_options=provider_options)
end_load = time.time()
print(f"모델 로드 완료: {end_load - start_load:.2f}초")

# 3. 입력 데이터 준비
# 예시용 랜덤 데이터. 실제로는 전처리된 이미지를 사용해야 함.
input_name = session.get_inputs().name
input_shape = session.get_inputs().shape
dummy_input = np.random.uniform(0, 1, input_shape).astype(np.float32)

# 4. 추론 실행
print("추론 실행 중...")
start_inf = time.time()
outputs = session.run(None, {input_name: dummy_input})
end_inf = time.time()

print(f"추론 완료. 결과 형상: {outputs.shape}")
print(f"소요 시간: {(end_inf - start_inf)*1000:.2f} ms")

핵심 포인트:

  • 최초 컴파일 지연 (JIT Compilation): ort.InferenceSession을 처음 실행할 때, Vitis AI 컴파일러가 ONNX 그래프를 분석하고 NPU용 바이너리로 컴파일하는 과정이 진행된다. 이는 모델 크기에 따라 수 초에서 수 분이 걸릴 수 있다.
  • 캐싱 (Caching): cacheDir과 cache_key를 설정하면, 컴파일된 바이너리가 디스크에 저장된다. 두 번째 실행부터는 저장된 캐시를 불러오므로 로딩 시간이 획기적으로 단축된다.11

5. 개발 방법론 II: 생성형 AI 및 LLM (Lemonade SDK)

Ryzen AI Max+ 395는 LLM(Large Language Model) 구동에 있어 강력한 잠재력을 가진다. 특히 55W 이상의 TDP와 고대역폭 메모리, 그리고 강력한 iGPU와 NPU의 조합은 로컬 챗봇이나 코딩 어시스턴트를 구동하기에 충분하다. 그러나 ONNX 변환 및 양자화 과정은 LLM과 같은 거대 모델에는 매우 번거롭다. 이를 해결하기 위해 AMD는 Lemonade SDK (또는 Ryzen AI LLM SDK)를 제공한다.6

5.1 Lemonade SDK와 하이브리드 실행 (Hybrid Execution)

Lemonade SDK는 개발자가 복잡한 하드웨어 설정을 몰라도 Python 코드 몇 줄로 LLM을 실행할 수 있게 해주는 고수준 API이다. Hugging Face의 transformers 라이브러리와 유사한 인터페이스를 제공한다.

Ryzen AI Max+ 395를 위한 하이브리드 전략:
LLM 추론은 크게 두 단계로 나뉜다.

  1. Prefill (프롬프트 처리): 사용자의 입력을 한꺼번에 처리하는 단계. 연산 집약적(Compute-bound)이다.
  2. Decode (토큰 생성): 한 글자씩 생성하는 단계. 메모리 대역폭 집약적(Memory-bound)이다.

Lemonade SDK의 'Hybrid' 모드는 이 두 단계를 NPU와 iGPU(Radeon 8060S)에 최적으로 분배한다. 예를 들어, 반응 속도(Time-to-First-Token)가 중요한 단계는 NPU가, 대량의 연산이 필요한 단계는 iGPU가 담당하는 식이다.12

5.2 [실전 예제] Python으로 Llama 3 챗봇 구현하기

다음은 Lemonade SDK를 사용하여 Ryzen AI Max+ 395에서 Llama 3.2 모델을 구동하는 전체 코드이다.

Python

# 사전 설치 필요:
# pip install lemonade-sdk[dev,oga-ryzenai] --extra-index-url=https://pypi.amd.com/simple

import time
from lemonade.api import from_pretrained

# 1. 모델 선택 및 로드
# AMD는 Hugging Face에 Ryzen AI 최적화 모델(AWQ 양자화 등)을 제공합니다.
# 'oga-hybrid' 레시피는 NPU와 iGPU를 모두 활용하는 모드입니다.
model_id = "amd/Llama-3.2-1B-Instruct-awq-g128-int4-asym-fp16-onnx-hybrid"

print(f"모델 '{model_id}' 로딩 중... (Hybrid Mode)")
# Ryzen AI Max+ 395의 iGPU와 NPU를 동시에 활용
model, tokenizer = from_pretrained(
model_id,
recipe="oga-hybrid" # NPU 단독 사용 시 "oga-npu" 사용 가능 (모델 지원 여부 확인 필요)
)

# 2. 대화형 프롬프트 구성
messages =

# 3. 입력 데이터 처리 (Tokenization)
input_text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
input_ids = tokenizer(input_text, return_tensors="pt").input_ids

# 4. 텍스트 생성 (Generation)
print("답변 생성 시작...")
start_time = time.time()

# max_new_tokens: 생성할 최대 길이
# do_sample=True: 창의적인 답변 생성을 위해 샘플링 활성화
output_ids = model.generate(
input_ids,
max_new_tokens=500,
do_sample=True,
temperature=0.7,
top_p=0.9
)

end_time = time.time()
elapsed = end_time - start_time

# 5. 결과 디코딩 및 성능 측정
generated_text = tokenizer.decode(output_ids[input_ids.shape:], skip_special_tokens=True)
token_count = len(output_ids) - input_ids.shape
tps = token_count / elapsed

print("-" * 50)
print(f"[AI 답변]:\n{generated_text}")
print("-" * 50)
print(f"생성 속도: {tps:.2f} tokens/sec (총 {token_count} 토큰)")

지원 모델 및 확장성:
Lemonade SDK는 Llama 2/3, Qwen, Mistral 등 다양한 오픈소스 모델을 지원한다. 사용 가능한 모델 목록은 lemonade-server.ai 문서나 Hugging Face의 AMD 컬렉션에서 확인할 수 있다.14 특히 Ryzen AI Max+ 395는 메모리가 넉넉하다면 7B(70억 파라미터) 이상의 모델도 쾌적하게 구동할 수 있다.


6. 고급 주제: 프로파일링 및 성능 최적화

코드가 실행된다고 해서 NPU가 100% 활용되고 있는 것은 아니다. 실제로 데이터가 NPU로 흐르는지, 아니면 CPU로 폴백(Fallback)되어 느리게 실행되는지 확인해야 한다.

6.1 NPU 모니터링: xrt-smi

엔비디아 GPU에 nvidia-smi가 있다면, AMD NPU에는 xrt-smi가 있다. 이 도구는 커맨드 라인 인터페이스(CLI)를 통해 NPU의 상태를 점검한다.15

  • 위치: C:\Windows\System32\AMD (드라이버 설치 시 자동 포함)
  • 주요 명령어:
    • xrt-smi examine: NPU 장치가 OS에 정상적으로 인식되었는지 확인.
    • xrt-smi examine --report platform: 현재 로드된 XCLBIN(펌웨어) 버전과 전력 상태 확인.
    • xrt-smi monitor: (지원되는 경우) 실시간 사용률 모니터링.

6.2 상세 프로파일링: AI Analyzer

onnxruntime 세션 옵션에서 ai_analyzer_profiling을 활성화하면, 프로그램 실행 중 상세 로그가 생성된다.16

Python

provider_options =

실행 후 생성된 로그 폴더를 대상으로 aianalyzer <로그폴더> 명령을 실행하면, 웹 브라우저가 열리며 그래프 시각화 화면이 나타난다. 여기서 각 레이어가 **CPU(파란색)**로 실행되었는지 **NPU(초록색/붉은색)**로 실행되었는지 색상으로 구분하여 보여준다. 만약 NPU로 실행되길 기대했던 레이어가 CPU로 표시된다면, 해당 레이어의 연산자가 NPU를 지원하지 않거나 양자화가 제대로 되지 않은 것이다.


7. 문제 해결 가이드 (Troubleshooting)

개발 과정에서 빈번하게 발생하는 문제와 해결책을 정리한다.

증상 및 오류 메시지원인 분석해결 방안
Provider 'VitisAIExecutionProvider' not foundonnxruntime 패키지가 표준 버전(CPU용)으로 설치됨. 또는 DLL 경로 문제.pip uninstall onnxruntime 후 AMD 전용 URL을 통해 onnxruntime-vitisai 재설치.17
NPU 그래프가 작업 관리자에 안 보임MCDM 드라이버 미설치 또는 Windows 버전 구형.최신 NPU 드라이버 재설치 (npu_sw_installer.exe). Windows 업데이트 실행.19
초기 실행 속도가 매우 느림Vitis AI 컴파일러의 모델 컴파일 과정 (정상).config_file에 cache_dir을 설정하여 컴파일 결과를 저장하고 재사용.11
Fallback to CPU 경고 다수 발생모델에 지원되지 않는 연산자 포함 또는 Float32 잔존.vai_q_onnx로 전체 모델 재양자화. 지원되지 않는 특정 연산자는 CPU 할당을 명시적으로 허용.
ImportError: DLL load failedVisual C++ 런타임 또는 의존성 부족.Visual Studio 2022 재배포 가능 패키지 설치. Conda 환경 내 패키지 버전 충돌 확인.

8. 결론

AMD Ryzen™ AI Max+ 395 프로세서는 강력한 CPU, iGPU, 그리고 55 TOPS 성능의 XDNA 2 NPU를 결합하여 로컬 AI 개발의 새로운 지평을 열었다. Python 개발자는 Vitis AI Quantizer와 ONNX Runtime을 통해 기존의 딥러닝 모델을 NPU에 최적화하여 배포할 수 있으며, Lemonade SDK를 통해 최신 LLM을 하이브리드 방식으로 효율적으로 구동할 수 있다.

성공적인 활용을 위해서는 **양자화(Quantization)**에 대한 이해와 올바른 소프트웨어 스택(드라이버, 미들웨어) 설치가 선행되어야 한다. 초기 설정의 복잡함이 존재하지만, 한 번 구축된 NPU 파이프라인은 CPU 대비 압도적인 전력 효율과 결정론적 지연 시간을 제공하여, 실시간 AI 애플리케이션의 품질을 혁신적으로 향상시킬 것이다. 개발자들은 본 보고서에 수록된 코드 예제와 디버깅 가이드를 바탕으로, Ryzen AI 플랫폼 상에서 자신만의 AI 솔루션을 구축해 보기를 강력히 권장한다.

引用文献

  1. AMD Ryzen AI 9 HX 375 Specs | TechPowerUp CPU Database, 11月 29, 2025にアクセス、 https://www.techpowerup.com/cpu-specs/ryzen-ai-9-hx-375.c3815
  2. AMD Ryzen™ AI 9 HX 375, 11月 29, 2025にアクセス、 https://www.amd.com/en/products/processors/laptop/ryzen/ai-300-series/amd-ryzen-ai-9-hx-375.html
  3. AMD Ryzen™ AI Software, 11月 29, 2025にアクセス、 https://www.amd.com/en/developer/resources/ryzen-ai-software.html
  4. Upcoming Windows Task Manager Update Will Add NPU Monitoring For Ryzen 8040 Series Processors - AMD, 11月 29, 2025にアクセス、 https://www.amd.com/en/blogs/2024/upcoming-windows-task-manager-update-will-add-npu-.html
  5. High-Level Python SDK — Ryzen AI Software 1.6.1 documentation, 11月 29, 2025にアクセス、 https://ryzenai.docs.amd.com/en/latest/llm/high_level_python.html
  6. How to Identify AI-Enabled Windows Computers | Dell Fiji, 11月 29, 2025にアクセス、 https://www.dell.com/support/kbdoc/en-fj/000223944/how-to-identify-ai-enabled-windows-computers
  7. Installation Instructions — Ryzen AI Software 1.6.1 documentation, 11月 29, 2025にアクセス、 https://ryzenai.docs.amd.com/en/latest/inst.html
  8. Vitis AI Quantizer for ONNX — Ryzen AI Software 1.3 documentation, 11月 29, 2025にアクセス、 https://ryzenai.docs.amd.com/en/1.3/vai_quant/vai_q_onnx.html
  9. Vitis AI Quantizer for Olive — Ryzen AI Software 1.0.1 documentation, 11月 29, 2025にアクセス、 https://ryzenai.docs.amd.com/en/ryzen-ai-1.0.1/olive_quant.html
  10. Vitis AI Execution Provider - AMD - ONNX Runtime, 11月 29, 2025にアクセス、 https://onnxruntime.ai/docs/execution-providers/Vitis-AI-ExecutionProvider.html
  11. Accelerate Fine-Tuned LLMs Locally on AMD Ryzen AI NPU & IGPU, 11月 29, 2025にアクセス、 https://www.amd.com/en/developer/resources/technical-articles/accelerate-llms-locally-on-amd-ryzen-ai-npu-and-igpu.html
  12. Model Pipelining on NPU and GPU using Ryzen™ AI Software - AMD, 11月 29, 2025にアクセス、 https://www.amd.com/en/developer/resources/technical-articles/model-pipelining-on-npu-and-gpu-using-ryzen-ai-software.html
  13. Models List - Lemonade Server Documentation, 11月 29, 2025にアクセス、 https://lemonade-server.ai/docs/server/server_models/
  14. NPU Management Interface — Ryzen AI Software 1.3 documentation, 11月 29, 2025にアクセス、 https://ryzenai.docs.amd.com/en/1.3/xrt_smi.html
  15. AI Analyzer — Ryzen AI Software 1.6.1 documentation, 11月 29, 2025にアクセス、 https://ryzenai.docs.amd.com/en/latest/ai_analyzer.html
  16. Where to best post a comment about ryzen ai 1.5.1?, 11月 29, 2025にアクセス、 https://pcforum.amd.com/s/question/0D5Pd00000lWg6BKAS/where-to-best-post-a-comment-about-ryzen-ai-151
  17. int8 demo breaks 1.5.1 quicktest and using npus · Issue #231 · amd/RyzenAI-SW - GitHub, 11月 29, 2025にアクセス、 https://github.com/amd/RyzenAI-SW/issues/231
  18. NPU load not visible in the Task Manager : r/AMDLaptops - Reddit, 11月 29, 2025にアクセス、 https://www.reddit.com/r/AMDLaptops/comments/1d2132y/npu_load_not_visible_in_the_task_manager/

Related Topics

Latest StoriesMore story
No comments to show