Chạy trên CPU khi đáng lẽ phải dùng GPU
Triệu chứng
Phần tiêu đề “Triệu chứng”GPU của host hoạt động (mẫu tính toán CUDA chạy đạt), nhưng suy luận chậm hơn mong đợi và thẻ Python Inference hiển thị một bậc thấp hơn mức bạn đã cấp phát:
- Bạn mong đợi TensorRT nhưng lại thấy CUDA, hoặc
- Bạn mong đợi một provider GPU nhưng lại thấy CPU (dự phòng) 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 đang tụt xuống từng bậc một: TensorRT → CUDA → CPU.
Xác nhận
Phần tiêu đề “Xác nhận”Kiểm tra xem dịch vụ đang chạy thực sự đã khởi tạo provider nào:
docker compose -f docker-compose.release.yml logs inference | grep -E "Active EP|EP enabled|resolved to"TensorRT EP enabled→ bậc cao nhất, không cần làm gì.CUDA EP enabledtrong khi bạn mong đợi 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 đều đã bị bỏ.
Chế độ thực thi mặc định là auto, vốn được thiết kế để tụt bậc một cách mượt mà thay vì lỗi hẳn. Chính tấm lưới an toàn đó cũng là thứ che giấu một thư viện GPU bị thiếu — một box đã tụt bậc vẫn tiếp tục chạy, chỉ là chậm hơn.
Khắc phục
Phần tiêu đề “Khắc phục”-
Quyết định xem box có bắt buộc phải chạy trên GPU hay không. Nếu GPU là bắt buộc, hãy làm cho việc tụt bậc trở nên rõ ràng 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 # or: cudaSTRICT_EP=1Khởi động lại inference. Container giờ sẽ từ chối khởi động (thay vì tụt bậc) nếu provider được yêu cầu không khả dụng — biến một sự chậm đi âm thầm thành một lỗi khởi động rõ ràng mà bạn có thể xử lý.
-
Nếu bậc được yêu cầu là TensorRT và nó đã bị bỏ, thì thư viện parser native của provider TensorRT bị thiếu trong image. Hãy dùng một profile image suy luận có hỗ trợ GPU (TensorRT) cho box này thay vì profile CPU. Xác nhận bậc của image khớp với bậc 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 phát hành ở các profile CPU, TensorRT và Jetson. Triển khai profile CPU trên một box GPU sẽ giới hạn bạn ở mức CPU theo thiết kế — không có provider GPU nào trong image đó để tụt bậc xuống từ đó.
- Ghim + nghiêm ngặt trên các box bắt buộc dùng GPU.
EXECUTION_MODE=autolà mặc định hợp lý cho các đội thiết bị hỗn hợp, nhưng trên một box bắt buộc phải dùng GPU,EXECUTION_MODE=<tier>+STRICT_EP=1sẽ biến một sự tụt bậc 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 trên bảng điều khiển phản ánh provider trực tiếp; hãy coi việc tụt bậc ở đó 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”- GPU không được dùng — lỗi CUDA 500 — khi lớp tính toán GPU của host thực sự bị hỏng.
- Thiết lập phần cứng — bậc 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ễ.