Chạy trên CPU khi kỳ vọng GPU
Triệu chứng
Phần tiêu đề “Triệu chứng”GPU host vẫn hoạt động (mẫu tính toán CUDA qua được), nhưng suy luận chậm hơn kỳ vọng và thẻ Python Inference hiển thị một cấp thấp hơn so với cấu hình bạn đã chuẩn bị:
- Bạn kỳ vọng TensorRT nhưng thấy CUDA, hoặc
- Bạn kỳ vọng một provider GPU nhưng thấy CPU (fallback) hoặc CPU.
Log container suy luận thường chứa một dòng trông có vẻ vô hại như:
Failed to load library libonnxruntime_providers_tensorrt.soĐây là chuỗi provider tụt từng cấp một: TensorRT → CUDA → CPU.
Xác nhận
Phần tiêu đề “Xác nhận”Kiểm tra provider nào dịch vụ đang chạy thực sự đã khởi tạo:
docker compose -f docker-compose.release.yml logs inference | grep -E "Active EP|EP enabled|resolved to"TensorRT EP enabled→ cấp cao nhất, không cần làm gì.CUDA EP enabledtrong khi bạn kỳ vọng TensorRT → provider TensorRT đã bị bỏ (thiếu thư viện parser native).resolved to CPU onlytrong khi GPU vẫn hoạt động → cả hai provider GPU đã bị bỏ.
Chế độ thực thi mặc định là auto, vốn được thiết kế để suy giảm một cách nhẹ nhàng thay vì thất bại. Cái lưới an toàn đó cũng chính là cái che giấu một thư viện GPU bị thiếu — một hộp đã suy giảm vẫn chạy tiếp, chỉ là chậm hơn.
-
Quyết định xem hộp có phải chạy GPU hay không. Nếu GPU là bắt buộc, hãy làm cho việc fallback trở nên ồn ào để khoảng cách hiện rõ thay vì âm thầm — ghim provider và bật ép buộc nghiêm ngặt trên dịch vụ suy luận:
EXECUTION_MODE=tensorrt # hoặc: cudaSTRICT_EP=1Khởi động lại inference. Container giờ sẽ từ chối khởi động (thay vì suy giảm) nếu provider được yêu cầu không có sẵn — biến một sự chậm lại âm thầm thành một lỗi khởi động rõ ràng để bạn có thể xử lý.
-
Nếu cấp được yêu cầu là TensorRT và nó bị bỏ, thư viện parser native của provider TensorRT bị thiếu khỏi image. Hãy dùng một profile image suy luận có hỗ trợ GPU (TensorRT) cho hộp này thay vì profile CPU. Xác nhận cấp image khớp với cấp phần cứng của bạn trước khi triển khai lại.
-
Khởi động lại và xác nhận lại provider đang hoạt động:
Terminal window docker compose -f docker-compose.release.yml restart inferencedocker compose -f docker-compose.release.yml logs inference | grep "EP enabled"
Phòng ngừa
Phần tiêu đề “Phòng ngừa”- Khớp profile image với phần cứng. Image suy luận có các profile CPU, TensorRT và Jetson. Triển khai profile CPU trên một hộp GPU sẽ giới hạn bạn ở CPU theo cấu trúc — không có provider GPU nào trong image đó để tụt từ đó.
- Ghim + nghiêm ngặt trên các hộp bắt buộc GPU.
EXECUTION_MODE=autolà mặc định đúng cho các đội máy hỗn hợp, nhưng trên một hộp phải dùng GPU,EXECUTION_MODE=<tier>+STRICT_EP=1biến một sự suy giảm vô hình thành một lỗi khởi động fail-fast. - Theo dõi chip provider sau mỗi lần triển khai. Thẻ Python Inference của bảng điều khiển phản ánh provider trực tiếp; hãy coi một sự tụt cấp ở đó là một lỗi triển khai, không phải biến động bình thường.
Liên quan
Phần tiêu đề “Liên quan”- Không dùng GPU — CUDA error 500 — khi lớp tính toán GPU host thực sự hỏng.
- Thiết lập phần cứng — cấp GPU nào ánh xạ tới profile image nào.
- Khả năng quan sát & Cảnh báo — đọc provider đang hoạt động và độ trễ.