GPU không được dùng — lỗi CUDA
Triệu chứng
Phần tiêu đề “Triệu chứng”Bạn thấy một trong các dấu hiệu sau trên Jetson TX2:
- Thẻ Suy luận Python hiển thị CPU (fallback), và Chạy trên CPU khi đáng lẽ phải dùng GPU không tìm thấy vấn đề nào ở tệp compose hay image.
- Stack không khởi động, và Docker báo rằng nó không biết runtime
nvidia. - Container suy luận ghi log
no CUDA-capable device is detected. - Ép buộc GPU nghiêm ngặt đang bật (
STRICT_EP=1), và container suy luận thoát với lỗiSTRICT_EP:rồi liên tục khởi động lại.
Xác nhận
Phần tiêu đề “Xác nhận”Chạy các lệnh sau trên TX2.
-
Kiểm tra bản phát hành JetPack:
Terminal window head -n 1 /etc/nv_tegra_releaseJetPack 4.5 in ra một dòng bắt đầu bằng
# R32 (release), REVISION: 5.. Gói phát hành được build cho JetPack 4.5. Container nhận các thư viện CUDA từ host, nên trên một bản JetPack khác, chúng có thể không khớp với những gì image cần. -
Kiểm tra Docker có biết NVIDIA runtime không:
Terminal window docker info 2>/dev/null | grep -i runtimeDòng
Runtimes:phải cónvidia. -
Kiểm tra cách container suy luận đang chạy:
Terminal window docker inspect -f '{{.HostConfig.Runtime}} {{.Config.User}}' aiboard-inference-realKết quả phải là
nvidia 0:0. Các nút thiết bị GPU của TX2 cần NVIDIA runtime và quyền root. Không có root, CUDA báono CUDA-capable device is detectedngay cả trên một bo mạch khỏe mạnh. -
Tìm lỗi CUDA từ lần khởi động gần nhất:
Terminal window docker logs --tail 200 aiboard-inference-real 2>&1 | grep -iE "cuda|STRICT_EP"
Khắc phục
Phần tiêu đề “Khắc phục”Sửa bước kiểm tra bị lỗi, rồi khởi động lại dịch vụ suy luận.
-
Docker không có runtime
nvidia. Cài NVIDIA container runtime đi kèm JetPack 4.5, từ kho apt của JetPack 4.5 hoặc bằng NVIDIA SDK Manager:Terminal window sudo apt-get install -y nvidia-container-runtimeSau đó đăng ký nó trong
/etc/docker/daemon.jsonvà đặt làm mặc định:{"runtimes": {"nvidia": { "path": "nvidia-container-runtime", "runtimeArgs": [] }},"default-runtime": "nvidia"}Khởi động lại Docker bằng
sudo systemctl restart docker. -
Container không chạy với
nvidia 0:0. Tệp compose đã cài 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. -
Không phải JetPack 4.5. Chạy gói trên một TX2 đã flash JetPack 4.5.
-
Khởi động lại dịch vụ suy luận và kiểm tra bảng điều khiển:
Terminal window docker restart aiboard-inference-realDịch vụ có tối đa 90 giây để khởi động. Sau đó thẻ hiển thị CUDA.
Trong lúc host vẫn còn hỏng
Phần tiêu đề “Trong lúc host vẫn còn hỏng”Hãy cố ý chạy trên CPU thay vì vật lộn với GPU. Trong tệp compose đã cài, đặt EXECUTION_MODE=cpu cho dịch vụ suy luận, và bỏ STRICT_EP=1 nếu bạn đã thêm. Trang Chạy trên CPU khi đáng lẽ phải dùng GPU chỉ ra vị trí tệp và cách áp dụng thay đổi. Khi đó thẻ hiển thị CPU, và hộp tiếp tục dự đoán cho đến khi bạn sửa xong host. Sau đó hãy đặt EXECUTION_MODE về lại auto.
Không kết hợp STRICT_EP=1 với EXECUTION_MODE=cuda trên một host bị hỏng. Container khi đó sẽ từ chối khởi động, điều ngược lại với những gì bạn muốn trong lúc tạm khắc phục.
Phòng ngừa
Phần tiêu đề “Phòng ngừa”- Chạy lại các bước kiểm tra sau mọi thay đổi trên host. Sau khi thay đổi JetPack, Docker hoặc gói NVIDIA, hãy chạy các bước kiểm tra ở trên và xác nhận thẻ hiển thị CUDA.
- Làm cho việc tụt bậc âm thầm lộ rõ ở nơi bắt buộc dùng GPU. Ghim
EXECUTION_MODE=cudavà đặtSTRICT_EP=1, để một stack CUDA bị hỏng dừng container ngay khi khởi động thay vì lặng lẽ chạy trên CPU. - Lần khởi động đầu chậm, không phải bị treo. Health check của dịch vụ suy luận hiển thị
startingtối đa 90 giây trong khi CUDA khởi tạo. TensorRT không được dùng trên TX2, nên không có bước biên dịch engine.
Liên quan
Phần tiêu đề “Liên quan”- Chạy trên CPU khi đáng lẽ phải dùng GPU — khi GPU vẫn hoạt động nhưng dịch vụ vẫn tụt xuống CPU.
- Triển khai trên Jetson — các thiết lập TX2 mà tệp compose của gói mang theo.
- Thiết lập phần cứng — các execution provider của TX2.
- Giám sát — nơi hiển thị provider đang hoạt động.