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

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

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.

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 đó:

Terminal window
docker exec aiboard-inference-real grep -E "resolved to CPU only|STRICT_EP" /data/logs/inference.log

Mỗ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:

Terminal window
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.

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

    Kế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ạ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. 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/.

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

    Tag 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ành jetson-gpu. Xem Cài đặt từ gói offline.

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

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:

  1. Mở /opt/aiboard/compose/docker-compose.release.yml. Trong danh sách environment: của dịch vụ inference, đổi EXECUTION_MODE=auto thành EXECUTION_MODE=cuda và thêm STRICT_EP=1:

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

  • 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=cuda cùng STRICT_EP=1 biế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.