Песочница, которая душит. Зачем 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). Контейнер живёт в изоляции, не видит хост, не может открыть сокет. Умно. Раздражающе умно.
--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 создала отличную модель и удобную песочницу. Но иногда лучшая песочница — это та, которую ты построил сам. Из метафоры контроля в буквальный контроль над железом.