Как развернуть Llama 3.1 405B с помощью Novita AI

Как развернуть Llama 3.1 405B с помощью Novita AI

Предисловие

Релиз Llama3.1 сразу привлёк внимание всего мира, впервые открытая модель приблизилась и даже превзошла проприетарные модели по некоторым метрикам. В этой статье описывается метод и этапы развёртывания модели Llama3.1-405B с нуля с помощью GPU-инстанса Novita AI. Следует отметить, что развёртывание большой модели с нуля — трудоёмкая задача. Если вы хотите избежать такой рутинной работы и сразу использовать модель Llama3.1-405B, вы можете обратиться к отличной платформе хостинга моделей в индустрии и вызывать инференс-сервис через API, совместимый с OpenAI. Это не только удобно в использовании, но и очень выгодно по цене: общая стоимость низкая и контролируемая. В настоящее время Novita AI запустила API-сервис для Llama3.1, и вы можете попробовать его прямо в Playground: https://novita.ai/model-api/llm-api/playground

Базовые требования для развёртывания Llama3.1-405B

Семейство моделей Llama3.1 с открытым исходным кодом от Meta включает три размера: 8B, 70B и 405B, причём модель 405B является крупнейшей на сегодняшний день открытой большой языковой моделью с 40,5 миллиардами параметров. По результатам многих оценок модель превзошла GPT-4 и GPT-4o, а также сопоставима с Claude3.5-Sonnet. Загрузить такую большую модель в GPU непросто. Оригинальная версия FP16 модели 405B требует 810 ГБ видеопамяти, как показано на рисунке ниже. Однако даже с самым высокопроизводительным GPU H100, доступным на рынке, сервер с максимальной конфигурацией из 8 карт не может напрямую загрузить эту версию модели. Необходимо квантовать версию FP16 в представление с меньшей точностью, тем самым снижая требования к памяти и успешно загружая модель в GPU.

Архитектура моделей семейства Llama3.1 унаследована от Llama3, структура очень похожа, что очень удобно для инференс-фреймворков. Решения с открытым исходным кодом, такие как vLLM, могут быстро адаптироваться и поддерживать инференс больших моделей, таких как Llama3.1-405B. В итоге, для завершения развёртывания инференс-сервиса Llama3.1-405B необходимо подготовиться с трёх сторон:

  • Оборудование: Рекомендуется выбрать серверный инстанс GPU с 8 H100 GPU и зарезервировать около 1.5 ТБ дискового пространства. Вы можете выбрать инстанс через консоль Novita AI и предоставить ёмкость хранилища, подключив сетевой том.

  • Модель: Подготовьте аккаунт Huggingface, загрузите оригинальную модель Llama3.1-405B, либо загрузите версию FP8 или INT4.
  • Инференс-фреймворк: Загрузите последнюю версию vLLM v0.5.3.post1.

Подготовка модели

После подготовки GPU-сервера с 8 картами H100 войдите на сервер и начните загрузку модели. Здесь описан метод загрузки версии FP16 и ручного преобразования в квантованные версии FP8 и INT4 (конечно, вы также можете напрямую загрузить квантованную модель на платформе Huggingface). Рекомендуется загрузить Instruct-версию с платформы Huggingface. Сначала зарегистрируйтесь и войдите в Huggingface, создайте и сохраните Access Token текущего пользователя на странице настроек — он понадобится при загрузке модели. Откройте домашнюю страницу модели Llama3.1-405B: https://huggingface.co/meta-llama/Meta-Llama-3.1-405B-Instruct, отправьте заявку на модель компании Meta и подождите около получаса для авторизации. Вернувшись на GPU-сервер, установите клиент huggingface и начните загрузку модели с помощью следующих команд:

pip install huggingface-hub
huggingface-cli login  ## Введите Access Token
huggingface-cli download meta-llama/Meta-Llama-3.1-405B-Instruct  ## Начинаем загрузку большой модели 405B

После долгого ожидания (в зависимости от текущей скорости сети) 800-гигабайтная модель 405B успешно загружена локально; информацию о модели можно просмотреть, вызвав huggingface-cli scan-cache. Затем выполните квантование исходной модели в FP8 и INT4. Сначала загрузите инструмент квантования FP8 — можно использовать открытый AutoFP8: https://github.com/neuralmagic/AutoFP8, и воспользоваться скриптом для ручного квантования с динамическим режимом, как показано ниже:

git clone https://github.com/neuralmagic/AutoFP8.git
cd AutoFP8
pip install -e .  ## Скомпилировать и установить AutoFP8 локально
python3 examples/quantize.py --model-id meta-llama/Meta-Llama-3.1-405B-Instruct --save-dir Meta-Llama-3-8B-Instruct-fp8 --activation-scheme dynamic --max-seq-len 2048 --num-samples 2048

Скрипт квантования указывает путь вывода квантованной модели с помощью --save-dir. Поскольку это квантование только весов, общая скорость очень высокая. Вы также можете напрямую загрузить FP8-версию, квантованную Meta: https://huggingface.co/meta-llama/Meta-Llama-3.1-405B-Instruct-FP8. Команда загрузки:

huggingface-cli download meta-llama/Meta-Llama-3.1-405B-Instruct-FP8

Аналогично квантованию FP8, для версии INT4 можно использовать открытый AutoAWQ. Адрес этого решения: https://github.com/casper-hansen/AutoAWQ. Метод квантования:

git clone https://github.com/casper-hansen/AutoAWQ.git
cd AutoAWQ
pip install -e .   ## Скомпилировать и установить AutoAWQ локально
## Вручную изменить examples/quantize.py:
    model_path = 'meta-llama/Meta-Llama-3.1-405B-Instruct'
    quant_path = 'meta-llama/Meta-Llama-3.1-405B-Instruct-awq'
    
# Начать квантование
python examples/quantize.py

Построение инференс-фреймворка

Благодаря мощной поддержке сообщества с открытым исходным кодом, vLLM признан промышленным высокоэффективным инференс-фреймворком с очень богатой поддержкой больших моделей и своевременными обновлениями. Начиная с v0.5.3.post1 vLLM поддерживает инференс-сервис моделей семейства Llama3.1. Способ загрузки исходного кода vLLM и компиляции:

git clone https://github.com/vllm-project/vllm
cd vllm
git checkout -b v0.5.3.post1 v0.5.3.post1
pip install -e .

После успешной компиляции можно запустить инференс-сервис. Помимо локальной компиляции, можно также скомпилировать vLLM в docker-образ:

git clone https://github.com/vllm-project/vllm
cd vllm
git checkout -b v0.5.3.post1 v0.5.3.post1
docker build -t vllm_0.5.3.p1 .

Вы также можете напрямую загрузить официальный образ vLLM:

docker pull vllm/vllm-openai:v0.5.3.post1

Запуск инференс-сервиса

После завершения построения инференс-фреймворка vLLM можно запустить vLLM, загрузив модель Llama3.1-405B, чтобы начать инференс-сервис. Для локально скомпилированного фреймворка vLLM перейдите в корневой каталог исходного кода vLLM и выполните следующую команду для запуска инференс-сервиса:

cd vllm
python3 -m vllm.entrypoints.openai.api_server --port 18001 --model meta-llama/Meta-Llama-3.1-405B-Instruct-FP8 --tensor-parallel-size 8 --pipeline-parallel-size 1 --swap-space 16 --gpu-memory-utilization 0.99 --dtype auto --served-model-name llama31-405b-fp8 --max-num-seqs 32 --max-model-len 32768 --max-num-batched-tokens 32768 --max-seq-len-to-capture 32768

Если запускать инференс-сервис в docker-контейнере, можно использовать следующую команду:

docker run -d --gpus all --privileged --ipc=host --net=host vllm/vllm-openai:v0.5.3.post1 --port 18001 --model meta-llama/Meta-Llama-3.1-405B-Instruct-FP8 --tensor-parallel-size 8 --pipeline-parallel-size 1 --swap-space 16 --gpu-memory-utilization 0.99 --dtype auto --served-model-name llama31-405b-fp8 --max-num-seqs 32 --max-model-len 32768 --max-num-batched-tokens 32768 --max-seq-len-to-capture 32768

После успешного запуска инференс-фреймворк vLLM начнёт прослушивание.

Novita AI — это универсальная облачная платформа, которая поддерживает ваши AI-амбиции. Интегрированные API, serverless, GPU-инстансы — экономически эффективные инструменты, которые вам нужны. Избавьтесь от инфраструктуры, начните бесплатно и воплотите ваше AI-видение в реальность.

Рекомендуемые статьи:

  1. От Docker до Kubernetes
  2. Демистификация планирования Kubernetes: глубокое погружение в предикаты и приоритеты