Bỏ qua để đến nội dung

Chạy trên CPU khi kỳ vọng GPU

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.

Kiểm tra provider nào dịch vụ đang chạy thực sự đã khởi tạo:

Terminal window
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 enabled trong khi bạn kỳ vọng TensorRT → provider TensorRT đã bị bỏ (thiếu thư viện parser native).
  • resolved to CPU only trong 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.

  1. 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: cuda
    STRICT_EP=1

    Khở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ý.

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

  3. 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 inference
    docker compose -f docker-compose.release.yml logs inference | grep "EP enabled"
  • 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=auto là 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=1 biế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.