Каталог build.nvidia.com містить понад 100 моделей. Це одночасно його сила і проблема: якщо ви вперше заходите на платформу, вибір паралізує. DeepSeek чи Kimi? Nemotron чи Llama? GLM-5 чи Qwen3.5?
Ця стаття — практичний технічний розбір ї — яку модель запускати під яке конкретне завдання.
Читали попередній матеріал? У статті «NVIDIA NIM: як безкоштовний inference змінює архітектуру AI-систем» я розібрав, чому inference стає commodity layer, чим NVIDIA Build відрізняється від OpenRouter і Groq та які архітектурні наслідки це має для AI-агентів. Цей матеріал — логічне продовження: конкретні моделі, конкретний код.
Зміст
Підключення до NVIDIA NIM: перші кроки
Перш ніж порівнювати моделі — базовий setup. Він займає менше 5 хвилин.
Крок 1. Зареєструйтесь у NVIDIA Developer Program (безкоштовно, потрібен лише email).
Крок 2. Згенеруйте API key на build.nvidia.com. Ключ матиме префікс nvapi-.
Крок 3. Встановіть залежності:
pip install openai
export NVIDIA_API_KEY="nvapi-ваш-ключ"
Базовий Python-клієнт:
from openai import OpenAI
client = OpenAI(
api_key="nvapi-ваш-ключ",
base_url="https://integrate.api.nvidia.com/v1"
)
response = client.chat.completions.create(
model="meta/llama-4-scout-17b-16e-instruct", # замінюйте лише цей рядок
messages=[
{"role": "system", "content": "Ти технічний асистент."},
{"role": "user", "content": "Напиши функцію для бінарного пошуку на Python."}
],
temperature=0.1,
max_tokens=1024
)
print(response.choices[0].message.content)
curl-еквівалент:
curl https://integrate.api.nvidia.com/v1/chat/completions \
-H "Authorization: Bearer $NVIDIA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "meta/llama-4-scout-17b-16e-instruct",
"messages": [
{"role": "user", "content": "Напиши функцію для бінарного пошуку на Python."}
],
"max_tokens": 1024
}'
Ключова деталь: base URL однаковий для всіх моделей. Щоб переключитися з Llama на DeepSeek, достатньо змінити один рядок — значення параметра model. Саме тому вибір правильної моделі — це не рефакторинг коду, а конфігурація.
Карта моделей: хто є хто в каталозі NIM
Станом на травень 2026 року в каталозі build.nvidia.com доступно понад 100 моделей. Розберемо основні сімейства:
| Сімейство |
Розробник |
Ключові моделі в NIM |
Ліцензія |
Сильна сторона |
| DeepSeek V4 |
DeepSeek AI (Китай) |
V4-Flash, V4-Pro, V4 (671B) |
MIT |
Загальна якість, coding, cost-efficiency |
| Kimi K2 |
Moonshot AI (Китай) |
K2.5, K2.6, K2-Thinking |
Kimi License |
Agentic coding, довгий контекст |
| Nemotron 3 |
NVIDIA |
Nano Omni (30B), Super (120B), Ultra (500B) |
NVIDIA Open Model License |
NVIDIA hardware throughput, agentic tasks |
| Qwen 3.5 |
Alibaba (Китай) |
Qwen3-8B, Qwen3-32B, Qwen3.5-235B-MoE |
Apache 2.0 |
Coding, multilingual (особливо CJK) |
| GLM-5 / GLM-4 |
Zhipu AI (Китай) |
GLM-4.7, GLM-5, GLM-5.1 |
MIT |
Agentic workflows, function calling |
| Llama 4 |
Meta (США) |
Scout 17B, Maverick 70B, Llama 3.3 70B |
Llama Community License |
Загальне використання, tool use |
| MiniMax M2 |
MiniMax (Китай) |
M2.5, M2.7 (230B MoE) |
MiniMax License |
Reasoning, мультимодальність |
| Gemma 4 |
Google |
Gemma 4 31B, Gemma 2B / 7B |
Gemma License |
Легкі задачі, summarization |
| Спеціалізовані |
Різні |
NemoClaw, Llama Guard, NV-Embed |
Різні |
Safety, embedding, guardrails |
Я звертаю увагу на важливе спостереження: у 2026 році більшість топових моделей походять із китайських лабораторій. За даними BenchLM.ai, верхні позиції рейтингу open-weight моделей займають DeepSeek V4 Pro (87 балів), Kimi K2.6 (84), GLM-5.1 (83) і Qwen3.5 397B (79). У цьому контексті Llama від Meta вже не виглядає домінуючою у верхній частині таблиці.
Бенчмарки: реальні цифри продуктивності
Наведені нижче цифри зібрані з Artificial Analysis, BenchLM.ai та LearnAIForge (травень 2026).
Загальний рейтинг Intelligence Index (Artificial Analysis v4.0)
| Модель |
Intelligence Index |
Тип |
Доступна в NIM |
| Kimi K2.6 |
54 |
Open-weight |
✓ |
| MiMo-V2.5-Pro |
54 |
Open-weight |
✓ |
| DeepSeek V4 Pro (Reasoning) |
52 |
Open-weight |
✓ |
| GLM-5.1 (Reasoning) |
~50 |
Open-weight (MIT) |
✓ |
| Nemotron 3 Super 120B |
61 (BenchLM) |
Open-weight |
✓ |
| Nemotron 3 Ultra 500B |
65 (BenchLM) |
Open-weight |
✓ |
SWE-Bench Verified (автономне виправлення реальних GitHub-issues)
| Модель |
SWE-Bench Score |
Примітка |
| Nemotron 3 Super |
60.47% |
+18.5 п.п. над GPT-OSS-120B; 7.5x вищий throughput ніж Qwen3.5-122B |
| Qwen3.5-122B |
~66% |
Вищий score, але менший throughput |
| DeepSeek V4 Pro |
89/100 (coding harness) |
Потребує спеціального harness для максимального результату |
| Kimi K2.6 |
87/100 (coding harness) |
3.6× дешевше за Claude Opus на тих самих задачах |
| GPT-OSS-120B (reference) |
~42% |
Референс для порівняння |
RULER Long-Context (точність на 1M токенів)
| Модель |
RULER @ 1M ctx |
Максимальний контекст |
| Nemotron 3 Super |
91.75% |
1M токенів |
| Nemotron 3 Ultra |
Найбільший серед open-weight |
10M токенів |
| DeepSeek V4 Flash |
Висока |
1M токенів |
| GPT-OSS-120B |
22.30% |
Різко деградує на великих контекстах |
Завдання 1 — Coding та agentic coding
Coding — найбільш конкурентна категорія серед NIM-моделей у 2026 році. Розберу три рівні складності.
Рівень 1: прості задачі (функція, алгоритм, виправлення помилки)
Рекомендація: deepseek-ai/deepseek-v4-flash
З практичної точки зору DeepSeek V4 Flash — це 284B MoE-модель, яка активує лише частину параметрів на кожен токен. Це дає нетипове співвідношення швидкості до якості: модель поводиться значно легше, ніж її загальний розмір міг би припускати.
За даними практичних тестів розробників, V4 Flash закриває близько 80% типових coding-задач із якістю, яка раніше вимагала суттєво дорожчих і важчих моделей.
# Легкі coding задачі — DeepSeek V4 Flash
response = client.chat.completions.create(
model="deepseek-ai/deepseek-v4-flash",
messages=[
{
"role": "system",
"content": "You are an expert Python developer. Return only code, no explanations."
},
{
"role": "user",
"content": "Write a binary search function with type hints and docstring."
}
],
temperature=0.0, # для коду завжди 0
max_tokens=512
)
Рівень 2: складні задачі (multi-file editing, refactoring)
Рекомендація: moonshotai/kimi-k2.6 або deepseek-ai/deepseek-v4-pro
За даними порівняльного бенчмарку coding-агентів, Kimi K2.6 набирає 87/100 і коштує в 3.6 рази дешевше, ніж Claude Opus на аналогічних задачах. DeepSeek V4 Pro дає 89/100, але потребує специфічного harness для розкриття максимального потенціалу.
# Складний agentic coding — Kimi K2.6
response = client.chat.completions.create(
model="moonshotai/kimi-k2.6",
messages=[
{
"role": "system",
"content": (
"You are a senior software engineer. "
"When editing code, show ONLY the changed parts with clear markers. "
"Always verify your changes are consistent across all files."
)
},
{
"role": "user",
"content": "Refactor this FastAPI app to use async SQLAlchemy:\n\n[код тут]"
}
],
temperature=0.1,
max_tokens=4096
)
Рівень 3: автономне виправлення GitHub-issues (SWE-Bench клас)
Моя рекомендація: nvidia/nemotron-3-super-120b
Для задач типу «автономно виправ цей баг у репозиторії» Nemotron 3 Super показує 60.47% на SWE-Bench Verified і забезпечує 7.5x вищий throughput порівняно з Qwen3.5-122B при порівнянній якості — що для мене є критичним фактором у сценаріях, де агенти паралельно обробляють кілька задач.
# Autonomous coding agent — Nemotron 3 Super
# ВАЖЛИВО: для thinking models додайте правильні параметри
response = client.chat.completions.create(
model="nvidia/nemotron-3-super-120b",
messages=[
{
"role": "system",
"content": (
"You are an autonomous software engineer. "
"Given a GitHub issue description and relevant code, "
"produce a complete patch. Think step by step before coding."
)
},
{
"role": "user",
"content": "Issue: #1234 — Memory leak in connection pool\n\n[код репозиторію]"
}
],
temperature=0.15,
max_tokens=8192
)
Зведена таблиця по coding
| Сценарій |
Рекомендована модель |
Чому саме вона |
| Прості функції, snippets |
deepseek-ai/deepseek-v4-flash |
Швидкість + якість + економія credits |
| Multi-file refactoring |
moonshotai/kimi-k2.6 |
Довгий контекст + sub-agent паралелізм |
| Автономний coding agent |
nvidia/nemotron-3-super-120b |
Найвищий SWE-Bench score + throughput |
| Максимальна точність (не real-time) |
deepseek-ai/deepseek-v4-pro |
89/100 на coding harness |
Завдання 2 — Complex reasoning та математика
Reasoning — задачі, де модель повинна "думати" перед відповіддю: математика, логіка, GPQA Diamond, Humanity's Last Exam.
Я помічаю, що для більшості задач найкращим універсальним вибором залишається deepseek-ai/deepseek-v4-pro з увімкненим reasoning mode.
Для наукових задач: qwen/qwen3.5-397b — Humanity's Last Exam score 25.30% проти 18.26% у Nemotron Super.
# Reasoning задача з явним chain-of-thought
response = client.chat.completions.create(
model="deepseek-ai/deepseek-v4-pro",
messages=[
{
"role": "system",
"content": (
"You are a mathematical reasoning engine. "
"Always show your full chain of thought before the final answer. "
"Format: ...\n\nFinal answer: ..."
)
},
{
"role": "user",
"content": (
"A train leaves city A at 60 km/h. Another leaves city B at 80 km/h "
"toward A. The cities are 420 km apart. When and where do they meet?"
)
}
],
temperature=0.0,
max_tokens=2048
)
Важливо для thinking models: DeepSeek V4-Pro та Kimi K2-Thinking є "thinking models" — вони використовують внутрішній chain-of-thought перед відповіддю. Для моделей-"thinkers" встановлюйте temperature=0.0 або дуже низьке значення, інакше reasoning стає нестабільним.
Порівняння reasoning моделей у NIM
| Модель |
GPQA Diamond |
Humanity's Last Exam |
Оптимально для |
| DeepSeek V4 Pro (Reasoning) |
Висока |
~20% |
Coding + logic reasoning |
| Qwen3.5-397B (Reasoning) |
Висока |
25.30% |
Наукові задачі, математика |
| Nemotron 3 Super |
Помірна |
18.26% |
Agentic throughput, не фронтірна наука |
| MiniMax M2.7 |
Висока |
Конкурує з DeepSeek-R1 |
Pure chain-of-thought reasoning |
Завдання 3 — RAG та довгий контекст
У моїх практичних експериментах з RAG (Retrieval-Augmented Generation) — коли модель отримує великий зовнішній контекст у вигляді документів, баз знань або репозиторіїв коду — найбільш стабільні результати дають не універсальні моделі, а спеціалізовані конфігурації під обсяг контексту та тип retrieval-задачі.
Моя рекомендація: deepseek-ai/deepseek-v4-flash для більшості RAG-сценаріїв і nvidia/nemotron-3-ultra-500b для extreme long-context задач.
Ключові параметри вибору, які я враховую при роботі з RAG:
- Розмір контексту: DeepSeek V4 Flash — до 1M токенів; Nemotron Ultra — до 10M токенів, що наразі є одним із найбільших показників серед open-weight моделей
- Якість на довгому контексті: Nemotron 3 Super показує 91.75% на RULER @ 1M ctx проти 22.30% у GPT-OSS-120B, що суттєво впливає на стабільність відповідей у довгих документах
- Швидкість retrieval: DeepSeek Flash-версії зазвичай дають кращий баланс latency/quality для стандартних RAG pipeline, особливо при великій кількості паралельних запитів
# RAG pipeline — DeepSeek V4 Flash з документами
def query_rag(user_question: str, retrieved_chunks: list[str]) -> str:
context = "\n\n---\n\n".join(retrieved_chunks)
response = client.chat.completions.create(
model="deepseek-ai/deepseek-v4-flash",
messages=[
{
"role": "system",
"content": (
"Answer questions using ONLY the provided context. "
"If the answer is not in the context, say so explicitly. "
"Always cite the relevant passage."
)
},
{
"role": "user",
"content": f"Context:\n{context}\n\nQuestion: {user_question}"
}
],
temperature=0.0,
max_tokens=1024
)
return response.choices[0].message.content
# Для екстремально довгих документів — Nemotron Ultra (10M ctx)
def query_giant_document(document: str, question: str) -> str:
response = client.chat.completions.create(
model="nvidia/nemotron-3-ultra-500b",
messages=[
{
"role": "system",
"content": "Analyze the entire document carefully before answering."
},
{
"role": "user",
"content": f"Document:\n{document}\n\nQuestion: {question}"
}
],
temperature=0.0,
max_tokens=2048
)
return response.choices[0].message.content
Таблиця вибору для RAG
| Розмір контексту |
Рекомендована модель |
Причина |
| До 128K токенів |
deepseek-ai/deepseek-v4-flash |
Швидкість + точність + економія |
| 128K — 1M токенів |
moonshotai/kimi-k2.5 або deepseek-ai/deepseek-v4 |
Оптимізовані під long context RAG |
| Понад 1M токенів |
nvidia/nemotron-3-ultra-500b |
10M ctx, 91.75% RULER точність |
Завдання 4 — Multi-agent оркестрація
Для multi-agent систем ключовий параметр — не лише якість одного запиту, а throughput при паралельних сесіях і надійність tool calling.
Nemotron 3 Super використовує hybrid Mamba-Transformer MoE архітектуру. Порівняно з dense моделями, це дає 5x вищий inference throughput на NVIDIA hardware при concurrent agent sessions — за рахунок того, що MoE активує лише частину параметрів на кожен токен.
Для speculative decoding: Nemotron 3 Super досягає середньої довжини прийняття 3.45 токени на крок верифікації проти 2.70 у DeepSeek-R1 — що дає до 3x прискорення без окремої draft-моделі.
import asyncio
from openai import AsyncOpenAI
async_client = AsyncOpenAI(
api_key="nvapi-ваш-ключ",
base_url="https://integrate.api.nvidia.com/v1"
)
# Паралельний запуск спеціалізованих агентів
async def run_agent(role: str, model: str, task: str) -> dict:
response = await async_client.chat.completions.create(
model=model,
messages=[
{"role": "system", "content": f"You are a specialist in {role}."},
{"role": "user", "content": task}
],
temperature=0.1,
max_tokens=1024
)
return {
"role": role,
"model": model,
"result": response.choices[0].message.content
}
async def multi_agent_pipeline(user_task: str) -> dict:
# Визначаємо спеціалізованих агентів — кожен отримує оптимальну модель
agents = [
("planning", "nvidia/nemotron-3-super-120b", f"Plan this task: {user_task}"),
("coding", "moonshotai/kimi-k2.6", f"Write code for: {user_task}"),
("retrieval", "deepseek-ai/deepseek-v4-flash", f"Find relevant info about: {user_task}"),
("summarizer", "google/gemma-4-31b-it", f"Summarize results for: {user_task}"),
]
# Запускаємо паралельно — економимо час
results = await asyncio.gather(*[
run_agent(role, model, task)
for role, model, task in agents
])
return {r["role"]: r["result"] for r in results}
# Запуск
results = asyncio.run(multi_agent_pipeline(
"Analyze our Q3 sales data and generate a board presentation"
))
Я звертаю увагу на архітектурне рішення: кожен агент у системі отримує модель, оптимальну під свою роль. Наприклад, для задачі summarization я використовую більш дешеву Gemma замість Nemotron — оскільки для простого резюмування різниця в якості мінімальна, тоді як різниця в вартості та latency суттєва.
Завдання 5 — Мультимовні задачі
Якщо ваш продукт обслуговує аудиторію кількома мовами — вибір моделі суттєво впливає на якість.
Для CJK (китайська, японська, корейська): qwen/qwen3-32b або zhipuai/glm-5.1 — Qwen і GLM мають нативну підтримку китайської, яка значно перевищує моделі від Meta або NVIDIA.
Для слов'янських мов та загального multilingual: deepseek-ai/deepseek-v4-flash — показує добрі результати на більшості European languages.
Для мультимодального multilingual (текст + зображення + аудіо): nvidia/nemotron-3-nano-omni — 30B MoE-модель, що вийшла 28 квітня 2026 року, підтримує text, image, video і audio через єдину архітектуру.
# Мультимовний pipeline з автовибором моделі
LANGUAGE_MODEL_MAP = {
"zh": "zhipuai/glm-4.7", # Китайська — GLM найкращий
"ja": "qwen/qwen3-32b", # Японська — Qwen сильніший
"ko": "qwen/qwen3-32b", # Корейська
"uk": "deepseek-ai/deepseek-v4", # Українська
"ru": "deepseek-ai/deepseek-v4", # Російська
"en": "deepseek-ai/deepseek-v4-flash", # Англійська — flash достатньо
"default": "deepseek-ai/deepseek-v4"
}
def multilingual_query(text: str, lang: str) -> str:
model = LANGUAGE_MODEL_MAP.get(lang, LANGUAGE_MODEL_MAP["default"])
response = client.chat.completions.create(
model=model,
messages=[{"role": "user", "content": text}],
temperature=0.3,
max_tokens=1024
)
return response.choices[0].message.content
Завдання 6 — Structured output та function calling
У своїй практиці я часто стикаюся з тим, що надійний structured output (JSON за схемою) і function calling — це критичні компоненти для production agentic систем. Не всі моделі однаково добре справляються з цим, особливо коли мова йде про складні схеми або вкладені інструменти.
Більш детально про механіку tool use, JSON Schema та її зв’язок з RAG я розбирав тут: tool use vs function calling і RAG.
Моделі з підтвердженою підтримкою function calling у NIM: Llama 3.1 70B/405B, Nemotron-3-Super, GLM-4.7, GLM-5.1, Kimi K2.5, Mixtral 8x22B, Qwen 2.5 72B — всі підтримують стандартний OpenAI tool use format.
import json
# Function calling — GLM-5.1 або Nemotron Super
tools = [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get current weather for a city",
"parameters": {
"type": "object",
"properties": {
"city": {"type": "string", "description": "City name"},
"unit": {
"type": "string",
"enum": ["celsius", "fahrenheit"],
"description": "Temperature unit"
}
},
"required": ["city"]
}
}
}
]
response = client.chat.completions.create(
model="zhipuai/glm-5.1", # Або: nvidia/nemotron-3-super-120b
messages=[
{"role": "user", "content": "What's the weather in Kyiv and Berlin?"}
],
tools=tools,
tool_choice="auto",
temperature=0.0
)
# Перевірка tool call
message = response.choices[0].message
if message.tool_calls:
for tool_call in message.tool_calls:
args = json.loads(tool_call.function.arguments)
print(f"Tool: {tool_call.function.name}, Args: {args}")
Structured JSON output без function calling:
# Примусовий JSON output через system prompt
response = client.chat.completions.create(
model="zhipuai/glm-5.1",
messages=[
{
"role": "system",
"content": (
"You MUST respond ONLY with valid JSON matching this schema exactly. "
"No explanations, no markdown, no code blocks.\n"
"Schema: {\"sentiment\": \"positive|negative|neutral\", "
"\"score\": 0.0-1.0, \"keywords\": [\"string\"]}"
)
},
{
"role": "user",
"content": "Analyze sentiment: 'The product exceeded all my expectations!'"
}
],
temperature=0.0,
max_tokens=256
)
# ЗАВЖДИ валідуйте output
try:
result = json.loads(response.choices[0].message.content)
except json.JSONDecodeError:
# Fallback логіка при broken JSON
print("Model returned invalid JSON, retrying with stricter prompt...")
Практика: як перемикати моделі без рефакторингу
Найефективніший підхід — централізований конфігураційний об'єкт, який відокремлює вибір моделі від бізнес-логіки:
from dataclasses import dataclass
from openai import OpenAI
from typing import Optional
@dataclass
class ModelConfig:
model_id: str
temperature: float = 0.1
max_tokens: int = 1024
supports_tools: bool = True
context_window: int = 128_000
# Централізована конфігурація — змінюйте тут, не в коді
MODELS = {
"coding_simple": ModelConfig("deepseek-ai/deepseek-v4-flash", temperature=0.0),
"coding_complex": ModelConfig("moonshotai/kimi-k2.6", temperature=0.1, max_tokens=4096),
"coding_agent": ModelConfig("nvidia/nemotron-3-super-120b", temperature=0.15, max_tokens=8192),
"reasoning": ModelConfig("deepseek-ai/deepseek-v4-pro", temperature=0.0, max_tokens=4096),
"rag_standard": ModelConfig("deepseek-ai/deepseek-v4-flash", temperature=0.0),
"rag_longcontext": ModelConfig("nvidia/nemotron-3-ultra-500b", temperature=0.0, context_window=10_000_000),
"multilingual": ModelConfig("deepseek-ai/deepseek-v4", temperature=0.3),
"structured": ModelConfig("zhipuai/glm-5.1", temperature=0.0),
"summarizer": ModelConfig("google/gemma-4-31b-it", temperature=0.3, max_tokens=512),
}
class NIMClient:
def __init__(self, api_key: str):
self.client = OpenAI(
api_key=api_key,
base_url="https://integrate.api.nvidia.com/v1"
)
def query(
self,
task: str,
messages: list[dict],
config_key: str = "coding_simple",
tools: Optional[list] = None
) -> str:
cfg = MODELS[config_key]
kwargs = {
"model": cfg.model_id,
"messages": messages,
"temperature": cfg.temperature,
"max_tokens": cfg.max_tokens,
}
if tools and cfg.supports_tools:
kwargs["tools"] = tools
kwargs["tool_choice"] = "auto"
response = self.client.chat.completions.create(**kwargs)
return response.choices[0].message.content
# Використання — бізнес-логіка не знає про конкретні моделі
nim = NIMClient(api_key="nvapi-ваш-ключ")
# Для зміни моделі достатньо змінити config_key
result = nim.query(
task="coding",
messages=[{"role": "user", "content": "Write a quicksort in Python"}],
config_key="coding_simple" # змінити на "coding_complex" для складніших задач
)
Дерево рішень: яку модель вибрати
Яке завдання?
│
├── CODING
│ ├── Простий snippet / функція
│ │ └── deepseek-ai/deepseek-v4-flash ✓ швидко, дешево
│ ├── Multi-file / refactoring
│ │ └── moonshotai/kimi-k2.6 ✓ довгий контекст
│ └── Autonomous agent (SWE-Bench клас)
│ └── nvidia/nemotron-3-super-120b ✓ найвищий throughput
│
├── REASONING / MATH
│ ├── Логіка, coding reasoning
│ │ └── deepseek-ai/deepseek-v4-pro ✓ CoT reasoning
│ └── Наукові задачі, HLE benchmark
│ └── qwen/qwen3.5-397b ✓ 25.30% HLE
│
├── RAG / LONG CONTEXT
│ ├── До 128K токенів
│ │ └── deepseek-ai/deepseek-v4-flash ✓ швидкий retrieval
│ ├── До 1M токенів
│ │ └── moonshotai/kimi-k2.5 ✓ оптимізований під long-ctx
│ └── Понад 1M токенів
│ └── nvidia/nemotron-3-ultra-500b ✓ 10M ctx, 91.75% RULER
│
├── MULTI-AGENT ORCHESTRATOR
│ └── nvidia/nemotron-3-super-120b ✓ 5x throughput, MoE eff.
│
├── MULTILINGUAL
│ ├── CJK (zh/ja/ko)
│ │ └── qwen/qwen3-32b або zhipuai/glm-4.7
│ └── European languages
│ └── deepseek-ai/deepseek-v4
│
├── STRUCTURED OUTPUT / FUNCTION CALLING
│ └── zhipuai/glm-5.1 або nvidia/nemotron-3-super-120b
│
└── SUMMARIZATION (budget-sensitive)
└── google/gemma-4-31b-it ✓ найдешевше для простих задач
Підводні камені: model-specific behaviors
Те, що не написано в документації, але критично важливо в production:
1. Thinking models потребують особливого handling
Kimi K2-Thinking та DeepSeek V4-Pro у reasoning mode — це "thinking models". Вони генерують внутрішній chain-of-thought перед відповіддю. За даними практичного досвіду розробників, якщо переключитися з thinking model на звичайну без коригування параметрів — можна отримати API errors.
# Для thinking models — НЕ передавайте reasoning_budget зі звичайними моделями
# Для non-thinking models — встановіть NIM_ENABLE_THINKING=false якщо є конфлікт
# Перевірка перед запитом
THINKING_MODELS = {
"moonshotai/kimi-k2-thinking",
"deepseek-ai/deepseek-v4-pro", # у reasoning mode
}
def safe_query(model: str, messages: list, **kwargs) -> str:
if model in THINKING_MODELS:
kwargs.setdefault("temperature", 0.0)
# НЕ додавайте stream=True для thinking models без додаткової обробки
return client.chat.completions.create(
model=model, messages=messages, **kwargs
).choices[0].message.content
2. GLM/Qwen потребують специфічних флагів для reasoning тегів
# GLM та Qwen 3.5 потребують --reasoning-format none
# якщо не потрібні <think> теги у відповіді
# Через API це вирішується system prompt:
system_no_thinking = (
"Respond directly without showing your reasoning process. "
"Do not use <think> tags."
)
3. Llama 4 використовує Pythonic tool format
Llama 4 Scout має відмінний від стандартного OpenAI формат tool calls (Pythonic syntax). Якщо ваш парсер очікує стандартний JSON tool call — він може зламатися при переключенні на Llama 4.
4. Rate limit 40 RPM і agentic workflows
При multi-step агентах один "логічний запит" може генерувати 5–10 API-викликів. 40 RPM = максимум ~4–8 реальних user задач на хвилину для одного агента.
import time
import functools
def rate_limited(max_per_minute: int = 35): # залишаємо буфер від 40
min_interval = 60.0 / max_per_minute
last_called = [0.0]
def decorator(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
elapsed = time.time() - last_called[0]
wait = min_interval - elapsed
if wait > 0:
time.sleep(wait)
result = func(*args, **kwargs)
last_called[0] = time.time()
return result
return wrapper
return decorator
@rate_limited(max_per_minute=35)
def api_call(messages, model):
return client.chat.completions.create(
model=model, messages=messages, max_tokens=1024
)
5. Зведена таблиця model-specific behaviors
| Модель / сімейство |
Особливість |
Що зробити |
| Kimi K2-Thinking, DeepSeek V4-Pro |
Thinking model — внутрішній CoT |
temperature=0.0, не змішуйте з non-thinking конфігами |
| GLM-5, Qwen 3.5 |
За замовчуванням виводять <think> теги |
Додайте "Do not show thinking" у system prompt |
| Llama 4 Scout/Maverick |
Pythonic tool call format |
Окремий parser або використовуйте Llama 3.3 70B для tool use |
| Nemotron 3 Super/Ultra |
MoE — низький throughput на малих batch |
Оптимальний при паралельних запитах, не single-shot |
| Gemma 4 |
Вимагає build b8665+ для локального запуску |
При локальному розгортанні перевіряйте версію |
| Всі моделі (free tier) |
40 RPM, 1000 credits при реєстрації |
Rate limiting + exponential backoff для 429 errors |
Підсумок
Я для себе формулюю це так: вибір правильної моделі в NVIDIA NIM — це не пошук «найкращої» моделі, а радше правильна декомпозиція задач і призначення спеціалізованої моделі кожній ролі в системі.
Три ключові принципи, які я використовую на практиці:
- Я не використовую важку модель там, де достатньо легкої. Gemma 4 для summarization замість Nemotron Ultra — це не компроміс, а архітектурно правильне рішення.
- Я відокремлюю вибір моделі від бізнес-логіки. Централізований ModelConfig дозволяє мені змінювати модель без рефакторингу основного коду системи.
- Я враховую model-specific behaviors з самого початку. Thinking models, різні формати tool calling, відмінності tokenizer — це речі, які неминуче проявляються в production, і їх краще закладати в архітектуру заздалегідь.
Джерела