Запуск NVIDIA Cosmos на Jetson с vLLM: гайд для edge-VLM в 2026 | AiManual
AiManual Logo Ai / Manual.
01 Мар 2026 Гайд

Развертывание Vision-Language модели NVIDIA Cosmos на Jetson: полный туториал с vLLM

Пошаговый туториал по развертыванию VLM NVIDIA Cosmos на Jetson AGX Thor/Orin с vLLM. JetPack 6.0+, оптимизация памяти, работа с камерой и примеры кода.

Почему все хотят запускать большие VLM на краю сети, и почему это боль

В 2026 году роботам и дронам недостаточно просто 'видеть'. Им нужно понимать сцену, контекст, предсказывать действия. Vision-Language модели (VLM) типа NVIDIA Cosmos - это как раз то, что нужно. Но облачный инференс для робота? Забудьте. Задержки в 200 мс - это авария.

Проблема в том, что последние VLM, даже в квантованном виде, требуют памяти, которую на edge-устройствах считают роскошью. А еще ARM-архитектура, ограниченный CUDA Toolkit, вечная нехватка места под модели. И самое главное - инструменты для инференса, которые на x86 работают из коробки, на Jetson'е собираются через слезы и молитвы.

Что изменилось в 2026: vLLM выпустила стабильную поддержку ARM в версии 0.5.1. NVIDIA обновила JetPack до 6.0.1 с оптимизациями под трансформеры. А модель Cosmos-12B-Instruct получила версию с 4-битным квантованием специально для Jetson.

Что вам понадобится: железо и софт без компромиссов

Не пытайтесь запустить это на Jetson Nano. Серьезно. Минимум - Jetson Orin NX 16GB. А лучше - AGX Orin 64GB или новейший AGX Thor с 120 TOPS. Cosmos даже в квантованном виде кушает память.

  • Jetson AGX Orin 64GB или Jetson AGX Thor (релиз в конце 2024, но в 2026 это стандарт для проектов с VLM)
  • JetPack 6.0.1 (L4T R36.4) - только эта версия имеет все патчи для стабильной работы vLLM
  • Не менее 40 ГБ свободного места на SSD (модель + кэш)
  • Активный кулер - инференс будет грузить GPU на 90%+
  • Доступ к интернету с хорошей скоростью (скачиваем 20+ ГБ весов)

Проверьте это первым: Запустите cat /etc/nv_tegra_release. Должно быть # R36 (release), REVISION: 6.0.1. Если у вас JetPack 5.x - обновляйтесь. vLLM 0.5.1 на нем работать не будет корректно.

1 Чистая установка и настройка окружения

Не устанавливайте ничего в системный Python. Сейчас создадим изолированное окружение с правильными версиями библиотек для ARM.

# Обновляем систему
sudo apt update
sudo apt full-upgrade -y

# Ставим системные зависимости
sudo apt install -y python3.10-venv python3.10-dev build-essential \
    curl git-lfs cmake libopenblas-dev libxml2-dev libxslt-dev

# Создаем venv
python3.10 -m venv ~/cosmos_env
source ~/cosmos_env/bin/activate

# Обновляем pip и setuptools
pip install --upgrade pip setuptools wheel

Почему Python 3.10? Потому что в JetPack 6.0.1 это системная версия, и сборка некоторых нативных расширений для 3.11 и выше может вызвать проблемы. (Да, даже в 2026 году приходится считаться с системными ограничениями.)

2 Установка vLLM с оптимизациями под Jetson

Вот здесь большинство туториалов ломаются. Они предлагают просто pip install vllm, что скачивает бинарные wheels для x86. На ARM нужно собирать из исходников с правильными флагами.

# Устанавливаем Pytorch для Jetson - ОБЯЗАТЕЛЬНО с официального сайта NVIDIA
pip install --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/cu124

# Сначала ставим зависимости, которые нужны для сборки
pip install ninja packaging

# Клонируем vLLM с патчами для ARM (в ветке main на 01.03.2026 уже есть все нужное)
git clone https://github.com/vllm-project/vllm.git
cd vllm

# Собираем с оптимизациями под Jetson
MAX_JOBS=4 pip install -e . \
    --no-build-isolation \
    --config-settings=\"cmake.define.CUDA_ARCHITECTURES=87-real\"  # Для Orin. Для Thor будет 90-real

# Проверяем установку
python -c "import vllm; print(f'vLLM версия: {vllm.__version__}')"

Флаг CUDA_ARCHITECTURES=87-real критически важен. 87 - это compute capability для Jetson Orin. Для AGX Thor будет 90. Если указать неверно, компилятор не сможет оптимизировать ядра, и производительность упадет в 2-3 раза.

💡
Если сборка падает из-за нехватки памяти (а на 16GB Jetson это частое явление), добавьте в swap. sudo fallocate -l 8G /swapfile && sudo chmod 600 /swapfile && sudo mkswap /swapfile && sudo swapon /swapfile. После установки можно удалить.

3 Загрузка и подготовка модели NVIDIA Cosmos

На 01.03.2026 актуальная версия - Cosmos-12B-Instruct-v1.2-GPTQ-4bit. Находится она в репозитории Hugging Face, но весит около 8 ГБ. Убедитесь, что у вас есть место.

# Устанавливаем huggingface-hub
git lfs install
pip install huggingface-hub

# Скачиваем модель
python -c "
from huggingface_hub import snapshot_download
snapshot_download(
    repo_id='nvidia/Cosmos-12B-Instruct-v1.2-GPTQ-4bit',
    local_dir='/home/nvidia/models/cosmos-12b-4bit',
    ignore_patterns=['*.safetensors', '*.bin'],  # Берем только конвертированные веса
    local_dir_use_symlinks=False
)
"

Почему игнорируем safetensors? Потому что vLLM 0.5.1 на ARM иногда имеет проблемы с загрузкой safetensors. Лучше использовать конвертированные веса в формате .bin или .pt.

Если вы работаете с робототехническими задачами, вам может пригодиться подход из статьи про PhysicalAgent, где VLM адаптируют под управление роботами без тонкой настройки.

4 Запуск сервера vLLM с оптимизациями памяти

Теперь самое интересное. Запускаем сервер инференса с параметрами, которые не перегружают память Jetson.

# Экспортируем переменные для оптимизации
export PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:128
export VLLM_ATTENTION_BACKEND=XFORMERS  # Используем xFormers для экономии памяти

# Запускаем сервер
python -m vllm.entrypoints.openai.api_server \
    --model /home/nvidia/models/cosmos-12b-4bit \
    --tensor-parallel-size 1  \
    --gpu-memory-utilization 0.85 \
    --max-model-len 2048 \
    --served-model-name cosmos-12b \
    --port 8000 \
    --host 0.0.0.0 \
    --dtype half \
    --enforce-eager  # Важно для избежания ошибок графа на ARM

Что здесь происходит:

  • --gpu-memory-utilization 0.85 - оставляем 15% памяти для предобработки изображений
  • --tensor-parallel-size 1 - не пытаемся распараллеливать на несколько GPU (их у Jetson всего один)
  • --enforce-eager - отключаем graph mode, который на ARM CUDA 12.4 может вести себя нестабильно
  • --max-model-len 2048 - ограничиваем контекст, иначе память закончится

Если видите ошибку CUDA out of memory, уменьшите --gpu-memory-utilization до 0.75. На Jetson Orin 32GB можно попробовать 0.9, но следите за температурой.

5 Тестирование: отправляем запрос с изображением

Сервер запущен на порту 8000. Он совместим с OpenAI API. Давайте протестируем.

Создаем тестовый скрипт:

import base64
import requests
import json

# Кодируем изображение в base64
with open("test_image.jpg", "rb") as image_file:
    base64_image = base64.b64encode(image_file.read()).decode('utf-8')

# Формируем запрос для VLM
headers = {
    "Content-Type": "application/json"
}

payload = {
    "model": "cosmos-12b",
    "messages": [
        {
            "role": "user",
            "content": [
                {
                    "type": "text",
                    "text": "Что происходит на этом изображении? Опиши подробно."
                },
                {
                    "type": "image_url",
                    "image_url": {
                        "url": f"data:image/jpeg;base64,{base64_image}"
                    }
                }
            ]
        }
    ],
    "max_tokens": 300,
    "temperature": 0.1
}

response = requests.post(
    "http://localhost:8000/v1/chat/completions",
    headers=headers,
    data=json.dumps(payload)
)

print(response.json()['choices'][0]['message']['content'])

Это самый простой тест. В реальном проекте для дронов вам понадобится интеграция с камерами и системами управления. Посмотрите статью про End-to-End беспилотник на VLM - там показано, как заставить VLM принимать решения о полете.

Нюансы, о которых молчат официальные руководства

Тепловой троттлинг - враг номер один

Jetson под нагрузкой греется. Сильно. Если температура достигает 85°C, включается троттлинг - частота GPU падает, инференс замедляется в 2-3 раза.

Что делать:

  • Установите активное охлаждение. Пассивного радиатора недостаточно.
  • В мониторинге используйте tegrastats. Следите за строкой GPU и Tboard.
  • Если температура приближается к 80°C, добавьте в скрипт паузы между запросами.

Подготовка изображений: не кормите модель 4K

Cosmos принимает изображения 336x336 пикселей. Если вы подаете 4K кадр, vLLM сам ресайзит, но на это уходит драгоценное время CPU. Ресайзьте заранее.

# Правильно:
from PIL import Image
import io

img = Image.open("high_res.jpg")
img = img.resize((336, 336), Image.Resampling.LANCZOS)
# Теперь кодируйте в base64 и отправляйте

# Неправильно:
# Отправлять 4K изображение и надеяться, что vLLM справится

Пакетная обработка (batching) на Jetson - игра с огнем

vLLM поддерживает batching - обработку нескольких запросов одновременно. На серверных GPU это ускоряет throughput. На Jetson с его 64GB памяти (из которых 50 доступно для модели) batching может привести к OOM.

Рекомендация: для real-time приложений (робот, дрон) используйте batch size = 1. Для обработки логов или архивных данных можно попробовать batch size = 2, но мониторьте память.

💡
Для автомобильных применений посмотрите Alpamayo от Nvidia - это специализированный стек для автономного вождения, построенный вокруг Cosmos и похожих моделей.

А если нужно еще компактнее? Альтернативы

Cosmos-12B не помещается в 8GB? Есть варианты. Модель Youtu-VL-4B-Instruct работает в 8GB памяти. Или можно взять Cosmos-Reason2 в 4-битном квантовании - гайд по нему тут.

Но помните: чем меньше модель, тем хуже качество понимания сложных сцен. Для распознавания 'кошка на диване' хватит 4B. Для 'можно ли пересечь эту дорогу, учитывая скорость машин и состояние пешеходного перехода' - лучше 12B+.

Что дальше? Интеграция в реальную систему

Сервер vLLM - это только инференс. В реальном проекте вам нужно:

  1. Настроить прием изображений с камеры (ROS2, GStreamer)
  2. Добавить препроцессинг: детекцию объектов, обрезку ROI
  3. Постпроцессинг: парсинг ответа модели в команды управления
  4. Систему логгирования и мониторинга

И главное - тестирование. Не в лаборатории, а в условиях, приближенных к реальным. Потому что разница между 'модель работает' и 'модель работает достаточно надежно для автономного робота' - это около шести месяцев доводки.

На 2026 год тренд очевиден: VLM становятся достаточно эффективными для edge-устройств. Через год появятся 20B модели, которые будут работать там, где сегодня работают 12B. А значит, роботы станут чуть менее слепыми. Главное - правильно их развернуть.

Подписаться на канал