Локальные LLM на корпоративном железе: тестируем LLaMA и Vicuna без облака
Meta готовится анонсировать LLaMA 2 - самое время проверить, реально ли запустить сильную модель на своём GPU для клиентов, которым облачный ChatGPT API категорически закрыт.
Ажиотаж вокруг self-hosted LLM на фоне слива весов LLaMA и роста интереса к конфиденциальным развёртываниям
С января мы гоняем пилоты на ChatGPT API и строим RAG поверх OpenAI. Но примерно треть клиентов, с которыми мы говорим об автоматизации на LLM, сразу режут: «Наши данные никуда не выходят. Никакого OpenAI». И это не паранойя - это финансовые организации, госструктуры, медицина. Отправлять внутренние документы в американское облако им либо запрещено регулятором, либо попросту страшно в нынешней обстановке.
Поэтому когда в сети начали массово расходиться веса LLaMA (первый релиз Meta утёк весной, а LLaMA 2 уже официально анонсирован на июль) и появились дообученные варианты вроде Vicuna, мы решили разобраться: а насколько это вообще применимо в реальных задачах и что нужно из железа?
Что тестировали
Собрали небольшой стенд из того, что было под рукой: рабочая станция с GPU NVIDIA на 24 ГБ VRAM. Не серверная карточка, но что есть. Для запуска использовали llama.cpp - утилиту, которая умеет квантизировать веса до 4 бит и работать даже без GPU, хотя тогда всё заметно медленнее. Также смотрели на text-generation-webui как обёртку с API-совместимым эндпоинтом.
Модели:
- LLaMA-13B в 4-bit квантизации (GGML). Исходная базовая модель, без дообучения на инструкциях.
- Vicuna-13B. Дообученный вариант на диалогах из ShareGPT, по факту ближайший open-source аналог ChatGPT по поведению.
- Vicuna-7B. Для сравнения - более лёгкая версия, влезает в меньшую VRAM.
Задачи взяли из реальных пилотов: классификация обращений поддержки, краткое изложение технической документации (на русском и английском), заполнение структурированного JSON по тексту заявки.
Что получилось
Скорость - самое неожиданное открытие. Vicuna-13B в 4-bit на GPU выдаёт примерно 15-20 токенов в секунду. Для интерактивного чата это приемлемо. Для пакетной обработки - тоже нормально, если не нужно сотни запросов в минуту. CPU-режим (llama.cpp без GPU) - 2-4 токена в секунду, то есть минута на ответ. Это уже только для совсем несрочных задач.
Качество на английском у Vicuna-13B - примерно 70-75% от GPT-3.5-turbo на наших задачах. Модель держит контекст, нормально суммаризирует, заполняет JSON с некоторыми ошибками. Для автоматической обработки входящих заявок - рабочий вариант, если добавить постобработку и валидацию.
Качество на русском - ощутимо хуже. Модель понимает русский текст (отвечает на русском, что-то извлекает), но инструкции нужно формулировать очень чётко, галлюцинации учащаются, а грамматика ответов иногда вызывает вопросы. Не критично для задач извлечения данных из английских шаблонов, но для русскоязычного саппорта - пока не то.
Базовая LLaMA-13B без дообучения на инструкциях - продолжает текст, а не отвечает на вопросы. Для прикладных задач напрямую не годится; нужен либо fine-tune, либо дообученный вариант.
Требования к железу
Минимальная рабочая конфигурация для 13B в 4-bit:
- VRAM: 10-12 ГБ - модель влезает, остаётся место на контекст.
- RAM: 16 ГБ системной памяти - llama.cpp часть слоёв может выгружать на CPU.
- CPU-режим: работает, но скорость делает это пригодным разве что для разработки.
Для 7B-модели достаточно 6-8 ГБ VRAM, и такая карточка стоит в разы дешевле. Если задачи позволяют - это более реалистичный путь для корпоративного стенда без огромного бюджета.
Серьёзный нюанс: VRAM - дефицитный ресурс. Потребительские карты на 24 ГБ (RTX 3090/4090) стоят немало, а профессиональные A100/H100 - разговор совсем о другом бюджете. На один поток запросов одна карточка справляется, но если нужна параллельная обработка - считайте железо отдельно.
Что по инфраструктуре
Разворачивать это в корпоративной среде проще, чем кажется. text-generation-webui поднимается в Docker, отдаёт OpenAI-совместимый API - то есть LangChain-пайплайн переключается с openai на локальный эндпоинт минимальными изменениями в конфиге. Это важно: не нужно переписывать приложение, только менять URL и убирать API-ключ.
Вопрос деплоя и обновления моделей - отдельная история. Пока это скорее ручное управление: скачать новые веса, перезапустить контейнер. Нормального lifecycle-менеджмента в экосистеме ещё нет, всё решается скриптами.
Итог на сегодня
Для клиентов с жёсткими требованиями к конфиденциальности данных локальные LLM - это уже не эксперимент на бумаге, а работающий вариант интеграции в реальные процессы. Качество на английском достаточное для ряда задач автоматизации, русский - слабое место, которое пока придётся компенсировать архитектурой (строгие промпты, валидация вывода, человек на финальной проверке).
Главный практический вывод: GPU-карточка на 24 ГБ VRAM и пара дней настройки - это реалистичный стартовый стенд. Не волшебная кнопка, но рабочий инструмент для конкретного класса задач.
Официальный релиз LLaMA 2 ждём в июле - посмотрим, изменится ли расклад по качеству.