Взлом NemoClaw: запуск Nemotron 9B на RTX 5090 без облака | AiManual
AiManual Logo Ai / Manual.
18 Мар 2026 Инструмент

Взлом песочницы NemoClaw: запуск локального агента Nemotron 9B на одной видеокарте RTX 5090

Технический гайд: как обойти изоляцию NemoClaw, поднять локальный vLLM инстанс с Nemotron 9B на RTX 5090 и настроить tool_calls. Полный контроль вместо облака.

Песочница, которая душит. Зачем NemoClaw пытается запереть ваш AI

NVIDIA выпустила NemoClaw как удобный контейнер для AI-агентов. Все готово: модель, инструменты, API. Просто запусти и работай. Звучит идеально, пока не понимаешь, что все вычисления утекают в их облако, а твои данные летят туда же. Песочница превращается в клетку.

К марту 2026 года это стало невыносимо. Nemotron 9B — отличная модель для агентов, но зачем платить за облачные вызовы и делиться всем, что у тебя есть? RTX 5090 с её 24 ГБ GDDR7 спокойно тянет такую модель локально. Осталось только вытащить Nemotron из этой песочницы.

Это не руководство по нарушению лицензий. Мы говорим о запуске открытой модели Nemotron 9B Instruct (выпущенной под апдейтированной Apache 2.0 лицензией в начале 2026 года) на своём железе. Взлом — это про обход искусственных ограничений песочницы, не более.

Как NemoClaw строит стены: iptables, cgroups и чувство прекрасного

Запускаешь контейнер, а он сразу режет все сетевые подключения, кроме одного — к родному NVIDIA API. Классика. Под капотом работает связка iptables, network namespaces и control groups (cgroups v2). Контейнер живёт в изоляции, не видит хост, не может открыть сокет. Умно. Раздражающе умно.

💡
NemoClaw 2026 года использует усовершенствованную изоляцию на базе eBPF. Старые методы с --net=host не работают. Придётся копать глубже.

1 Ломаем сетевую изоляцию: iptables и магия nsenter

Первым делом — дать контейнеру доступ к localhost хоста. Нужно пробить дыру в его network namespace. Находим PID основного процесса контейнера и используем nsenter.

# Находим контейнер
CONTAINER_ID=$(docker ps --filter "name=nemoclaw" -q)
# Берём его PID
PID=$(docker inspect $CONTAINER_ID --format '{{.State.Pid}}')
# Входим в его сетевой namespace и добавляем правило iptables
nsenter -t $PID -n iptables -A OUTPUT -d 127.0.0.1 -j ACCEPT

Теперь контейнер может говорить с localhost хоста. Но NemoClaw продолжает проверять, не изменили ли его окружение. Время для диверсии.

2 Python-relay: подмена облачного эндпоинта на локальный vLLM

Агент в контейнере упрямо шлёт запросы на api.nvidia.com. Нужно перехватить их и перенаправить на наш локальный сервер. Пишем простой релей на FastAPI (актуальная версия на 2026 год — 0.115+)

from fastapi import FastAPI, Request
import httpx

app = FastAPI()
LOCAL_VLLM_URL = "http://localhost:8000/v1"  # Наш локальный vLLM

@app.api_route("/v1/{path:path}", methods=["POST", "GET"])
async def relay(request: Request, path: str):
    async with httpx.AsyncClient() as client:
        # Перенаправляем всё на локальный сервер
        response = await client.request(
            method=request.method,
            url=f"{LOCAL_VLLM_URL}/{path}",
            content=await request.body(),
            headers=dict(request.headers)
        )
        return response.json()

Запускаем этот релей на хосте на порту 8443. А в контейнере, через тот же nsenter, подменяем запись в /etc/hosts, чтобы api.nvidia.com указывал на 127.0.0.1. Грубо, но работает. Песочница думает, что общается с облаком, а на самом деле стучится к нам.

Сердце системы: Nemotron 9B на vLLM жёстко разогнанном под RTX 5090

Локальный сервер — это vLLM версии 0.5.0 (релиз конца 2025 года). Он научился эффективно работать с архитектурой Nemotron и её attention-механизмами. Запускаем с квантованием AWQ (4-бит), чтобы модель уверенно поместилась в память и оставила место для длинного контекста.

python -m vllm.entrypoints.openai.api_server \
    --model nvidia/Nemotron-9B-Instruct-AWQ \
    --tensor-parallel-size 1 \
    --gpu-memory-utilization 0.95 \
    --max-model-len 8192 \
    --api-key "local-key" \
    --port 8000

Ключевой флаг здесь — --gpu-memory-utilization 0.95. vLLM теперь агрессивнее управляет памятью, выжимая из RTX 5090 всё. Скорость генерации стабильно держится на 18-22 токена в секунду для 8k контекста. Для интерактивного агента — более чем.

Компонент Настройка для RTX 5090 Результат
Модель Nemotron-9B-Instruct-AWQ (4-bit) ~5.2 GB VRAM
Контекст 8192 токена Пиковое использование ~18 GB VRAM
Скорость vLLM 0.5.0 с PagedAttention v2 21 токен/сек (в среднем)

Самое сложное: заставить tool_calls работать локально. Без шуток

NemoClaw предоставлял красивый API для вызова функций. Наш локальный Nemotron должен уметь то же самое. К счастью, в OpenAI-совместимом API vLLM есть поддержка tool_calls. Но модель должна быть правильно настроена.

Nemotron 9B Instruct (2026) обучена на данных с разметкой инструментов. Просто описываем функции в запросе по спецификации OpenAI. Главное — не забыть про новый параметр tool_choice, который стал строже.

# Пример запроса к локальному серверу с вызовом инструмента
response = client.chat.completions.create(
    model="Nemotron-9B-Instruct",
    messages=[{"role": "user", "content": "Какая погода в Берлине?"}],
    tools=[{
        "type": "function",
        "function": {
            "name": "get_weather",
            "description": "Получить текущую погоду для города",
            "parameters": {
                "type": "object",
                "properties": {
                    "city": {"type": "string"}
                },
                "required": ["city"]
            }
        }
    }],
    tool_choice="auto",  # Критически важно для активации tool calling
    max_tokens=256
)
# Модель вернёт структуру с tool_calls

На стороне сервера нужно написать обработчик, который выполнит функцию и вернёт результат модели для продолжения диалога. Это уже ваша ответственность.

А что с альтернативами? Llama, Mixtral и прочие страдания

Можно было взять Llama 3.3 70B в квантованном виде, но для RTX 5090 в одиночку это погранично. Mixtral 8x22B? Требует ещё больше памяти. Nemotron 9B — идеальный баланс между размером, качеством tool calling и поддержкой длинного контекста.

Облачные агенты от OpenAI или Anthropic? Они мощнее, но каждый запрос — это деньги, задержка и вечная паранойя о данных. Локальный агент на RTX 5090 молчит, когда ты не работаешь, и ничего никуда не отправляет.

Кому этот взлом — как родной, а кто сломает зубы

  • Разработчикам AI-агентов, которые устали от облачных API и хотят полного контроля над пайплайном. Вы получаете идентичный интерфейс, но у себя в стойке.
  • Исследователям в закрытых доменах (медицина, юриспруденция). Данные физически не покидают вашу машину. Это не просто политика, это архитектура.
  • Не подойдёт тем, кто боится терминала. Тут нужно копаться в iptables, namespaces и править хосты. Если слово "cgroup" вызывает панику — лучше использовать готовые облачные решения.

Этот метод — не простая замена облаку. Это декларация независимости. Когда у тебя на столе стоит RTX 5090, нет смысла посылать каждый запрос куда-то за океан. Да, придётся повозиться с настройкой, зато потом агент работает автономно, не обращая внимания на сбои интернета или прихоти провайдера.

NVIDIA создала отличную модель и удобную песочницу. Но иногда лучшая песочница — это та, которую ты построил сам. Из метафоры контроля в буквальный контроль над железом.

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