Transformers documentation
Loteamento contínuo
Loteamento contínuo
Esta página documenta as classes por trás da inferência com loteamento contínuo: envio de prompts, configuração de agendamento e limites de memória, e recuperação de resultados.
Para exemplos de uso, consulte o guia Continuous batching e, para entender como o agendamento e a memória interagem, consulte o documento 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]
Parâmetros
- inputs — Lista de sequências de tokens de entrada (prompts)
- generation_config — Configuração de geração opcional
- continuous_batching_config — Configuração opcional de loteamento contínuo
- record_timestamps — Se definido como true, as solicitações terão um timestamp para cada token gerado
- progress_bar — Se definido como true, uma barra de progresso será exibida
- persistent_manager — se o gerenciador deve ser mantido após o término da geração. O valor padrão é False.
- warmup — se deve pré-capturar os gráficos CUDA antes de processar as solicitações. O valor padrão é True.
Retorna
dict[str, GenerationOutput]
um dicionário de ids de solicitação para objetos GenerationOutput
Gere sequências para um lote de prompts usando continuous batching.
ContinuousBatchingManager
classe transformers.ContinuousBatchingManager
< source >( model: ProtoPretrainedModelgeneration_config: GenerationConfigcontinuous_batching_config: ContinuousBatchingConfigworkload_hints: transformers.generation.continuous_batching.utils.WorkloadHints | None = None )
Gerenciador para o processamento de solicitações de geração com loteamento contínuo. Ele fornece uma interface de usuário para o envio de solicitações de geração, a recuperação de resultados e o gerenciamento da thread de geração em segundo plano. Esta classe não deve ser criada diretamente, mas por meio de um dos seguintes pontos de entrada (todos métodos do mixin 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
Parâmetros
- input_ids — IDs dos tokens de entrada a serem usados como prompt
- request_id — ID de solicitação personalizado opcional (gerado automaticamente se for None)
- max_new_tokens — Número máximo de novos tokens a serem gerados
- streaming — Se os tokens devem ser transmitidos conforme são gerados
- record_timestamps — Se deve registrar timestamps para cada token gerado
- eos_token_id — ID(s) do(s) token(s) de fim de sequência
- logit_processor_kwargs — Argumentos de palavra-chave para o processador de logits.
Retorna
str | None
O ID da solicitação, se o processo for um driver de TP; caso contrário, None.
Adiciona uma nova solicitação de geração à fila. Se o processo não for um driver de TP, esta é uma operação sem efeito.
add_requests
< source >( inputs: listmax_new_tokens: int | None = Nonestreaming: bool = Falserecord_timestamps: bool = False**logit_processor_kwargs: Any )
Função utilitária para agrupar add_request e retornar seus IDs. Consulte sua documentação para mais detalhes.
Cancela uma solicitação pelo seu ID. Se chamado de um processo que não é um driver de TP, é uma operação nula: apenas os processos de driver de TP interagem com o gerenciador.
Encerre o gerenciador e libere os recursos distribuídos. É seguro chamar várias vezes. Após chamar este método, o gerenciador não pode ser reiniciado.
Recupera um resultado da fila de saída. Se um ID for fornecido, retorna a primeira solicitação correspondente. Se um timeout for fornecido, retorna None após o tempo limite (em segundos).
Retorna True se a thread de geração em segundo plano foi iniciada e ainda está ativa.
Aguarde a conclusão da thread em segundo plano. O tempo de espera pode ser limitado usando o argumento timeout (em segundos).
Um gerenciador de contexto que pausa o loop de geração, permitindo que a thread chamadora utilize o modelo, tipicamente para atualizá-lo no local. A thread só entra neste contexto quando o loop está pausado, e o loop retoma ao sair, mantendo seu cache e suas solicitações em andamento: nada é drenado e nenhuma solicitação é perdida. Várias threads podem manter a pausa simultaneamente, e o loop retoma quando a última delas sai. Se o TP estiver ativado, todos os ranks devem entrar neste contexto; caso contrário, os outros ranks ficarão pendurados para sempre.
register_result_handler
< source >( request_id: strcallback: Callable )
Registre um callback para a entrega de resultados (com streaming ou sem streaming).
O callback é chamado no loop de eventos por meio de call_soon_threadsafe sempre que um resultado é produzido para esta solicitação. Para solicitações com streaming, isso ocorre a cada token; para as não-streaming, apenas na conclusão. O manipulador é limpo automaticamente quando a solicitação termina.
Iterar sobre os resultados que correspondem a um id de solicitação específico (bloqueante).
Usa a fila de saída compartilhada com requeue. Para atendimento com alta concorrência, use register_result_handler em vez disso.
Inicie a thread de geração em segundo plano.
stop
< source >( block: bool = Truetimeout: float | None = Nonekeep_for_next_session: bool = Falsehard_stop: bool = False )
Interrompe a thread de geração em segundo plano. Se a flag block estiver definida como True, este método aguarda a parada da thread por um tempo máximo de timeout segundos (None significa sem tempo limite). Se a flag keep_for_next_session estiver definida como True, o gerenciador é armazenado em cache no modelo para uso futuro. Se a flag hard_stop estiver definida, a thread de geração em segundo plano será interrompida imediatamente e as pendentes solicitações falharão.
switch_to_cb_friendly_attn
< source >( model: ProtoPretrainedModelauto_switch_to_flash: bool = True )
Alterne a implementação de attn para uma compatível com CB. Se auto_switch_to_flash for True e a implementação de attn for SDPA ou eager, alterne também para flash, caso seja suportado e disponível.
Pré-captura os gráficos CUDA para os caminhos varlen e decode executando lotes fictícios. Inicializa o processador de lotes, caso ainda não tenha sido feito.
Configuração de lote contínuo
classe 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 )
Parâmetros
- page_size (
int, opcional, padrão 256) — O número de tokens armazenados para cada camada dentro de uma página (de atenção completa). Um bloco que armazena o cache de N camadas possui N páginas (uma por camada), cada uma contendo o cache depage_sizetokens para uma camada. O padrão é 256. - num_blocks (
int, opcional) — Número de blocos no cache de KV. Inferido automaticamente a partir da memória da GPU quandoNone. - max_batch_tokens (
int, opcional) — Número máximo de tokens em um lote. Inferido automaticamente da memória da GPU quandoNone. - max_memory_percent (
float, opcional) — Percentual máximo da memória livre da GPU (após o carregamento do modelo) a ser usado para o cache de KV. QuandoNone, o valor é resolvido em tempo de execução como 0,9 se não houver processamento de logits e 0,8 se houver, para deixar folga para tensores temporários do tamanho do vocabulário. - max_requests_per_batch (
int, opcional) — Número máximo de solicitações por lote. Inferido automaticamente a partir das dicas de carga de trabalho quandoNone, com valor padrão de 1024. - max_blocks_per_request (
int, opcional) — Número máximo de blocos por solicitação, usado no caminho de decodificação rápidaflash_attn_with_kvcachepara dimensionar a tabela de blocos. Definir este valor como 0 desativa o caminho de decodificação rápida. O padrão é None (inferido automaticamente). - allow_block_sharing (
bool, opcional, padrãoTrue) — Se permite o compartilhamento de blocos para cache de prefixo. O compartilhamento de blocos só pode ser permitido, nunca forçado, pois alguns modelos não o suportam. Desative se você tiver poucos prompts curtos, mas com comprimentos de geração longos. - use_async_batching (
bool, opcional) — Se deve habilitar o double-buffering assíncrono, que remove a sobrecarga de CPU do loop de continuous batching, ao custo de um uso de VRAM dobrado. Detectado automaticamente quandoNone. - use_cuda_graph (
booloutuple[bool, bool], opcional) — Se deve habilitar os CUDA graphs. Pode ser uma tupla de booleanos (um para o caminho varlen e um para o caminho rápido de decodificação), um booleano que será aplicado a ambos os caminhos, ou None (inferido automaticamente). Após chamardecide_use_cuda_graphs, o atributo será uma tupla de booleanos. O padrão é None (inferido automaticamente). - q_padding_interval_size (
int, opcional, padrão 0) — Granularidade de padding da query em tokens para CUDA graphs. Usa um preset decontinuous_api.pyquando definido como 0. - kv_padding_interval_size (
int, opcional, padrão 0) — Granularidade de padding de KV em tokens para CUDA graphs. Usa um preset decontinuous_api.pyquando definido como 0. - varlen_compile_config (
CompileConfig, opcional) — CompileConfig para o caminho varlen (prefill). O padrão é None (usa o fallback de generation_config) O caminho varlen lida com lotes com comprimentos de query e KV variáveis, frequentemente se beneficiando de dynamic=True. - decode_compile_config (
CompileConfig, opcional) — CompileConfig para o caminho de decodificação (rápido). O padrão é None (usa o fallback de generation_config) O caminho de decodificação processa lotes sem comprimento dinâmico de KV, portanto, formas estáticas são mais adequadas. - default_compile_level (
int, opcional, padrão 0) — Se este valor for >0 e nenhuma configuração de compilação for fornecida para o caminho varlen ou decode, uma configuração de compilação padrão será fornecida. O nível pode chegar a 3, e um nível mais alto significa mais desempenho, mas tempo de aquecimento mais longo. - scheduler_type (
str, opcional, padrão"fifo") — Tipo de agendador a ser usado. - safety_margin (
float, opcional) — Margem de segurança usada para limitar a quantidade de offloading. O valor padrão é None (usa o padrão da classe). - return_logprobs (
bool, opcional, padrãoFalse) — Se deve retornar as log probabilidades junto com os tokens gerados. - seed (
int | None, opcional) — Uma semente opcional para a geração. Se não for especificada, a semente interna será definida com um valor aleatório. - auto_switch_to_flash (
bool, opcional, padrãoTrue) — Se deve alternar automaticamente para flash attention (se disponível) quando a implementação for SDPA ou eager. O padrão é True, pois flash é muito melhor para continuous batching. - cpu_offload_space (
float, opcional, padrão 0.0) — Espaço de troca na CPU em GiB para o offloading do KV cache. Um buffer de CPU fixo (pinned) pré-alocado com esse tamanho é criado na inicialização. Quando o cache da GPU está cheio, os KV caches das requisições removidas são copiados para cá em vez de serem descartados. 0 desativa o offloading (padrão). - cpu_offload_space_safety_threshold (
float, opcional, padrão 0.8) — Secpu_offload_spaceexceder essa fração da RAM total do sistema, ele é limitado para evitar OOM no host. Defina como 1.0 para desativar o limite de segurança. Ignorado quando o psutil não está disponível. - max_queue_size (
int, opcional, padrão 0) — Tamanho máximo da fila de solicitações para o serviço. 0 significa ilimitado. - per_request_processors (
bool, opcional, padrãoFalse) — Ativa parâmetros de processador de logits por solicitação. O padrão é False. - drop_unsupported_processors (
bool, opcional, padrãoTrue) — Remove processadores de logits não suportados em vez de gerar um erro. O padrão é True. - disable_nccl_graph_mixing (
bool, opcional, padrãoTrue) — Desativa a rede de segurança do NCCL para comunicações capturadas em paralelo por graph. Nunca ocorre no CB e proporciona um ganho de desempenho para o TP. - cpu_group_timeout (
float, opcional, padrão 300.0) — O tempo (em segundos) após o qual uma comunicação de CPU expira e o processo é encerrado. Deixe como None para não haver tempo limite. O padrão é 300 segundos. - use_default_compile_configs (
bool | None, opcional) — Descontinuado na 5.11: use default_compile_level em vez disso. - max_cached_graphs (
int, opcional) — Descontinuado na 5.13: o número máximo de grafos não é mais um problema. - block_size (
int | None, opcional) — Descontinuado na 5.17: agora page_size é usado no lugar.
Classe que armazena os argumentos relativos ao continuous batching, ao usar continuous batching por meio do método generate_batch ou do context manager continuous_batching_context_manager.