Llama 2 на DigitalOcean за $12: self-hosting гид
Self-hosted Llama 2 на бюджетном дроплете обходится в $12 в месяц и не требует GPU. Разбираем пошаговое развёртывание в Docker с FastAPI, объясняем, почему за $5 не получится, и даём советы по безопасности.
Плата за OpenAI API для небольшого pet-проекта легко переваливает за несколько сотен долларов в месяц. Альтернатива — развернуть открытую языковую модель самостоятельно и платить только за виртуальный сервер. В этом гайде разбираем, как запустить Llama 2 7B в собственном Docker-контейнере на DigitalOcean и получить production-ready HTTP API меньше чем за 15 минут работы с терминалом.
Автор оригинального руководства указывает заголовок «за $5/месяц», но на практике минимально жизнеспособная конфигурация обходится в $6–12/месяц. За $5 дроплет даёт всего 1 ГБ ОЗУ — для семимиллиардной модели этого катастрофически мало. Ниже — реальные цифры и честная смета.
Что такое Llama 2 и зачем её self-hostить
Llama 2 — семейство открытых больших языковых моделей от Meta. Версия 7B содержит 7 миллиардов параметров, понимает английский и ряд других языков, умеет писать код, отвечать на вопросы и дополнять текст. Лицензия разрешает коммерческое использование при соблюдении простых правил, а веса можно скачать с Hugging Face.
Self-hosting в данном случае означает, что вы сами устанавливаете модель на арендованный сервер, контролируете окружение, не делитесь данными пользователей с третьими лицами и не зависите от чужих rate limit. Главная экономика: при интенсивном использовании собственный инференс обходится в десятки раз дешевле облачных API.
Ключевые выводы
- Llama 2 7B можно запустить на DigitalOcean Droplet с 2 vCPU и 4 ГБ ОЗУ при 4-битном квантовании.
- Реальная стоимость — $12/месяц за Droplet плюс около $0,50 за трафик, а не $5.
- Docker + FastAPI дают воспроизводимое окружение и HTTP API из коробки.
- Для загрузки весов с Hugging Face нужен токен и принятая лицензия на Llama 2.
- Для публичного доступа обязательны HTTPS, базовая аутентификация и rate limiting.
Что понадобится для развёртывания
Аппаратная часть
- DigitalOcean Droplet на Ubuntu 22.04 LTS.
- Минимум: 1 vCPU / 2 ГБ ОЗУ ($6/месяц) — только для экспериментов.
- Рекомендуемый: 2 vCPU / 4 ГБ ОЗУ ($12/месяц) — стабильная работа с квантованием.
- 80 ГБ SSD: ~13 ГБ уйдёт на Docker-образ, модель и кэш.
Программная часть
- SSH-ключ и базовое умение работать в терминале.
- Docker и Docker Compose для управления контейнером.
- Аккаунт на Hugging Face с принятой лицензией Llama 2 и API-токеном.
- Nginx или аналогичный reverse proxy для вывода API в интернет.
Российская специфика: сайт DigitalOcean периодически попадает под блокировки Роскомнадзора. Для регистрации и управления Droplet может понадобиться VPN. Альтернативы — Hetzner, Selectel, Yandex Cloud или другие европейские и российские провайдеры; логика развёртывания от этого почти не меняется.
Шаг 1. Создаём Droplet и подключаемся по SSH
В панели DigitalOcean нажимаем Create → Droplet. Выбираем ближайший к целевой аудитории регион — для России это обычно Франкфурт или Амстердам. В качестве образа указываем Ubuntu 22.04 x64, тип — Basic Shared CPU, конфигурацию — 2 vCPU / 4 ГБ RAM. Авторизацию настраиваем через SSH-ключ, парольный вход отключаем.
Сгенерировать ключ и подключиться можно так:
Шаг 2. Устанавливаем Docker и зависимости
После подключения обновляем пакеты и ставим Docker официальным скриптом. Добавляем root в группу docker, чтобы не писать sudo перед каждой командой.
Шаг 3. Собираем Docker-образ с FastAPI
Приложение состоит из трёх файлов: Dockerfile, requirements.txt и app.py. Ключевой трюк — CPU-версия PyTorch и библиотека bitsandbytes, которая позволяет загрузить 7-миллиардную модель в 4 ГБ видеопамяти/ОЗУ.
Dockerfile
requirements.txt
Шаг 4. Пишем FastAPI-приложение
Приложение загружает модель при старте, кэширует её в /app/models и предоставляет три endpoint: /health, /info и /generate. Квантование в 4 бита снижает точность незначительно, но уменьшает потребление памяти в 3–4 раза.
Создаём файл с токеном Hugging Face. Никогда не коммитьте его в репозиторий: в продакшене используйте переменные окружения или секрет-менеджер.
Шаг 5. Собираем и запускаем контейнер
Первый запуск занимает 10–15 минут: скачиваются зависимости PyTorch и веса модели. Чтобы не качать веса при каждом перезапуске, подключаем Docker volume.
Для удобного управления добавляем docker-compose.yml:
Шаг 6. Проверяем API
Когда в логах появится Uvicorn running on http://0.0.0.0:8000, тестируем endpoint'ы:
Ответ должен содержать сгенерированный текст, количество токенов и время инференса. На CPU одна генерация из 100 токенов занимает 4–10 секунд — это нормально для бюджетного дроплета.
Шаг 7. Безопасно выводим API в интернет
Открывать порт 8000 напрямую в интернет небезопасно. Ставим Nginx как reverse proxy, настраиваем HTTPS через Let's Encrypt и базовую аутентификацию. Для rate limiting используем limit_req в Nginx или облачный firewall DigitalOcean.
Минимальная конфигурация Nginx выглядит так:
Про безопасность: Llama 2 — мощная модель, способная генерировать вредоносные инструкции, персональные данные или нежелательный контент. Не выставляйте публичный API без аутентификации, логируйте запросы и рассмотрите фильтрацию промптов на уровне приложения.
Часто задаваемые вопросы
Можно ли обойтись дроплетом за $5?
Нет. 1 ГБ ОЗУ не хватит даже для загрузки 4-битной Llama 2 7B. Минимально жизнеспособная конфигурация — 2 ГБ ОЗУ, рекомендуемая — 4 ГБ. Автор оригинала использует $12/месяц Droplet, и это честная цифра для стабильной работы.
Нужна ли видеокарта?
Нет. Гайд рассчитан на CPU-инференс. GPU ускорит генерацию в разы, но DigitalOcean Droplets с GPU стоят значительно дороже и для экспериментов не нужны.
Какая скорость генерации?
На 2-vCPU дроплете DigitalOcean генерация 100 токенов занимает 4–10 секунд. Для неинтерактивных задач — обработка текстов, пакетная генерация — этого достаточно.
Как загрузить веса Llama 2?
Нужен аккаунт Hugging Face, принятая лицензия на репозиторий meta-llama/Llama-2-7b-hf и персональный токен. Приложение скачивает веса автоматически при первом запуске.
Можно ли использовать российские облака?
Да. Конфигурация Docker-контейнера не привязана к провайдеру. Главное — достаточно RAM и доступ к Hugging Face/Hugging Face mirror для скачивания весов.
Выводы
Self-hosted Llama 2 — рабочий способ снизить затраты на генеративный ИИ в pet-проектах и прототипах. При правильном квантовании семимиллиардная модель помещается в бюджетный дроплет, а Docker + FastAPI превращают развёртывание в рутинную процедуру. Главное — не экономить на RAM и не забывать про безопасность публичного API.
Собственный инференс — не волшебная кнопка, а инструмент с чёткой областью применения: он выигрывает там, где важны предсказуемость расходов, приватность данных и отсутствие лимитов.
Если соберётесь повторить гайд, начните с $12 Droplet и протестируйте нагрузку вручную. А если DigitalOcean недоступен — переносите тот же Docker Compose на Hetzner, Selectel или Yandex Cloud без изменения кода.
Источник: How to Deploy Llama 2 on DigitalOcean for $5/Month: Complete Self-Hosting Guide — RamosAI, Dev.to.