Ultralytics YOLO27: Tham gia danh sách chờ.
Get Started
Xây dựng bằng Ultralytics Platform·Training và đánh giá·Bài học 5/10
Bài họctrung cấp

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.

Kết quả

Bạn có thể khởi chạy một run training trên Platform với chi phí đã biết, quyết định dừng, tiếp tục hay giữ lại model dựa trên các đường cong, và fine-tune từ model trước đó với learning rate mong muốn.

Lộ trình cấp tốc
Nếu bạn đã nắm rõ cách thực hiện, đây là phiên bản tóm tắt.
  1. Nhấp New Model, chọn model nền YOLO26 và dataset, rồi bật Save Dataset Version.

  2. Giữ nguyên 100 epoch, batch tự động và kích thước ảnh 640 trừ khi có lý do để thay đổi; đọc ước tính chi phí.

  3. Đánh giá run: nếu kết quả vẫn cải thiện ở epoch cuối thì cần thêm epoch; nếu đường cong đi ngang trong khi val loss tăng thì hãy sửa dữ liệu.

  4. Để fine-tune bằng lr0 của bạn, hãy đặt optimizer thành SGD hoặc AdamW; auto bỏ qua lr0.

  5. Training cục bộ bằng project="username/project" và ULTRALYTICS_API_KEY để stream một run lên Platform.

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:

Hộp thoại Train New Model của Ultralytics Platform với yolo26n được chọn làm model nền, dataset COCO8, 100 epoch, batch size tự động, GPU RTX PRO 6000, số dư tài khoản và chi phí ước tính $0.03

Tham sốMặc địnhThay đổi khi nào
Model nềnChọ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ể
Epoch100Smoke 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 ảnh640Đố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 SettingsGiá trị mặc địnhHơ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úcVí dụ (VRAM, giá mỗi giờ)Phù hợp với
Tiết kiệmRTX 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ấpL40S (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 địnhRTX PRO 6000 (96 GB, $2.09)Hầu hết tác vụ
Cao cấpH100 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à EnterpriseB200 (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 độ:

Tab Train của model trên Ultralytics Platform, hiển thị bốn thẻ tóm tắt metric và tab con Charts với các đường cong precision, recall và mAP50-95 theo từng epoch

Tab Train của model trên Ultralytics Platform với tab con System đang mở, hiển thị thẻ host có model GPU và biểu đồ mức sử dụng CPU, RAM theo từng epoch

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.pt

Lệ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 help

Epoch 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.687

mAP50-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.

Hộp thoại Train New Model trên Ultralytics Platform với Advanced Settings được mở rộng, hiển thị trình chỉnh sửa YAML có các thiết lập huấn luyện như epochs, batch, imgsz, patience và seed

Để 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#

Learning rate fine-tuning của bạn bị bỏ qua

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.

Trả tiền cho GPU không được khai thác hết

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.

Huấn luyện quá ngưỡng không thể quay lại

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.

Dùng thử

Huấn luyện model YOLO26n trên tập dữ liệu của bạn (trên cloud với Save Dataset Version, hoặc truyền dữ liệu cục bộ bằng project="username/project") trong 10–20 epoch. Chạy read_run.py trên results.csv của model đó hoặc áp dụng cùng ba phép kiểm tra cho tab con Charts. Sau đó fine-tune từ model này với optimizer và lr0 được chỉ định rõ ràng, rồi xác nhận dòng optimizer: trong console sử dụng đúng các giá trị của bạn.

Điều kiện hoàn thành
Bạn đã hoàn thành bài học khi tất cả các điều kiện sau đều đúng.
  • Một lượt chạy đã hoàn tất trong project Platform của bạn, được liên kết với một phiên bản tập dữ liệu hoặc tập dữ liệu ul://.

  • Bạn đã ghi lại kết luận về lượt chạy (dừng, tiếp tục hoặc giữ lại) cùng ba con số làm căn cứ.

  • Console của lượt chạy đã fine-tune hiển thị optimizer và learning rate bạn chọn, không phải optimizer=auto.

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 đó.

Tiếp theo là gì

Bạn đã có baseline và một ứng viên. Tiếp theo, bạn sẽ quyết định bằng các cổng đánh giá được xác định trước liệu ứng viên có xứng đáng được triển khai hay không.

Đăng nhập để lưu tiến độ