Transformers documentation

Batching continu

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Batching continu

Cette page documente les classes derrière l'inférence par lot continu : la soumission des prompts, la configuration de l'ordonnancement et des limites de mémoire, et la récupération des résultats.

Pour des exemples d’utilisation, consultez le guide Continuous batching et, pour comprendre l’interaction entre la planification et la mémoire, consultez le document Continuous batching architecture.

ContinuousMixin.generate_batch

transformers.ContinuousMixin.generate_batch

< >

( 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]

Paramètres

  • inputs — Liste de séquences de jetons d'entrée (invites)
  • generation_config — Configuration de génération facultative
  • continuous_batching_config — Configuration optionnelle du lotissement continu
  • record_timestamps — Si défini sur true, les requêtes auront un horodatage pour chaque jeton généré
  • progress_bar — Si défini sur true, une barre de progression sera affichée
  • persistent_manager — permet de conserver le gestionnaire après la fin de la génération. La valeur par défaut est False.
  • warmup — indique s'il faut pré-capturer les graphes CUDA avant de traiter les requêtes. La valeur par défaut est True.

Retourne

dict[str, GenerationOutput]

un dictionnaire d'identifiants de requêtes vers des objets GenerationOutput

Générer des séquences pour un lot de prompts en utilisant le batchage continu.

ContinuousBatchingManager

classe transformers.ContinuousBatchingManager

< >

( model: ProtoPretrainedModelgeneration_config: GenerationConfigcontinuous_batching_config: ContinuousBatchingConfigworkload_hints: transformers.generation.continuous_batching.utils.WorkloadHints | None = None )

Gestionnaire pour la gestion du lotissement continu des requêtes de génération. Il fournit une interface utilisateur pour soumettre des requêtes de génération, récupérer les résultats et gérer le thread de génération en arrière-plan. Cette classe ne doit pas être créée directement, mais via l'un des points d'entrée suivants (toutes les méthodes du mixin ContinuousMixin) :

  • init_continuous_batching
  • continuous_batching_context_manager
  • generate_batch

add_request

< >

( 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

Paramètres

  • input_ids — Identifiants des jetons d'entrée à utiliser comme invite
  • request_id — ID de demande personnalisé facultatif (généré automatiquement si None)
  • max_new_tokens — Nombre maximal de nouveaux jetons à générer
  • streaming — Indique s'il faut diffuser les jetons au fur et à mesure de leur génération
  • record_timestamps — Indique s'il faut enregistrer les horodatages pour chaque jeton généré
  • eos_token_id — ID(s) du jeton de fin de séquence
  • logit_processor_kwargs — Arguments par mot-clé pour le processeur de logits.

Retourne

str | None

L'identifiant de la requête si le processus est un pilote TP, None sinon.

Ajoute une nouvelle requête de génération à la file d’attente. Si le processus n’est pas un pilote TP, cette opération est sans effet.

add_requests

< >

( inputs: listmax_new_tokens: int | None = Nonestreaming: bool = Falserecord_timestamps: bool = False**logit_processor_kwargs: Any )

Fonction utilitaire pour mettre en lot add_request et retourner leurs identifiants. Consultez sa documentation pour plus de détails.

cancel_request

< >

( request_id: str )

Annuler une requête par son identifiant. Si cette méthode est appelée depuis un processus qui n'est pas un pilote TP, elle n'a aucun effet : seuls les processus pilotes TP interagissent avec le gestionnaire.

destroy

< >

( )

Termine le gestionnaire et libère les ressources distribuées. Il est sûr d'appeler cette méthode plusieurs fois. Après cet appel, le gestionnaire ne peut plus être redémarré.

get_result

< >

( request_id: str | None = Nonetimeout: float | None = None )

Récupère un résultat depuis la file de sortie. Si un identifiant est fourni, renvoie la première requête correspondante. Si un délai d’attente est fourni, renvoie None après expiration du délai (en secondes).

is_running

< >

( )

Retourne True si le thread de génération en arrière-plan a été démarré et est toujours actif.

join

< >

( stop_trigger_time: floattimeout: float | None = None )

Attendez que le thread en arrière-plan se termine. L'attente peut être limitée à l'aide de l'argument timeout (en secondes).

pause

< >

( )

Un gestionnaire de contexte qui met en pause la boucle de génération, afin que le thread appelant puisse utiliser le modèle, typiquement pour le mettre à jour sur place. Le thread n'entre dans ce contexte qu'une fois la boucle en pause, et la boucle reprend à la sortie, en conservant son cache et ses requêtes en cours : rien n'est vidangé et aucune requête n'est perdue. Plusieurs threads peuvent maintenir la pause simultanément, et la boucle reprend dès que le dernier en sort. Si le TP est activé, tous les rangs doivent entrer dans ce contexte, sinon les autres rangs resteront bloqués indéfiniment.

register_result_handler

< >

( request_id: strcallback: Callable )

Paramètres

  • request_id (str) — L'identifiant de la requête pour laquelle recevoir les sorties.
  • callback (callable) — Appelé avec un GenerationOutput pour chaque résultat.

Enregistrer un rappel pour la livraison des résultats (en streaming ou non).

Le rappel est invoqué sur la boucle d’événements via call_soon_threadsafe à chaque fois qu’un résultat est produit pour cette requête. Pour les requêtes en streaming, cela se produit à chaque jeton ; pour les requêtes non-streaming, uniquement à la fin. Le gestionnaire est automatiquement nettoyé lorsque la requête se termine.

request_id_iter

< >

( request_id: str )

Itérer sur les résultats correspondant à un identifiant de requête spécifique (bloquant).

Utilise la file de sortie partagée avec remise en file. Pour le service à forte concurrence, utilisez plutôt register_result_handler.

démarrer

< >

( )

Démarrer le thread de génération en arrière-plan.

stop

< >

( block: bool = Truetimeout: float | None = Nonekeep_for_next_session: bool = Falsehard_stop: bool = False )

Arrête le thread de génération en arrière-plan. Si le drapeau block est défini sur True, cette méthode attend l’arrêt du thread pendant un temps maximal de timeout secondes (None signifie aucun délai d’attente). Si le drapeau keep_for_next_session est défini sur True, le gestionnaire est mis en cache sur le modèle pour une utilisation future. Si le drapeau hard_stop est défini, le thread de génération en arrière-plan est arrêté immédiatement et les requêtes en attente échouent.

switch_to_cb_friendly_attn

< >

( model: ProtoPretrainedModelauto_switch_to_flash: bool = True )

Basculez l’implémentation de l’attention vers une version compatible CB. Si auto_switch_to_flash est True et que l’implémentation de l’attention est SDPA ou eager, basculez également vers flash si celui-ci est pris en charge et disponible.

préchauffage

< >

( )

Pré-capture les graphes CUDA pour les chemins varlen et decode en exécutant des lots fictifs. Initialise le processeur de lots si ce n'est pas déjà fait.

Configuration du lotissement continu

classe transformers.ContinuousBatchingConfig

< >

( 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 )

Paramètres

  • page_size (int, facultatif, valeur par défaut 256) — Le nombre de jetons stockés pour chaque couche à l’intérieur d’une page (pleine attention). Un bloc stockant le cache de N couches contient N pages (une par couche), chacune contenant le cache de page_size jetons pour une couche. La valeur par défaut est 256.
  • num_blocks (int, facultatif) — Nombre de blocs dans le cache KV. Inféré automatiquement à partir de la mémoire GPU lorsque None.
  • max_batch_tokens (int, facultatif) — Nombre maximal de jetons par lot. Inféré automatiquement à partir de la mémoire GPU lorsque la valeur est None.
  • max_memory_percent (float, facultatif) — Pourcentage maximal de la mémoire GPU libre (après le chargement du modèle) à utiliser pour le cache KV. Si la valeur est None, elle est résolue à l’exécution à 0,9 s’il n’y a pas de traitement des logits et à 0,8 s’il y en a, afin de laisser de la marge pour les tenseurs temporaires de la taille du vocabulaire.
  • max_requests_per_batch (int, facultatif) — Nombre maximal de requêtes par lot. Inféré automatiquement à partir des indices de charge de travail lorsque la valeur est None, avec une valeur par défaut de 1024.
  • max_blocks_per_request (int, facultatif) — Nombre maximal de blocs par requête, utilisé dans le chemin de décodage rapide flash_attn_with_kvcache pour dimensionner la table de blocs. Définir cette valeur à 0 désactive le chemin de décodage rapide. La valeur par défaut est None (inférée automatiquement).
  • allow_block_sharing (bool, facultatif, valeur par défaut True) — Indique s'il faut autoriser le partage de blocs pour la mise en cache des préfixes. Le partage de blocs ne peut être que autorisé, jamais imposé, car certains modèles ne le prennent pas en charge. À désactiver si vous avez peu de prompts courts mais des longueurs de génération importantes.
  • use_async_batching (bool, facultatif) — Indique s'il faut activer le double-buffering asynchrone, qui supprime la surcharge CPU de la boucle de batch processing continu au prix d'un doublement de l'utilisation de la VRAM. Détecté automatiquement lorsque la valeur est None.
  • use_cuda_graph (bool ou tuple[bool, bool], facultatif) — Indique s'il faut activer les graphes CUDA. Il peut s'agir d'un tuple de booléens (un pour le chemin varlen et un pour le chemin rapide de décodage), d'un booléen qui s'appliquera aux deux chemins, ou de None (inféré automatiquement). Après l'appel de decide_use_cuda_graphs, l'attribut sera un tuple de booléens. La valeur par défaut est None (inféré automatiquement).
  • q_padding_interval_size (int, facultatif, valeur par défaut 0) — Granularité du padding des requêtes en jetons pour les graphes CUDA. Utilise un préréglage de continuous_api.py lorsque la valeur est 0.
  • kv_padding_interval_size (int, facultatif, valeur par défaut 0) — Granularité du padding KV en jetons pour les graphes CUDA. Utilise un préréglage de continuous_api.py lorsque la valeur est 0.
  • varlen_compile_config (CompileConfig, facultatif) — CompileConfig pour le chemin varlen (prefill). La valeur par défaut est None (utilise le repli de generation_config) Le chemin varlen gère des lots avec des longueurs de requête et de KV variables, bénéficiant souvent de dynamic=True.
  • decode_compile_config (CompileConfig, facultatif) — CompileConfig pour le chemin de décodage (rapide). La valeur par défaut est None (utilise le repli de generation_config) Le chemin de décodage gère des lots sans longueur de KV dynamique, de sorte que les formes statiques sont plus adaptées.
  • default_compile_level (int, facultatif, valeur par défaut 0) — Si cette valeur est >0 et qu’aucune configuration de compilation n’est fournie pour le chemin varlen ou decode, une configuration de compilation par défaut sera fournie. Le niveau peut aller jusqu’à 3, et un niveau plus élevé signifie de meilleures performances mais un temps de mise en route plus long.
  • scheduler_type (str, facultatif, par défaut "fifo") — Type de planificateur à utiliser.
  • safety_margin (float, facultatif) — Marge de sécurité utilisée pour limiter la quantité de déchargement. Valeur par défaut : None (utiliser la valeur par défaut de la classe).
  • return_logprobs (bool, facultatif, par défaut False) — Indique s'il faut retourner les log-probabilités en plus des jetons générés.
  • seed (int | None, facultatif) — Graine facultative pour la génération. Si elle n'est pas spécifiée, la graine interne est définie sur une valeur aléatoire.
  • auto_switch_to_flash (bool, facultatif, valeur par défaut True) — Indique s'il faut basculer automatiquement sur flash attention (si disponible) lorsque l'implémentation est SDPA ou eager. La valeur par défaut est True, car flash est bien plus performant pour le continuous batching.
  • cpu_offload_space (float, facultatif, valeur par défaut 0.0) — Espace d’échange CPU en GiB pour le déchargement du cache KV. Un tampon CPU épinglé préalloué de cette taille est créé à l’initialisation. Lorsque le cache GPU est plein, les caches KV des requêtes évacuées sont copiés ici au lieu d’être supprimés. 0 désactive le déchargement (valeur par défaut).
  • cpu_offload_space_safety_threshold (float, facultatif, valeur par défaut 0.8) — Si cpu_offload_space dépasse cette fraction de la RAM système totale, il est limité pour éviter une OOM hôte. Définissez-le à 1.0 pour désactiver la limite de sécurité. Ignoré si psutil n’est pas disponible.
  • max_queue_size (int, facultatif, valeur par défaut 0) — Taille maximale de la file d’attente des requêtes pour le service. 0 signifie illimité.
  • per_request_processors (bool, facultatif, valeur par défaut False) — Active les paramètres du processeur de logits par requête. La valeur par défaut est False.
  • drop_unsupported_processors (bool, facultatif, valeur par défaut True) — Supprime les processeurs de logits non pris en charge au lieu de déclencher une erreur. La valeur par défaut est True.
  • disable_nccl_graph_mixing (bool, facultatif, valeur par défaut True) — Désactive le filet de sécurité de NCCL pour les communications capturées en parallèle dans un graphe. Ce cas ne se produit jamais en CB et offre un gain de performance à TP.
  • cpu_group_timeout (float, facultatif, valeur par défaut 300.0) — Durée (en secondes) après laquelle une communication CPU expirera et le processus plantera. Laisser à None pour désactiver le délai d’attente. La valeur par défaut est de 300 secondes.
  • use_default_compile_configs (bool | None, facultatif) — Déprécié dans 5.11 : veuillez utiliser default_compile_level à la place.
  • max_cached_graphs (int, facultatif) — Déprécié dans 5.13 : le nombre maximal de graphes n'est plus un problème.
  • block_size (int | None, facultatif) — Déprécié dans 5.17 : page_size est désormais utilisé à la place.

Classe qui contient les arguments relatifs au batch continu, lors de l’utilisation du batch continu via la méthode generate_batch ou le gestionnaire de contexte continuous_batching_context_manager.

Update on GitHub