Triển khai các Mô hình Ngôn ngữ Thị giác Nguồn mở (VLM) trên Jetson

Triển khai các mô hình ngôn ngữ thị giác nguồn mở trên Jetson

  • 9 min read
Triển khai các Mô hình Ngôn ngữ Thị giác Nguồn mở (VLM) trên Jetson
Triển khai các mô hình ngôn ngữ thị giác nguồn mở trên Jetson

Triển khai Mô hình Ngôn ngữ Thị giác (VLM) Mã nguồn Mở trên Jetson

Các Mô hình Ngôn ngữ Thị giác (VLM) đánh dấu một bước tiến lớn trong AI bằng cách kết hợp nhận thức thị giác với suy luận ngữ nghĩa. Vượt ra ngoài các mô hình truyền thống bị giới hạn bởi nhãn cố định, VLM sử dụng không gian nhúng chung để diễn giải và thảo luận về các môi trường phức tạp, mở ra bằng ngôn ngữ tự nhiên.

Tốc độ phát triển nhanh chóng về độ chính xác và hiệu quả suy luận đã làm cho các mô hình này trở nên lý tưởng cho các thiết bị biên. Gia đình NVIDIA Jetson, từ AGX Thor và AGX Orin hiệu năng cao đến Orin Nano Super nhỏ gọn, được chế tạo đặc biệt để thúc đẩy các ứng dụng tăng tốc cho AI vật lý và robot, cung cấp thời gian chạy được tối ưu hóa cần thiết cho các mô hình mã nguồn mở hàng đầu.

Trong hướng dẫn này, chúng tôi sẽ trình bày cách triển khai mô hình NVIDIA Cosmos Reason 2B trên dòng Jetson bằng cách sử dụng framework vLLM. Chúng tôi cũng sẽ hướng dẫn bạn cách kết nối mô hình này với Live VLM WebUI, cho phép giao diện thời gian thực dựa trên webcam để tương tác AI vật lý.

robot_pick_place

Tiền đề

Thiết bị được hỗ trợ:

  • Jetson AGX Thor Developer Kit
  • Jetson AGX Orin (64GB / 32GB)
  • Jetson Orin Super Nano

Phiên bản JetPack:

  • JetPack 6 (L4T r36.x) — dành cho thiết bị Orin
  • JetPack 7 (L4T r38.x) — dành cho Thor

Lưu trữ: Yêu cầu SSD NVMe

  • ~5 GB cho trọng số mô hình FP8
  • ~8 GB cho ảnh container vLLM

Tài khoản:

  • Tạo tài khoản NVIDIA NGC (miễn phí) để tải xuống cả mô hình và container vLLM.

Tổng quan

Jetson AGX Thor Jetson AGX Orin Orin Super Nano
Container vLLM nvcr.io/nvidia/vllm:26.01-py3 ghcr.io/nvidia-ai-iot/vllm:r36.4-tegra-aarch64-cu126-22.04 ghcr.io/nvidia-ai-iot/vllm:r36.4-tegra-aarch64-cu126-22.04
Model FP8 qua NGC (mount volume) FP8 qua NGC (mount volume) FP8 qua NGC (mount volume)
Độ dài Mô hình Tối đa 8192 token 8192 token 256 token (giới hạn bộ nhớ)
Sử dụng Bộ nhớ GPU 0.8 0.8 0.65

Quy trình giống nhau cho cả hai thiết bị:

  1. Tải xuống checkpoint mô hình FP8 qua NGC CLI
  2. Tải về ảnh Docker vLLM cho thiết bị của bạn
  3. Khởi chạy container với mô hình được mount dưới dạng volume
  4. Kết nối Live VLM WebUI với endpoint vLLM

Bước 1: Cài đặt NGC CLI

NGC CLI cho phép bạn tải xuống các checkpoint mô hình từ Danh mục NVIDIA NGC.

Tải xuống và cài đặt

bash mkdir -p ~/Projects/CosmosReason cd ~/Projects/CosmosReason

Tải xuống NGC CLI cho ARM64

Lấy URL trình cài đặt mới nhất từ: https://org.ngc.nvidia.com/setup/installers/cli

wget -O ngccli_arm64.zip https://api.ngc.nvidia.com/v2/resources/nvidia/ngc-apps/ngc_cli/versions/4.13.0/files/ngccli_arm64.zip unzip ngccli_arm64.zip chmod u+x ngc-cli/ngc

Thêm vào PATH

export PATH="$PATH:$(pwd)/ngc-cli"

Cấu hình CLI

bash ngc config set

Bạn sẽ được nhắc nhập:

  • API Key — tạo một tại Thiết lập khóa API NGC
  • Định dạng đầu ra CLI — chọn json hoặc ascii
  • org — nhấn Enter để chấp nhận mặc định

Bước 2: Tải xuống Mô hình

Tải xuống checkpoint FP8 đã được lượng tử hóa. Cái này được sử dụng trên tất cả các thiết bị Jetson:

bash cd ~/Projects/CosmosReason ngc registry model download-version “nim/nvidia/cosmos-reason2-2b:1208-fp8-static-kv8”

Thao tác này sẽ tạo một thư mục có tên cosmos-reason2-2b_v1208-fp8-static-kv8/ chứa trọng số mô hình. Lưu ý đường dẫn đầy đủ — bạn sẽ mount nó vào container Docker dưới dạng một volume.


Bước 3: Tải về ảnh Docker vLLM

Dành cho Jetson AGX Thor

bash docker pull nvcr.io/nvidia/vllm:26.01-py3

Dành cho Jetson AGX Orin / Orin Super Nano

bash docker pull ghcr.io/nvidia-ai-iot/vllm:r36.4-tegra-aarch64-cu126-22.04


Bước 4: Phục vụ Cosmos Reason 2B với vLLM

Tùy chọn A: Jetson AGX Thor

Thor có đủ bộ nhớ GPU và có thể chạy mô hình với độ dài ngữ cảnh lớn.

Đặt đường dẫn đến mô hình đã tải xuống của bạn và giải phóng bộ nhớ đệm trên máy chủ:

bash MODEL_PATH="$HOME/Projects/CosmosReason/cosmos-reason2-2b_v1208-fp8-static-kv8" sudo sysctl -w vm.drop_caches=3

Khởi chạy container với mô hình được mount:

bash docker run –rm -it
–runtime nvidia
–network host
–ipc host
-v “$MODEL_PATH:/models/cosmos-reason2-2b:ro”
-e NVIDIA_VISIBLE_DEVICES=all
-e NVIDIA_DRIVER_CAPABILITIES=compute,utility
nvcr.io/nvidia/vllm:26.01-py3
bash

Bên trong container, kích hoạt môi trường và phục vụ mô hình:

bash vllm serve /models/cosmos-reason2-2b
–max-model-len 8192
–media-io-kwargs ‘{“video”: {“num_frames”: -1}}’
–reasoning-parser qwen3
–gpu-memory-utilization 0.8

Lưu ý: Cờ --reasoning-parser qwen3 cho phép trích xuất suy luận theo chuỗi tư duy. Cờ --media-io-kwargs cấu hình xử lý khung video.

Chờ cho đến khi bạn thấy:

bash INFO: Uvicorn running on http://0.0.0.0:8000

Tùy chọn B: Jetson AGX Orin

AGX Orin có đủ bộ nhớ để chạy mô hình với các tham số hào phóng tương tự như Thor.

Đặt đường dẫn đến mô hình đã tải xuống của bạn và giải phóng bộ nhớ đệm trên máy chủ:

bash MODEL_PATH="$HOME/Projects/CosmosReason/cosmos-reason2-2b_v1208-fp8-static-kv8" sudo sysctl -w vm.drop_caches=3

1. Khởi chạy container:

bash docker run –rm -it
–runtime nvidia
–network host
-v “$MODEL_PATH:/models/cosmos-reason2-2b:ro”
-e NVIDIA_VISIBLE_DEVICES=all
-e NVIDIA_DRIVER_CAPABILITIES=compute,utility
ghcr.io/nvidia-ai-iot/vllm:r36.4-tegra-aarch64-cu126-22.04
bash

2. Bên trong container, kích hoạt môi trường và phục vụ:

bash cd /opt/ source venv/bin/activate

vllm serve /models/cosmos-reason2-2b
–max-model-len 8192
–media-io-kwargs ‘{“video”: {“num_frames”: -1}}’
–reasoning-parser qwen3
–gpu-memory-utilization 0.8

Chờ cho đến khi bạn thấy:

bash INFO: Uvicorn running on http://0.0.0.0:8000

Tùy chọn C: Jetson Orin Super Nano (giới hạn bộ nhớ)

Orin Super Nano có ít RAM hơn đáng kể, vì vậy chúng tôi cần các cờ tối ưu hóa bộ nhớ mạnh mẽ.

Đặt đường dẫn đến mô hình đã tải xuống của bạn và giải phóng bộ nhớ đệm trên máy chủ:

bash MODEL_PATH="$HOME/Projects/CosmosReason/cosmos-reason2-2b_v1208-fp8-static-kv8" sudo sysctl -w vm.drop_caches=3

1. Khởi chạy container:

bash docker run –rm -it
–runtime nvidia
–network host
-v “$MODEL_PATH:/models/cosmos-reason2-2b:ro”
-e NVIDIA_VISIBLE_DEVICES=all
-e NVIDIA_DRIVER_CAPABILITIES=compute,utility
ghcr.io/nvidia-ai-iot/vllm:r36.4-tegra-aarch64-cu126-22.04
bash

2. Bên trong container, kích hoạt môi trường và phục vụ:

bash cd /opt/ source venv/bin/activate

vllm serve /models/cosmos-reason2-2b
–host 0.0.0.0
–port 8000
–trust-remote-code
–enforce-eager
–max-model-len 256
–max-num-batched-tokens 256
–gpu-memory-utilization 0.65
–max-num-seqs 1
–enable-chunked-prefill
–limit-mm-per-prompt ‘{“image”:1,“video”:1}’
–mm-processor-kwargs ‘{“num_frames”:2,“max_pixels”:150528}’

Các cờ chính được giải thích (Chỉ dành cho Orin Super Nano):

Cờ Mục đích
--enforce-eager Tắt biểu đồ CUDA để tiết kiệm bộ nhớ
--max-model-len 256 Giới hạn ngữ cảnh để phù hợp với bộ nhớ có sẵn
--max-num-batched-tokens 256 Khớp với giới hạn độ dài mô hình
--gpu-memory-utilization 0.65 Dự phòng khoảng trống cho các quy trình hệ thống
--max-num-seqs 1 Chỉ một yêu cầu tại một thời điểm để giảm thiểu bộ nhớ
--enable-chunked-prefill Xử lý prefill theo các phần để tiết kiệm bộ nhớ
--limit-mm-per-prompt Giới hạn chỉ 1 hình ảnh và 1 video cho mỗi prompt
--mm-processor-kwargs Giảm số khung video và độ phân giải hình ảnh
--VLLM_SKIP_WARMUP=true Bỏ qua khởi động để tiết kiệm thời gian và bộ nhớ

Chờ cho đến khi bạn thấy máy chủ sẵn sàng:

bash INFO: Uvicorn running on http://0.0.0.0:8000

Xác minh máy chủ đang chạy

Từ một terminal khác trên Jetson:

bash curl http://localhost:8000/v1/models

Bạn sẽ thấy mô hình được liệt kê trong phản hồi.


Bước 5: Kiểm tra bằng lệnh gọi API nhanh

Trước khi kết nối WebUI, hãy xác minh rằng mô hình phản hồi chính xác:

bash curl -s http://localhost:8000/v1/chat/completions
-H “Content-Type: application/json”
-d ‘{ “model”: “/models/cosmos-reason2-2b”, “messages”: [ { “role”: “user”, “content”: “What capabilities do you have?” } ], “max_tokens”: 128 }’ | python3 -m json.tool

Mẹo: Tên mô hình được sử dụng trong yêu cầu API phải khớp với những gì vLLM báo cáo. Hãy xác minh bằng curl http://localhost:8000/v1/models.


Bước 6: Kết nối với Live VLM WebUI

Live VLM WebUI cung cấp giao diện webcam-to-VLM thời gian thực. Với vLLM phục vụ Cosmos Reason 2B, bạn có thể truyền phát webcam của mình và nhận phân tích AI trực tiếp với suy luận.

Cài đặt Live VLM WebUI

Cách dễ nhất là dùng pip (Mở một terminal khác):

bash curl -LsSf https://astral.sh/uv/install.sh | sh source $HOME/.local/bin/env cd ~/Projects/CosmosReason uv venv .live-vlm –python 3.12 source .live-vlm/bin/activate uv pip install live-vlm-webui live-vlm-webui

Hoặc sử dụng Docker:

bash git clone https://github.com/nvidia-ai-iot/live-vlm-webui.git cd live-vlm-webui ./scripts/start_container.sh

Cấu hình WebUI

  1. Mở https://localhost:8090 trong trình duyệt của bạn
  2. Chấp nhận chứng chỉ tự ký (nhấp vào AdvancedProceed)
  3. Trong phần VLM API Configuration ở thanh bên trái:
    • Đặt API Base URL thành http://localhost:8000/v1
    • Nhấp vào nút Refresh để phát hiện mô hình
    • Chọn mô hình Cosmos Reason 2B từ danh sách thả xuống
  4. Chọn camera của bạn và nhấp vào Start

WebUI giờ đây sẽ truyền phát các khung hình webcam của bạn tới Cosmos Reason 2B và hiển thị phân tích của mô hình theo thời gian thực.

Cài đặt WebUI được đề xuất cho Orin

Vì Orin chạy với độ dài ngữ cảnh ngắn hơn, hãy điều chỉnh các cài đặt này trong WebUI:

  • Max Tokens: Đặt thành 100–150 (các phản hồi ngắn hơn hoàn thành nhanh hơn)
  • Frame Processing Interval: Đặt thành 60+ (cho phép mô hình xử lý giữa các khung hình)

Khắc phục sự cố

Hết bộ nhớ trên Orin

Vấn đề: vLLM bị lỗi với các lỗi hết bộ nhớ CUDA.

Giải pháp:

  1. Giải phóng bộ nhớ hệ thống trước khi bắt đầu: bash sudo sysctl -w vm.drop_caches=3

  2. Giảm --gpu-memory-utilization (thử 0.55 hoặc 0.50)

  3. Giảm thêm --max-model-len (thử 128)

  4. Đảm bảo không có quy trình nào khác sử dụng nhiều GPU đang chạy

Mô hình không tìm thấy trong WebUI

Vấn đề: Mô hình không xuất hiện trong danh sách thả xuống của Live VLM WebUI.

Giải pháp:

  1. Xác minh vLLM đang chạy: curl http://localhost:8000/v1/models
  2. Đảm bảo URL cơ sở API của WebUI được đặt thành http://localhost:8000/v1 (không phải https)
  3. Nếu vLLM và WebUI ở các container riêng biệt, hãy sử dụng http://<jetson-ip>:8000/v1 thay vì localhost

Suy luận chậm trên Orin

Vấn đề: Mỗi phản hồi mất rất nhiều thời gian.

Giải pháp:

  • Điều này là mong đợi với cấu hình giới hạn bộ nhớ. Cosmos Reason 2B FP8 trên Orin ưu tiên khớp bộ nhớ hơn tốc độ.
  • Giảm max_tokens trong WebUI để nhận các phản hồi ngắn hơn, nhanh hơn.
  • Tăng khoảng thời gian giữa các khung hình để mô hình không liên tục xử lý các khung hình mới.

vLLM không tải được mô hình

Vấn đề: vLLM báo cáo rằng đường dẫn mô hình không tồn tại hoặc không thể tải.

Giải pháp:

  • Xác minh tải xuống NGC đã hoàn tất thành công: ls ~/Projects/CosmosReason/cosmos-reason2-2b_v1208-fp8-static-kv8/
  • Đảm bảo đường dẫn mount volume chính xác trong lệnh docker run của bạn
  • Kiểm tra xem thư mục mô hình có được mount ở chế độ chỉ đọc (:ro) và đường dẫn bên trong container khớp với những gì bạn truyền cho vllm serve hay không.

Tóm tắt

Trong hướng dẫn này, chúng tôi đã trình bày cách triển khai mô hình NVIDIA Cosmos Reason 2B trên các thiết bị thuộc dòng Jetson bằng vLLM.

Sự kết hợp giữa khả năng suy luận theo chuỗi tư duy của Cosmos Reason 2B với WebUI Live VLM thời gian thực làm cho nó trở nên lý tưởng để tạo mẫu và đánh giá các ứng dụng AI thị giác tại biên.

Alt text


Tài nguyên bổ sung

Recommended for You

Hỗn hợp Chuyên gia (MoE) trong Transformers

Hỗn hợp Chuyên gia (MoE) trong Transformers

Tối ưu hóa MoE trong Transformers

GGML và llama.cpp tham gia HF để đảm bảo sự tiến bộ lâu dài của AI cục bộ

GGML và llama.cpp tham gia HF để đảm bảo sự tiến bộ lâu dài của AI cục bộ

GGML và llama.cpp đang tham gia HF để đảm bảo sự tiến bộ lâu dài của AI cục bộ