NIM на GX10: LLM микросервиз с OpenAI API
NVIDIA NIM е готов контейнер с модел: пускаш го с една команда на Docker и получаваш HTTP адрес, който говори като OpenAI. Разглеждаме как става това на локален AI сървър от класа NVIDIA GB10 и кога е по-удобен от Ollama или vLLM.
…-dgx-spark), а не общият; ключът вече не се записва в ~/.bashrc, а се въвежда скрито и се подава на docker login през stdin; проверката на видеокартата ползва образ CUDA 13.0.1 вместо 12.0; добавихме --shm-size=16GB и втора папка (workspace), както в playbook-а. Махнахме твърденията „2–5 пъти по-бърз“, размерите на паметта по модели и файла Compose с втори NIM (вграждане) — не са потвърдени от документацията за GB10, а Compose форматът version: 3.8 е остарял. Не даваме числа за скорост: не сме ги мерили.
01Какво ще научиш
- Какво е NIM и с какво се различава от Ollama: контейнер с един модел и готов OpenAI-съвместим адрес.
- Как да получиш NGC ключ и да влезеш в регистъра на NVIDIA, без да оставяш ключа в файлове.
- Как да пуснеш NIM контейнер за Llama 3.1 8B и да пазиш модела в кеш.
- Как да изпратиш заявка и да четеш отговора.
- Как да отстраняваш най-честите проблеми.
02Преди да започнеш
- Машина от класа NVIDIA GB10 (например ASUS Ascent GX10 или DGX Spark) с DGX OS и достъп до терминала ѝ.
- Docker с NVIDIA Container Toolkit (на DGX Spark е предварително настроен — по документацията на NVIDIA).
- Акаунт в NGC и API ключ от страницата за настройка на ключове на NGC. Ключът е парола към регистъра: не го пиши в Git, в Compose файл или в страница.
- Свободен порт 8000 и интернет към
nvcr.io. - Свободно място: по playbook-а най-малко 10–50 GB за кеша на модела (зависи от модела).
| Ollama | NIM | |
|---|---|---|
| Какво е | Общ двигател за много модели | Готов контейнер за един модел |
| Инсталация | Една команда или контейнер | Docker + NGC ключ |
| Модели | Огромна библиотека | Само каталогът на NVIDIA (NGC) |
| API | Собствен + съвместим с OpenAI | Съвместим с OpenAI |
| Скорост | Не сме мерили и не твърдим разлика. Мери с твоя модел и твоите заявки. | |
03Стъпки
-
Провери, че Docker вижда видеокартата
Защо: ако контейнер не получава GPU, NIM няма да стартира, а грешката е по-ясна тук, отколкото след дълго изтегляне.
bash · на машинатаnvidia-smi docker --version docker run --rm --gpus all nvcr.io/nvidia/cuda:13.0.1-devel-ubuntu24.04 nvidia-smiОчакваш таблица с видеокартата и от вътре в контейнера. Редът за памет може да е „Not Supported“ — на GB10 паметта е обща.
Ако Docker отказва достъп до сокета, добави потребителя си към групата
docker(sudo usermod -aG docker $USER, послеnewgrp docker). -
Вход в регистъра на NVIDIA
Потребителското име е буквално
$oauthtoken(със знака долар, в единични кавички), а паролата е твоят NGC ключ. Така го въвеждаме скрито и го подаваме през stdin — ключът не остава в историята на командите:bashread -rs NGC_API_KEY # поставяш ключа; не се показва export NGC_API_KEY echo "$NGC_API_KEY" | docker login nvcr.io --username '$oauthtoken' --password-stdinОчакваш „Login Succeeded“. Playbook-ът на NVIDIA показва същия вход с
export; скритото въвеждане е наша добавка и не е пускано.✅Пази ключаНе го слагай в~/.bashrc, в Git или в файл на Compose. При изтичане го отмени и създай нов от NGC. Затвори терминала след работа — променливата живее само в него. -
Избери образ и подготви кеш
Защо кеш: контейнерът изтегля модела при първо стартиране. Ако папката е на твоя диск и е вързана към контейнера, следващите стартирания не теглят отново. Образът е вариантът за DGX Spark; NVIDIA посочва още
qwen3-32b-dgx-spark.bashexport CONTAINER_NAME="nim-llm-demo" export IMG_NAME="nvcr.io/nim/meta/llama-3.1-8b-instruct-dgx-spark:latest" export LOCAL_NIM_CACHE=~/.cache/nim export LOCAL_NIM_WORKSPACE=~/.local/share/nim/workspace mkdir -p "$LOCAL_NIM_WORKSPACE" "$LOCAL_NIM_CACHE" chmod -R a+w "$LOCAL_NIM_WORKSPACE" "$LOCAL_NIM_CACHE"Тагът
latestе от playbook-а. За работа, която трябва да е повторяема, закачи конкретен таг от страницата на образа в NGC. -
Стартирай контейнера
bashdocker run -it --rm --name=$CONTAINER_NAME \ --gpus all \ --shm-size=16GB \ -e NGC_API_KEY=$NGC_API_KEY \ -v "$LOCAL_NIM_CACHE:/opt/nim/.cache" \ -v "$LOCAL_NIM_WORKSPACE:/opt/nim/workspace" \ -p 8000:8000 \ $IMG_NAMEПървия път моделът се изтегля и стартирането може да отнеме няколко минути (точно време не сме мерили). Търси съобщения, че услугата е готова. Терминалът остава зает — следващата стъпка е в нов прозорец.
⚠️Портът е отворен към мрежата-p 8000:8000е като в playbook-а и публикува порта на всички интерфейси на машината. На споделена мрежа напиши-p 127.0.0.1:8000:8000и стигай до адреса през SSH тунел. ⚠️ Този вариант е наша промяна и не е пускан. -
Изпрати заявка
Адресът е съвместим с OpenAI: същите полета
modelиmessages. Затова клиентските библиотеки за OpenAI работят, като им смениш само базовия адрес. От друго устройство замениlocalhostс<адрес-на-машината>.bashcurl -X POST http://localhost:8000/v1/chat/completions \ -H 'Content-Type: application/json' \ -d '{ "model": "meta/llama-3.1-8b-instruct", "messages": [{"role": "user", "content": "Здравей! Представи се с едно изречение."}], "max_tokens": 100 }'Очакваш JSON с масив
choices, в който е текстът на модела. -
Спиране и почистване
bashdocker stop $CONTAINER_NAME # --rm го премахва сам # само ако ти трябва мястото (следващият път моделът се тегли пак): rm -rf "$LOCAL_NIM_CACHE" -
Когато нещо не върви
По таблицата за отстраняване на проблеми на NVIDIA:
Признак Какво правиш Грешка за GPU при старт Контейнерният инструментариум не е настроен: инсталирай nvidia-container-toolkitи рестартирай Docker.„Invalid credentials“ при вход Грешен формат на ключа: вземи го наново от NGC, без излишни интервали. Изтеглянето виси или пада Провери връзката и свободното място в папката на кеша. 404 или отказана връзка Контейнерът още не е стартирал докрай или портът е друг: изчакай и провери порт 8000. runtime not foundПусни sudo nvidia-ctk runtime configure --runtime=dockerи рестартирай Docker.Натиск върху паметта въпреки че си в лимита Паметта е обща; NVIDIA препоръчва да изчистиш буферния кеш: sudo sh -c 'sync; echo 3 > /proc/sys/vm/drop_caches'.
04Проверка
- Тестът с
nvidia-smiв контейнер показва видеокартата. docker loginзавършва успешно.- Заявката връща JSON с
choices. - Кешът е в папка на диска и оцелява след спиране на контейнера.
- Ключът не е в Git, в профила на обвивката или в Compose файл.
Тест
1. Какво е потребителското име при docker login nvcr.io?
2. Защо папката на кеша е вързана към контейнера?
3. Къде е правилно да стои NGC ключът?
4. Какво позволява „съвместим с OpenAI“ адрес?
05Какво следва
06Източници
- NVIDIA: Deploy NVIDIA NIM for LLM Inference (DGX Spark) — обзор, стъпки и отстраняване на проблеми; последно обновен 31.07.2026; сверено 03.10.2026.
- NVIDIA NIM for LLMs: documentation · поддържани модели — не е отварян целият раздел при проверката ⚠️.
- Llama 3.1 8B Instruct NIM for DGX Spark · Qwen3-32B NIM for DGX Spark 🌐 глобален
- NGC: създаване на API ключ 🌐 глобален
- NVIDIA DGX Spark: документация