Accelerate 文档
处理大型模型
并获得增强的文档体验
开始使用
处理大型模型
调度和卸载
init_empty_weights
accelerate.init_empty_weights
< 源代码 >( include_buffers: bool = None )
一个上下文管理器,在此管理器下,模型的所有参数都在 meta 设备上初始化,从而创建一个空模型。当仅初始化模型就会耗尽可用 RAM 时非常有用。
示例
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)])
在此上下文管理器下创建的任何模型都没有权重。 因此,你无法对其执行类似 model.to(some_device)
的操作。 要在空模型中加载权重,请参阅 load_checkpoint_and_dispatch()。 确保覆盖 load_checkpoint_and_dispatch() 的默认 device_map 参数,否则不会调用调度。
cpu_offload
accelerate.cpu_offload
< 源代码 >( model: Module execution_device: typing.Optional[torch.device] = None offload_buffers: bool = False state_dict: typing.Optional[dict[str, torch.Tensor]] = None preload_module_classes: typing.Optional[list[str]] = None )
参数
- model (
torch.nn.Module
) — 要卸载的模型。 - execution_device (
torch.device
, 可选) — 模型的前向传递将在其上执行的设备(应为 GPU)。 将默认为模型的第一个参数设备。 - offload_buffers (
bool
, 可选, 默认为False
) — 是否将缓冲区与模型参数一起卸载。 - state_dict (
Dict[str, torch.Tensor]
, 可选) — 模型的 state dict,将保留在 CPU 上。 - preload_module_classes (
List[str]
, 可选) — 类列表,其实例应在其 forward 的开头加载所有权重(即使在子模块中)。 这应仅用于具有已注册但未在 forward 期间直接调用的子模块的类,例如,如果注册了一个dense
线性层,但在 forward 时,使用dense.weight
和dense.bias
进行某些操作,而不是直接调用dense
。
激活模型的完全 CPU 卸载。 因此,模型的所有参数都将被卸载,并且仅保留模型状态字典的一个副本。 在前向传递期间,参数将从该状态字典中提取出来,并在需要时放置在作为参数传递的执行设备上,然后再卸载。
cpu_offload_with_hook
accelerate.cpu_offload_with_hook
< 源代码 >( model: Module execution_device: typing.Union[str, torch.device, int, NoneType] = None prev_module_hook: typing.Optional[accelerate.hooks.UserCpuOffloadHook] = None )
将模型卸载到 CPU 上,并在执行时将其放回执行设备。 与 cpu_offload() 的区别在于,模型在前向传递后仍保留在执行设备上,并且仅在调用返回的 hook
的 offload
方法时才再次卸载。 对于在循环中运行模型的管道非常有用。
示例
model_1, hook_1 = cpu_offload_with_hook(model_1, cuda_device)
model_2, hook_2 = cpu_offload_with_hook(model_2, cuda_device, prev_module_hook=hook_1)
model_3, hook_3 = cpu_offload_with_hook(model_3, cuda_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: Module offload_dir: typing.Union[str, os.PathLike] execution_device: typing.Optional[torch.device] = None offload_buffers: bool = False preload_module_classes: typing.Optional[list[str]] = None )
参数
- model (
torch.nn.Module
) — 要卸载的模型。 - offload_dir (
str
或os.PathLike
) — 用于卸载模型权重(或模型权重已卸载的位置)的文件夹。 - execution_device (
torch.device
, 可选) — 模型前向传递将在其上执行的设备(应为 GPU)。将默认为模型的第一个参数设备。 - offload_buffers (
bool
, 可选, 默认为False
) — 是否卸载带有模型参数的缓冲区。 - preload_module_classes (
List[str]
, 可选) — 一个类列表,这些类的实例应在正向传递开始时加载其所有权重(即使在子模块中)。这应该仅用于具有已注册但未在正向传递期间直接调用的子模块的类,例如,如果注册了dense
线性层,但在正向传递时,使用了dense.weight
和dense.bias
中的某些操作,而不是直接调用dense
。
为模型激活完全磁盘卸载。因此,模型的所有参数都将作为内存映射数组卸载到给定的文件夹中。在前向传递期间,参数将从该文件夹访问,并在需要时放置在作为参数传递的执行设备上,然后再卸载。
dispatch_model
accelerate.dispatch_model
< source >( model: Module device_map: dict main_device: typing.Optional[torch.device] = None state_dict: typing.Optional[dict[str, torch.Tensor]] = None offload_dir: typing.Union[str, os.PathLike, NoneType] = None offload_index: typing.Optional[dict[str, str]] = None offload_buffers: bool = False skip_keys: typing.Union[str, list[str], NoneType] = None preload_module_classes: typing.Optional[list[str]] = None force_hooks: bool = False )
参数
- model (
torch.nn.Module
) — 要调度的模型。 - device_map (
Dict[str, Union[str, int, torch.device]]
) — 一个字典,将模型state_dict
中的模块名称映射到它们应去的设备。 请注意,即使"disk"
不是torch.device
的正确值,也接受它。 - main_device (
str
,int
或torch.device
, 可选) — 主要执行设备。 将默认为device_map
中第一个不同于"cpu"
或"disk"
的设备。 - state_dict (
Dict[str, torch.Tensor]
, 可选) — 将保留在 CPU 上的模型部分的 state dict。 - offload_dir (
str
或os.PathLike
) — 用于卸载模型权重(或模型权重已卸载的位置)的文件夹。 - offload_index (
Dict
, 可选) — 从权重名称到其信息(dtype
/shape
或 safetensors 文件名)的字典。 将默认为保存在save_folder
中的索引。 - offload_buffers (
bool
, 可选, 默认为False
) — 是否卸载带有模型参数的缓冲区。 - skip_keys (
str
或List[str]
, 可选) — 在设备之间移动输入或输出时要忽略的键列表。 - preload_module_classes (
List[str]
, 可选) — 一个类列表,这些类的实例应在正向传递开始时加载其所有权重(即使在子模块中)。这应该仅用于具有已注册但未在正向传递期间直接调用的子模块的类,例如,如果注册了dense
线性层,但在正向传递时,使用了dense.weight
和dense.bias
中的某些操作,而不是直接调用dense
。 - force_hooks (
bool
, 可选, 默认为False
) — 即使所有层都调度到单个设备,是否强制将设备钩子附加到模型。
根据给定的设备映射调度模型。模型的层可能分布在 GPU 上,卸载到 CPU 甚至磁盘上。
load_checkpoint_and_dispatch
accelerate.load_checkpoint_and_dispatch
< source >( model: Module checkpoint: typing.Union[str, os.PathLike] device_map: typing.Union[str, dict[str, typing.Union[int, str, torch.device]], NoneType] = None max_memory: typing.Optional[dict[typing.Union[int, str], typing.Union[int, str]]] = None no_split_module_classes: typing.Optional[list[str]] = None offload_folder: typing.Union[str, os.PathLike, NoneType] = None offload_buffers: bool = False dtype: typing.Union[str, torch.dtype, NoneType] = None offload_state_dict: typing.Optional[bool] = None skip_keys: typing.Union[str, list[str], NoneType] = None preload_module_classes: typing.Optional[list[str]] = None force_hooks: bool = False strict: bool = False )
参数
- model (
torch.nn.Module
) — 我们想要在其中加载检查点的模型。 - checkpoint (
str
或os.PathLike
) — 要加载的文件夹检查点。 它可以是:- 包含整个模型 state dict 的文件的路径
- 包含分片检查点索引的
.json
文件的路径 - 包含唯一的
.index.json
文件和检查点分片的文件夹的路径。
- device_map (
Dict[str, Union[int, str, torch.device]]
, 可选) — 指定每个子模块应去往何处的映射。 它不需要细化到每个参数/缓冲区名称,一旦给定的模块名称在其中,它的每个子模块都将被发送到同一设备。要让 Accelerate 自动计算最优化的
device_map
,请设置device_map="auto"
。 有关每个选项的更多信息,请参见 此处。 默认为 None,这意味着将不会调用 dispatch_model()。 - max_memory (
Dict
, 可选) — 设备标识符到最大内存的字典。 如果未设置,将默认为每个 GPU 的最大可用内存和可用的 CPU RAM。 - no_split_module_classes (
List[str]
, 可选) — 永远不应跨设备拆分的层类名称列表(例如,任何具有残差连接的层)。 - offload_folder (
str
或os.PathLike
, 可选) — 如果device_map
包含任何值"disk"
,则为我们将卸载权重的文件夹。 - offload_buffers (
bool
, 可选, 默认为False
) — 在卸载到 CPU 或硬盘的层中,是否也卸载缓冲区以及参数。 - dtype (
str
或torch.dtype
, 可选) — 如果提供,权重将在加载时转换为该类型。 - offload_state_dict (
bool
, 可选) — 如果为True
,则会将 CPU 状态字典临时卸载到硬盘上,以避免在 CPU 状态字典的权重 + 最大分片不适合时耗尽 CPU RAM。如果选择的设备映射包含"disk"
值,则默认为True
。 - skip_keys (
str
或List[str]
, 可选) — 在设备之间移动输入或输出时要忽略的键列表。 - preload_module_classes (
List[str]
, 可选) — 类实例应在其前向传播开始时加载所有权重(甚至在子模块中)的类列表。 这应仅用于具有已注册但未在前向传播期间直接调用的子模块的类,例如,如果注册了dense
线性层,但在前向传播时,dense.weight
和dense.bias
用于某些操作,而不是直接调用dense
。 - force_hooks (
bool
, 可选, 默认为False
) — 即使所有层都调度到单个设备,是否强制将设备钩子附加到模型。 - strict (
bool
, 可选, 默认为False
) — 是否严格强制检查点 state_dict 中的键与模型 state_dict 的键匹配。
在一个模型内部加载(可能是分片的)检查点,可能会在加载时将权重发送到给定设备,并添加各种钩子,使该模型能够正常运行(即使跨设备拆分)。
示例
>>> 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: Module checkpoint: typing.Union[str, os.PathLike] device_map: typing.Optional[dict[str, typing.Union[int, str, torch.device]]] = None offload_folder: typing.Union[str, os.PathLike, NoneType] = None dtype: typing.Union[str, torch.dtype, NoneType] = None offload_state_dict: bool = False offload_buffers: bool = False keep_in_fp32_modules: list = None offload_8bit_bnb: bool = False strict: bool = False )
参数
- model (
torch.nn.Module
) — 我们要在其中加载检查点的模型。 - checkpoint (
str
或os.PathLike
) — 要加载的文件夹检查点。它可以是:- 包含完整模型状态字典的文件的路径
- 包含分片检查点索引的
.json
文件的路径 - 包含唯一
.index.json
文件和检查点分片的文件夹的路径。 - 包含唯一 pytorch_model.bin 或 model.safetensors 文件的文件夹的路径。
- device_map (
Dict[str, Union[int, str, torch.device]]
, 可选) — 指定每个子模块应放置位置的映射。 它不需要细化到每个参数/缓冲区名称,一旦给定的模块名称在其中,它的每个子模块都将被发送到同一设备。 - offload_folder (
str
或os.PathLike
, 可选) — 如果device_map
包含任何值"disk"
,则为我们将卸载权重的文件夹。 - dtype (
str
或torch.dtype
, 可选) — 如果提供,权重将在加载时转换为该类型。 - offload_state_dict (
bool
, 可选, 默认为False
) — 如果为True
,则会将 CPU 状态字典临时卸载到硬盘上,以避免在 CPU 状态字典的权重 + 最大分片不适合时耗尽 CPU RAM。 - offload_buffers (
bool
, 可选, 默认为False
) — 是否将缓冲区包含在卸载到磁盘的权重中。 - keep_in_fp32_modules(
List[str]
, 可选) — 我们在torch.float32
dtype 中保留的模块列表。 - offload_8bit_bnb (
bool
, 可选) — 是否启用在 cpu/磁盘上卸载 8 位模块。 - strict (
bool
, 可选, 默认为False
) — 是否严格强制检查点 state_dict 中的键与模型 state_dict 的键匹配。
在一个模型内部加载(可能是分片的)检查点,可能会在加载时将权重发送到给定设备。
一旦跨设备加载,您仍然需要在您的模型上调用 dispatch_model() 以使其能够运行。 要将检查点加载和调度分组在一个调用中,请使用 load_checkpoint_and_dispatch()。
infer_auto_device_map
accelerate.infer_auto_device_map
< source >( model: Module max_memory: typing.Optional[dict[typing.Union[int, str], typing.Union[int, str]]] = None no_split_module_classes: typing.Optional[list[str]] = None dtype: typing.Union[str, torch.dtype, NoneType] = None special_dtypes: typing.Optional[dict[str, typing.Union[str, torch.dtype]]] = None verbose: bool = False clean_result: bool = True offload_buffers: bool = False fallback_allocation: bool = False )
参数
- model (
torch.nn.Module
) — 要分析的模型。 - max_memory (
Dict
, 可选) — 设备标识符到最大内存的字典。 如果未设置,则默认为最大可用内存。 示例:max_memory={0: "1GB"}
。 - no_split_module_classes (
List[str]
, 可选) — 永远不应跨设备拆分的层类名称列表(例如,任何具有残差连接的层)。 - dtype (
str
或torch.dtype
, 可选) — 如果提供,权重将在加载时转换为该类型。 - special_dtypes (
Dict[str, Union[str, torch.device]]
, optional) — 如果提供,则为某些特定权重考虑的特殊数据类型(将覆盖用作所有权重默认数据类型的 dtype)。 - verbose (
bool
, optional, defaults toFalse
) — 是否提供调试语句,以帮助函数构建 device_map。(默认为False
) - clean_result (
bool
, optional, defaults toTrue
) — 通过将所有放置在同一设备上的子模块分组在一起,来清理生成的 device_map。(默认为True
) - offload_buffers (
bool
, optional, defaults toFalse
) — 在 CPU 或硬盘上卸载的层中,是否也卸载缓冲区以及参数。(默认为False
) - fallback_allocation (
bool
, optional, defaults toFalse
) — 当常规分配失败时,尝试使用 BFS 分配一个符合大小限制的模块。(默认为False
)
计算给定模型的设备映射,优先考虑 GPU,然后卸载到 CPU,最后卸载到磁盘,以便
- 我们不会超过任何 GPU 的可用内存。
- 如果需要卸载到 CPU,GPU 0 上始终有剩余空间,以放回卸载到 CPU 上尺寸最大的层。
- 如果需要卸载到 CPU,我们不会超过 CPU 上的可用 RAM。
- 如果需要卸载到磁盘,CPU 上始终有剩余空间,以放回卸载到磁盘上尺寸最大的层。
所有计算都是通过分析模型参数的大小和数据类型来完成的。因此,模型可以在元设备上(就像在 init_empty_weights
上下文管理器中初始化一样)。
Hooks
ModelHook
一个 hook,包含在模型的前向传播方法之前和之后执行的回调函数。与 PyTorch 现有 hook 的区别在于,它们会传递 kwargs。
类属性
- no_grad (
bool
, optional, defaults toFalse
) — 是否在torch.no_grad()
上下文管理器下执行实际的前向传播。(默认为False
)
当 hook 从模块分离时执行。
当 hook 附加到模块时执行。
post_forward
< source >( module output ) → Any
在模型的前向传播方法之后立即执行。
pre_forward
< source >( module *args **kwargs ) → Tuple[Tuple[Any], Dict[Str, Any]]
在模型的前向传播方法之前立即执行。
AlignDevicesHook
class accelerate.hooks.AlignDevicesHook
< source >( execution_device: typing.Union[str, torch.device, int, NoneType] = None offload: bool = False io_same_device: bool = False weights_map: typing.Optional[collections.abc.Mapping] = None offload_buffers: bool = False place_submodules: bool = False skip_keys: typing.Union[str, list[str], NoneType] = None tied_params_map: typing.Optional[dict[int, dict[torch.device, torch.Tensor]]] = None )
参数
- execution_device (
torch.device
, optional) — 输入和模型权重在前向传播之前应放置在其上的设备。(可选) - offload (
bool
, optional, defaults toFalse
) — 是否在前向传播后卸载权重。(默认为False
) - io_same_device (
bool
, optional, defaults toFalse
) — 输出是否应放置在与输入相同的设备上。(默认为False
) - weights_map (
Mapping[str, torch.Tensor]
, optional) — 当模型权重被卸载时,从参数名称到张量值的(可能是惰性的)映射。(可选) - offload_buffers (
bool
, optional, defaults toFalse
) — 卸载时是否包含关联模块的缓冲区。(默认为False
) - place_submodules (
bool
, optional, defaults toFalse
) — 是否在init_hook
事件期间将子模块放置在execution_device
上。(默认为False
)
一个通用的 ModelHook
,确保输入和模型权重在关联模块的前向传播期间位于同一设备上,并可能在前向传播后卸载权重。
SequentialHook
一个可以包含多个 hook 并在每个事件中迭代它们的 hook。
添加钩子
add_hook_to_module
accelerate.hooks.add_hook_to_module
< 源代码 >( module: Module hook: ModelHook append: bool = False ) → torch.nn.Module
向给定模块添加一个钩子。这将重写模块的 forward
方法以包含钩子。要删除此行为并恢复原始 forward
方法,请使用 remove_hook_from_module
。
如果模块已包含钩子,默认情况下,这将用传递的新钩子替换它。要将两个钩子链接在一起,请传递 append=True
,以便它将当前钩子和新钩子链接到 SequentialHook
类的实例中。
attach_execution_device_hook
accelerate.hooks.attach_execution_device_hook
< 源代码 >( module: Module execution_device: typing.Union[int, str, torch.device] skip_keys: typing.Union[str, list[str], NoneType] = None preload_module_classes: typing.Optional[list[str]] = None tied_params_map: typing.Optional[dict[int, dict[torch.device, torch.Tensor]]] = None )
参数
- module (
torch.nn.Module
) — 我们要在其上附加钩子的模块。 - execution_device (
int
,str
或torch.device
) — 输入和模型权重在正向传递之前应放置的设备。 - skip_keys (
str
或List[str]
, 可选) — 移动设备之间输入或输出时要忽略的键列表。 - preload_module_classes (
List[str]
, 可选) — 类列表,其实例应在正向传递开始时加载其所有权重(即使在子模块中)。这仅应用于具有已注册但未在正向传递期间直接调用的子模块的类,例如,如果注册了 `dense` 线性层,但在正向传递时,`dense.weight` 和 `dense.bias` 用于某些操作,而不是直接调用 `dense`。 - tied_params_map (Optional[Dict[int, Dict[torch.device, torch.Tensor]]], 可选, 默认为
None
) — 数据指针到设备字典的映射,用于已分发的绑定权重。对于给定的执行设备,此参数对于为所有其他设备重用共享权重的第一个可用指针非常有用,而不是复制内存。
递归地将 AlignDevicesHook
附加到给定模型的所有子模块,以确保它们具有正确的执行设备
attach_align_device_hook
accelerate.hooks.attach_align_device_hook
< 源代码 >( module: Module execution_device: typing.Optional[torch.device] = None offload: bool = False weights_map: typing.Optional[collections.abc.Mapping] = None offload_buffers: bool = False module_name: str = '' skip_keys: typing.Union[str, list[str], NoneType] = None preload_module_classes: typing.Optional[list[str]] = None tied_params_map: typing.Optional[dict[int, dict[torch.device, torch.Tensor]]] = None )
参数
- module (
torch.nn.Module
) — 我们要在其上附加钩子的模块。 - execution_device (
torch.device
, 可选) — 输入和模型权重在正向传递之前应放置的设备。 - offload (
bool
, 可选, 默认为False
) — 权重是否应在正向传递后卸载。 - weights_map (
Mapping[str, torch.Tensor]
, 可选) — 当模型权重被卸载时,从参数名称到张量值(可能是惰性的)的映射。 - offload_buffers (
bool
, 可选, 默认为False
) — 卸载时是否包含关联模块的缓冲区。 - module_name (
str
, 可选, 默认为""
) — 模块的名称。 - skip_keys (
str
或List[str]
, 可选) — 移动设备之间输入或输出时要忽略的键列表。 - preload_module_classes (
List[str]
, 可选) — 类列表,其实例应在正向传递开始时加载其所有权重(即使在子模块中)。这仅应用于具有已注册但未在正向传递期间直接调用的子模块的类,例如,如果注册了 `dense` 线性层,但在正向传递时,`dense.weight` 和 `dense.bias` 用于某些操作,而不是直接调用 `dense`。 - tied_params_map (Optional[Dict[int, Dict[torch.device, torch.Tensor]]], 可选, 默认为
None
) — 数据指针到设备字典的映射,用于已分发的绑定权重。对于给定的执行设备,此参数对于为所有其他设备重用共享权重的第一个可用指针非常有用,而不是复制内存。
递归地将 AlignDevicesHook
附加到给定模型的所有具有直接参数和/或缓冲区的子模块。
attach_align_device_hook_on_blocks
accelerate.hooks.attach_align_device_hook_on_blocks
< 源代码 >( module: Module execution_device: typing.Union[torch.device, dict[str, torch.device], NoneType] = None offload: typing.Union[bool, dict[str, bool]] = False weights_map: Mapping = None offload_buffers: bool = False module_name: str = '' skip_keys: typing.Union[str, list[str], NoneType] = None preload_module_classes: typing.Optional[list[str]] = None tied_params_map: typing.Optional[dict[int, dict[torch.device, torch.Tensor]]] = None )
参数
- module (
torch.nn.Module
) — The module where we want to attach the hooks. - execution_device (
torch.device
orDict[str, torch.device]
, optional) — The device on which inputs and model weights should be placed before the forward pass. It can be one device for the whole module, or a dictionary mapping module name to device. - offload (
bool
, optional, defaults toFalse
) — Whether or not the weights should be offloaded after the forward pass. It can be one boolean for the whole module, or a dictionary mapping module name to boolean. - weights_map (
Mapping[str, torch.Tensor]
, optional) — When the model weights are offloaded, a (potentially lazy) map from param names to the tensor values. - offload_buffers (
bool
, optional, defaults toFalse
) — Whether or not to include the associated module’s buffers when offloading. - module_name (
str
, optional, defaults to""
) — The name of the module. - skip_keys (
str
orList[str]
, optional) — A list of keys to ignore when moving inputs or outputs between devices. - preload_module_classes (
List[str]
, optional) — A list of classes whose instances should load all their weights (even in the submodules) at the beginning of the forward. This should only be used for classes that have submodules which are registered but not called directly during the forward, for instance if adense
linear layer is registered, but at forward,dense.weight
anddense.bias
are used in some operations instead of callingdense
directly. - tied_params_map (Optional[Dict[int, Dict[torch.device, torch.Tensor]]], optional, defaults to
None
) — A map of data pointers to dictionaries of devices to already dispatched tied weights. For a given execution device, this parameter is useful to reuse the first available pointer of a shared weight for all others, instead of duplicating memory.
Attaches AlignDevicesHook
to all blocks of a given model as needed.
移除 Hooks
remove_hook_from_module
accelerate.hooks.remove_hook_from_module
< source >( module: Module recurse = False ) → torch.nn.Module
Removes any hook attached to a module via add_hook_to_module
.
remove_hook_from_submodules
accelerate.hooks.remove_hook_from_submodules
< source >( module: Module )
Recursively removes all hooks attached on the submodules of a given model.
实用工具
has_offloaded_params
accelerate.utils.has_offloaded_params
< source >( module: Module ) → bool
Checks if a module has offloaded parameters by checking if the given module has a AlignDevicesHook attached with offloading enabled
align_module_device
accelerate.utils.align_module_device
< source >( module: Module execution_device: typing.Optional[torch.device] = None )
Context manager that moves a module’s parameters to the specified execution device.