Оптимальный разблокировка NVIDIA, обеспечивающая мгновенную инференцию LLM всего в одной строке кода

Лучшая разблокировка NVIDIA для мгновенной инференции LLM всего в одной строке кода

Большие языковые модели (LLM) революционизировали обработку естественного языка и все больше применяются для решения сложных задач в масштабе. Достижение оптимальной производительности с помощью этих моделей известно своей сложностью из-за их уникальных и интенсивных вычислительных требований. Оптимизированная производительность LLM имеет огромную ценность для конечных пользователей, которые ищут быструю и отзывчивую работу, а также для масштабированных развертываний, где повышение производительности приводит к экономии денег.

И здесь появляется Optimum-NVIDIA. Доступный на платформе Hugging Face, Optimum-NVIDIA драматически ускоряет вывод LLM на платформе NVIDIA с помощью чрезвычайно простого API. Изменив всего одну строку кода, вы можете получить до 28-кратного ускорения вывода и 1 200 токенов/секунду на платформе NVIDIA.

Optimum-NVIDIA – это первая библиотека вывода Hugging Face, которая получила преимущество нового формата float8, поддерживаемого на архитектурах NVIDIA Ada Lovelace и Hopper. FP8, вместе с передовыми возможностями компиляции программного обеспечения NVIDIA TensorRT-LLM, драматически ускоряет вывод LLM.

Как запустить

Вы можете начать запуск LLaMA с ультраскоростью вывода всего лишь в 3 строки кода с помощью конвейера из Optimum-NVIDIA. Если вы уже настроили конвейер из библиотеки transformers от Hugging Face для запуска LLaMA, вам нужно всего лишь изменить одну строку кода, чтобы получить максимальную производительность!

- from transformers.pipelines import pipeline+ from optimum.nvidia.pipelines import pipeline# все остальное остается то же самое, что и в transformers!pipe = pipeline('text-generation', 'meta-llama/Llama-2-7b-chat-hf', use_fp8=True)pipe("Опишите реальное применение искусственного интеллекта в устойчивой энергетике.")

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

- from transformers import LlamaForCausalLM+ from optimum.nvidia import AutoModelForCausalLMfrom transformers import AutoTokenizertokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-2-13b-chat-hf", padding_side="left")model = AutoModelForCausalLM.from_pretrained(  "meta-llama/Llama-2-13b-chat-hf",+ use_fp8=True,  )model_inputs = tokenizer(    ["Как технология автономных транспортных средств преобразует будущее транспорта и городского планирования?"],     return_tensors="pt").to("cuda")generated_ids, generated_length = model.generate(    **model_inputs,     top_k=40,     top_p=0.7,     repetition_penalty=10,)tokenizer.batch_decode(generated_ids[0], skip_special_tokens=True)

Дополнительные детали можно найти в нашей документации

Оценка производительности

При оценке производительности LLM мы рассматриваем две метрики: Задержка первого токена и Пропускная способность. Задержка первого токена (также известная как время до первого токена или предварительная загрузка) измеряет время ожидания от момента ввода вашей подсказки до момента начала получения выходных данных, поэтому эта метрика может показать, насколько отзывчивой будет модель. Optimum-NVIDIA предлагает в 3,3 раза более быструю задержку первого токена по сравнению с обычными transformers:

Рисунок 1. Время, затрачиваемое на генерацию первого токена (мс)

Пропускная способность, с другой стороны, измеряет, насколько быстро модель может генерировать токены и особенно важна, когда вы хотите выполнять генерацию последовательностей в пакетах. Хотя есть несколько способов вычислить пропускную способность, мы используем стандартный метод, который делит время отклика от начала до конца на общую длину последовательности, включая все входные и выходные токены, суммируя все пакеты. Optimum-NVIDIA предлагает до 28-кратно более высокую пропускную способность по сравнению с обычными transformers:

Рисунок 2. Пропускная способность (токен/сек)

Предварительные оценки вновь объявленного GPU NVIDIA H200 Tensor Core показывают повышение пропускной способности на уровне до 2 раз для моделей LLaMA по сравнению с GPU NVIDIA H100 Tensor Core. Как только H200 станут более широко доступными, мы поделимся данными о производительности для Optimum-NVIDIA на H200.

Следующие шаги

Optimum-NVIDIA в настоящее время обеспечивает максимальную производительность для архитектуры + задачи LLaMAForCausalLM, поэтому любая модель на основе LLaMA, включая настроенные версии, должна работать с Optimum-NVIDIA “из коробки”. Мы активно расширяем поддержку, чтобы включить другие архитектуры моделей генерации текста и другие задачи, доступные через Hugging Face.

Мы продолжаем расширять границы производительности и планируем включить передовые техники оптимизации, такие как пакетная передача во время выполнения для улучшения пропускной способности при потоковой передаче подсказок и квантование INT4 для выполнения еще более сложных моделей на одном GPU.

С сегодняшнего дня мы выпускаем первую бета-версию репозитория Optimum-NVIDIA с инструкциями по началу работы. Попробуйте его и поделитесь своими отзывами с нами 🤗!