Accelerate documentation
Travailler avec de grands modèles
Travailler avec de grands modèles
Dispatch et offload
init_empty_weights
accelerate.init_empty_weights
< source >( include_buffers: bool | None = None )
Un gestionnaire de contexte sous lequel les modèles sont initialisés avec tous les paramètres sur le périphérique meta, créant ainsi un modèle vide. Utile lorsque l’initialisation seule du modèle épuiserait la RAM disponible.
Exemple :
import torch.nn as nn
from accelerate import init_empty_weights
# Initialize a model with 100 billions parameters in no time and without using any RAM.
with init_empty_weights():
tst = nn.Sequential(*[nn.Linear(10000, 10000) for _ in range(1000)])Tout modèle créé sous ce gestionnaire de contexte ne possède aucun poids. Par conséquent, vous ne pouvez pas effectuer une opération telle que
model.to(some_device)avec celui-ci. Pour charger les poids dans votre modèle vide, consultez load_checkpoint_and_dispatch(). Assurez-vous d’écraser le paramètre device_map par défaut de load_checkpoint_and_dispatch(), sinon la dispatch n’est pas appelée.
cpu_offload
accelerate.cpu_offload
< source >( model: Moduleexecution_device: torch.device | None = Noneoffload_buffers: bool = Falsestate_dict: dict[str, torch.Tensor] | None = Nonepreload_module_classes: list[str] | None = None )
Paramètres
- model (
torch.nn.Module) — Le modèle à décharger. - execution_device (
torch.device, facultatif) — L’appareil sur lequel la passe avant du modèle sera exécutée (doit être un GPU). Par défaut, l’appareil du premier paramètre du modèle est utilisé. - offload_buffers (
bool, facultatif, par défautFalse) — Indique s'il faut décharger les tampons avec les paramètres du modèle. - state_dict (
Dict[str, torch.Tensor], facultatif) — Le state dict du modèle qui sera conservé sur le CPU. - preload_module_classes (
List[str], facultatif) — Une liste de classes dont les instances doivent charger tous leurs poids (y compris dans les sous-modules) au début du forward. Cela ne doit être utilisé que pour les classes possédant des sous-modules enregistrés mais non appelés directement pendant le forward, par exemple si une couche linéairedenseest enregistrée, mais qu'au forward,dense.weightetdense.biassont utilisés dans certaines opérations au lieu d'appelerdensedirectement.
Active le déchargement complet sur CPU pour un modèle. En conséquence, tous les paramètres du modèle seront déchargés et une seule copie du dictionnaire d'état du modèle sera conservée. Lors du passage avant, les paramètres seront extraits de ce dictionnaire d'état et placés sur l'appareil d'exécution transmis au fur et à mesure qu'ils sont nécessaires, puis déchargés à nouveau.
cpu_offload_with_hook
accelerate.cpu_offload_with_hook
< source >( model: Moduleexecution_device: int | str | torch.device | None = Noneprev_module_hook: accelerate.hooks.UserCpuOffloadHook | None = None )
Paramètres
- model (
torch.nn.Module) — Le modèle à décharger. - execution_device(
str,intoutorch.device, facultatif) — L’appareil sur lequel le modèle doit être exécuté. Par défaut, l’appareil MPS est utilisé s’il est disponible, puis l’appareil 0 s’il existe un appareil accélérateur, et enfin le CPU. - prev_module_hook (
UserCpuOffloadHook, facultatif) — Le hook renvoyé par cette fonction pour un modèle précédent du pipeline que vous exécutez. S’il est transmis, sa méthode de déchargement sera appelée juste avant le forward du modèle auquel ce hook est attaché.
Décharge un modèle sur le CPU et le remet sur un périphérique d'exécution lors de son exécution. La différence avec cpu_offload() est que le modèle reste sur le périphérique d'exécution après le forward et n'est déchargé à nouveau que lorsque la méthode offload du hook retourné est appelée. Utile pour les pipelines exécutant un modèle dans une boucle.
Exemple :
model_1, hook_1 = cpu_offload_with_hook(model_1, device)
model_2, hook_2 = cpu_offload_with_hook(model_2, device, prev_module_hook=hook_1)
model_3, hook_3 = cpu_offload_with_hook(model_3, device, prev_module_hook=hook_2)
hid_1 = model_1(input)
for i in range(50):
# model1 is offloaded on the CPU at the first iteration, model 2 stays on the GPU for this whole loop.
hid_2 = model_2(hid_1)
# model2 is offloaded to the CPU just before this forward.
hid_3 = model_3(hid_3)
# For model3, you need to manually call the hook offload method.
hook_3.offload()disk_offload
accelerate.disk_offload
< source >( model: Moduleoffload_dir: str | os.PathLikeexecution_device: torch.device | None = Noneoffload_buffers: bool = Falsepreload_module_classes: list[str] | None = None )
Paramètres
- model (
torch.nn.Module) — Le modèle à décharger. - offload_dir (
strouos.PathLike) — Le dossier dans lequel décharger les poids du modèle (ou où les poids du modèle sont déjà déchargés). - execution_device (
torch.device, facultatif) — L’appareil sur lequel la passe avant du modèle sera exécutée (doit être un GPU). Par défaut, l’appareil du premier paramètre du modèle est utilisé. - offload_buffers (
bool, facultatif, par défautFalse) — Indique s'il faut décharger les tampons avec les paramètres du modèle. - preload_module_classes (
List[str], facultatif) — Une liste de classes dont les instances doivent charger tous leurs poids (y compris dans les sous-modules) au début du forward. Cela ne doit être utilisé que pour les classes possédant des sous-modules enregistrés mais non appelés directement pendant le forward, par exemple si une couche linéairedenseest enregistrée, mais qu'au forward,dense.weightetdense.biassont utilisés dans certaines opérations au lieu d'appelerdensedirectement.
Active le déchargement complet sur disque pour un modèle. En conséquence, tous les paramètres du modèle seront déchargés en tant que tableaux mappés en mémoire dans un dossier donné. Lors du passage avant, les paramètres seront accédés depuis ce dossier et placés sur l’appareil d’exécution transmis au fur et à mesure qu’ils sont nécessaires, puis à nouveau déchargés.
dispatch_model
accelerate.dispatch_model
< source >( model: Moduledevice_map: dictmain_device: torch.device | None = Nonestate_dict: dict[str, torch.Tensor] | None = Noneoffload_dir: str | os.PathLike | None = Noneoffload_index: dict[str, str] | None = Noneoffload_buffers: bool = Falseskip_keys: str | list[str] | None = Nonepreload_module_classes: list[str] | None = Noneforce_hooks: bool = False )
Paramètres
- model (
torch.nn.Module) — Le modèle à dispatcher. - device_map (
Dict[str, Union[str, int, torch.device]]) — Un dictionnaire associant les noms de modules dans lestate_dictdes modèles à l’appareil sur lequel ils doivent être placés. Notez que"disk"est accepté, même s’il ne s’agit pas d’une valeur valide pourtorch.device. - main_device (
str,intoutorch.device, facultatif) — Le principal appareil d’exécution. Par défaut, il s’agit du premier appareil de ladevice_mapdifférent de"cpu"ou"disk". - state_dict (
Dict[str, torch.Tensor], facultatif) — Le state dict de la partie du modèle qui sera conservée sur CPU. - offload_dir (
strouos.PathLike) — Le dossier dans lequel décharger les poids du modèle (ou où les poids du modèle sont déjà déchargés). - offload_index (
Dict, facultatif) — Un dictionnaire associant le nom de chaque poids à ses informations (dtype/shapeou nom de fichier safetensors). Par défaut, il correspond à l’index enregistré danssave_folder. - offload_buffers (
bool, facultatif, par défautFalse) — Indique s'il faut décharger les tampons avec les paramètres du modèle. - skip_keys (
strouList[str], facultatif) — Une liste de clés à ignorer lors du déplacement des entrées ou des sorties entre les appareils. - preload_module_classes (
List[str], facultatif) — Une liste de classes dont les instances doivent charger tous leurs poids (y compris dans les sous-modules) au début du forward. Cela ne doit être utilisé que pour les classes possédant des sous-modules enregistrés mais non appelés directement pendant le forward, par exemple si une couche linéairedenseest enregistrée, mais qu'au forward,dense.weightetdense.biassont utilisés dans certaines opérations au lieu d'appelerdensedirectement. - force_hooks (
bool, facultatif, valeur par défautFalse) — Indique s'il faut forcer l'attachement des hooks de périphérique au modèle, même si toutes les couches sont réparties sur un seul périphérique.
Distribue un modèle selon une carte de périphériques donnée. Les couches du modèle peuvent être réparties sur plusieurs GPU, déchargées sur le CPU ou même sur le disque.
load_checkpoint_and_dispatch
accelerate.load_checkpoint_and_dispatch
< source >( model: Modulecheckpoint: str | os.PathLikedevice_map: str | dict[str, int | str | torch.device] | None = Nonemax_memory: dict[int | str, int | str] | None = Noneno_split_module_classes: list[str] | None = Noneoffload_folder: str | os.PathLike | None = Noneoffload_buffers: bool = Falsedtype: str | torch.dtype | None = Noneoffload_state_dict: bool | None = Noneskip_keys: str | list[str] | None = Nonepreload_module_classes: list[str] | None = Noneforce_hooks: bool = Falsestrict: bool = Falsefull_state_dict: bool = Truebroadcast_from_rank0: bool = False )
Paramètres
- model (
torch.nn.Module) — Le modèle dans lequel nous voulons charger un point de contrôle. - checkpoint (
strouos.PathLike) — Le dossier de checkpoint à charger. Il peut s'agir de :- un chemin vers un fichier contenant un état de modèle complet
- un chemin vers un fichier
.jsoncontenant l'index d'un point de contrôle fragmenté - un chemin vers un dossier contenant un fichier
.index.jsonunique et les fragments d'un point de contrôle.
- device_map (
Dict[str, Union[int, str, torch.device]], facultatif) — Une carte qui spécifie où chaque sous-module doit être placé. Il n'est pas nécessaire de la préciser pour chaque nom de paramètre/buffer : dès qu'un nom de module est inclus, tous ses sous-modules seront envoyés sur le même appareil.Pour que Accelerate calcule automatiquement le
device_maple plus optimisé, définissezdevice_map="auto". Pour plus d'informations sur chaque option, voir ici. La valeur par défaut est None, ce qui signifie que dispatch_model() ne sera pas appelé. - max_memory (
Dict, facultatif) — Un dictionnaire associant un identifiant de périphérique à la mémoire maximale. Par défaut, la valeur est la mémoire maximale disponible pour chaque GPU et la RAM CPU disponible si non définie. - no_split_module_classes (
List[str], facultatif) — Une liste de noms de classes de couches qui ne doivent jamais être réparties sur plusieurs appareils (par exemple, toute couche disposant d'une connexion résiduelle). - offload_folder (
strouos.PathLike, facultatif) — Si ladevice_mapcontient la valeur"disk", le dossier où les poids seront déchargés. - offload_buffers (
bool, facultatif, par défautFalse) — Dans les couches déchargées sur le CPU ou le disque dur, indique s'il faut également décharger les buffers en plus des paramètres. - dtype (
stroutorch.dtype, facultatif) — Si fourni, les poids seront convertis en ce type lors du chargement. - offload_state_dict (
bool, facultatif) — SiTrue, décharge temporairement le state dict CPU sur le disque dur pour éviter d’épuiser la RAM CPU si le poids du state dict CPU + le plus grand shard ne tient pas. La valeur par défaut estTruesi la carte de dispositifs choisie contient des valeurs"disk". - skip_keys (
strouList[str], facultatif) — Une liste de clés à ignorer lors du déplacement des entrées ou des sorties entre les appareils. - preload_module_classes (
List[str], facultatif) — Une liste de classes dont les instances doivent charger tous leurs poids (y compris dans les sous-modules) au début du forward. Cela ne doit être utilisé que pour les classes possédant des sous-modules enregistrés mais non appelés directement pendant le forward, par exemple si une couche linéairedenseest enregistrée, mais qu'au forward,dense.weightetdense.biassont utilisés dans certaines opérations au lieu d'appelerdensedirectement. - force_hooks (
bool, facultatif, valeur par défautFalse) — Indique s'il faut forcer l'attachement des hooks de périphérique au modèle, même si toutes les couches sont réparties sur un seul périphérique. - strict (
bool, facultatif, par défautFalse) — Indique s'il faut imposer strictement que les clés du state_dict du checkpoint correspondent aux clés du state_dict du modèle. - full_state_dict (
bool, facultatif, valeur par défautTrue) — si cette valeur est définie surTrue, tous les tenseurs du state_dict chargé seront regroupés. Aucun ShardedTensor ni DTensor ne sera présent dans le state_dict chargé. - broadcast_from_rank0 (
False, facultatif, valeur par défautFalse) — lorsque l’option estTrue, un groupe de processus distribuéProcessGroupdoit être initialisé. Le rank0 doit recevoir un state_dict complet et diffusera les tenseurs du state_dict un par un aux autres ranks. Les autres ranks recevront les tenseurs et les fractionneront (le cas échéant) en fonction des shards locaux du modèle.
Charge un point de contrôle (éventuellement fractionné) à l’intérieur d’un modèle, en envoyant éventuellement les poids vers un appareil donné au fur et à mesure de leur chargement, et ajoute les différents hooks qui permettront à ce modèle de fonctionner correctement (même s’il est réparti sur plusieurs appareils).
Exemple :
>>> from accelerate import init_empty_weights, load_checkpoint_and_dispatch
>>> from huggingface_hub import hf_hub_download
>>> from transformers import AutoConfig, AutoModelForCausalLM
>>> # Download the Weights
>>> checkpoint = "EleutherAI/gpt-j-6B"
>>> weights_location = hf_hub_download(checkpoint, "pytorch_model.bin")
>>> # Create a model and initialize it with empty weights
>>> config = AutoConfig.from_pretrained(checkpoint)
>>> with init_empty_weights():
... model = AutoModelForCausalLM.from_config(config)
>>> # Load the checkpoint and dispatch it to the right devices
>>> model = load_checkpoint_and_dispatch(
... model, weights_location, device_map="auto", no_split_module_classes=["GPTJBlock"]
... )load_checkpoint_in_model
accelerate.load_checkpoint_in_model
< source >( model: Modulecheckpoint: str | os.PathLikedevice_map: dict[str, int | str | torch.device] | None = Noneoffload_folder: str | os.PathLike | None = Nonedtype: str | torch.dtype | None = Noneoffload_state_dict: bool = Falseoffload_buffers: bool = Falsekeep_in_fp32_modules: list[str] | None = Noneoffload_8bit_bnb: bool = Falsestrict: bool = Falsefull_state_dict: bool = Truebroadcast_from_rank0: bool = False )
Paramètres
- model (
torch.nn.Module) — Le modèle dans lequel nous souhaitons charger un point de contrôle. - checkpoint (
strouos.PathLike) — Le dossier de checkpoint à charger. Il peut s'agir de :- un chemin vers un fichier contenant un état de modèle complet
- un chemin vers un fichier
.jsoncontenant l'index d'un point de contrôle fragmenté - un chemin vers un dossier contenant un fichier
.index.jsonunique et les fragments d'un point de contrôle. - un chemin vers un dossier contenant un fichier pytorch_model.bin ou model.safetensors unique.
- device_map (
Dict[str, Union[int, str, torch.device]], facultatif) — Une carte qui spécifie l’emplacement de chaque sous-module. Elle n’a pas besoin d’être affinée au niveau de chaque nom de paramètre/buffer : dès qu’un nom de module est inclus, tous ses sous-modules seront envoyés sur le même appareil. - offload_folder (
strouos.PathLike, facultatif) — Si ladevice_mapcontient la valeur"disk", le dossier où les poids seront déchargés. - dtype (
stroutorch.dtype, facultatif) — Si fourni, les poids seront convertis en ce type lors du chargement. - offload_state_dict (
bool, facultatif, valeur par défautFalse) — SiTrue, déplace temporairement le dictionnaire d’état CPU sur le disque dur pour éviter un épuisement de la RAM CPU si le poids du dictionnaire d’état CPU + le plus grand fragment ne tient pas. - offload_buffers (
bool, facultatif, par défautFalse) — Indique s'il faut inclure les tampons (buffers) dans les poids déchargés sur le disque. - keep_in_fp32_modules(
List[str], facultatif) — Une liste des modules que nous conservons en type de donnéestorch.float32. - offload_8bit_bnb (
bool, facultatif) — Indique s'il faut activer ou non le déchargement des modules 8 bits sur le CPU/le disque. - strict (
bool, facultatif, par défautFalse) — Indique s'il faut imposer strictement que les clés du state_dict du checkpoint correspondent aux clés du state_dict du modèle. - full_state_dict (
bool, facultatif, valeur par défautTrue) — si cette valeur est définie surTrue, tous les tenseurs du state_dict chargé seront regroupés. Aucun ShardedTensor ni DTensor ne sera présent dans le state_dict chargé. - broadcast_from_rank0 (
False, facultatif, valeur par défautFalse) — lorsque l’option estTrue, un groupe de processus distribuéProcessGroupdoit être initialisé. Le rank0 doit recevoir un state_dict complet et diffusera les tenseurs du state_dict un par un aux autres ranks. Les autres ranks recevront les tenseurs et les fractionneront (le cas échéant) en fonction des shards locaux du modèle.
Charge un point de contrôle (éventuellement fragmenté) à l'intérieur d'un modèle, en envoyant éventuellement les poids vers un appareil donné au fur et à mesure de leur chargement.
Une fois chargé sur les différents appareils, vous devez toujours appeler dispatch_model() sur votre modèle pour le rendre exécutable. Pour regrouper le chargement du point de contrôle et la distribution en un seul appel, utilisez load_checkpoint_and_dispatch().
infer_auto_device_map
accelerate.infer_auto_device_map
< source >( model: Modulemax_memory: dict[int | str, int | str] | None = Noneno_split_module_classes: list[str] | None = Nonedtype: str | torch.dtype | None = Nonespecial_dtypes: dict[str, str | torch.dtype] | None = Noneverbose: bool = Falseclean_result: bool = Trueoffload_buffers: bool = Falsefallback_allocation: bool = False )
Paramètres
- model (
torch.nn.Module) — Le modèle à analyser. - max_memory (
Dict, optional) — A dictionary device identifier to maximum memory. Will default to the maximum memory available if unset. Example:max_memory={0: "1GB"}. - no_split_module_classes (
List[str], facultatif) — Une liste de noms de classes de couches qui ne doivent jamais être réparties sur plusieurs appareils (par exemple, toute couche disposant d'une connexion résiduelle). - dtype (
stroutorch.dtype, facultatif) — Si fourni, les poids seront convertis en ce type lors du chargement. - special_dtypes (
Dict[str, Union[str, torch.device]], facultatif) — Si fourni, dtypes spéciaux à prendre en compte pour certains poids spécifiques (remplace le dtype utilisé par défaut pour tous les poids). - verbose (
bool, facultatif, par défautFalse) — Indique s'il faut fournir des déclarations de débogage lorsque la fonction construit le device_map. - clean_result (
bool, facultatif, par défautTrue) — Nettoyer le device_map résultant en regroupant tous les sous-modules qui sont placés sur le même appareil. - offload_buffers (
bool, facultatif, par défautFalse) — Dans les couches déchargées sur le CPU ou le disque dur, indique s'il faut également décharger les buffers en plus des paramètres. - fallback_allocation (
bool, facultatif, valeur par défautFalse) — Lorsque l'allocation régulière échoue, tente d'allouer un module qui respecte la limite de taille en utilisant un parcours en largeur (BFS).
Calculer une carte de périphériques pour un modèle donné en accordant la priorité aux GPU, puis en déchargeant sur le CPU et enfin sur le disque, de sorte que :
- nous ne dépassons pas la mémoire disponible sur aucun des GPU.
- si un offload vers le CPU est nécessaire, il reste toujours de la place sur le GPU 0 pour remettre la couche offloadée sur le CPU qui a la plus grande taille.
- si un offload vers le CPU est nécessaire, nous ne dépassons pas la RAM disponible sur le CPU.
- si l'offload sur le disque est nécessaire, il reste toujours de la place sur le CPU pour remettre la couche offloadée sur disque qui a la plus grande taille.
Tous les calculs sont effectués en analysant les tailles et les dtypes des paramètres du modèle. En conséquence, le modèle peut se trouver sur le meta device (comme ce serait le cas s'il était initialisé dans le gestionnaire de contexte
init_empty_weights).
Hooks
ModelHook
Un hook contenant des callbacks à exécuter juste avant et après la méthode forward d'un modèle. La différence avec les hooks existants de PyTorch est qu'ils reçoivent les kwargs.
Attribut de classe :
- no_grad (
bool, facultatif, par défautFalse) — Indique s'il faut exécuter le passage avant réel sous le gestionnaire de contextetorch.no_grad().
detach_hook
< source >( module )
À exécuter lorsque l'accroche est détachée d'un module.
À exécuter lorsque l'accroche est attachée au module.
post_forward
< source >( moduleoutput ) → Any
À exécuter juste après la méthode forward du modèle.
pre_forward
< source >( module*args**kwargs ) → Tuple[Tuple[Any], Dict[Str, Any]]
Paramètres
- module (
torch.nn.Module) — Le module dont le passage avant (forward pass) sera exécuté juste après cet événement. - args (
Tuple[Any]) — Les arguments positionnels passés au module. - kwargs (
Dict[Str, Any]) — Les arguments par mot-clé passés au module.
Retourne
Tuple[Tuple[Any], Dict[Str, Any]]
Un tuple contenant les args et kwargs traités.
À exécuter juste avant la méthode forward du modèle.
AlignDevicesHook
classe accelerate.hooks.AlignDevicesHook
< source >( execution_device: int | str | torch.device | None = Noneoffload: bool = Falseio_same_device: bool = Falseweights_map: collections.abc.Mapping | None = Noneoffload_buffers: bool = Falseplace_submodules: bool = Falseskip_keys: str | list[str] | None = Nonetied_params_map: dict[int, dict[torch.device, torch.Tensor]] | None = None )
Paramètres
- execution_device (
torch.device, facultatif) — L’appareil sur lequel les entrées et les poids du modèle doivent être placés avant le passage avant. - offload (
bool, facultatif, par défautFalse) — Indique si les poids doivent être déchargés après le passage avant. - io_same_device (
bool, facultatif, par défautFalse) — Indique si la sortie doit être placée sur le même appareil que l'entrée. - weights_map (
Mapping[str, torch.Tensor], facultatif) — Lorsque les poids du modèle sont déchargés, une carte (éventuellement paresseuse) des noms de paramètres vers les valeurs des tenseurs. - offload_buffers (
bool, facultatif, par défautFalse) — Indique s'il faut inclure les buffers du module associé lors de l'offloading. - place_submodules (
bool, facultatif, valeur par défautFalse) — Indique s'il faut placer les sous-modules surexecution_devicelors de l'événementinit_hook.
Un ModelHook générique qui garantit que les entrées et les poids du modèle sont sur le même appareil pour le passage avant du module associé, avec un éventuel déchargement des poids après le passage avant.
SequentialHook
Un hook pouvant contenir plusieurs hooks et les parcourant à chaque événement.
LayerwiseCastingHook
classe accelerate.hooks.LayerwiseCastingHook
< source >( storage_dtype: dtypecompute_dtype: dtypenon_blocking: bool )
Un hook qui convertit les poids d'un module en un type de données de haute précision pour le calcul, et en un type de données de basse précision pour le stockage. Ce processus peut entraîner une perte de qualité dans la sortie, mais peut réduire considérablement l'empreinte mémoire.
Ajout de hooks
add_hook_to_module
accelerate.hooks.add_hook_to_module
< source >( module: Modulehook: ModelHookappend: bool = False ) → torch.nn.Module
Paramètres
- module (
torch.nn.Module) — Le module auquel attacher un hook. - hook (
ModelHook) — Le hook à attacher. - append (
bool, facultatif, valeur par défautFalse) — Indique si le hook doit être enchaîné avec un hook existant (si le module en contient déjà un) ou non.
Retourne
torch.nn.Module
Le même module, avec le hook attaché (le module est modifié en place, donc le résultat peut être ignoré).
Ajoute un hook à un module donné. Cette opération réécrit la méthode forward du module pour y inclure le hook. Pour supprimer ce comportement et restaurer la méthode forward d’origine, utilisez remove_hook_from_module.
Si le module contient déjà un hook, celui-ci sera remplacé par le nouveau hook passé par défaut. Pour enchaîner deux hooks, passez
append=True, ce qui enchaîne le hook actuel et le nouveau hook dans une instance de la classeSequentialHook.
attach_execution_device_hook
accelerate.hooks.attach_execution_device_hook
< source >( module: Moduleexecution_device: int | str | torch.deviceskip_keys: str | list[str] | None = Nonepreload_module_classes: list[str] | None = Nonetied_params_map: dict[int, dict[torch.device, torch.Tensor]] | None = None )
Paramètres
- module (
torch.nn.Module) — Le module auquel nous souhaitons attacher les hooks. - execution_device (
int,stroutorch.device) — L'appareil sur lequel les entrées et les poids du modèle doivent être placés avant le passage avant. - skip_keys (
strouList[str], facultatif) — Une liste de clés à ignorer lors du déplacement des entrées ou des sorties entre les appareils. - preload_module_classes (
List[str], facultatif) — Une liste de classes dont les instances doivent charger tous leurs poids (y compris dans les sous-modules) au début du forward. Cela ne doit être utilisé que pour les classes possédant des sous-modules enregistrés mais non appelés directement pendant le forward, par exemple si une couche linéairedenseest enregistrée, mais qu'au forward,dense.weightetdense.biassont utilisés dans certaines opérations au lieu d'appelerdensedirectement. - tied_params_map (Optional[Dict[int, Dict[torch.device, torch.Tensor]]], facultatif, par défaut
None) — Une correspondance entre les pointeurs de données et des dictionnaires d’appareils vers les poids liés déjà distribués. Pour un appareil d’exécution donné, ce paramètre est utile pour réutiliser le premier pointeur disponible d’un poids partagé pour tous les autres, au lieu de dupliquer la mémoire.
Attache récursivement AlignDevicesHook à tous les sous-modules d'un modèle donné afin de s'assurer qu'ils disposent du bon
appareil d'exécution
attach_align_device_hook
accelerate.hooks.attach_align_device_hook
< source >( module: Moduleexecution_device: torch.device | None = Noneoffload: bool = Falseweights_map: collections.abc.Mapping | None = Noneoffload_buffers: bool = Falsemodule_name: str = ''skip_keys: str | list[str] | None = Nonepreload_module_classes: list[str] | None = Nonetied_params_map: dict[int, dict[torch.device, torch.Tensor]] | None = None )
Paramètres
- module (
torch.nn.Module) — Le module auquel nous souhaitons attacher les hooks. - execution_device (
torch.device, facultatif) — L’appareil sur lequel les entrées et les poids du modèle doivent être placés avant le passage avant. - offload (
bool, facultatif, par défautFalse) — Indique si les poids doivent être déchargés après le passage avant. - weights_map (
Mapping[str, torch.Tensor], facultatif) — Lorsque les poids du modèle sont déchargés, une carte (éventuellement paresseuse) des noms de paramètres vers les valeurs des tenseurs. - offload_buffers (
bool, facultatif, par défautFalse) — Indique s'il faut inclure les buffers du module associé lors de l'offloading. - module_name (
str, facultatif, par défaut"") — Le nom du module. - skip_keys (
strouList[str], facultatif) — Une liste de clés à ignorer lors du déplacement des entrées ou des sorties entre les appareils. - preload_module_classes (
List[str], facultatif) — Une liste de classes dont les instances doivent charger tous leurs poids (y compris dans les sous-modules) au début du forward. Cela ne doit être utilisé que pour les classes possédant des sous-modules enregistrés mais non appelés directement pendant le forward, par exemple si une couche linéairedenseest enregistrée, mais qu'au forward,dense.weightetdense.biassont utilisés dans certaines opérations au lieu d'appelerdensedirectement. - tied_params_map (Optional[Dict[int, Dict[torch.device, torch.Tensor]]], facultatif, par défaut
None) — Une correspondance entre les pointeurs de données et des dictionnaires d’appareils vers les poids liés déjà distribués. Pour un appareil d’exécution donné, ce paramètre est utile pour réutiliser le premier pointeur disponible d’un poids partagé pour tous les autres, au lieu de dupliquer la mémoire.
Attache récursivement AlignDevicesHook à tous les sous-modules d'un modèle donné qui possèdent des paramètres et/ou des buffers directs.
attach_align_device_hook_on_blocks
accelerate.hooks.attach_align_device_hook_on_blocks
< source >( module: Moduleexecution_device: torch.device | dict[str, torch.device] | None = Noneoffload: bool | dict[str, bool] = Falseweights_map: collections.abc.Mapping | None = Noneoffload_buffers: bool = Falsemodule_name: str = ''skip_keys: str | list[str] | None = Nonepreload_module_classes: list[str] | None = Nonetied_params_map: dict[int, dict[torch.device, torch.Tensor]] | None = None )
Paramètres
- module (
torch.nn.Module) — Le module auquel nous souhaitons attacher les hooks. - execution_device (
torch.deviceouDict[str, torch.device], facultatif) — L’appareil sur lequel les entrées et les poids du modèle doivent être placés avant le passage avant. Il peut s’agir d’un seul appareil pour l’ensemble du module, ou d’un dictionnaire associant le nom du module à l’appareil. - offload (
bool, facultatif, par défautFalse) — Indique si les poids doivent être déchargés après le passage avant. Il peut s'agir d'un booléen unique pour l'ensemble du module, ou d'un dictionnaire associant le nom du module à un booléen. - weights_map (
Mapping[str, torch.Tensor], facultatif) — Lorsque les poids du modèle sont déchargés, une carte (éventuellement paresseuse) des noms de paramètres vers les valeurs des tenseurs. - offload_buffers (
bool, facultatif, par défautFalse) — Indique s'il faut inclure les buffers du module associé lors de l'offloading. - module_name (
str, facultatif, par défaut"") — Le nom du module. - skip_keys (
strouList[str], facultatif) — Une liste de clés à ignorer lors du déplacement des entrées ou des sorties entre les appareils. - preload_module_classes (
List[str], facultatif) — Une liste de classes dont les instances doivent charger tous leurs poids (y compris dans les sous-modules) au début du forward. Cela ne doit être utilisé que pour les classes possédant des sous-modules enregistrés mais non appelés directement pendant le forward, par exemple si une couche linéairedenseest enregistrée, mais qu'au forward,dense.weightetdense.biassont utilisés dans certaines opérations au lieu d'appelerdensedirectement. - tied_params_map (Optional[Dict[int, Dict[torch.device, torch.Tensor]]], facultatif, par défaut
None) — Une correspondance entre les pointeurs de données et des dictionnaires d’appareils vers les poids liés déjà distribués. Pour un appareil d’exécution donné, ce paramètre est utile pour réutiliser le premier pointeur disponible d’un poids partagé pour tous les autres, au lieu de dupliquer la mémoire.
Attache AlignDevicesHook à tous les blocs d'un modèle donné, si nécessaire.
attach_layerwise_casting_hooks
accelerate.big_modeling.attach_layerwise_casting_hooks
< source >( module: Modulestorage_dtype: dtypecompute_dtype: dtypeskip_modules_pattern: str | tuple[str, ...] | None = Noneskip_modules_classes: tuple[type[torch.nn.Module], ...] | None = Nonenon_blocking: bool = False )
Paramètres
- module (
torch.nn.Module) — Le module dont les modules feuilles seront convertis en un type de données de haute précision pour le calcul et en un type de données de basse précision pour le stockage. - storage_dtype (
torch.dtype) — Le dtype vers lequel convertir le module avant/après le passage avant pour le stockage. - compute_dtype (
torch.dtype) — Le dtype vers lequel convertir le module lors de la passe avant pour le calcul. - skip_modules_pattern (
tuple[str, ...], par défautNone) — Une liste de motifs pour correspondre aux noms des modules à ignorer lors du processus de conversion par couche. Si défini àNoneet queskip_modules_classesestNone, la conversion par couche est appliquée directement au module plutôt qu’à ses sous-modules internes. - skip_modules_classes (
tuple[type[torch.nn.Module], ...], par défautNone) — Une liste de classes de modules à ignorer lors du processus de conversion par couche. - non_blocking (
bool, par défautFalse) — SiTrue, les opérations de conversion des poids sont non bloquantes.
Applique un castage par couche à un module donné. Le module attendu ici est un nn.Module de PyTorch. Cela est utile pour
réduire les besoins en mémoire lorsque l’on ne souhaite pas quantifier entièrement un modèle. Les paramètres du modèle peuvent être conservés, par exemple, en torch.float8_e4m3fn et convertis vers une précision supérieure comme torch.bfloat16 pendant la passe avant, puis reconvertis
en torch.float8_e4m3fn pour réaliser des économies de mémoire.
Exemple :
>>> from accelerate.hooks import attach_layerwise_casting_hooks
>>> from transformers import AutoModelForCausalLM
>>> import torch
>>> # Model
>>> checkpoint = "EleutherAI/gpt-j-6B"
>>> model = AutoModelForCausalLM.from_pretrained(checkpoint)
>>> # Attach hooks and perform inference
>>> attach_layerwise_casting_hooks(model, storage_dtype=torch.float8_e4m3fn, compute_dtype=torch.bfloat16)
>>> with torch.no_grad():
... model(...)Les utilisateurs peuvent également passer des modules qu'ils souhaitent éviter de voir leur type de données réduit.
Suppression des hooks
remove_hook_from_module
accelerate.hooks.remove_hook_from_module
< source >( module: Modulerecurse = False ) → torch.nn.Module
Supprime tout hook attaché à un module via add_hook_to_module.
remove_hook_from_submodules
accelerate.hooks.remove_hook_from_submodules
< source >( module: Module )
Supprime récursivement tous les hooks attachés aux sous-modules d'un modèle donné.
Utilitaires
has_offloaded_params
accelerate.utils.has_offloaded_params
< source >( module: Module ) → bool
Vérifie si un module possède des paramètres déchargés en examinant si le module donné a un AlignDevicesHook attaché avec le déchargement activé
align_module_device
accelerate.utils.align_module_device
< source >( module: Moduleexecution_device: torch.device | None = None )
Gestionnaire de contexte qui déplace les paramètres d’un module vers le périphérique d’exécution spécifié.