Развертывание сервиса инференса Llama 3.1 405B: руководство для начинающих

Развертывание сервиса инференса Llama 3.1 405B: руководство для начинающих

Введение

Эта статья использует экземпляр с 8 GPU H100, чтобы показать, как развернуть Llama3.1–405B. Самостоятельное развертывание больших моделей — трудоемкая и дорогостоящая задача. Чтобы избежать такой утомительной и дорогой работы, вы можете рассмотреть возможность использования Llama3.1–405B напрямую. Ищите отличные платформы провайдеров моделей в индустрии ИИ и используйте их через стандарт API OpenAI для сервисов инференса. Они удобны в использовании, а их модель оплаты по мере использования является экономически эффективной и управляемой. Мы рекомендуем сервис API инференса Llama3.1–405B от Novita AI.

Требования к развертыванию Llama3.1–405B

Все выпущенные Meta модели Llama3.1 включают 8B, 70B и 405B. Модель Llama3.1–405B является крупнейшей открытой языковой моделью на сегодняшний день с 405 миллиардами параметров. Результаты оценки производительности модели превосходят GPT-4 и GPT-4o и сопоставимы с Claude3.5-Sonnet.

Сложно загрузить такую большую модель на GPU. Оригинальная версия FP16 модели 405B требует 810 ГБ памяти GPU, как показано на изображении ниже. Однако, взяв в качестве примера самый мощный доступный на сегодня GPU H100, сервер с 8 сокетами не может напрямую загрузить эту версию модели. Необходимо квантовать версию FP16 модели и преобразовать ее в представление с низкой точностью, тем самым снижая требования к памяти и успешно загружая ее на GPU.

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

Для развертывания сервиса инференса Llama3.1–405B необходимы три ключевые подготовки:

  • Оборудование: Рекомендуется арендовать экземпляр сервера с 8 GPU H100 и зарезервировать около 1.5 ТБ дискового пространства.
  • Модель: Подготовьте аккаунт Hugging Face и загрузите оригинальную Llama3.1–405B или версии модели FP8 или INT4.
  • Фреймворк инференса: Загрузите последнюю версию vLLM v0.5.3.post1.

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

После подготовки сервера с 8 GPU H100 войдите на сервер и загрузите модель. Мы покажем, как загрузить версию FP16 модели и преобразовать ее в квантованные версии FP8 и INT4 (конечно, вы также можете загрузить предварительно квантованные модели из Hugging Face).

Рекомендуем загрузить версию Instruct с платформы Hugging Face. Сначала зарегистрируйтесь и войдите в Hugging Face. Создайте и сохраните токен доступа текущего пользователя на странице настроек, который будет использоваться при загрузке модели.

Откройте страницу модели Llama3.1–405B: https://huggingface.co/meta-llama/Meta-Llama-3.1-405B-Instruct, отправьте запрос на доступ к модели Meta и подождите около получаса для авторизации.

Вернувшись на сервер GPU, установите клиентское приложение Hugging Face и начните загрузку модели. Команда следующая:

pip install huggingface-hub  
huggingface-cli login ## Input Access Token  
huggingface-cli download meta-llama/Meta-Llama-3.1-405B-Instruct ## Start Downloading 405B

После долгого ожидания (в зависимости от скорости интернета) модель 405B размером 800 ГБ будет загружена на локальную машину. Выполните 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 . ## Compile and install the AutoFP8 tool locally  
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, вы можете использовать открытый инструмент AutoAWQ для выполнения квантования INT4. Адрес этого метода квантования: https://github.com/casper-hansen/AutoAWQ. Шаги квантования следующие:

Сборка фреймворка инференса

Используя мощное сообщество открытого кода, vLLM — это эффективный фреймворк инференса, предоставляющий поддержку различных LLM с своевременными обновлениями. Начиная с v0.5.3.post1, vLLM поддерживает сервис инференса для моделей Llama 3.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 на локальной машине, вы можете собрать 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 и загрузить модель Llama 3.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 запущен, он будет прослушивать порт 18001, принимая и обрабатывая запросы пользователей. Вы можете быстро проверить сервис инференса, отправив POST-запрос к конечной точке completions из вашего локального терминала. Команда следующая:

curl -X POST -H "Content-Type: application/json"  
http://localhost:18001/v1/completions  
-d '{"model": "llama31-405b-fp8", "prompt": "San Francisco is a"}'

На этом развертывание модели Llama 3.1 завершено.

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