Huấn luyện và suy luận trên GPU AMD với Ultralytics YOLO, ROCm và MIGraphX#
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).
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 ultralyticsUltralytics 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 CPUHuấ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:
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.
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=0Ultralytics 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=FalseXuấ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
MIGraphXExecutionProvidermà 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
.onnxduy 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
piptừ 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.
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.
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.
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'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)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ểu | Mặc định | Mô tả |
|---|---|---|---|
format | str | 'onnx' | Định dạng đích của model được xuất. Dùng onnx để suy luận bằng MIGraphX EP. |
imgsz | int hoặc tuple | 640 | Kí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). |
quantize | int hoặc str | None | Độ 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. |
dynamic | bool | False | Cho 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. |
simplify | bool | True | Đơ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. |
opset | int | None | Phiê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. |
nms | bool, không bắt buộc | None | Chọ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). |
batch | int | 1 | Batch size khi xuất, tức số lượng ảnh tối đa mà model đã xuất xử lý đồng thời ở chế độ predict. |
device | str | None | Thiế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#
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.
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.
| Model | Định dạng | Trạng thái | Kích thước (MB) | metrics/mAP50-95(B) | Thời gian suy luận (ms/ảnh) |
|---|---|---|---|---|---|
| YOLO26n | PyTorch | ✅ | 5.3 | 0.4089 | 4.1 |
| YOLO26n | ONNX (MIGraphX) | ✅ | 9.5 | 0.4089 | 2.1 |
| YOLO26s | PyTorch | ✅ | 19.5 | 0.4850 | 7.2 |
| YOLO26s | ONNX (MIGraphX) | ✅ | 36.5 | 0.4850 | 4.7 |
| YOLO26m | PyTorch | ✅ | 42.2 | 0.5323 | 14.6 |
| YOLO26m | ONNX (MIGraphX) | ✅ | 78.2 | 0.5323 | 10.9 |
| YOLO26l | PyTorch | ✅ | 50.7 | 0.5489 | 18.5 |
| YOLO26l | ONNX (MIGraphX) | ✅ | 95.0 | 0.5489 | 15.0 |
| YOLO26x | PyTorch | ✅ | 113.2 | 0.5748 | 37.4 |
| YOLO26x | ONNX (MIGraphX) | ✅ | 212.9 | 0.5748 | 27.1 |
Được benchmark bằng Ultralytics 8.4.165 (ước lượng độ sâu bằng 8.4.172)
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 AMD | Hỗ 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 | ✅ CPU | Dù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. |
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
.ptbằngdevice=0, hoặc dùngdevice=0,1cho 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=0trê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ụngfrom 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ọnMIGraphXExecutionProvider. 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.hipkhô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/kfdvà/dev/dri, thường bằng cách tham gia các nhómvideovàrender.Đây là hành vi dự kiến. PyTorch ROCm cố ý sử dụng lại API
torch.cudavà chuỗi thiết bị theo kiểu CUDA để đảm bảo tương thích với Python. Sử dụngdevice=0hoặcdevice=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=1cho 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 đặtHIP_VISIBLE_DEVICES(hoặcROCR_VISIBLE_DEVICEScho container), chẳng hạnHIP_VISIBLE_DEVICES=2; khi đó, các GPU hiển thị sẽ được đánh lại số bắt đầu từdevice=0.