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

Chạy trên CPU khi đáng lẽ phải dùng GPU

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.

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

Terminal window
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 enabled trong khi bạn mong đợi 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 đề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.

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

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

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

  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 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=auto là 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=1 sẽ 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.