Transformers documentation
Непрерывная пакетная обработка
Непрерывная пакетная обработка
На этой странице описаны классы, лежащие в основе непрерывного батчинга при инференсе: отправка промптов, настройка планирования и ограничений по памяти, а также получение результатов.
Примеры использования приведены в руководстве Continuous batching, а о взаимодействии планирования и памяти — в документации Continuous batching architecture.
ContinuousMixin.generate_batch
transformers.ContinuousMixin.generate_batch
< source >( inputs: listgeneration_config: transformers.generation.configuration_utils.GenerationConfig | None = Nonecontinuous_batching_config: transformers.generation.configuration_utils.ContinuousBatchingConfig | None = Nonerecord_timestamps: bool = Falseprogress_bar: bool = Falsepersistent_manager: bool = Falsewarmup: bool = True**kwargs ) → dict[str, GenerationOutput]
Параметры
- inputs — список входных последовательностей токенов (промптов)
- generation_config — Необязательная конфигурация генерации
- continuous_batching_config — Необязательная конфигурация непрерывного пакетирования
- record_timestamps — Если установлено в true, запросы будут содержать метку времени для каждого сгенерированного токена
- progress_bar — если установлено в true, будет отображаться индикатор прогресса
- persistent_manager — сохранять ли менеджер после завершения генерации. По умолчанию False.
- warmup — нужно ли предварительно захватывать графы CUDA перед обработкой запросов. По умолчанию True.
Возвращает
dict[str, GenerationOutput]
словарь, сопоставляющий идентификаторы запросов с объектами GenerationOutput
Генерация последовательностей для пакета промптов с использованием непрерывного пакетирования.
ContinuousBatchingManager
класс transformers.ContinuousBatchingManager
< source >( model: ProtoPretrainedModelgeneration_config: GenerationConfigcontinuous_batching_config: ContinuousBatchingConfigworkload_hints: transformers.generation.continuous_batching.utils.WorkloadHints | None = None )
Менеджер для обработки непрерывного батчинга запросов на генерацию. Он предоставляет пользовательский интерфейс для отправки запросов на генерацию, получения результатов и управления фоновым потоком генерации. Этот класс не следует создавать напрямую, а использовать один из следующих точек входа (все методы миксина ContinuousMixin):
init_continuous_batchingcontinuous_batching_context_managergenerate_batch
add_request
< source >( input_ids: listrequest_id: str | None = Nonemax_new_tokens: int | None = Nonestreaming: bool = Falserecord_timestamps: bool = Falseeos_token_id: int | list[int] | None = None**logit_processor_kwargs: Any ) → str | None
Параметры
- input_ids — ID входных токенов, используемые в качестве промпта
- request_id — Необязательный пользовательский идентификатор запроса (генерируется автоматически, если значение равно None)
- max_new_tokens — Максимальное количество новых токенов для генерации
- streaming — Флаг, определяющий, следует ли передавать токены по мере их генерации
- record_timestamps — Записывать ли временные метки для каждого сгенерированного токена
- eos_token_id — ID токена(ов) конца последовательности
- logit_processor_kwargs — Именованные аргументы для процессора логитов.
Возвращает
str | None
Идентификатор запроса, если процесс является драйвером TP, иначе None.
Добавляет новый запрос генерации в очередь. Если процесс не является драйвером TP, это действие не выполняется.
add_requests
< source >( inputs: listmax_new_tokens: int | None = Nonestreaming: bool = Falserecord_timestamps: bool = False**logit_processor_kwargs: Any )
Вспомогательная функция для пакетного вызова add_request и возврата их идентификаторов. Подробности смотрите в документации.
Отмена запроса по его ID. Если этот метод вызывается из процесса, который не является драйвером TP, он ничего не делает: с менеджером взаимодействуют только процессы драйвера TP.
Завершает работу менеджера и освобождает распределённые ресурсы. Безопасно вызывать несколько раз. После вызова этого метода менеджер не может быть перезапущен.
Получить один результат из очереди вывода. Если указан ID, возвращается первое совпадающее запрос. Если указан timeout, возвращается None после истечения тайм-аута (в секундах).
Возвращает True, если фоновый поток генерации был запущен и по-прежнему активен.
Дождитесь завершения фонового потока. Ожидание можно ограничить с помощью аргумента timeout (в секундах).
Контекстный менеджер, приостанавливающий цикл генерации, чтобы вызывающий поток мог использовать модель, как правило, для её обновления на месте. Поток входит в этот контекст только после того, как цикл будет приостановлен, а при выходе цикл возобновляется, сохраняя свой кэш и текущие запросы: ничего не сбрасывается и ни один запрос не теряется. Несколько потоков могут удерживать паузу одновременно, и цикл возобновляется после выхода последнего из них. Если включён TP, все ранки должны войти в этот контекст, иначе другие ранки будут блокироваться навсегда.
register_result_handler
< source >( request_id: strcallback: Callable )
Зарегистрируйте обратный вызов для доставки результата (потокового или непотокового).
Обработчик вызывается в цикле событий через call_soon_threadsafe каждый раз, когда для данного запроса формируется результат. Для потоковых запросов это происходит для каждого токена; для непотоковых — только по завершении. Обработчик автоматически удаляется после завершения запроса.
Итерировать по результатам, соответствующим конкретному идентификатору запроса (блокирующий режим).
Использует общую очередь вывода с повторной постановкой в очередь. Для обслуживания с высокой степенью параллелизма используйте вместо этого register_result_handler.
Запустите фоновый поток генерации.
остановка
< source >( block: bool = Truetimeout: float | None = Nonekeep_for_next_session: bool = Falsehard_stop: bool = False )
Останавливает фоновый поток генерации. Если флаг block установлен в True, метод ожидает остановки потока в течение максимального времени timeout секунд (None означает отсутствие тайм-аута). Если флаг keep_for_next_session установлен в True, менеджер кэшируется в модели для будущего использования. Если установлен флаг hard_stop, фоновый поток генерации будет остановлен немедленно, а ожидающие запросы будут завершены с ошибкой.
switch_to_cb_friendly_attn
< source >( model: ProtoPretrainedModelauto_switch_to_flash: bool = True )
Переключите реализацию attn на совместимую с CB. Если auto_switch_to_flash равно True, а реализация attn — SDPA или eager, также переключитесь на flash, если он поддерживается и доступен.
Предварительный захват графов CUDA для путей varlen и decode путём выполнения тестовых батчей. Инициализирует процессор батчей, если это ещё не было сделано.
Конфигурация непрерывного пакетирования
класс transformers.ContinuousBatchingConfig
< source >( page_size: int = 256num_blocks: int | None = Nonemax_batch_tokens: int | None = Nonemax_memory_percent: float | None = Nonemax_requests_per_batch: int | None = Nonemax_blocks_per_request: int | None = Noneallow_block_sharing: bool = Trueuse_async_batching: bool | None = Noneuse_cuda_graph: bool | tuple[bool, bool] | None = Noneq_padding_interval_size: int = 0kv_padding_interval_size: int = 0varlen_compile_config: transformers.generation.configuration_utils.CompileConfig | None = Nonedecode_compile_config: transformers.generation.configuration_utils.CompileConfig | None = Nonedefault_compile_level: int = 0scheduler_type: str = 'fifo'safety_margin: float | None = Nonereturn_logprobs: bool = Falseseed: int | None = Noneauto_switch_to_flash: bool = Truecpu_offload_space: float | None = 0.0cpu_offload_space_safety_threshold: float = 0.8max_queue_size: int = 0per_request_processors: bool = Falsedrop_unsupported_processors: bool = Truedisable_nccl_graph_mixing: bool = Truecpu_group_timeout: float | None = 300.0use_default_compile_configs: bool | None = Nonemax_cached_graphs: int | None = Noneblock_size: int | None = None )
Параметры
- page_size (
int, необязательный, по умолчанию 256) — Количество токенов, хранящихся для каждого слоя внутри страницы (полного внимания). Блок, хранящий кэш N слоев, содержит N страниц (по одной на слой), каждая из которых хранит кэш дляpage_sizeтокенов одного слоя. По умолчанию 256. - num_blocks (
int, необязательный) — Количество блоков в KV-кэше. Автоматически вычисляется из памяти GPU, еслиNone. - max_batch_tokens (
int, необязательный) — Максимальное количество токенов в батче. Автоматически вычисляется из доступной памяти GPU, еслиNone. - max_memory_percent (
float, необязательный) — Максимальный процент свободной памяти GPU (после загрузки модели), который следует использовать для KV-кэша. Если значение равноNone, время выполнения определяет его как 0.9, если обработка логитов отсутствует, и как 0.8, если она присутствует, чтобы оставить запас под временные тензоры размером с словарь. - max_requests_per_batch (
int, необязательный) — Максимальное количество запросов в батче. ЕслиNone, значение выводится автоматически из подсказок о нагрузке, с резервным значением 1024. - max_blocks_per_request (
int, необязательный) — Максимальное количество блоков на запрос, используется в быстром пути декодированияflash_attn_with_kvcacheдля определения размера таблицы блоков. Установка значения 0 отключает быстрый путь декодирования. По умолчанию None (определяется автоматически). - allow_block_sharing (
bool, необязательный, по умолчаниюTrue) — Разрешает ли использование общего кэширования блоков для префиксного кэширования. Общее кэширование блоков может только разрешаться, но никогда не принуждаться, так как некоторые модели не поддерживают эту функцию. Отключите, если у вас мало коротких запросов, но длинные последовательности генерации. - use_async_batching (
bool, необязательный) — Включает ли асинхронное двойное буферизирование, которое устраняет накладные расходы CPU в цикле непрерывного батчинга за счёт удвоения использования VRAM. Автоматически определяется, еслиNone. - use_cuda_graph (
boolortuple[bool, bool], необязательный) — Определяет, следует ли включать CUDA graphs. Может быть кортежем из двух булевых значений (одно для пути varlen и одно для быстрого пути decode), булевым значением, применяемым к обоим путям, или None (определяется автоматически). После вызоваdecide_use_cuda_graphsатрибут становится кортежем из двух булевых значений. По умолчанию None (определяется автоматически). - q_padding_interval_size (
int, необязательный, по умолчанию 0) — Размерность выравнивания запроса в токенах для CUDA-графов. При значении 0 используется пресет изcontinuous_api.py. - kv_padding_interval_size (
int, необязательный, по умолчанию 0) — размерность выравнивания KV в токенах для CUDA-графов. При значении 0 используется пресет изcontinuous_api.py. - varlen_compile_config (
CompileConfig, необязательный) — CompileConfig для varlen (prefill) пути. По умолчанию None (используется fallback из generation_config) Путь varlen обрабатывает батчи с изменяющейся длиной запросов и KV, часто выигрывая от dynamic=True. - decode_compile_config (
CompileConfig, необязательный) — CompileConfig для пути декодирования (быстрый путь). По умолчанию None (используется запасной вариант из generation_config) Путь декодирования обрабатывает батчи без динамической длины KV, поэтому статические формы лучше подходят. - default_compile_level (
int, необязательный, по умолчанию 0) — Если это значение >0 и конфигурация компиляции не указана для пути varlen или decode, будет предоставлена конфигурация компиляции по умолчанию. Уровень может достигать 3, при этом более высокий уровень означает большую производительность, но более длительное время прогрева. - scheduler_type (
str, необязательный, по умолчанию"fifo") — Тип планировщика для использования. - safety_margin (
float, необязательный) — Безопасный запас, используемый для ограничения объёма выгрузки. По умолчанию None (используется значение по умолчанию класса). - return_logprobs (
bool, необязательный, по умолчаниюFalse) — Возвращать ли логарифмические вероятности вместе с сгенерированными токенами. - seed (
int | None, необязательный) — Необязательный seed для генерации. Если не указан, внутренний seed будет установлен в случайное значение. - auto_switch_to_flash (
bool, необязательный, по умолчаниюTrue) — Определяет, следует ли автоматически переключаться на flash attention (если он доступен), когда реализация — SDPA или eager. По умолчанию True, так как flash значительно лучше подходит для непрерывного батчинга. - cpu_offload_space (
float, необязательный, по умолчанию 0.0) — объём swap-памяти на CPU в ГиБ для выгрузки KV-кэша. При инициализации создаётся предварительно выделенный буфер закреплённой памяти CPU указанного размера. Когда кэш на GPU заполняется, KV-кэши вытесненных запросов копируются сюда, а не удаляются. Значение 0 отключает выгрузку (по умолчанию). - cpu_offload_space_safety_threshold (
float, необязательный, по умолчанию 0.8) — Еслиcpu_offload_spaceпревышает эту долю от общего объёма системной ОЗУ, значение ограничивается, чтобы избежать исчерпания памяти на хосте. Установите 1.0, чтобы отключить ограничение безопасности. Игнорируется, если psutil недоступен. - max_queue_size (
int, необязательный, по умолчанию 0) — Максимальный размер очереди запросов для обслуживания. 0 означает отсутствие ограничений. - per_request_processors (
bool, необязательный, по умолчаниюFalse) — Включает параметры logits-процессора для каждого запроса. По умолчанию False. - drop_unsupported_processors (
bool, необязательный, по умолчаниюTrue) — Удаляет неподдерживаемые обработчики логитов вместо того, чтобы вызывать ошибку. По умолчанию True. - disable_nccl_graph_mixing (
bool, необязательный, по умолчаниюTrue) — Отключает механизм безопасности NCCL для параллельных коммуникаций, захваченных в графе. В CB это не происходит, а для TP даёт прирост производительности. - cpu_group_timeout (
float, необязательный, по умолчанию 300.0) — Время (в секундах), по истечении которого связь на CPU будет прервана по таймауту, а процесс завершится с ошибкой. Оставьте значение None, чтобы отключить таймаут. По умолчанию — 300 секунд. - use_default_compile_configs (
bool | None, необязательный) — Устарело в 5.11: используйте вместо этого default_compile_level. - max_cached_graphs (
int, необязательный) — Устарело в 5.13: максимальное количество графов больше не является проблемой. - block_size (
int | None, необязательный) — Устарело в 5.17: теперь вместо него используется page_size.
Класс, содержащий аргументы, связанные с непрерывным батчингом, при использовании непрерывного батчинга через метод generate_batch или контекстный менеджер continuous_batching_context_manager.