Развертывание локального LLAMA-3 с NVIDIA NIM: всеобъемлющее руководство

Развертывание локального LLAMA-3 с помощью NVIDIA NIM: всеобъемлющее руководство - Узнайте, как развернуть модель LLAMA-3 с использованием NVIDIA NIM для эффективного вывода на вашем облачном или локальном компьютере. Охватывает настройку, тестирование производительности и интеграцию с API OpenAI.

24 февраля 2025 г.

party-gif

Раскройте силу больших языковых моделей с нашим руководством по самостоятельному размещению и развертыванию модели LLAMA-3 с использованием NIM от NVIDIA. Узнайте, как использовать эту передовую технологию для ускорения ваших проектов в области искусственного интеллекта и достижения беспрецедентной производительности.

Как развернуть NVIDIA NIM для вывода больших языковых моделей

Чтобы развернуть семейство моделей Lama с помощью NVIDIA NIM на вашем собственном облаке или локальной машине, выполните следующие шаги:

  1. Настройка окружения: Если вы работаете на локальной машине, установите Docker Engine и инструментарий контейнеров NVIDIA. Ссылки на них предоставлены в описании видео.

  2. Получение API-ключа: Зарегистрируйтесь в учетной записи NVIDIA, чтобы сгенерировать ваш API-ключ и личный ключ. Они потребуются для взаимодействия с удаленным сервером.

  3. Запуск Docker-контейнера: Используйте предоставленную команду Docker для запуска контейнера, указав имя контейнера, использование GPU, API-ключ, расположение кэша модели и порт. Это загрузит и настроит модель Lama 3 8 миллиардов инструкций.

  4. Взаимодействие с моделью: Используйте предоставленную команду cURL для взаимодействия с развернутой моделью. Эта команда следует стандарту OpenAI API, позволяя вам использовать клиент OpenAI для взаимодействия.

  5. Стресс-тестирование API: Используйте скрипт Python с библиотекой requests для отправки нескольких параллельных запросов к конечной точке API и мониторинга использования GPU и пропускной способности.

  6. Использование клиента OpenAI API: Продемонстрируйте, как использовать клиент OpenAI API с NVIDIA NIM, обновив базовый URL-адрес и другие параметры, чтобы они соответствовали развернутой модели.

Доступ к панели мониторинга NVIDIA Launchpad и метрик GPU

Чтобы получить доступ к NVIDIA Launchpad и панели мониторинга GPU, выполните следующие шаги:

  1. В рамках NVIDIA Launchpad вы получаете доступ к IDE-коду, которым является Visual Studio Code. Вы можете использовать этот IDE для взаимодействия с экземпляром GPU и развертывания модели Llama 3 8 миллиардов инструкций.

  2. Панель мониторинга GPU - это панель Grafana, которая предоставляет подробную информацию об использовании и производительности GPU. Вы можете получить доступ к этой панели для мониторинга использования GPU, версии CUDA, драйверов GPU и других соответствующих метрик.

  3. Панель Grafana дает вам визуальное представление об использовании GPU во времени, позволяя отслеживать производительность и соответствующим образом оптимизировать развертывание.

  4. Вы можете использовать команду watch в терминале для мониторинга использования GPU в режиме реального времени. Команда watch -n 1 nvidia-smi будет обновлять использование GPU каждую секунду, предоставляя вам живое представление об использовании GPU.

  5. Панель мониторинга GPU и инструменты мониторинга в режиме реального времени позволяют вам понять характеристики производительности развертывания модели Llama 3 8 миллиардов инструкций, помогая оптимизировать использование ресурсов и обеспечивать эффективный вывод.

Настройка контейнера Docker NVIDIA NIM

Чтобы развернуть модель Llama 3 8 миллиардов инструкций с помощью NVIDIA NIM, выполните следующие шаги:

  1. Откройте предоставленный IDE и убедитесь, что у вас есть доступ к GPU H100.
  2. Настройте ваш API-ключ, зарегистрировавшись в учетной записи NVIDIA и сгенерировав необходимые ключи.
  3. Запустите следующую команду Docker, чтобы запустить контейнер NVIDIA NIM:
docker run -it --gpus all -e NVIDIA_API_KEY=$NVIDIA_API_KEY -p 8000:8000 --name llama-3-8b-instruct nvcr.io/nvidia/nim:latest --model-name llama-3-8b-instruct

Эта команда:

  • Создаст Docker-контейнер с именем "llama-3-8b-instruct"
  • Использует все доступные GPU в системе
  • Установит переменную окружения NVIDIA_API_KEY
  • Откроет порт 8000 для сервера NIM
  • Использует модель "llama-3-8b-instruct" из каталога NVIDIA NIM
  1. После запуска контейнера вы можете использовать предоставленную команду cURL для взаимодействия с моделью:
curl -X POST -H "Content-Type: application/json" -d '{"model": "llama-3-8b-instruct", "prompt": "Tell me a joke.", "max_tokens": 1000, "temperature": 0.7, "top_p": 0.95, "stop": ["\n"]}' http://localhost:8000/v1/completions

Эта команда cURL отправляет запрос на сервер NIM, работающий на localhost:8000, для генерации ответа на запрос "Tell me a joke."

  1. Чтобы провести стресс-тестирование конечной точки API, вы можете запустить предоставленный скрипт Python test_server.py. Этот скрипт будет отправлять несколько параллельных запросов на сервер NIM и отслеживать использование GPU.

  2. Наконец, вы также можете использовать клиент OpenAI API для взаимодействия с сервером NIM, обновив базовый URL-адрес, чтобы он указывал на адрес и порт сервера NIM.

Выполнив эти шаги, вы сможете успешно развернуть модель Llama 3 8 миллиардов инструкций с помощью Docker-контейнера NVIDIA NIM и протестировать ее производительность.

Взаимодействие с API NVIDIA NIM

Чтобы взаимодействовать с API NVIDIA NIM, мы можем использовать простую команду cURL. Команда cURL предоставляет следующее:

  • Делает POST-запрос на локальный хост на порту 8000, где работает сервер NVIDIA NIM.
  • Использует совместимый с OpenAI API, поэтому мы можем использовать клиент OpenAI для взаимодействия с сервером NIM.
  • Указывает модель Llama 3 8 миллиардов инструкций для использования.
  • Устанавливает структуру сообщения, аналогичную ожидаемой OpenAI.
  • Позволяет устанавливать дополнительные параметры, такие как max_tokens и temperature.

Вот команда cURL:

curl -X POST -H "Content-Type: application/json" -d '{"model": "nlp/lama-3-8b-instruct", "messages": [{"role": "user", "content": "Tell me a joke"}], "max_tokens": 1000, "temperature": 0.7}' http://localhost:8000/v1/chat/completions

Эта команда cURL отправит запрос на сервер NVIDIA NIM, который затем сгенерирует ответ из модели Llama 3 8 миллиардов инструкций. Ответ будет передаваться потоком, при этом каждый токен будет отображаться по мере его генерации.

Чтобы дополнительно провести стресс-тестирование конечной точки API, мы можем использовать скрипт Python, который использует библиотеку requests для выполнения нескольких параллельных запросов. Этот скрипт отправит 50 запросов на генерацию шуток в параллельном режиме и будет отслеживать использование GPU и пропускную способность.

Стресс-тестирование конечной точки API NVIDIA NIM

Чтобы провести стресс-тестирование конечной точки API NVIDIA NIM, мы будем использовать простой скрипт Python, который использует библиотеку requests для выполнения нескольких параллельных запросов к API. Вот как это работает:

  1. Мы определяем URL-адрес конечной точки API, который в данном случае является локальным хостом, так как мы запускаем сервер локально. Если вы будете развертывать это на удаленном сервере, вам потребуется использовать внешний IP-адрес и включить переадресацию портов.

  2. Мы устанавливаем необходимые заголовки, включая заголовок Content-Type со значением application/json.

  3. Мы создаем полезную нагрузку, которая включает имя модели ("model": "llama-3-8b-instruct"), запрос ("prompt": "Tell me 50 jokes.") и другие параметры, такие как max_tokens, temperature и stop.

  4. Мы определяем функцию send_requests(), которая отправляет запросы с помощью метода requests.post() и ранее определенных URL-адреса, заголовков и полезной нагрузки.

  5. Мы используем многопоточность, чтобы запустить несколько экземпляров функции send_requests() параллельно, имитируя высокий объем запросов к конечной точке API.

  6. Мы отслеживаем использование GPU в режиме реального времени с помощью команды watch и инструмента nvidia-smi, который предоставляет информацию об использовании GPU.

Вывод показывает, что конечная точка API может обрабатывать значительное количество параллельных запросов, со средней пропускной способностью около 2500 токенов в секунду. Использование GPU также остается относительно высоким, что указывает на то, что NVIDIA NIM эффективно использует аппаратные ресурсы для обеспечения высокопроизводительного вывода.

Этот стресс-тест демонстрирует масштабируемость и производительность решения NVIDIA NIM, делая его привлекательным вариантом для развертывания больших языковых моделей в производственной среде.

Использование NVIDIA NIM с клиентом API OpenAI

Чтобы использовать клиент OpenAI API с NVIDIA NIM, выполните следующие шаги:

  1. Измените базовый URL-адрес на URL-адрес вашего экземпляра NVIDIA NIM. В этом примере мы запускаем его на localhost:8000:
openai.api_base = "http://localhost:8000"
  1. Вам не нужно предоставлять API-ключ, так как NVIDIA NIM обрабатывает аутентификацию.

  2. Установите модель на модель, размещенную на NVIDIA NIM, в данном случае "meta-llama-38b-instruct":

model = "meta-llama-38b-instruct"
  1. Установите другие параметры, такие как максимальное количество генерируемых токенов, температура и следует ли передавать ответы потоком:
response = openai.ChatCompletion.create(
    model=model,
    messages=[{"role": "user", "content": "Tell me 50 different jokes"}],
    max_tokens=1024,
    temperature=0.7,
    stream=True,
)
  1. Перебирайте потоковый ответ и выводите сгенерированный текст:
for chunk in response:
    print(chunk.choices[0].text, end="")

Этот подход позволяет вам использовать производительность и простоту развертывания, предоставляемые NVIDIA NIM, одновременно используя знакомый клиент OpenAI API. Потоковый ответ обеспечивает получение сгенерированного текста в режиме реального времени, обеспечивая отзывчивый пользовательский опыт.

Часто задаваемые вопросы