Ultralytics YOLO27: 대기자 명단에 등록해 주십시오.
Get Started

Ultralytics YOLO, ROCm, MIGraphX를 사용한 AMD GPU 학습 및 추론#

Linux x86_64 전용

이 가이드는 AMD GPU 커널 드라이버(amdgpu)가 설치된 Linux x86_64 호스트를 대상으로 하며, 아래의 모든 명령은 Linux 셸에서 실행해야 합니다. MIGraphX 실행 공급자는 Python 3.11 이상용 Linux x86_64 휠로만 제공되므로 네이티브 Windows는 지원되지 않으며, Windows Subsystem for Linux(WSL2)는 아직 검증되지 않았습니다.

Ultralytics YOLO는 AMD의 오픈 GPU 컴퓨팅 스택인 ROCm을 통해 AMD Instinct 및 지원되는 Radeon GPU에서 실행됩니다. PyTorch ROCm 빌드를 사용하면 다른 GPU에서와 동일한 device=0 인수로 .pt 모델을 학습, 검증, 예측할 수 있으며 코드를 변경할 필요가 없습니다.

배포하려면 학습된 모델을 ONNX로 내보낸 다음 AMD의 그래프 최적화 및 추론 엔진인 MIGraphX를 통해 실행하세요. Ultralytics ONNX 백엔드는 ROCm을 감지하고 ONNX Runtime MIGraphXExecutionProvider을 자동으로 선택하므로, NVIDIA GPU에서 실행되는 predict 호출을 AMD GPU에서도 그대로 사용할 수 있습니다. Ultralytics의 예약된 지속적 통합 작업은 AMD GPU 하드웨어에서 모든 작업의 ONNX 내보내기와 MIGraphX 추론을 실행합니다.

설치#

호스트에 AMD GPU 커널 드라이버(amdgpu / /dev/kfd)가 이미 설치되어 있으면, Python 스택은 AMD의 ROCm 휠 인덱스에서 pip을 통해 전부 설치되므로 PyTorch, 플러그인 또는 ROCm 런타임 라이브러리에 apt 패키지나 루트 액세스가 필요하지 않습니다.

설치

GPU 아키텍처를 감지한 다음(예: Strix Halo의 gfx1151), 필요한 PyTorch 커널만 설치하세요:

# Read the GPU architecture from the amdgpu driver, e.g. device-gfx1151
GPU_ARCH=$(grep -rhs '^gfx_target_version' /sys/class/kfd/kfd/topology/nodes | awk '$2 {printf "device-gfx%d%d%x\n", int($2/10000), int($2/100)%100, $2%100}' | sort -u | paste -sd, -)

# ROCm PyTorch + torchvision for the detected architecture
pip install "torch[${GPU_ARCH:?No AMD GPU found}]" "torchvision[$GPU_ARCH]" --index-url https://stable.repo.amd.com/rocm/whl-next/

# Ultralytics
pip install ultralytics

Ultralytics는 첫 ONNX 내보내기 시 onnx을 자동으로 설치합니다. ROCm 시스템에서 처음 ONNX 추론을 실행할 때는 MIGraphX 실행 공급자 플러그인(onnxruntime-ep-migraphx 참조)과 플러그인이 로드하는 MIGraphX 런타임 라이브러리(migraphx-libs 참조)도 함께 설치하며, 두 구성 요소는 함께 테스트된 버전으로 고정됩니다. 플러그인은 Linux x86_64에서 Python 3.11 이상용으로만 제공됩니다. 그 외 Python 버전이나 아키텍처를 사용하거나 플러그인 없이 YOLO_AUTOINSTALL=false를 사용하면 ONNX 추론이 경고와 함께 CPU로 대체됩니다. 자세한 안내와 모범 사례는 YOLO26 설치 가이드를 참조하세요. 문제가 발생하면 일반적인 문제 가이드를 확인하세요.

학습하거나 내보내기 전에 PyTorch에서 AMD GPU를 인식하는지 확인하세요:

import torch

print(torch.cuda.is_available())  # 정상적으로 ROCm이 설치된 경우 True
print(torch.cuda.get_device_name(0))  # AMD GPU 이름(예: AMD Radeon 8060S)
print(torch.version.hip)  # ROCm PyTorch 빌드의 HIP 버전. CUDA 또는 CPU 빌드에서는 None

PyTorch ROCm으로 AMD GPU에서 학습#

.pt 모델의 네이티브 학습, 검증, 예측은 아래의 MIGraphX 추론 경로와 별개로 PyTorch ROCm을 통해 AMD GPU에서 실행됩니다. 설치에 설명된 대로 PyTorch ROCm 빌드를 설치하고, 다른 Ultralytics 학습 실행과 동일한 장치 인수를 사용하세요:

Ultralytics에서 AMD GPU가 CUDA로 표시되는 이유

PyTorch ROCm 빌드는 내부적으로 HIP를 사용하지만 의도적으로 torch.cuda 인터페이스를 재사용합니다. 따라서 torch.cuda.is_available()은 True를 반환하고, AMD GPU는 표준 CUDA 형식 ID로 지정됩니다. AMD GPU에는 device=0 또는 device=cuda:0를 사용하세요. rocm는 PyTorch 장치 유형이 아닙니다. 자세한 내용은 PyTorch HIP 의미 체계를 참조하세요.

ROCm 학습
from ultralytics import YOLO

model = YOLO("yolo26n.pt")

# PyTorch ROCm에서 처음으로 인식한 AMD GPU로 학습
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=0)

# AMD GPU 두 개를 사용해 학습
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=[0, 1])

.pt 모델의 검증과 예측에도 동일한 장치 선택을 사용합니다:

yolo detect val model=path/to/best.pt data=coco8.yaml device=0
yolo predict model=path/to/best.pt source=path/to/image.jpg device=0
ROCm에서 혼합 정밀도 사용

Ultralytics는 기본적으로 AMP를 활성화하며, 사전 학습 검사에서 혼합 정밀도 결과가 전체 정밀도 결과와 다르게 나타나면 AMP를 자동으로 비활성화합니다. ROCm AMP 동작은 PyTorch 및 ROCm 버전에 따라 달라질 수 있습니다. 실행 중에도 NaN 손실이나 0 mAP가 발생하면 amp=False을 사용해 학습하세요:

yolo detect train data=coco8.yaml model=yolo26n.pt device=0 amp=False

MIGraphX를 사용한 내보내기 및 추론#

ONNX Runtime은 플러그형 실행 공급자(EP)를 통해 하나의 ONNX 모델을 여러 하드웨어 백엔드에서 실행하는 크로스 플랫폼 추론 엔진입니다. 각 EP는 ONNX 그래프를 특정 가속기에 매핑합니다. NVIDIA GPU에는 CUDA, Apple 실리콘에는 CoreML, ROCm 기반 AMD GPU에는 MIGraphX를 사용하며, MIGraphX는 onnxruntime-ep-migraphx 플러그인으로 제공되고 그래프를 GPU에 최적화된 프로그램으로 컴파일합니다.

MIGraphX 추론은 표준 ONNX 내보내기를 사용합니다. 모델을 ONNX(format="onnx")로 내보내면 Ultralytics 추론이 MIGraphXExecutionProvider 백엔드를 자동으로 사용하여 AMD GPU에서 ONNX 모델을 실행합니다.

MIGraphX 추론의 주요 기능#

  • 공급자 자동 선택: ROCm 호스트에서는 ONNX 백엔드가 플러그인을 등록하고 코드 변경 없이 MIGraphXExecutionProvider을 선택합니다. 플러그인이 없거나 로드에 실패하면 경고와 함께 추론이 CPU로 대체됩니다.
  • 그래프 최적화: MIGraphX는 AMD GPU 아키텍처에 맞춰 연산자 융합, 메모리 계획, 커널 선택을 적용합니다.
  • 제로 카피 IO 바인딩: DLPack 프로토콜을 통해 입력과 출력을 GPU 텐서에 직접 바인딩하여 추론 중 호스트와 GPU 간 왕복을 방지합니다.
  • 정밀도 옵션: FP32로 실행하거나 FP16 ONNX 모델을 내보내 정밀도를 낮춘 추론을 수행할 수 있습니다.
  • 이식 가능한 아티팩트: 단일 .onnx 파일을 CPU, NVIDIA GPU, AMD GPU에서 실행할 수 있어 하나의 내보내기 결과물로 여러 플랫폼을 대상으로 할 수 있습니다.
  • 재현 가능한 배포: 전체 스택(ROCm PyTorch, MIGraphX 플러그인 및 라이브러리)은 AMD의 ROCm 휠 인덱스에서 pip을 통해 설치됩니다.

지원 작업#

MIGraphX 추론은 Ultralytics의 7가지 작업을 모두 지원합니다. 시맨틱 세그멘테이션과 깊이 추정은 해당 헤드를 제공하는 유일한 제품군인 YOLO26에서만 사용할 수 있습니다.

작업YOLOv8YOLO11YOLO26
탐지✅✅✅
세그멘테이션✅✅✅
시맨틱❌❌✅
깊이❌❌✅
분류✅✅✅
포즈✅✅✅
OBB✅✅✅

사용법#

사용 안내를 자세히 살펴보기 전에 Ultralytics에서 제공하는 다양한 YOLO26 모델을 확인하세요. 이를 통해 프로젝트 요구 사항에 가장 적합한 모델을 선택할 수 있습니다.

ONNX 형식은 내보내기, 예측, 검증 모드를 지원합니다. AMD GPU에서 추론 및 검증을 수행하려면 MIGraphX 플러그인이 설치된 ROCm 시스템이 필요합니다. 모델을 내보낸 다음 내보낸 모델을 로드하여 device=0에서 추론을 실행하거나 정확도를 검증하세요.

onnxruntime-gpu와의 충돌

onnxruntime-gpu과 표준 onnxruntime 패키지는 동일한 onnxruntime Python 모듈에 설치되므로, 나중에 설치한 패키지가 먼저 설치된 패키지를 덮어씁니다. 두 패키지 중 하나만 제거하면 모듈이 손상된 상태로 남으며, 이전 onnxruntime-gpu 릴리스는 MIGraphX 추론 중 충돌할 수 있습니다. 이전 설정에서 onnxruntime-gpu를 설치했다면 pip uninstall -y onnxruntime-gpu onnxruntime를 실행하세요. 그러면 다음 ONNX 추론 시 Ultralytics가 표준 onnxruntime을 다시 설치합니다.

내보내기
from ultralytics import YOLO

# YOLO26 모델 로드
model = YOLO("yolo26n.pt")

# 모델을 ONNX 형식으로 내보내기
model.export(format="onnx")  # 'yolo26n.onnx' 생성
예측
from ultralytics import YOLO

# 내보낸 ONNX 모델을 로드하고 AMD GPU에서 추론 실행
model = YOLO("yolo26n.onnx")

# ROCm에서는 MIGraphX 실행 공급자가 자동으로 선택됩니다
results = model.predict("https://ultralytics.com/images/bus.jpg", device=0)
검증
from ultralytics import YOLO

# 내보낸 ONNX 모델 로드
model = YOLO("yolo26n.onnx")

# AMD GPU에서 COCO8 데이터셋의 정확도 검증
metrics = model.val(data="coco8.yaml", device=0)

내보내기 인수#

MIGraphX 추론은 ONNX 내보내기 인수를 재사용합니다. AMD GPU 배포에 가장 관련성이 높은 옵션은 다음과 같습니다.

인수유형기본값설명
formatstr'onnx'내보낸 모델의 대상 형식입니다. MIGraphX EP 추론에는 onnx을 사용합니다.
imgszint 또는 tuple640모델 입력에 사용할 이미지 크기입니다. 정사각형 이미지에는 정수를 사용하거나 튜플 (height, width)을 사용할 수 있습니다.
quantizeint 또는 strNone내보낸 ONNX 모델의 정밀도입니다. 정밀도를 낮춰 추론하려면 16(FP16)을 사용하고, 32/미설정은 FP32입니다.
dynamicboolFalse동적 입력 크기를 허용합니다. 정적 형상을 사용하면 MIGraphX가 특화된 프로그램을 컴파일하고 제로 카피 IO 바인딩을 사용할 수 있습니다.
simplifyboolTrueonnxslim을 사용해 모델 그래프를 단순화하여 성능과 호환성을 높일 수 있습니다.
opsetintNone런타임 간 호환성을 위한 ONNX opset 버전입니다. 설정하지 않으면 지원되는 최신 버전을 사용합니다.
nmsbool, 선택 사항None원시 출력(None, 기본값), 내장 NMS(True) 또는 NMS 없는 헤드(False)를 선택합니다. 내장 NMS(True)는 아직 MIGraphX EP에서 지원되지 않습니다(ROCm/AMDMIGraphX#5246).
batchint1내보내기 배치 크기 또는 predict 모드에서 내보낸 모델이 동시에 처리하는 최대 이미지 수입니다.
devicestrNone내보내기에 사용할 장치입니다. GPU(device=0) 또는 CPU(device=cpu)를 지정합니다.

내보내기 인수 전체 목록은 ONNX 통합 및 내보내기에 관한 Ultralytics 문서 페이지를 참조하세요.

MIGraphX를 사용한 AMD GPU 배포#

컴파일된 프로그램 캐시

MIGraphX EP는 첫 세션에서 그래프를 컴파일하며, 이 과정이 초기 로드 시간의 대부분을 차지합니다. Ultralytics는 Ultralytics 설정 디렉터리에 모델별로 컴파일된 프로그램을 캐시하므로 이후 같은 모델을 로드할 때는 재컴파일을 건너뜁니다. 캐시에는 최근 사용한 모델 8개가 유지되고 오래된 모델은 제거되므로 캐시가 무한정 커지지 않습니다. 위치를 변경하려면 ORT_MIGRAPHX_CACHE_DIR을 설정하고, ROCm 또는 MIGraphX를 업그레이드한 뒤 재컴파일하려면 캐시 디렉터리를 삭제하세요.

컴파일 시간

Ultralytics는 측정 가능한 추론 성능 변화 없이 YOLO 그래프의 초기 컴파일 시간을 줄이기 위해 MIGraphX Winograd 컨볼루션 커널을 기본적으로 비활성화합니다(MIGRAPHX_DISABLE_WINOGRAD=1)(ROCm/AMDMIGraphX#5234). 다시 활성화하려면 MIGRAPHX_DISABLE_WINOGRAD=0를 설정하세요.

바로 실행할 수 있는 환경을 제공하기 위해 Dockerfile-amd은 ROCm PyTorch와 MIGraphX EP가 사전 설치된 ultralytics/ultralytics:latest-amd 이미지를 빌드합니다. AMD GPU를 컨테이너에 연결하는 docker run 플래그는 Docker 빠른 시작 가이드의 GPU 사용을 참조하세요.

벤치마크#

아래 YOLO26 벤치마크는 Ultralytics 팀이 AMD Radeon 8060S GPU(Ryzen AI Max+ PRO 395)에서 수행했으며, MIGraphX 실행 공급자에서 PyTorch와 ONNX의 속도 및 정확도를 비교했습니다. 두 형식 모두 GPU에서 FP32 정밀도로 실행되며, PyTorch는 ROCm을 사용하고 ONNX는 MIGraphX를 사용합니다.

성능
모델형식상태크기(MB)metrics/mAP50-95(B)추론 시간(ms/이미지)
YOLO26nPyTorch✅5.30.40894.1
YOLO26nONNX(MIGraphX)✅9.50.40892.1
YOLO26sPyTorch✅19.50.48507.2
YOLO26sONNX(MIGraphX)✅36.50.48504.7
YOLO26mPyTorch✅42.20.532314.6
YOLO26mONNX(MIGraphX)✅78.20.532310.9
YOLO26lPyTorch✅50.70.548918.5
YOLO26lONNX(MIGraphX)✅95.00.548915.0
YOLO26xPyTorch✅113.20.574837.4
YOLO26xONNX(MIGraphX)✅212.90.574827.1

Ultralytics 8.4.165로 벤치마크를 수행했습니다(깊이 추정은 8.4.172 사용).

참고

위 벤치마크의 검증은 전체 검증 세트에서 배치 크기 1로 수행했으며, 감지·세그멘테이션·포즈 추정은 640, 시맨틱 세그멘테이션은 2048, 깊이 추정은 768, 분류는 224, OBB는 1024에서 진행했습니다. 추론 시간에는 전처리/후처리와 일회성 MIGraphX 컴파일이 포함되지 않습니다.

지원 현황 요약#

특정 AMD 제품이나 런타임을 지원한다고 해서 모든 AMD 가속기를 지원하는 것은 아닙니다. 이 표는 Ultralytics Python 패키지의 현재 지원 상태를 요약합니다.

AMD 제품 또는 런타임지원사용 방법 또는 상태
ROCm을 사용하는 AMD Instinct 및 지원되는 Radeon GPU✅device=0 또는 device=cuda:0을 사용하여 기본 PyTorch 모델을 학습하고 검증하며 실행합니다.
MIGraphX 추론✅MIGraphX EP를 통해 AMD GPU에서 내보낸 ONNX 모델을 실행합니다. 모든 YOLO26 작업을 지원합니다.
다중 GPU ROCm✅device=0,1 또는 device=[0, 1]을 사용합니다. 분산 실행은 설치된 PyTorch ROCm 스택을 따릅니다.
ROCm 자동 혼합 정밀도(AMP)⚠️설치된 PyTorch 및 ROCm 버전이 Ultralytics AMP 검사를 통과하면 사용할 수 있습니다. 호환되지 않는 경우 amp=False을 사용하세요.
AMD Docker 이미지✅latest-amd에는 ROCm PyTorch와 MIGraphX EP가 사전 설치되어 있습니다.
기본 MIGraphX 내보내기❌format="onnx"을 사용하여 ONNX로 내보낸 다음, AMD GPU 추론을 위해 MIGraphX EP에서 실행합니다.
Windows DirectML❌Python 패키지에는 DirectML 학습 또는 예측 백엔드가 없습니다.
Ryzen AI NPU❌기본 NPU 통합은 제공되지 않습니다. 외부 ONNX/Vitis AI 워크플로는 커뮤니티에서 관리합니다.
AMD Xilinx Versal AI Edge Gen 2 NPU✅format="xilinx"으로 내보내세요. AMD Xilinx 가이드를 참조하세요.
AMD Xilinx Zynq, Kria, Versal AI Edge Gen 1❌네이티브 내보내기는 지원되지 않습니다. AMD Xilinx 가이드의 AMD Vitis AI 워크플로를 사용하세요.
AMD CPU✅ CPUdevice=cpu을 사용합니다. AMD 전용 가속 백엔드가 아닌 표준 CPU 실행 방식입니다.
먼저 AMD와 PyTorch의 호환성을 확인하세요

ROCm 사용 가능 여부는 정확한 GPU 모델, 운영체제, ROCm 버전 및 PyTorch 빌드에 따라 달라집니다. 설치 전에 AMD의 ROCm 호환성 매트릭스에서 하드웨어를 확인하세요.

요약#

이 가이드에서는 표준 device=0 인수를 사용하여 PyTorch ROCm으로 AMD GPU에서 Ultralytics YOLO26 모델을 학습한 다음, ONNX로 내보내 ONNX Runtime MIGraphX 실행 공급자를 통해 가속 추론을 수행하는 방법을 알아보았습니다. ONNX 백엔드는 MIGraphXExecutionProvider을 자동으로 선택하고, 이후 빠른 로드를 위해 컴파일된 프로그램을 캐시하며, 코드 변경 없이 모든 YOLO26 작업을 지원합니다.

다른 배포 대상을 살펴보려면 통합 가이드 페이지를 확인하고, 벤치마크 모드에서 내보내기 형식을 비교해 보세요.

자주 묻는 질문#

  • 예. 설치에 안내된 대로 ROCm 빌드의 PyTorch를 설치한 다음, device=0를 사용하여 .pt 모델을 학습하거나 여러 GPU를 사용하려면 device=0,1을 사용하세요. 학습은 PyTorch ROCm을 통해 실행되며 MIGraphX 또는 ONNX 플러그인은 사용하지 않습니다. 예시는 PyTorch ROCm으로 AMD GPU에서 학습하기를 참조하세요.

  • 모델을 ONNX로 내보낸 다음 ROCm 시스템에서 device=0을 사용하여 실행하세요. Ultralytics는 첫 ONNX 추론 시 MIGraphX 플러그인을 설치합니다.

    사용법
    from ultralytics import YOLO
    
    # ONNX로 내보내기
    model = YOLO("yolo26n.pt")
    model.export(format="onnx")  # 'yolo26n.onnx' 생성
    
    # AMD GPU에서 추론 실행(MIGraphX EP가 자동으로 선택됨)
    onnx_model = YOLO("yolo26n.onnx")
    results = onnx_model.predict("https://ultralytics.com/images/bus.jpg", device=0)
  • 아니요. ROCm 시스템에서 Ultralytics ONNX 백엔드는 HIP를 감지하고 onnxruntime-ep-migraphx 플러그인을 설치 및 등록한 다음 MIGraphXExecutionProvider을 자동으로 선택합니다. Python 3.11 미만 버전 또는 ARM64와 같이 플러그인을 설치하거나 로드할 수 없는 경우 경고와 함께 추론이 CPU로 대체됩니다.

  • MIGraphX는 첫 세션에서 ONNX 그래프를 최적화된 프로그램으로 컴파일하며, 이 과정이 초기 로드 시간의 대부분을 차지합니다. Ultralytics는 컴파일된 프로그램을 캐시하므로 이후 같은 모델을 로드할 때 재컴파일을 건너뜁니다. 캐시 위치와 크기 제한은 컴파일된 프로그램 캐시 참고 사항을 확인하세요.

  • 설치된 PyTorch 패키지가 ROCm 빌드가 아니라 CPU 또는 CUDA 빌드이거나, GPU가 활성 ROCm 스택에서 지원되지 않을 수 있습니다. 설치에 나온 대로 AMD의 ROCm wheel 인덱스에서 PyTorch를 다시 설치하고, torch.version.hip이 None가 아닌지 확인한 다음, AMD의 ROCm 호환성 매트릭스에서 GPU를 확인하세요. 또한 일반적으로 video 및 render 그룹에 가입하여 사용자가 /dev/kfd 및 /dev/dri에 액세스할 수 있는지 확인하세요.

  • 이는 예상된 동작입니다. PyTorch ROCm은 Python 호환성을 위해 의도적으로 torch.cuda API와 CUDA 스타일 디바이스 문자열을 재사용합니다. device=0 또는 device=cuda:0를 사용하세요. 모델은 AMD GPU에서 HIP 및 ROCm을 통해 계속 실행됩니다.

  • Python 패키지를 통한 방법은 지원되지 않습니다. DirectML에는 학습 또는 예측 백엔드가 없으며, Ryzen AI NPU는 PyTorch ROCm을 통해 노출되지 않습니다. 커뮤니티 워크플로에서 ONNX로 내보낸 후 AMD의 외부 Ryzen AI 또는 Vitis AI 도구로 실행할 수 있지만, 이러한 런타임은 Ultralytics에서 지원하는 실행 경로에 포함되지 않습니다. 임베디드 AMD Xilinx Versal AI Edge Series Gen 2 NPU의 경우 format="xilinx"으로 내보내세요. Zynq, Kria 및 1세대 Versal AI Edge 디바이스는 AMD Xilinx 가이드를 참조하세요.

  • PyTorch와 MIGraphX EP 추론 모두에서 GPU 인덱스를 직접 전달하세요. 예를 들어 두 번째 GPU는 device=1을 사용합니다. 프로세스 또는 컨테이너에서 특정 GPU만 사용하도록 제한하려면 HIP_VISIBLE_DEVICES을 설정하세요(컨테이너의 경우 ROCR_VISIBLE_DEVICES). 예: HIP_VISIBLE_DEVICES=2. 표시되는 GPU의 인덱스는 device=0부터 다시 매겨집니다.

기여자

댓글