Training, đọc kết quả và fine-tune các run
Khởi chạy một cloud run có ngân sách xác định, đánh giá run dựa trên các đường cong theo từng epoch và fine-tune mà không để optimizer mặc định bỏ qua learning rate của bạn.
GPU trên cloud tính phí cho mỗi phút một run chắc chắn thất bại vẫn tiếp tục, còn lỗi fine-tune phổ biến nhất không tốn thêm chi phí nhưng âm thầm làm lãng phí run: optimizer mặc định bỏ qua learning rate bạn đã đặt. Bài học này training một model thực tế trên dataset medical pills, đọc các đường cong bằng quy tắc ra quyết định và fine-tune model để các thiết lập của bạn thực sự được áp dụng.
Thực hành
Khởi chạy một run#
Nhấp New Model trên trang dự án hoặc dataset. Tab Cloud Training hướng dẫn bạn qua các thiết lập sau:

| Tham số | Mặc định | Thay đổi khi nào |
|---|---|---|
| Model nền | Chọn trong mục Official (khuyến nghị YOLO26) | Nếu fine-tune: chọn run trước đó trong My Models |
| Dataset | — | Luôn bật Save Dataset Version để ghim run vào dữ liệu cụ thể |
| Epoch | 100 | Smoke test (10–20) hoặc dataset rất lớn |
| Batch size | -1 (tự động điều chỉnh theo bộ nhớ GPU) | Cần hai run để có thể so sánh chính xác |
| Kích thước ảnh | 640 | Đối tượng nhỏ: tăng kích thước (thanh trượt tối đa 1280; YAML editor chấp nhận tối đa 4096) |
| Advanced Settings | Giá trị mặc định | Hơn 50 đối số model.train() trong YAML, bao gồm optimizer, learning rate và augmentation |
Các đối số giống với những đối số mà model.train(...) nhận khi chạy cục bộ; trang model sau đó hiển thị lệnh yolo train có thể sao chép, kèm các giá trị không mặc định.
Chọn GPU và đặt ngân sách cho run#
| Phân khúc | Ví dụ (VRAM, giá mỗi giờ) | Phù hợp với |
|---|---|---|
| Tiết kiệm | RTX 2000 Ada (16 GB, $0.24), RTX A5000 (24 GB, $0.27), RTX 4090 (24 GB, $0.69) | Smoke test, model nano và nhỏ |
| Trung cấp | L40S (48 GB, $0.86), RTX 5090 (32 GB, $0.99), A100 SXM (80 GB, $1.49) | Model cỡ trung, batch lớn hơn |
| Mặc định | RTX PRO 6000 (96 GB, $2.09) | Hầu hết tác vụ |
| Cao cấp | H100 SXM (80 GB, $3.29), H200 SXM (141 GB, $4.39) | Tập dữ liệu lớn khi thời gian là yếu tố quan trọng |
| Pro và Enterprise | B200 (180 GB, $5.89), B300 (288 GB, $7.39) | Các tác vụ lớn nhất |
Thẻ chi phí ước tính thời lượng và giá trước khi bạn bắt đầu: khoảng $0.23 cho 1.000 ảnh × YOLO26n × 100 epoch trên RTX PRO 6000 mặc định, và khoảng $1.56 cho 5.000 ảnh × YOLO26s × 100 epoch trên H100 SXM, vốn huấn luyện nhanh hơn khoảng 3,4 lần so với RTX 4090. Chi phí được tính theo thời gian GPU thực tế: các lượt chạy hoàn tất, bị hủy và thất bại đều bị tính phí khi GPU đã khởi chạy; một lượt chạy cần số dư đủ thanh toán mức ước tính (ít nhất 15 phút thời gian GPU); các lượt chạy đang hoạt động sẽ dừng nếu số dư âm. Vì vậy, hãy bật tự động nạp tiền trong Settings > Billing cho các tác vụ dài. Nếu chọn GPU rẻ hơn RTX PRO 6000, bạn có thể được nâng cấp miễn phí lên RTX PRO 6000 khi năng lực do Ultralytics quản lý không hoạt động, nhưng vẫn được tính phí theo mức giá bạn đã chọn.
Quy tắc ra quyết định: trước tiên, hãy chạy thử một tập dữ liệu mới trong 10–20 epoch trên GPU mặc định. Chuyển sang H100 hoặc H200 khi một lượt chạy kéo dài hàng giờ và có người đang chờ kết quả. Hãy chọn GPU rẻ hơn thay vì GPU nhanh hơn khi mức sử dụng GPU thấp.
Theo dõi lượt chạy#
Tab Train trên trang model truyền dữ liệu đến ba tab con. Charts vẽ các metric, loss huấn luyện và validation, cùng learning rate theo từng epoch; Console lưu 2.000 dòng gần nhất và dừng lượt chạy ngay khi gặp traceback hoặc lỗi hết bộ nhớ CUDA; System hiển thị mức sử dụng GPU, bộ nhớ và nhiệt độ:


Lượt chạy không báo cáo gì trong 4 giờ sẽ được đánh dấu là thất bại. Checkpoint tốt nhất được tải lên định kỳ, vì vậy lượt chạy bị hủy vẫn giữ lại epoch tốt nhất tính đến thời điểm đó; cảnh báo Slack có thể thông báo khi lượt chạy hoàn tất hoặc thất bại.
Ví dụ thực hành: Huấn luyện, truyền dữ liệu và đọc kết quả lượt chạy#
Bạn có thể huấn luyện ở bất cứ đâu mà vẫn theo dõi lượt chạy trên Platform. Với API key lấy từ Settings > API Keys và được xuất dưới dạng ULTRALYTICS_API_KEY, một project có dạng username/project sẽ truyền biểu đồ, console và checkpoint tốt nhất vào project đó:
from ultralytics import YOLO
# export ULTRALYTICS_API_KEY="..." first to stream this run into your Platform project
model = YOLO("yolo26n.pt")
results = model.train(data="medical-pills.yaml", epochs=10, imgsz=320, project="username/pill-inspection", name="v1-baseline")
print(f"mAP50-95 {results.box.map:.3f}, best checkpoint: {model.trainer.best}") Class Images Instances Box(P R mAP50 mAP50-95)
all 23 399 0.97 0.957 0.977 0.659
mAP50-95 0.659, best checkpoint: .../runs/detect/username/pill-inspection/v1-baseline/weights/best.ptLệnh tương tự chạy trên GPU của Platform khi bạn nhấp New Model; chạy cục bộ mất chưa đến hai phút trên CPU của laptop tại imgsz=320. results.csv của lượt chạy lưu các chuỗi dữ liệu theo từng epoch mà tab con Charts vẽ, vì vậy chỉ cần vài dòng là có thể biến việc “theo dõi các đường cong” thành một quy tắc:
import pandas as pd
df = pd.read_csv("results.csv") # the per-epoch metrics behind the Charts subtab
df.columns = df.columns.str.strip()
m = df["metrics/mAP50-95(B)"]
best_epoch = int(df.loc[m.idxmax(), "epoch"])
recent_gain = m.iloc[-1] - m.iloc[-4] # change over the last 3 epochs
val_loss = df["val/box_loss"]
print(f"epochs={len(df)} best mAP50-95={m.max():.3f} at epoch {best_epoch}")
print(f"gain over last 3 epochs: {recent_gain:+.3f}")
print(f"val box loss: {val_loss.iloc[0]:.3f} -> {val_loss.iloc[-1]:.3f}")
if recent_gain < 0.005 and val_loss.iloc[-1] >= val_loss.iloc[-4]:
print("verdict: plateaued - stop, and fix the data before training longer")
elif best_epoch == len(df):
print("verdict: still improving at the last epoch - more epochs should help")
else:
print("verdict: converged - keep best.pt")epochs=10 best mAP50-95=0.659 at epoch 10
gain over last 3 epochs: +0.028
val box loss: 1.367 -> 1.045
verdict: still improving at the last epoch - more epochs should helpEpoch tốt nhất là epoch cuối cùng, mAP50-95 tăng 2,8 điểm trong ba epoch gần nhất và loss validation vẫn đang giảm: lượt chạy 10 epoch này đã dừng sớm, và chạy lâu hơn hoặc fine-tune sẽ có ích. Áp dụng cùng ba tín hiệu này cho tab con Charts của bất kỳ lượt chạy nào trên Platform: vị trí của epoch tốt nhất, mức cải thiện gần đây và xu hướng của loss validation.
Fine-tune từ model trước đó#
Chọn model trước đây của bạn trong My Models làm model nền; Platform tạo một model mới bắt đầu từ checkpoint đó và giữ nguyên model cũ. Lời khuyên thường thấy là giảm learning rate, nhưng với optimizer: auto mặc định, quá trình huấn luyện sẽ tự chọn optimizer và learning rate, đồng thời bỏ qua lr0. Console cho biết điều này ngay ở những dòng đầu tiên:
optimizer: 'optimizer=auto' found, ignoring 'lr0=0.01' and determining best 'optimizer' and 'lr0' automatically...
optimizer: AdamW(lr=0.002, momentum=0.9) with parameter groups 114 weight(decay=0.0), 126 weight(decay=0.0005), 126 bias(decay=0.0)Đặt rõ ràng optimizer trong Advanced Settings để giá trị được áp dụng. Nhật ký khi fine-tune model viên thuốc thêm 5 epoch với optimizer: SGD và lr0: 0.001:
optimizer: SGD(lr=0.001, momentum=0.937) with parameter groups 114 weight(decay=0.0), 126 weight(decay=0.0005), 126 bias(decay=0.0)
all 23 399 0.969 0.962 0.983 0.687mAP50-95 tăng từ 0.659 lên 0.687. Trong bài học tiếp theo, bạn sẽ đưa ứng viên này qua cổng đánh giá trước khi triển khai.

Để tái tạo một lượt chạy trước đó, hãy mở bảng Training Configuration trên trang model, chọn Copy JSON rồi dán vào Advanced Settings. Hướng dẫn fine-tuning trình bày cách đóng băng layer, còn hướng dẫn tinh chỉnh siêu tham số trình bày cách quét tham số có hệ thống.
Các lỗi thường gặp#
Triệu chứng: bạn đặt lr0: 0.001, nhưng console hiển thị ignoring 'lr0=...'. Cách khắc phục: với optimizer: auto, quá trình huấn luyện tự chọn optimizer và learning rate. Đặt optimizer thành SGD hoặc AdamW cùng với lr0, sau đó xác nhận dòng optimizer: trong console.
Triệu chứng: tab phụ System cho thấy mức sử dụng GPU thấp hơn nhiều so với 80% trong suốt quá trình chạy. Cách khắc phục: nút thắt cổ chai nằm ở việc nạp dữ liệu, không phải GPU, nên GPU nhanh hơn chỉ khiến chi phí tăng. Hãy chọn GPU rẻ hơn hoặc tăng batch size nếu bộ nhớ cho phép.
Triệu chứng: mAP50-95 trên tập validation không đổi trong 10 epoch, trong khi loss validation tăng dần. Cách khắc phục: hãy hủy. Checkpoint tốt nhất đến thời điểm hiện tại sẽ được giữ lại; cải thiện tiếp theo đến từ dữ liệu (bài học 3 và 4), chứ không phải từ việc chạy thêm epoch.
Hiển thị lời giải
Đáp án mẫu với model viên thuốc: baseline 10 epoch đạt đỉnh ở epoch 10 với mAP50-95 là 0.659, tăng +0.028 trong ba epoch gần nhất và box loss validation giảm từ 1.367 xuống 1.045, nên kết luận là “tiếp tục”. Thay vì huấn luyện lại từ đầu, hãy fine-tune: model nền v1-baseline trong My Models, 5 epoch, Advanced Settings optimizer: SGD và lr0: 0.001. Console xác nhận SGD(lr=0.001, momentum=0.937), và mAP50-95 đạt 0.687. Chi phí trên GPU mặc định chỉ vài xu; thẻ chi phí hiển thị mức ước tính trước khi bạn nhấp Start Training, còn Settings > Billing hiển thị khoản phí thực tế sau đó.