Введение
Генерация текста стала революционной возможностью, преобразующей то, как машины интерпретируют и создают человекоподобный текст. Этот всплеск популярности привел к разработке многочисленных инструментов, предназначенных для упрощения и улучшения работы с большими языковыми моделями (LLM).
Стремительное расширение больших языковых моделей, новые версии которых появляются почти еженедельно, вызвало одновременный рост количества вариантов хостинга для поддержки этой технологии. Среди множества доступных инструментов выделяется Text Generation Inference (TGI) от Hugging Face, позволяющий запускать LLM как сервис на локальных машинах.
Это руководство подробно расскажет, почему Hugging Face TGI является значительной инновацией и как вы можете использовать его для разработки сложных моделей ИИ, способных генерировать текст, который все труднее отличить от написанного человеком.
Что такое Hugging Face Text Generation Inference?
Hugging Face Text Generation Inference (TGI) — это фреймворк, написанный на Rust и Python, для развертывания и обслуживания больших языковых моделей. Это готовый к производству инструментарий, предназначенный для этой цели.
Hugging Face разрабатывает и распространяет TGI под лицензией HFOILv1.0, разрешающей коммерческое использование при условии, что он функционирует как вспомогательный инструмент в продукте или услуге, а не является основной функцией. Основные проблемы, которые он решает:
Ключевые особенности Hugging Face Text Generation Inference (TGI)
-
Высокопроизводительная генерация текста
— TGI использует такие методы, как тензорный параллелизм (Tensor Parallelism), распределяющий большие модели по нескольким GPU, и динамическую пакетную обработку (dynamic batching), которая группирует запросы на лету внутри сервера, чтобы оптимизировать производительность популярных open-source LLM, включая StarCoder, BLOOM, GPT-NeoX, Llama и T5. -
Эффективное использование ресурсов
— TGI использует непрерывную пакетную обработку (continuous batching), оптимизированный код и тензорный параллелизм для одновременной обработки нескольких запросов при минимальном расходе ресурсов. -
Гибкость и безопасность
— TGI поддерживает различные функции безопасности, такие как водяные знаки (watermarking), warp логитов (logit warping — изменение логитов определенных токенов путем внесения смещения) и стоп-последовательности (stop sequences), чтобы обеспечить ответственное и контролируемое использование LLM.
Hugging Face оптимизировал архитектуру некоторых LLM для более быстрой работы с TGI, включая такие популярные модели, как LLaMA, Falcon7B и Mistral. Полный список поддерживаемых моделей можно найти в документации.
Зачем использовать Hugging Face TGI?
Hugging Face стала основной платформой для разработки ИИ с возможностями обработки естественного языка. Она размещает множество ведущих open-source моделей, что делает ее мощным центром инноваций в NLP. Традиционно эти модели были слишком большими для локального запуска, что вынуждало полагаться на облачные сервисы.
Однако недавние достижения в методах квантизации, таких как QLoRa и GPTQ, сделали некоторые LLM управляемыми на обычных устройствах, включая локальные компьютеры.
Hugging Face TGI специально разработан для работы LLM как сервиса на локальных машинах. Этот подход решает проблему загрузки LLM, оставляя модель готовой в фоновом режиме для быстрых ответов, избегая долгого ожидания каждого запроса. Представьте, что у вас есть конечная точка с набором лучших языковых моделей, готовых генерировать текст по запросу.
Что выделяет TGI, так это его простота реализации. Он поддерживает различные оптимизированные архитектуры моделей, что делает развертывание быстрым и легким.
Более того, TGI уже используется в нескольких живых проектах. Вот некоторые примеры:

- Hugging Chat — open-source интерфейс для открытых моделей.
- OpenAssistant — open-source инициатива сообщества по обучению LLM.
- nat.dev — платформа для изучения и сравнения LLM.
Однако есть заметное ограничение: TGI пока несовместим с ARM-совместимыми GPU Mac, включая серию M1 и более поздние модели.
Настройка Hugging Face TGI
Сначала настройте конечную точку Hugging Face TGI.

Чтобы установить и запустить Hugging Face TGI локально, начните с установки Rust. После этого настройте виртуальное окружение Python с версией Python 3.9 или выше, например, с помощью conda:
#Установка Rust curl --proto ‘=https’ --tlsv1.2 -sSf https://sh.rustup.rs | sh
#Создание виртуального окружения python conda create -n text-generation-inference python=3.9 conda activate text-generation-inference
Кроме того, необходимо установить Protoc. Hugging Face рекомендует использовать версию 21.12 для наилучшей совместимости. Обратите внимание, что для выполнения этой установки потребуются привилегии sudo.
PROTOC_ZIP=protoc-21.12-linux-x86_64.zip curl -OL https://github.com/protocolbuffers/protobuf/releases/download/v21.12/$PROTOC_ZIP sudo unzip -o $PROTOC_ZIP -d /usr/local bin/protoc sudo unzip -o $PROTOC_ZIP -d /usr/local ‘include/*’ rm -f $PROTOC_ZIP
Сначала я опишу процесс установки с нуля, который может быть не совсем простым. Если у вас возникнут проблемы, вы можете перейти к более простому варианту — использованию Docker-образа. Будут рассмотрены оба сценария.
Как только все предварительные требования будут выполнены, можно приступить к настройке TGI. Начните с клонирования репозитория GitHub:
git clone https://github.com/huggingface/text-generation-inference.git
Затем перейдите в каталог TGI на вашей локальной машине и установите его с помощью следующих команд:
cd text-generation-inference/ BUILD_EXTENSIONS=False make install
Теперь давайте рассмотрим, как использовать TGI как с Docker, так и без него. Для демонстрации я буду использовать модель Falcon-7B с лицензией Apache 2.0.
Запуск модели без Docker
Процесс установки создал новую команду text-generation-launcher, которая запускает сервер TGI. Чтобы активировать конечную точку с моделью Falcon-7B, просто выполните следующую команду:
text-generation-launcher --model-id tiiuae/falcon-7b-instruct --num-shard 1 --port 8080 --quantize bitsandbytes
Вот пояснение каждого входного параметра:
- model-id: Это конкретное имя модели, указанное в Hugging Face Hub. В нашем случае для Falcon-7B это
tiiuae/falcon-7b-instruct. - num-shard: Настройте этот параметр в соответствии с количеством доступных GPU. Значение по умолчанию — 1.
- port: Указывает порт, на котором сервер будет ожидать запросы. Порт по умолчанию — 8080.
- quantize: Для пользователей с GPU, имеющими VRAM менее 24 ГБ, необходима квантизация модели, чтобы избежать перегрузки памяти. В предыдущих командах выбрано
bitsandbytesдля немедленной квантизации. Также доступен вариантGPTQ(gptq), хотя его работа может быть менее привычной.
Применение TGI
Существует несколько способов интеграции сервера Text Generation Inference (TGI) в ваши приложения. После его запуска вы можете взаимодействовать с ним, отправляя POST-запрос к конечной точке /generate, чтобы получить результаты.

Если вы предпочитаете непрерывную потоковую передачу токенов с TGI, используйте соответствующую конечную точку, как показано в следующем разделе. Эти запросы можно отправлять с помощью любого предпочитаемого инструмента, такого как curl, Python или TypeScript. Чтобы отправлять запросы к модели, обслуживаемой TGI, из скрипта Python, необходимо установить библиотеку text-generation. Это легко сделать с помощью следующей команды pip:
pip install text-generation
После запуска сервера TGI создайте экземпляр InferenceClient() с URL, указывающим на конечную точку обслуживания модели. Затем вы можете вызвать text_generation(), чтобы отправлять запросы к конечной точке с помощью Python.
from text_generation import Client client = Client(“http://127.0.0.1:8080”) client.text_generation(prompt=“Your prompt here!”)
Чтобы активировать потоковую передачу с помощью InferenceClient, просто установите stream=True. Это позволит получать токены в реальном времени по мере их генерации на сервере. Вот как использовать потоковую передачу:
for token in client.text_generation(“Your prompt here!”, max_new_tokens=12, stream=True): print(token)
Отправка запросов модели через TGI
Помните, что вы будете взаимодействовать с развернутой моделью на вашей конечной точке, в нашем случае это Falcon-7B. Через TGI мы создаем живую конечную точку, которая обеспечивает получение ответов от выбранной LLM.
В результате с помощью Python запросы можно отправлять напрямую LLM через клиент, размещенный на нашем локальном устройстве, доступный через порт 8080. Таким образом, соответствующий скрипт Python будет выглядеть так:
from text_generation import Client client = Client(“http://127.0.0.1:8080”) print(client.generate(“Translate the following sentence into spanish: ‘What does Large Language Model mean?’”, max_new_tokens=500).generated_text)
Мы получим ответ от модели без необходимости устанавливать ее в нашей среде. Вместо Python мы можем запросить LLM с помощью CURL, как показано в следующем примере:
curl 127.0.0.1:8080/generate
-X POST
-d ‘{“inputs”:“Code in Javascript a function to remove all spaces in a string and then print the string twice.”,“parameters”:{“max_new_tokens”:500}}’
-H ‘Content-Type: application/json’
После экспериментов с TGI он показывает впечатляющую скорость. С Falcon-7B (с лимитом токенов 500) это занимает всего несколько секунд. Для сравнения, обычный подход с использованием библиотеки transformers требует примерно 30 секунд.
Интеграция с novita.ai с помощью LLM от novita.ai

Начиная с версии 1.4.0, TGI представляет API, совместимый с LLM API от novita.ai. Этот новый Messages API обеспечивает плавный переход для клиентов и пользователей от моделей novita.ai к open-source LLM. API предназначен для прямой интеграции с клиентскими библиотеками novita.ai или со сторонними инструментами, такими как LangChain или LlamaIndex.

Поддержка Messages в TGI обеспечивает полную совместимость его Inference Endpoints с LLM API novita.ai. Эта совместимость позволяет пользователям легко заменить любые существующие скрипты, использующие модели novita.ai, на открытые LLM, размещенные на конечных точках TGI, без каких-либо хлопот.
Это обновление упрощает переключение, предоставляя немедленный доступ к многочисленным преимуществам open-source моделей, включая:
- Полный контроль и прозрачность в отношении моделей и данных.
- Отсутствие ограничений по частоте запросов.
- Гибкость в настройке систем для удовлетворения уникальных требований.
Пример интеграции TGI в протокол чат-завершения novita.ai приведен ниже:
from openai import OpenAI
client = OpenAI(
base_url=“https://api.novita.ai/v3/openai”,
# Получите API-ключ NovitaAI, обратившись к: https://novita.ai/get-started/Quick_Start.html#_3-create-an-api-key
api_key=“
model = “meta-llama/llama-3-8b-instruct” stream = True # or False max_tokens = 512
chat_completion_res = client.chat.completions.create( model=model, messages=[ { “role”: “system”, “content”: “Act like you are a helpful assistant.”, }, { “role”: “user”, “content”: “Hi there!”, } ], stream=stream, max_tokens=max_tokens, )
if stream: for chunk in chat_completion_res: print(chunk.choices[0].delta.content or “”, end=“”) else: print(chat_completion_res.choices[0].message.content)
Как видно, библиотека novita.ai может использоваться для указания нашей конечной точки и пароля Hugging Face. Для получения дополнительной информации об этой интеграции обратитесь к документации Hugging Face TGI.
Практические советы при использовании TGI
Основные концепции LLM
Прежде чем погрузиться в HuggingFace TGI, важно хорошо понимать большие языковые модели. Ознакомьтесь с ключевыми концепциями, такими как токенизация, механизмы внимания и архитектура Transformer. Эти основы необходимы для настройки моделей и улучшения результатов генерации текста.
Подготовка и оптимизация модели — понимание Hugging Face
Научитесь подготавливать и оптимизировать модели для ваших конкретных нужд. Это включает выбор подходящей модели, настройку токенизаторов и применение методов для повышения производительности без ущерба для качества.
Ознакомьтесь с тем, как работает HuggingFace и как использовать его HuggingFace Hub для разработки NLP. Хорошей отправной точкой является руководство «An Introduction to Using Transformers and Hugging Face».
Понимание концепции тонкой настройки (fine-tuning) также важно, поскольку модели часто нуждаются в оптимизации для конкретных задач. Вы можете узнать, как выполнить тонкую настройку модели, из руководства «An Introductory Guide to Fine-Tuning LLMs».
Стратегии генерации
Исследуйте различные подходы к генерации текста, включая жадный поиск (greedy search), лучевой поиск (beam search) и top-k сэмплирование. У каждого метода есть свои преимущества и недостатки, влияющие на связность, креативность и релевантность генерируемого текста.
Заключение
Инструментарий Hugging Face TGI позволяет отдельным пользователям углубиться в генерацию текста с помощью ИИ. Он предоставляет удобный инструментарий для развертывания и хостинга LLM для сложных приложений NLP, требующих человекоподобного текста.
Хотя самостоятельный хостинг больших языковых моделей обеспечивает конфиденциальность данных и контроль над расходами, он требует мощного аппаратного обеспечения. Тем не менее, недавние достижения в этой области позволяют использовать меньшие модели непосредственно на наших локальных машинах.
novita.ai — универсальная платформа для безграничного творчества, предоставляющая доступ к более чем 100 API. От генерации изображений и обработки языка до улучшения аудио и манипуляции видео, недорогая модель оплаты по мере использования — она избавляет вас от хлопот по обслуживанию GPU, пока вы создаете свои собственные продукты. Попробуйте бесплатно.
Рекомендуемое чтение
Novita AI LLM Inference Engine: максимальная пропускная способность и самый дешевый инференс
