8 мин чтения ·
Qwen API без лимитов: свой сервер с OpenAI-совместимым API
Свой OpenAI-совместимый API для Qwen на арендованной GPU: токен аренды вместо ключа провайдера, примеры на curl, Python и JavaScript и выбор карты.

Официальный API Qwen выдаётся по ключу провайдера модели и работает по его тарифам и квотам. Свой API на сервере gpu.nz отвечает в том же OpenAI-совместимом формате, а ключом служит токен вашей аренды. Квоты на запросы здесь нет: предел задают видеопамять, скорость карты и баланс. Клиенты OpenAI SDK работают без изменений, достаточно сменить адрес и ключ.
Чем свой API отличается от официального
- Официальный API: ключ выдаёт провайдер модели, а тарифы, квоты и условия бесплатного доступа меняются. Проверяйте их в документации провайдера, прежде чем строить на нём продукт.
- Свой API: ключ — токен вашей аренды, а платите вы только за минуты GPU. Квоты на запросы нет, потому что предел задаёт сама карта.
- Запросы идут на ваш сервер, а не в облако провайдера модели. Это не то же самое, что дома, и об этом подробнее в разделе о безопасности ниже.
- Модель выбираете вы: Qwen 3.8, Qwen3, Qwen2.5 или любую другую, которую поддерживает Ollama или vLLM.
Два способа поднять API
| Способ | Что запущено | Порт | Когда выбрать |
|---|---|---|---|
| Готовый чат Qwen 3.8 | Ollama с Open WebUI, модель qwen3.8:27b уже загружена | 11434 | нужны и чат, и API, нагрузка небольшая или средняя |
| vLLM | OpenAI-совместимый сервер, по умолчанию Qwen2.5-7B-Instruct | 8000 | нужна высокая пропускная способность и параллельные запросы |
Если нужны чат и API для себя или небольшой команды, берите готовый чат. Если приложение рассылает много параллельных запросов, берите vLLM.
Разница между Ollama и vLLM не только в скорости. Ollama проще в установке, сам загружает модели по запросу и хорошо работает с одним–двумя клиентами. vLLM группирует запросы в батчи и держит высокую пропускную способность при параллельной нагрузке, но требует явно выбрать модель при старте и памяти под KV-кэш. Если сомневаетесь, начните с готового чата и переходите на vLLM, когда упрётесь в число одновременных запросов.
Вариант 1: готовый чат и API Ollama
Шаблон Qwen 3.8 запускает Ollama с загруженной моделью qwen3.8:27b. Адрес API — кнопка «Ollama API» на странице сервера. Для модели нужна карта на 24 ГБ: в 4-битном формате файл занимает около 18 ГБ.
curl https://<id>-11434.run.gpu.nz/v1/chat/completions -H "Authorization: Bearer <токен>" -H "Content-Type: application/json" -d '{"model": "qwen3.8:27b", "messages": [{"role": "user", "content": "Привет"}]}'Ответ приходит в формате OpenAI: текст лежит в choices[0].message.content. Список моделей на сервере отдаёт маршрут /v1/models.
Какие теги Qwen брать в Ollama
- qwen3:8b — около 5 ГБ, для карты на 8–12 ГБ.
- qwen3:14b — около 9 ГБ, для карты на 16 ГБ.
- qwen3:32b — около 20 ГБ, для карты на 24 ГБ.
- qwen2.5-coder:14b и qwen2.5-coder:32b — для кода, файлы около 9 и 20 ГБ.
Если нужен ответ на русском, задайте язык прямо в системном промпте и попросите отвечать по-русски. Явная инструкция снижает риск, что модель перейдёт на английский в длинном диалоге.
Вариант 2: vLLM для нагрузки
Шаблон vLLM поднимает OpenAI-совместимый сервер на порту 8000 и требует ключ, которым служит токен аренды. По умолчанию запускается Qwen2.5-7B-Instruct. Первый запуск загружает веса и компилирует модель, и это может занять 30 минут и больше. Чтобы поднять другую модель, остановите процесс шаблона и запустите сервер вручную через SSH:
pkill -f api_server
vllm serve Qwen/Qwen2.5-14B-Instruct --host 0.0.0.0 --port 8000 --api-key <токен> --max-model-len 8192Имя модели в запросе совпадает с тем, что вы передали в vllm serve. Готовность сервера проверяется по маршруту /health, он открыт без ключа, как и в шаблоне.
У vLLM есть ограничение по типу карты. По умолчанию веса грузятся в bfloat16, а ему нужна карта Ampere (RTX 30, A100) или новее. На T4 запускайте с параметром --dtype half. Квантизованные варианты моделей, например AWQ, GPTQ или FP8, занимают заметно меньше памяти и помещаются на карты с 24 ГБ.
Какую карту выбрать
| Модель | Ollama, Q4, файл | vLLM, веса bf16 | Карта |
|---|---|---|---|
| Qwen2.5 7B | около 5 ГБ | около 15 ГБ | 24 ГБ с запасом под контекст |
| Qwen3 14B | 9,3 ГБ | около 28 ГБ | 16 ГБ в Ollama; для vLLM — 48 ГБ или квантизованная версия на 16–24 ГБ |
| Qwen 3.8 27B | 18 ГБ | около 54 ГБ | 24 ГБ в Ollama; для vLLM — 80 ГБ или квантизованная версия на 24 ГБ |
Для vLLM важна архитектура карты: bfloat16 работает на Ampere и новее, а FP8 — на Ada (RTX 40, L40S) и Hopper (H100, H200) и новее. Для параллельных запросов нужен запас памяти под KV-кэш: чем больше одновременных диалогов, тем больше памяти. Актуальные тарифы карт смотрите в каталоге.
Код: curl, Python и JavaScript
Во всех примерах замените <id> на идентификатор сервера, а токен храните в переменной окружения GPUNZ_TOKEN. Порт 11434 — это Ollama, порт 8000 — vLLM.
import os
from openai import OpenAI
client = OpenAI(
base_url="https://<id>-11434.run.gpu.nz/v1",
api_key=os.environ["GPUNZ_TOKEN"],
)
reply = client.chat.completions.create(
model="qwen3.8:27b",
messages=[{"role": "user", "content": "Напиши функцию сортировки на Python"}],
)
print(reply.choices[0].message.content)import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://<id>-11434.run.gpu.nz/v1",
apiKey: process.env.GPUNZ_TOKEN,
});
const reply = await client.chat.completions.create({
model: "qwen3.8:27b",
messages: [{ role: "user", content: "Напиши функцию сортировки на JavaScript" }],
});
console.log(reply.choices[0].message.content);Для vLLM поменяйте порт на 8000 и имя модели на то, что вы передали в vllm serve. Потоковый ответ включается параметром stream со значением true, и SDK отдают его по частям.
История диалога и параметры
API не хранит историю диалога: каждый запрос должен содержать все предыдущие сообщения, иначе модель не помнит контекст. Длинная история растёт в памяти под KV-кэш и замедляет ответ, поэтому обрезайте старые сообщения, когда они перестают быть нужными.
- temperature — разнообразие ответов. Чем ниже значение, тем предсказуемее ответ: для кода обычно берут низкое, для идей — более высокое.
- max_tokens — предельная длина ответа в токенах. Слишком маленький лимит обрывает ответ на середине.
- top_p — ограничивает выбор следующего слова самыми вероятными вариантами. Обычно меняют либо temperature, либо top_p, а не оба сразу.
Проверка, что API работает
Прежде чем писать код, проверьте сервер одной командой: маршрут /v1/models должен вернуть список моделей. Если он отвечает, а запрос к чату нет, проверьте три вещи. Ответ 401 обычно значит, что токен не подошёл. Ответ 404 обычно значит, что модели с таким именем на сервере нет: имена смотрите в /v1/models. А пока модель загружается в видеопамять, первый запрос может ждать дольше обычного.
curl https://<id>-11434.run.gpu.nz/v1/models -H "Authorization: Bearer <токен>"Потоковый ответ
В чате удобнее получать ответ по частям. Передайте параметр stream со значением true и читайте фрагменты в цикле:
stream = client.chat.completions.create(
model="qwen3.8:27b",
messages=[{"role": "user", "content": "Расскажи о квантизации"}],
stream=True,
)
for chunk in stream:
print(chunk.choices[0].delta.content or "", end="")Таймауты и повторы
Для больших моделей и длинных ответов задайте таймаут явно: параметр timeout ограничивает время ожидания ответа в секундах. Параметр max_retries повторяет запрос при временных сбоях сети. Оба параметра передаются в конструктор клиента рядом с адресом и ключом.
Когда свой API не подходит
Свой сервер хорошо подходит, если модель нужна вам самим или вашему продукту. Если нужны функции, которых нет у выбранного движка, например вызов инструментов или структурированный вывод, сверьтесь с документацией Ollama или vLLM для вашей версии: набор возможностей зависит от движка и его версии.
Безопасность ключа
Токен аренды — это ключ к серверу, поэтому не вставляйте его в код, который уходит в открытый репозиторий. Храните его в переменной окружения, как в примерах выше. Вызывать API лучше с сервера вашего приложения, а не со страницы в браузере: токен на странице виден каждому, кто её откроет.
Снаружи сервера порт открыт только по защищённой ссылке с токеном. Сам сервер арендован и стоит в дата-центре, поэтому для по-настоящему закрытых данных держите модель дома, как описано в гайде локальная нейросеть без мощного компьютера. Настройка вызова через vLLM и Ollama разобрана в гайде Ollama и vLLM на арендованном GPU.
Цена и лимиты
У своего сервера нет квоты на запросы, зато есть предел: одна карта обрабатывает ограниченное число токенов в секунду. Поэтому считайте стоимость как минуты карты на вашу нагрузку, а не как цену за токен. Запас памяти позволяет держать больше параллельных запросов, поэтому на большом объёме ответов стоимость одного ответа может быть ниже.
Вопросы и ответы
- Qwen API бесплатно: как получить?
- Официальный API работает по условиям провайдера модели: ключ, тарифы и квоты. Бесплатные объёмы обычно ограничены и меняются. Свой сервер бесплатным не бывает: вы платите за минуты GPU, но квоты на запросы у вас нет.
- Где взять Qwen API key?
- Ключ официального API выдаёт провайдер модели в своём кабинете. Ключ для своего сервера — токен доступа к интерфейсам, он указан на странице аренды.
- Как установить Qwen на сервер?
- Выберите готовый чат Qwen 3.8 или шаблон Open WebUI + Ollama и укажите модель qwen3.8:27b или другой тег. Для vLLM запустите vllm serve с именем модели из Hugging Face.
- Совместим ли API с OpenAI SDK?
- Да. Ollama и vLLM отдают маршруты /v1/chat/completions и /v1/models. Меняются адрес и ключ, остальной код остаётся прежним.
- Какая видеокарта нужна для Qwen 3.8 27B?
- В Ollama — от 24 ГБ: файл в 4-битном формате около 18 ГБ. Для длинного контекста и нескольких параллельных запросов берите 32 ГБ и больше.
- Можно ли вызывать API прямо из браузера?
- Технически да, но токен окажется в коде страницы и будет виден каждому. Вызывайте API с сервера вашего приложения.