Свой OpenAI-совместимый API-сервер на VPS
Один и тот же код приложения может ходить и в OpenAI, и в твою локальную модель — если сервер говорит на формате /v1/chat/completions. Собираем такой эндпоинт на своём VPS.
Содержание
Зачем свой OpenAI-совместимый эндпоинт
['Формат OpenAI стал де-факто стандартом: под него написаны SDK, LangChain, десятки готовых интерфейсов. Если поднять свой сервер с тем же контрактом, весь этот софт заработает без переделок — просто меняешьbase_url.', '- Независимость — данные и модель на твоём сервере.
- Экономия — нет платы за токены облака.
- Совместимость — существующий код не трогаем.
/v1/chat/completions может стоять что угодно: локальная Llama, Mistral, Qwen или проксируемое облако. Приложение этого не различает — оно шлёт список сообщений и получает ответ в знакомом формате. Именно поэтому такой сервер — это точка развязки: сегодня за ним CPU-модель для экономии, завтра GPU-инференс под нагрузку, а код клиента остаётся неизменным.']
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK и США. Оплата картой РФ и по СБП.
Арендовать VPS для своего LLM-сервераВариант 1: llama.cpp (CPU-friendly)
['llama.cpp запускает GGUF-модели и умеет отдавать OpenAI API. Собираем и стартуем сервер.', 'sudo apt update && sudo apt -y install build-essential cmake git\ngit clone https://github.com/ggerganov/llama.cpp\ncd llama.cpp && cmake -B build && cmake --build build -j', './build/bin/llama-server \\\n -m ./models/model.gguf \\\n --host 0.0.0.0 --port 8080 \\\n -c 4096 --api-key sk-local', 'Эндпоинт /v1/chat/completions уже доступен на порту 8080. Флаг -c задаёт размер контекста, а --api-key включает проверку ключа — без него сервер примет любой запрос. Модели в формате GGUF качаются с HuggingFace; для CPU оптимален квант Q4_K_M — он вдвое легче оригинала и почти не теряет в качестве. llama.cpp хорош тем, что тянет тяжёлую математику на всех ядрах процессора, поэтому на многоядерном EPYC небольшие модели отвечают вполне бодро.']
Нужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.
Вариант 2: Ollama
['Ollama — самый простой путь: ставится одной строкой и сразу даёт OpenAI-совместимый API на порту 11434.', 'curl -fsSL https://ollama.com/install.sh | sh\nollama pull llama3\nollama serve', 'curl http://localhost:11434/v1/chat/completions \\\n -H "Content-Type: application/json" \\\n -d \'{"model":"llama3","messages":[{"role":"user","content":"Привет"}]}\'']
Вариант 3: vLLM для GPU
['Если есть видеокарта и нужен высокий throughput — vLLM отдаёт тот же формат и держит десятки параллельных запросов.', 'pip install vllm\npython -m vllm.entrypoints.openai.api_server \\\n --model Qwen/Qwen2.5-7B-Instruct \\\n --host 0.0.0.0 --port 8000', 'Практичный приём — поставить перед всеми тремя бэкендами один агрегатор (LiteLLM) и дать приложению единственный адрес. Тогда CPU-модель, GPU-инференс и облачный фолбэк живут за одним ключом, а маршрутизация решается конфигом, а не кодом.']
Подключаем клиент
['Любой OpenAI SDK работает после смены base_url — код остаётся прежним.', 'from openai import OpenAI\nclient = OpenAI(base_url="http://SERVER_IP:8080/v1", api_key="sk-local")\nr = client.chat.completions.create(model="model",\n messages=[{"role":"user","content":"Проверка"}])\nprint(r.choices[0].message.content)']
Прод: TLS, ключ и systemd
['Голый порт наружу выставлять нельзя. Прикрой сервер Nginx с TLS и проверкой ключа.', 'server {\n listen 443 ssl;\n server_name llm.example.com;\n location / {\n proxy_pass http://127.0.0.1:8080;\n proxy_set_header Authorization $http_authorization;\n }\n}', '- Всегда задавай api-key — даже для внутреннего использования.
- Ограничь фаервол:
ufw allow 443, порт модели наружу закрыт. - Оформи в systemd, чтобы сервер поднимался после ребута.
limit_req_zone плюс скромный лимит на IP закрывают этот риск малой кровью и не мешают нормальной работе. А если сервис смотрит в интернет, полезно писать доступ в отдельный лог и периодически проверять, кто и как часто дёргает эндпоинт.']
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK и США. Оплата картой РФ и по СБП.
Арендовать VPS для своего LLM-сервераНужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.
Частые вопросы
Какой вариант выбрать без GPU?
llama.cpp или Ollama с GGUF-моделями. На быстрых CPU (AMD EPYC) небольшие модели работают вполне комфортно.
Совместимы ли эти серверы с LangChain?
Да. LangChain и большинство SDK умеют работать с любым OpenAI-совместимым эндпоинтом через base_url.
Можно ли раздавать несколько моделей?
Да — либо поднять несколько инстансов на разных портах, либо поставить агрегатор вроде LiteLLM перед ними.