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

GPU không được dùng — lỗi CUDA

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ỗi STRICT_EP: rồi liên tục khởi động lại.

Chạy các lệnh sau trên TX2.

  1. Kiểm tra bản phát hành JetPack:

    Terminal window
    head -n 1 /etc/nv_tegra_release

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

  2. Kiểm tra Docker có biết NVIDIA runtime không:

    Terminal window
    docker info 2>/dev/null | grep -i runtime

    Dòng Runtimes: phải có nvidia.

  3. Kiểm tra cách container suy luận đang chạy:

    Terminal window
    docker inspect -f '{{.HostConfig.Runtime}} {{.Config.User}}' aiboard-inference-real

    Kế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áo no CUDA-capable device is detected ngay cả trên một bo mạch khỏe mạnh.

  4. 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"

Sửa bước kiểm tra bị lỗi, rồi khởi động lại dịch vụ suy luận.

  1. 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-runtime

    Sau đó đăng ký nó trong /etc/docker/daemon.json và đặ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.

  2. 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ạy sudo ./update.sh từ một gói phát hành cùng phiên bản hoặc mới hơn.

  3. Không phải JetPack 4.5. Chạy gói trên một TX2 đã flash JetPack 4.5.

  4. 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-real

    Dịch vụ có tối đa 90 giây để khởi động. Sau đó thẻ hiển thị CUDA.

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.

  • 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=cuda và đặt STRICT_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ị starting tố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.