Деплой LLM
FastAPI, Docker, K8s
Проблема: Вы создали ИИ-фичу. Как теперь безопасно задеплоить её в прод? Как обрабатывать обновления, откаты и масштабирование?
Решение: Запускай аккуратно как ракету
Деплой LLM включает безопасный вывод вашего ИИ-приложения в прод с правильным тестированием, мониторингом и возможностью отката. Это как запуск ракеты — тщательная подготовка, поэтапный деплой и постоянный мониторинг. Для self-hosted моделей квантизация снижает потребность в ресурсах, а observability необходима после запуска.
Представьте это как запуск ракеты:
- 1. Rate limiting настроен: Лимиты per-user и per-IP предотвращают злоупотребления и неконтролируемые расходы
- 2. API-ключи защищены: Не в клиентском коде, хранятся в переменных окружения, регулярно ротируются
- 3. Обработка всех режимов отказа LLM: Таймаут, rate limit, фильтр контента, некорректный ответ — для каждого есть свой обработчик
- 4. Мониторинг и алертинг запущены: Дашборды отслеживают задержку, частоту ошибок, расход токенов; алерты срабатывают на аномалиях
- 5. Fallback-поведение определено: Когда LLM недоступна: кешированные ответы, упрощённые ответы без LLM или дружелюбное сообщение «попробуйте позже»
- 6. Нагрузочное тестирование пройдено: Система протестирована при 2x ожидаемой пиковой нагрузке — без падений, приемлемая задержка
- 7. Стратегия отката определена: Canary: остановить перенаправление трафика. Blue-green: переключить обратно. Self-hosted: откатиться на предыдущий чекпоинт модели. Каждый деплой должен быть обратим менее чем за 5 минут.
- 8. A/B-оценка качества: Сравнение ответов старой и новой модели на реальном трафике. Отслеживание метрик качества (точность, relevance scores) наряду с задержкой и стоимостью до полного раскатки.
Чеклист продакшна: 1 баг на стейджинге дешевле 1000 багов в продакшне. Тестируйте каждый режим отказа перед запуском.
Варианты деплоя
- На базе API: Использовать OpenAI, Anthropic и т.д. — проще всего
- Self-hosted: Запуск открытых моделей на своей инфраструктуре
- Гибридный: API для сложных задач, self-hosted для простых
- Edge: Маленькие модели, работающие на устройствах пользователей
- Graceful Degradation: Когда LLM медленная или недоступна, показывать кешированные ответы, упрощённые ответы без LLM или дружелюбное сообщение «попробуйте позже»
- Canary-деплой: Направить 5-10% трафика на новую версию. Мониторить ошибки и задержки. Если стабильно — постепенно увеличивать до 100%.
- Blue-Green деплой: Два идентичных окружения: «blue» (текущее) и «green» (новое). Переключение трафика мгновенно через DNS/балансировщик. Мгновенный откат обратным переключением.
- Self-hosted LLM: Деплой open-source моделей (Llama, Mistral) через vLLM, TGI или Ollama. Ключевые задачи: выделение GPU, квантизация (GPTQ/AWQ), автомасштабирование.
Интересный факт: Многие компании сначала используют "теневой деплой" — запуск нового ИИ параллельно со старой системой без показа результатов пользователям. Это позволяет сравнить выводы и найти проблемы до реального деплоя.
Попробуйте сами!
Используй чеклист деплоя ниже, чтобы убедиться, что твоё ИИ-приложение готово к продакшну.
Попробуй сам
Интерактивное демо этой техники
Безопасно деплоить LLM-приложение: прокси вместо прямого API-ключа в клиенте
// React component
const response = await fetch("https://api.openai.com/v1/chat/completions", {
headers: { "Authorization": "Bearer sk-abc123..." },
body: JSON.stringify({ model: "gpt-4", messages })
});
Архитектура: React → /api/chat (ваш сервер) → OpenAI API
// server.js (Express proxy)
const rateLimit = require("express-rate-limit");
const limiter = rateLimit({
windowMs: 60 * 1000, // 1 минута
max: 10, // 10 запросов/мин/пользователь
keyGenerator: (req) => req.user.id
});
app.post("/api/chat", limiter, async (req, res) => {
// 1. Валидация
const { message } = req.body;
if (!message || message.length > 4000) {
return res.status(400).json({ error: "Invalid input" });
}
// 2. Вызов LLM (ключ на сервере)
const response = await openai.chat.completions.create({
model: "gpt-4",
messages: [{ role: "user", content: message }]
}); // API key из process.env.OPENAI_API_KEY
// 3. Логирование
logger.info({ user: req.user.id, tokens: response.usage });
res.json({ reply: response.choices[0].message.content });
});
Никогда: sk-... в клиентском коде, .env в git, CORS без ограничений.
Никогда не кладите API-ключ в клиентский код. Production-паттерн: клиент → прокси на вашем сервере (auth, rate limit, validation, logging) → LLM API. Это защищает и ключ, и бюджет.
Создайте бесплатный аккаунт для решения челленджей
4 челленджей с AI-проверкой для этого урока
Этот урок — часть структурированного курса по LLM.
Мой путь обучения