Transformers documentation
Основы чата
Основы чата
Чат-модели — это диалоговые модели, которым можно отправить сообщение и получить ответ. Большинство языковых моделей, выпущенных с середины 2023 года, являются чат-моделями и могут называться «instruct» или «instruction-tuned». Модели, не поддерживающие чат, часто называют «base» или «pretrained».
Более крупные и новые модели, как правило, обладают большими возможностями, однако модели, специализированные в определённых областях (медицинские и юридические тексты, языки, отличные от английского и т. д.), часто превосходят эти более крупные модели. Используйте рейтинги, такие как OpenLLM и LMSys Chatbot Arena, чтобы подобрать лучшую модель для вашей задачи.
В этом руководстве показано, как быстро загрузить чат-модели в Transformers из командной строки, как построить и отформатировать диалог, а также как вести чат с помощью TextGenerationPipeline.
chat CLI
После того как вы установите Transformers, вы сможете общаться с моделью прямо из командной строки. Команда ниже запускает интерактивную сессию с моделью, в начале которой перечислены несколько базовых команд.
Для следующих команд убедитесь, что
transformers serveзапущен.
transformers chat Qwen/Qwen2.5-0.5B-Instruct

Вы можете запустить CLI с произвольными флагами generate в формате arg_1=value_1 arg_2=value_2 ...
transformers chat Qwen/Qwen2.5-0.5B-Instruct do_sample=False max_new_tokens=10
Для полного списка параметров выполните команду ниже.
transformers chat -h
Чат реализован на базе AutoClass с использованием инструментов из text generation и chat. Под капотом он использует CLI transformers serve (docs).
TextGenerationPipeline
TextGenerationPipeline — это высокоуровневый класс для генерации текста с режимом «чат». Режим «чат» активируется, если обнаружена модель для диалога и чат-промпт корректно отформатирован.
Модели чата принимают на вход список сообщений (историю чата). Каждое сообщение — это словарь с ключами role и content.
Чтобы начать чат, добавьте одно сообщение от user. Также можно по желанию включить сообщение system, чтобы указать модели, как ей следует вести себя.
chat = [
{"role": "system", "content": "You are a helpful science assistant."},
{"role": "user", "content": "Hey, can you explain gravity to me?"}
]Создайте TextGenerationPipeline и передайте в него chat. Для больших моделей установка device_map=“auto” помогает загрузить модель быстрее и автоматически размещает её на самом быстром доступном устройстве.
import torch
from transformers import pipeline
pipeline = pipeline(task="text-generation", model="HuggingFaceTB/SmolLM2-1.7B-Instruct", dtype="auto", device_map="auto")
response = pipeline(chat, max_new_tokens=512)
print(response[0]["generated_text"][-1]["content"])Если всё прошло успешно, вы увидите ответ модели! Если вы хотите продолжить диалог,
вам нужно обновить историю чата ответом модели. Вы можете сделать это, добавив текст
в chat (используя роль assistant), или прочитав response[0]["generated_text"], который содержит
полную историю чата, включая самый последний ответ.
После получения ответа модели вы можете продолжить диалог, добавив новое сообщение user в историю чата.
chat = response[0]["generated_text"]
chat.append(
{"role": "user", "content": "Woah! But can it be reconciled with quantum mechanics?"}
)
response = pipeline(chat, max_new_tokens=512)
print(response[0]["generated_text"][-1]["content"])Повторяя этот процесс, вы можете продолжать беседу столько, сколько пожелаете, по крайней мере, пока модель не исчерпает контекстное окно или у вас не закончится память.
Производительность и использование памяти
Transformers по умолчанию загружают модели в полной точности float32, и для модели на 8B это требует ~32 ГБ памяти! Используйте аргумент torch_dtype="auto", который, как правило, применяет bfloat16 для моделей, обученных в этой точности, чтобы снизить потребление памяти.
См. документацию Quantization для получения дополнительной информации о различных доступных бэкендах квантования.
Чтобы ещё больше снизить потребление памяти, вы можете квантовать модель до 8 или 4 бит с помощью bitsandbytes. Создайте BitsAndBytesConfig с нужными параметрами квантования и передайте его в параметр model_kwargs пайплайна. В примере ниже модель квантуется до 8 бит.
from transformers import pipeline, BitsAndBytesConfig
quantization_config = BitsAndBytesConfig(load_in_8bit=True)
pipeline = pipeline(task="text-generation", model="meta-llama/Meta-Llama-3-8B-Instruct", device_map="auto", model_kwargs={"quantization_config": quantization_config})В целом размер модели и её производительность напрямую коррелируют. Более крупные модели работают медленнее и требуют больше памяти, поскольку каждый активный параметр должен считываться из памяти для каждого сгенерированного токена. Это узкое место при генерации текста LLM, и основные варианты для повышения скорости генерации — это либо квантование модели, либо использование оборудования с более высокой пропускной способностью памяти. Увеличение вычислительной мощности не даёт существенного эффекта.
Вы также можете попробовать такие техники, как speculative decoding, при которой более маленькая модель генерирует кандидаты токенов, которые затем проверяются более крупной моделью. Если кандидаты токенов корректны, более крупная модель может генерировать более одного токена за раз. Это значительно снимает узкое место пропускной способности и повышает скорость генерации.
Update on GitHubМодели типа Mixture-of-Expert (MoE), такие как Mixtral, Qwen2MoE и GPT-OSS, содержат множество параметров, но для генерации каждого токена «активируют» лишь небольшую их часть. В результате модели MoE, как правило, предъявляют значительно более низкие требования к пропускной способности памяти и могут работать быстрее обычных LLM того же размера. Однако такие методы, как спекулятивное декодирование, неэффективны для моделей MoE, поскольку с каждым новым спекулятивным токеном активируется всё больше параметров.