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”Suy luận chậm hơn mong đợi, và thẻ Suy luận Python trên bảng điều khiển hiển thị CPU (fallback) thay vì CUDA.
Trên TX2, chuỗi execution provider là CUDA → CPU. Chế độ thực thi mặc định, auto, thử CUDA trước. Nếu CUDA không khởi động được, dịch vụ tiếp tục chạy trên CPU. Chính tấm lưới an toàn đó cũng che giấu vấn đề: một hộp đã tụt xuống vẫn dự đoán, chỉ là chậm hơn.
Huy hiệu CPU đơn thuần, không có “(fallback)”, nghĩa là hộp được cố ý đặt chạy trên CPU (EXECUTION_MODE=cpu hoặc FORCE_CPU=1). Đó không phải là tụt bậc.
Xác nhận
Phần tiêu đề “Xác nhận”Huy hiệu là căn cứ chính xác. Nó hiển thị provider mà mô hình đã tải thực sự chạy trên đó, theo báo cáo của dịch vụ suy luận.
Console của container suy luận chỉ hiển thị lỗi. Cảnh báo được ghi vào một tệp log bên trong container. Tìm cảnh báo tụt bậc trong tệp đó:
docker exec aiboard-inference-real grep -E "resolved to CPU only|STRICT_EP" /data/logs/inference.logMỗi dòng bắt đầu bằng một dấu thời gian. Hãy xem các dòng từ lần khởi động gần nhất.
resolved to CPU only→ ONNX Runtime trong container này hoàn toàn không cung cấp provider CUDA.- Không có dòng nào khớp, nhưng huy hiệu vẫn hiển thị CPU (fallback) → CUDA có được cung cấp nhưng không khởi động được trên GPU.
Để xem container đã khởi động với chế độ thực thi nào:
docker logs aiboard-inference-real 2>&1 | grep "Starting REAL inference"Một hộp chạy mặc định sẽ in Starting REAL inference service (Jetson GPU, EXECUTION_MODE=auto)....
Trang Nhật ký trên bảng điều khiển cũng truyền trực tiếp các dòng thông tin của dịch vụ suy luận. Khi trang có các dòng khởi động của một hộp khỏe mạnh, bạn thấy CUDA EP enabled, rồi đến dòng Providers: liệt kê CUDAExecutionProvider đầu tiên.
Khắc phục
Phần tiêu đề “Khắc phục”-
Kiểm tra container suy luận có chạy với NVIDIA runtime không:
Terminal window docker inspect -f '{{.HostConfig.Runtime}}' aiboard-inference-realKết quả phải là
nvidia. NVIDIA runtime là thứ làm cho các thư viện CUDA của TX2 hiển thị bên trong container. Tệp compose của gói đã đặt sẵn nó. Nếu kết quả khác, tệp compose đã bị thay đổi. Hãy khôi phục bằng cách chạysudo ./update.shtừ một gói phát hành cùng phiên bản hoặc mới hơn. Bản cập nhật sao chép lại các tệp compose của gói vào/opt/aiboard/compose/. -
Kiểm tra image suy luận có phải là image Jetson GPU không:
Terminal window docker inspect -f '{{.Config.Image}}' aiboard-inference-realTag phải kết thúc bằng
-jetson-gpu. Mọi image khác đều không được build cho GPU của TX2. Hãy cài gói phát hànhjetson-gpu. Xem Cài đặt từ gói offline. -
Nếu cả hai bước kiểm tra đều đạt mà hộp vẫn tụt xuống CPU, vấn đề nằm ở stack CUDA của host. Làm theo GPU không được dùng — lỗi CUDA.
Làm cho việc tụt bậc lộ rõ
Phần tiêu đề “Làm cho việc tụt bậc lộ rõ”Trên một hộp bắt buộc phải dùng GPU, hãy để dịch vụ từ chối khởi động thay vì tụt xuống CPU. Ghim chế độ thực thi ở cuda và bật ép buộc nghiêm ngặt.
Tệp compose phát hành đặt EXECUTION_MODE=auto cho dịch vụ suy luận và không đặt STRICT_EP. Tệp .env không điều khiển biến nào trong hai biến này. Hãy thay đổi chúng trong tệp compose đã cài:
-
Mở
/opt/aiboard/compose/docker-compose.release.yml. Trong danh sáchenvironment:của dịch vụinference, đổiEXECUTION_MODE=autothànhEXECUTION_MODE=cudavà thêmSTRICT_EP=1:- EXECUTION_MODE=cuda- STRICT_EP=1 -
Tạo lại container suy luận để nó nhận thay đổi:
Terminal window sudo docker compose --env-file /opt/aiboard/.env \-f /opt/aiboard/compose/docker-compose.release.yml up -d inference
Với thiết lập này, một phiên không khởi động được trên CUDA sẽ dừng dịch vụ với lỗi STRICT_EP:, và container khởi động lại liên tục cho đến khi bạn khắc phục nguyên nhân. STRICT_EP=1 không có tác dụng khi EXECUTION_MODE là auto.
Phòng ngừa
Phần tiêu đề “Phòng ngừa”- Kiểm tra provider sau mỗi lần cài đặt, cập nhật hoặc thay đổi host. Trên một TX2 khỏe mạnh, bảng điều khiển hiển thị CUDA. Hãy coi CPU (fallback) là một lỗi, không phải biến động bình thường.
- Giữ nguyên tệp compose của gói. Tệp này chứa
runtime: nvidia, thứ mà GPU cần. - Ghim và ép buộc trên các hộp bắt buộc dùng GPU.
EXECUTION_MODE=cudacùngSTRICT_EP=1biến một sự chậm đi âm thầm thành một lỗi khởi động mà bạn nhìn thấy được.
Liên quan
Phần tiêu đề “Liên quan”- GPU không được dùng — lỗi CUDA — khi bản thân CUDA không hoạt động trên host.
- Thiết lập phần cứng — các execution provider của TX2.
- Biến môi trường —
EXECUTION_MODE,STRICT_EPvàFORCE_CPU. - Giám sát — đọc provider đang hoạt động và độ trễ.