libreyolo quantize

Thay các module float của mô hình bằng module đã lượng tử hóa, hiệu chuẩn chúng trên ảnh không nhãn khi recipe cần thống kê, rồi lưu kết quả thành một checkpoint PyTorch.

Lệnh
libreyolo quantize
Bắt buộc
model
Đầu ra
Đường dẫn nguồn kèm -<recipe> trước phần mở rộng, ví dụ LibreYOLO9s-int8.pt

Cú pháp

bash
libreyolo quantize model=<name|path> [recipe=<recipe>] [key=value ...]

Các tham số là cặp key=value, và dạng POSIX cũng dùng được, nên recipe=int8--recipe int8 là cùng một tham số.

Tham số

Tham sốMặc địnhÝ nghĩa
modelTrọng số mô hình .pt. Bắt buộc
recipeint8Recipe lượng tử hóa: fp16, bf16, fp8, int8, w4a16, w4a8, nvfp4, mxfp4, int2
calibcoco128.yamlẢnh hiệu chuẩn: một tệp YAML dữ liệu hoặc tên một tập dữ liệu (dataset) có sẵn. Không nhãn, chỉ chạy forward. none bỏ qua bước hiệu chuẩn
samples128Số ảnh hiệu chuẩn tối đa
batch8Kích thước batch khi hiệu chuẩn
algorithmautoƯớc lượng dải giá trị activation: auto, tức chọn minmax, hoặc minmax, hoặc percentile
outĐường dẫn checkpoint đầu ra. Mặc định là đường dẫn nguồn kèm -<recipe> trước phần mở rộng
deviceautoThiết bị
allow_download_scriptsfalseCho phép mã Python nhúng trong khối download của tệp YAML dataset
jsonfalseXuất JSON ra stdout
quietfalseTắt stderr
help_jsonfalseXuất schema của lệnh dưới dạng JSON rồi thoát

Ví dụ

Cơ bản
# Hiệu chuẩn trên coco128 rồi ghi ra LibreYOLO9s-int8.ptlibreyolo quantize model=LibreYOLO9s.pt recipe=int8
Chỉ ép kiểu, không hiệu chuẩn
libreyolo quantize model=LibreYOLO9s.pt recipe=fp16 calib=none \  out=weights/LibreYOLO9s-fp16.pt
Hiệu chuẩn rộng hơn, rồi khôi phục
libreyolo quantize model=LibreYOLO9s.pt recipe=int8 \  calib=coco128.yaml samples=256 batch=16 algorithm=minmax # Quantization-aware training trên checkpoint đã lượng tử hóa giúp lấy lại độ chính xáclibreyolo train model=LibreYOLO9s-int8.pt data=coco8.yaml epochs=10 lr0=0.001

Ghi chú

Những họ mô hình nào chấp nhận lệnh này

Quantization áp dụng cho bốn họ mô hình: yolo9, rfdetr, birefnetfeynobg. Mọi họ khác sẽ thoát với quantize_failed kèm theo danh sách đó.

Mỗi recipe tác động tới những gì

fp16bf16 là các phép ép kiểu. Chúng chỉ đổi dtype, không cần hiệu chuẩn, và calib=none là thiết lập đúng cho chúng.

int8fp8 lượng tử hóa các module Conv2dLinear, đó là lý do chúng hợp với các họ mô hình dùng convolution.

w4a16, w4a8, nvfp4, mxfp4int2 chỉ lượng tử hóa nn.Linear, nên chúng nhắm tới các họ mô hình transformer. Yêu cầu một trong số đó trên yolo9 sẽ bị từ chối kèm giải thích, thay vì âm thầm tạo ra một mô hình chưa lượng tử hóa, bởi ở đó việc tăng tốc dưới 8 bit chỉ có với GEMM và các convolution sẽ vẫn nằm ở precision cao hơn.

int8, fp8, w4a8int2 cần thống kê hiệu chuẩn cho activation của chúng. int2 còn cần huấn luyện để khôi phục sau đó, nên nó bị từ chối trên birefnetfeynobg, vốn không có trainer.

Mỗi họ mô hình giữ một số module ở dạng float bất kể recipe là gì: các lớp đầu tiên, các head dự đoán, và trên YOLOv9 là convolution DFL, vốn là một toán tử kỳ vọng tích phân cố định và không được phép lượng tử hóa.

Dữ liệu hiệu chuẩn không phải dữ liệu huấn luyện

calib trỏ tới một tập ảnh nhỏ không có nhãn, chỉ dùng theo chiều forward, để suy ra dải giá trị activation. Nó không được dùng để đánh giá và nhãn của nó không bao giờ được đọc. Tệp coco128.yaml mặc định sẽ tải về từ một URL ở lần dùng đầu tiên, nên không cần thêm quyền gì; một tệp YAML có script Python tải về nhúng bên trong thì cần allow_download_scripts=true.

algorithm=percentile có sẵn và có thể làm giảm độ chính xác trên các họ mô hình transformer, đó là lý do auto chọn minmax.

Lấy lại độ chính xác

Đầu ra là một checkpoint PyTorch bình thường, nên libreyolo train nhận nó trực tiếp. Huấn luyện một checkpoint đã lượng tử hóa chính là quantization-aware training; thêm distill_model=<teacher> sẽ biến nó thành quantization-aware distillation.

Đầu ra và mã thoát

Kết quả in ra đường dẫn đã lưu, recipe, chế độ thực thi, việc hiệu chuẩn có chạy hay không, và số module được thay theo từng loại. Mã thoát là 0 khi thành công, 4 khi không tải được mô hình, 5 khi lượng tử hóa hoặc việc lưu thất bại, và 1 cho các lỗi runtime khác.

Liên quan: libreyolo export, lệnh rời khỏi PyTorch và thay vào đó ghi ra một artifact để triển khai.

Đã kiểm chứng với LibreYOLO v1.5.0.