Ultralytics YOLO27: Tham gia danh sách chờ.
Get Started

Huấn luyện và suy luận trên GPU AMD với Ultralytics YOLO, ROCm và MIGraphX#

Chỉ dành cho Linux x86_64

Hướng dẫn này dành cho các máy chủ Linux x86_64 đã cài driver kernel GPU AMD (amdgpu); tất cả lệnh bên dưới đều dành cho shell Linux. MIGraphX execution provider chỉ được phát hành dưới dạng wheel Linux x86_64 cho Python 3.11 trở lên, vì vậy không hỗ trợ Windows gốc; Windows Subsystem for Linux (WSL2) cũng chưa được xác thực.

Ultralytics YOLO chạy trên GPU AMD Instinct và Radeon được hỗ trợ thông qua ROCm, stack tính toán GPU mở của AMD. Với bản PyTorch được xây dựng cho ROCm, bạn có thể huấn luyện, xác thực và dự đoán bằng model .pt, sử dụng cùng đối số device=0 như trên bất kỳ GPU nào khác mà không cần thay đổi code.

Để triển khai, hãy xuất model đã huấn luyện sang ONNX và chạy model thông qua MIGraphX, engine tối ưu hóa graph và suy luận của AMD. Backend ONNX của Ultralytics phát hiện ROCm và tự động chọn MIGraphXExecutionProvider của ONNX Runtime, vì vậy cùng lệnh predict chạy trên GPU NVIDIA cũng chạy được trên GPU AMD. Các lượt continuous integration theo lịch của Ultralytics thực hiện xuất ONNX và suy luận MIGraphX cho mọi tác vụ trên phần cứng GPU AMD.

Cài đặt#

Stack Python được cài đặt hoàn toàn thông qua pip từ các chỉ mục wheel ROCm của AMD, do đó không cần gói apt hay quyền truy cập root để cài PyTorch, plugin hoặc thư viện runtime ROCm, miễn là máy chủ đã có driver kernel GPU AMD (amdgpu / /dev/kfd).

Cài đặt

Phát hiện kiến trúc GPU của bạn (ví dụ gfx1151 trên Strix Halo) và chỉ cài các kernel PyTorch cần thiết:

# 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 tự động cài onnx trong lần xuất ONNX đầu tiên. Trong lần suy luận ONNX đầu tiên trên hệ thống ROCm, Ultralytics cũng cài plugin MIGraphX execution provider (onnxruntime-ep-migraphx) và các thư viện runtime MIGraphX mà plugin tải (migraphx-libs); các thành phần này được ghim ở những phiên bản đã được kiểm thử cùng nhau. Plugin chỉ được phát hành cho Python 3.11 trở lên trên Linux x86_64; với các phiên bản Python hoặc kiến trúc khác, hoặc khi dùng YOLO_AUTOINSTALL=false mà chưa cài plugin, suy luận ONNX sẽ chuyển về CPU kèm cảnh báo. Để xem hướng dẫn chi tiết và các phương pháp tốt nhất, hãy tham khảo hướng dẫn cài đặt YOLO26; nếu gặp khó khăn, hãy xem hướng dẫn Các vấn đề thường gặp.

Xác minh PyTorch nhận diện GPU AMD trước khi huấn luyện hoặc xuất model:

import torch

print(torch.cuda.is_available())  # Đúng nếu cài đặt ROCm hoạt động
print(torch.cuda.get_device_name(0))  # Tên GPU AMD, ví dụ AMD Radeon 8060S
print(torch.version.hip)  # Phiên bản HIP của bản PyTorch ROCm; là None với bản CUDA hoặc CPU

Huấn luyện trên GPU AMD bằng PyTorch ROCm#

Quy trình huấn luyện, xác thực và dự đoán gốc trên model .pt chạy trên GPU AMD thông qua PyTorch ROCm, độc lập với quy trình suy luận MIGraphX bên dưới. Cài bản PyTorch ROCm như hướng dẫn trong mục Cài đặt và sử dụng cùng các đối số thiết bị như khi chạy bất kỳ phiên huấn luyện Ultralytics nào khác:

Vì sao GPU AMD được Ultralytics nhận diện là CUDA

Bản PyTorch ROCm sử dụng HIP nội bộ nhưng cố ý dùng lại các giao diện torch.cuda, vì vậy torch.cuda.is_available() trả về True và GPU AMD được truy cập bằng ID theo kiểu CUDA tiêu chuẩn. Dùng device=0 hoặc device=cuda:0 cho GPU AMD; rocm không phải là loại thiết bị PyTorch. Xem ngữ nghĩa HIP của PyTorch để biết thêm chi tiết.

Huấn luyện với ROCm
from ultralytics import YOLO

model = YOLO("yolo26n.pt")

# Huấn luyện trên GPU AMD đầu tiên được PyTorch ROCm hiển thị
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=0)

# Huấn luyện trên hai GPU AMD
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=[0, 1])

Xác thực và dự đoán trên model .pt sử dụng cùng cách chọn thiết bị:

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
Độ chính xác hỗn hợp trên ROCm

Ultralytics bật AMP theo mặc định và tự động tắt nếu bước kiểm tra trước huấn luyện phát hiện kết quả độ chính xác hỗn hợp khác biệt so với độ chính xác đầy đủ. Hành vi AMP trên ROCm có thể thay đổi theo phiên bản PyTorch và ROCm; do đó, nếu lần chạy vẫn tạo ra loss NaN hoặc mAP bằng 0, hãy huấn luyện bằng amp=False:

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

Xuất và suy luận với MIGraphX#

ONNX Runtime là engine suy luận đa nền tảng, có thể chạy một model ONNX trên nhiều backend phần cứng thông qua các execution provider (EP) có thể cắm thêm. Mỗi EP ánh xạ graph ONNX lên một bộ tăng tốc cụ thể: CUDA cho GPU NVIDIA, CoreML cho Apple silicon và MIGraphX cho GPU AMD chạy ROCm. MIGraphX được phân phối dưới dạng plugin onnxruntime-ep-migraphx và biên dịch graph thành chương trình được tối ưu cho GPU của bạn.

Suy luận MIGraphX sử dụng xuất ONNX tiêu chuẩn. Xuất model sang ONNX (format="onnx"), sau đó suy luận Ultralytics sẽ tự động dùng backend MIGraphXExecutionProvider để chạy model ONNX trên GPU AMD của bạn.

Các tính năng chính của suy luận MIGraphX#

  • Tự động chọn provider: Trên máy chủ ROCm, backend ONNX đăng ký plugin và chọn MIGraphXExecutionProvider mà không cần thay đổi code. Nếu thiếu plugin hoặc plugin không tải được, quá trình suy luận sẽ chuyển về CPU kèm cảnh báo.
  • Tối ưu hóa graph: MIGraphX áp dụng hợp nhất toán tử, hoạch định bộ nhớ và lựa chọn kernel được tối ưu cho kiến trúc GPU AMD.
  • Liên kết IO không sao chép: Đầu vào và đầu ra được liên kết trực tiếp với tensor GPU thông qua giao thức DLPack, tránh việc truyền dữ liệu qua host trong quá trình suy luận.
  • Tùy chọn độ chính xác: Chạy FP32 hoặc xuất model ONNX FP16 để suy luận với độ chính xác thấp hơn.
  • Artifact có tính di động: Một file .onnx duy nhất có thể chạy trên CPU, GPU NVIDIA và GPU AMD, cho phép nhắm đến nhiều nền tảng từ cùng một bản xuất.
  • Triển khai có thể tái lập: Toàn bộ stack (PyTorch ROCm, plugin MIGraphX và các thư viện của plugin) được cài đặt qua pip từ các chỉ mục wheel ROCm của AMD.

Các tác vụ được hỗ trợ#

Suy luận MIGraphX hỗ trợ cả bảy tác vụ của Ultralytics. Phân đoạn ngữ nghĩa và ước tính độ sâu chỉ khả dụng với YOLO26, dòng model duy nhất có các head này.

Tác vụYOLOv8YOLO11YOLO26
Phát hiện✅✅✅
Phân đoạn✅✅✅
Ngữ nghĩa❌❌✅
Độ sâu❌❌✅
Phân loại✅✅✅
Tư thế✅✅✅
OBB✅✅✅

Cách sử dụng#

Trước khi tìm hiểu hướng dẫn sử dụng, hãy xem qua các model YOLO26 do Ultralytics cung cấp. Điều này sẽ giúp bạn chọn model phù hợp nhất với yêu cầu dự án.

Định dạng ONNX hỗ trợ các chế độ Xuất, Dự đoán và Xác thực. Để suy luận và xác thực trên GPU AMD, cần có hệ thống ROCm đã cài plugin MIGraphX. Xuất model, sau đó tải model đã xuất để chạy suy luận hoặc xác thực độ chính xác trên device=0.

Xung đột với onnxruntime-gpu

onnxruntime-gpu và gói onnxruntime tiêu chuẩn cài đặt vào cùng một module Python onnxruntime, vì vậy gói được cài sau sẽ ghi đè gói còn lại. Chỉ gỡ cài đặt một trong hai sẽ khiến module bị lỗi, còn các bản phát hành onnxruntime-gpu cũ hơn có thể làm quá trình suy luận MIGraphX gặp sự cố. Nếu thiết lập trước đó đã cài onnxruntime-gpu, hãy chạy pip uninstall -y onnxruntime-gpu onnxruntime; Ultralytics sẽ cài lại onnxruntime tiêu chuẩn ở lần suy luận ONNX tiếp theo.

Export
from ultralytics import YOLO

# Nạp model YOLO26
model = YOLO("yolo26n.pt")

# # Xuất model sang định dạng ONNX
model.export(format="onnx")  # tạo 'yolo26n.onnx'
Dự đoán
from ultralytics import YOLO

# Nạp model ONNX đã xuất và chạy suy luận trên GPU AMD
model = YOLO("yolo26n.onnx")

# Execution provider MIGraphX được tự động chọn trên ROCm
results = model.predict("https://ultralytics.com/images/bus.jpg", device=0)
Xác thực
from ultralytics import YOLO

# Nạp model ONNX đã xuất
model = YOLO("yolo26n.onnx")

# Xác thực độ chính xác trên tập dữ liệu COCO8 bằng GPU AMD
metrics = model.val(data="coco8.yaml", device=0)

Các tham số xuất model#

Quá trình suy luận MIGraphX sử dụng lại các tham số xuất ONNX. Các tùy chọn phù hợp nhất cho việc triển khai trên GPU AMD là:

Đối sốKiểuMặc địnhMô tả
formatstr'onnx'Định dạng đích của model được xuất. Dùng onnx để suy luận bằng MIGraphX EP.
imgszint hoặc tuple640Kích thước ảnh mong muốn cho đầu vào model. Có thể là một số nguyên cho ảnh vuông hoặc một tuple (height, width).
quantizeint hoặc strNoneĐộ chính xác của model ONNX được xuất: 16 (FP16) để suy luận với độ chính xác thấp hơn; 32/không đặt giá trị sẽ dùng FP32.
dynamicboolFalseCho phép kích thước đầu vào động. Shape tĩnh cho phép MIGraphX biên dịch chương trình chuyên biệt và hỗ trợ liên kết IO zero-copy.
simplifyboolTrueĐơn giản hóa đồ thị model bằng onnxslim, có khả năng cải thiện hiệu năng và khả năng tương thích.
opsetintNonePhiên bản opset ONNX để tương thích với các runtime khác nhau. Nếu không đặt, phiên bản mới nhất được hỗ trợ sẽ được sử dụng.
nmsbool, không bắt buộcNoneChọn đầu ra thô (None, mặc định), NMS tích hợp (True) hoặc head không dùng NMS (False). NMS tích hợp (True) hiện chưa được MIGraphX EP hỗ trợ (ROCm/AMDMIGraphX#5246).
batchint1Batch size khi xuất, tức số lượng ảnh tối đa mà model đã xuất xử lý đồng thời ở chế độ predict.
devicestrNoneThiết bị dùng để xuất: GPU (device=0), CPU (device=cpu).

Để xem danh sách đầy đủ các tham số xuất, hãy tham khảo tích hợp ONNX và trang tài liệu Ultralytics về xuất model.

Triển khai trên GPU AMD bằng MIGraphX#

Bộ nhớ đệm chương trình đã biên dịch

MIGraphX EP biên dịch đồ thị trong phiên đầu tiên, khiến thời gian tải ban đầu tăng đáng kể. Ultralytics lưu vào bộ nhớ đệm chương trình đã biên dịch cho từng model trong thư mục cấu hình Ultralytics, nhờ đó các lần tải sau của cùng model sẽ không cần biên dịch lại. Bộ nhớ đệm giữ 8 model được sử dụng gần đây nhất và loại bỏ các model cũ hơn, vì vậy kích thước không thể tăng vô hạn. Đặt ORT_MIGRAPHX_CACHE_DIR để thay đổi vị trí, và xóa thư mục bộ nhớ đệm để buộc biên dịch lại sau khi nâng cấp ROCm hoặc MIGraphX.

Thời gian biên dịch

Theo mặc định, Ultralytics tắt các kernel tích chập Winograd của MIGraphX (MIGRAPHX_DISABLE_WINOGRAD=1) để giảm thời gian biên dịch lần đầu trên các đồ thị YOLO mà không làm thay đổi đáng kể quá trình suy luận (ROCm/AMDMIGraphX#5234); đặt MIGRAPHX_DISABLE_WINOGRAD=0 để bật lại.

Để có môi trường sẵn sàng chạy, Dockerfile-amd tạo image ultralytics/ultralytics:latest-amd với ROCm PyTorch và MIGraphX EP được cài đặt sẵn. Xem mục Sử dụng GPU trong Docker Quickstart để biết các flag docker run giúp cấp quyền truy cập GPU AMD cho container.

Benchmark#

Các benchmark YOLO26 dưới đây do nhóm Ultralytics thực hiện trên GPU AMD Radeon 8060S (Ryzen AI Max+ PRO 395), so sánh tốc độ và độ chính xác giữa PyTorch và ONNX trên execution provider MIGraphX. Cả hai định dạng đều chạy trên GPU với độ chính xác FP32: PyTorch thông qua ROCm và ONNX thông qua MIGraphX.

Hiệu năng
ModelĐịnh dạngTrạng tháiKích thước (MB)metrics/mAP50-95(B)Thời gian suy luận (ms/ảnh)
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

Được benchmark bằng Ultralytics 8.4.165 (ước lượng độ sâu bằng 8.4.172)

Lưu ý

Việc đánh giá các benchmark ở trên được thực hiện với batch size 1 trên toàn bộ tập validation, ở kích thước 640 cho phát hiện, phân đoạn và ước lượng tư thế, 2048 cho phân đoạn ngữ nghĩa, 768 cho ước lượng độ sâu, 224 cho phân loại và 1024 cho OBB. Thời gian suy luận không bao gồm tiền xử lý/hậu xử lý hoặc lần biên dịch MIGraphX duy nhất.

Tổng quan về hỗ trợ#

Việc hỗ trợ một sản phẩm hoặc runtime AMD không đồng nghĩa với việc hỗ trợ mọi bộ tăng tốc AMD. Bảng này tóm tắt trạng thái hiện tại trong package Python của Ultralytics.

Sản phẩm hoặc runtime AMDHỗ trợCách sử dụng hoặc trạng thái
AMD Instinct và GPU Radeon được ROCm hỗ trợ✅Huấn luyện, xác thực và chạy model PyTorch gốc bằng device=0 hoặc device=cuda:0.
Suy luận MIGraphX✅Chạy model ONNX đã xuất trên GPU AMD thông qua MIGraphX EP. Hỗ trợ mọi tác vụ YOLO26.
ROCm đa GPU✅Dùng device=0,1 hoặc device=[0, 1]; quá trình thực thi phân tán sử dụng stack PyTorch ROCm đã cài đặt.
Độ chính xác hỗn hợp tự động (AMP) của ROCm⚠️Có sẵn khi các phiên bản PyTorch và ROCm đã cài vượt qua bước kiểm tra AMP của Ultralytics; dùng amp=False nếu không tương thích.
Image Docker AMD✅latest-amd cung cấp PyTorch ROCm cùng MIGraphX EP được cài đặt sẵn.
Xuất trực tiếp sang MIGraphX❌Xuất sang ONNX bằng format="onnx", rồi chạy trên MIGraphX EP để suy luận bằng GPU AMD.
Windows DirectML❌Package Python không có backend huấn luyện hoặc dự đoán DirectML.
NPU Ryzen AI❌Không có tích hợp NPU gốc; các workflow ONNX/Vitis AI bên ngoài do cộng đồng quản lý.
NPU AMD Xilinx Versal AI Edge Gen 2✅Export bằng format="xilinx"; xem hướng dẫn AMD Xilinx.
AMD Xilinx Zynq, Kria, Versal AI Edge Gen 1❌Không hỗ trợ export gốc; sử dụng quy trình AMD Vitis AI trong hướng dẫn AMD Xilinx.
CPU AMD✅ CPUDùng device=cpu; thực thi CPU tiêu chuẩn, không phải backend tăng tốc dành riêng cho AMD.
Trước tiên, hãy kiểm tra khả năng tương thích giữa AMD và PyTorch

Khả năng sử dụng ROCm phụ thuộc vào GPU cụ thể, hệ điều hành, phiên bản ROCm và bản dựng PyTorch. Hãy xác nhận phần cứng của bạn trong ma trận tương thích ROCm của AMD trước khi cài đặt.

Tóm tắt#

Trong hướng dẫn này, bạn đã tìm hiểu cách huấn luyện model Ultralytics YOLO26 trên GPU AMD bằng PyTorch ROCm với tham số device=0 tiêu chuẩn, sau đó xuất model sang ONNX để tăng tốc suy luận thông qua ONNX Runtime MIGraphX execution provider. Backend ONNX tự động chọn MIGraphXExecutionProvider, lưu bộ nhớ đệm chương trình đã biên dịch để tăng tốc các lần tải tiếp theo và hỗ trợ mọi tác vụ YOLO26 mà không cần thay đổi code.

Để xem các mục tiêu triển khai khác, hãy duyệt qua trang hướng dẫn tích hợp và so sánh các định dạng xuất bằng chế độ Benchmark.

Câu hỏi thường gặp#

  • Có. Cài đặt bản dựng PyTorch ROCm như hướng dẫn trong mục Cài đặt, sau đó huấn luyện model .pt bằng device=0, hoặc dùng device=0,1 cho nhiều GPU. Quá trình huấn luyện chạy thông qua PyTorch ROCm, không sử dụng MIGraphX hoặc plugin ONNX. Xem Huấn luyện trên GPU AMD bằng PyTorch ROCm để biết ví dụ.

  • Xuất model sang ONNX, sau đó chạy model bằng device=0 trên hệ thống ROCm. Ultralytics cài đặt plugin MIGraphX trong lần suy luận ONNX đầu tiên:

    Cách sử dụng
    from ultralytics import YOLO
    
    # Xuất sang ONNX
    model = YOLO("yolo26n.pt")
    model.export(format="onnx")  # tạo 'yolo26n.onnx'
    
    # Chạy suy luận trên GPU AMD (MIGraphX EP được tự động chọn)
    onnx_model = YOLO("yolo26n.onnx")
    results = onnx_model.predict("https://ultralytics.com/images/bus.jpg", device=0)
  • Không. Trên hệ thống ROCm, backend ONNX của Ultralytics phát hiện HIP, cài đặt và đăng ký plugin onnxruntime-ep-migraphx, rồi tự động chọn MIGraphXExecutionProvider. Nếu không thể cài đặt hoặc tải plugin, chẳng hạn khi dùng Python phiên bản cũ hơn 3.11 hoặc trên ARM64, quá trình suy luận sẽ chuyển sang CPU và hiển thị cảnh báo.

  • MIGraphX biên dịch đồ thị ONNX thành chương trình được tối ưu hóa trong phiên đầu tiên, khiến thời gian tải ban đầu tăng đáng kể. Ultralytics lưu bộ nhớ đệm chương trình đã biên dịch, vì vậy các lần tải sau của cùng model sẽ không cần biên dịch lại. Xem ghi chú về bộ nhớ đệm chương trình đã biên dịch để biết vị trí và giới hạn kích thước.

  • Gói PyTorch đã cài có thể là bản build CPU hoặc CUDA thay vì bản build ROCm, hoặc GPU không được stack ROCm đang hoạt động hỗ trợ. Cài đặt lại PyTorch từ chỉ mục wheel ROCm của AMD như hướng dẫn trong Hướng dẫn cài đặt, kiểm tra để đảm bảo torch.version.hip không phải là None, đồng thời xác nhận GPU trong ma trận tương thích ROCm của AMD. Ngoài ra, hãy đảm bảo người dùng có thể truy cập /dev/kfd và /dev/dri, thường bằng cách tham gia các nhóm video và render.

  • Đây là hành vi dự kiến. PyTorch ROCm cố ý sử dụng lại API torch.cuda và chuỗi thiết bị theo kiểu CUDA để đảm bảo tương thích với Python. Sử dụng device=0 hoặc device=cuda:0; model vẫn chạy thông qua HIP và ROCm trên GPU AMD.

  • Không thể thực hiện thông qua package Python. DirectML không có backend training hoặc prediction, và NPU Ryzen AI không được cung cấp thông qua PyTorch ROCm. Các quy trình do cộng đồng xây dựng có thể export sang ONNX rồi chạy bằng công cụ Ryzen AI hoặc Vitis AI bên ngoài của AMD, nhưng các runtime đó nằm ngoài luồng thực thi Ultralytics được hỗ trợ. Đối với NPU nhúng AMD Xilinx Versal AI Edge Series Gen 2, hãy export bằng format="xilinx"; đối với thiết bị Zynq, Kria và Versal AI Edge thế hệ đầu tiên, hãy xem hướng dẫn AMD Xilinx.

  • Truyền trực tiếp chỉ mục GPU, ví dụ device=1 cho GPU thứ hai, cho cả suy luận PyTorch lẫn MIGraphX EP. Để giới hạn các GPU khả dụng cho một tiến trình hoặc container, hãy đặt HIP_VISIBLE_DEVICES (hoặc ROCR_VISIBLE_DEVICES cho container), chẳng hạn HIP_VISIBLE_DEVICES=2; khi đó, các GPU hiển thị sẽ được đánh lại số bắt đầu từ device=0.

Người đóng góp

Bình luận