激活检查点

DeepSpeed 中的激活检查点 API 可用于启用与激活检查点相关的各种内存优化。这些优化包括在使用模型并行时跨 GPU 划分激活、CPU 检查点、连续内存优化等。

请参阅 DeepSpeed JSON 配置,了解完整设置。

在此,我们介绍激活检查点 API。请参阅为 Megatron-LM 教程 启用 DeepSpeed,了解使用示例。

配置激活检查点

deepspeed.checkpointing.configure(mpu_, deepspeed_config=None, partition_activations=None, contiguous_checkpointing=None, num_checkpoints=None, checkpoint_in_cpu=None, synchronize=None, profile=None)

配置 DeepSpeed 激活检查点。

参数
  • mpu – 可选:实现以下方法的 Object:get_model_parallel_rank/group/world_size 以及 get_data_parallel_rank/group/world_size

  • deepspeed_config – 可选:提供时,DeepSpeed Config json 文件将用于配置 DeepSpeed 激活检查点

  • partition_activations – 可选:启用后,在模型并行 GPU 间分配激活检查点。默认情况下为 False。如果提供,将覆盖 deepspeed_config

  • contiguous_checkpointing – 可选:将激活检查点复制到连续内存缓冲区。仅在启用 partition_activations 时与同质检查点一起使用。必须提供 num_checkpoints。默认情况下为 False。如果提供,将覆盖 deepspeed_config

  • num_checkpoints – 可选:激活检查点的数量,在模型的前向传播期间存储。用于计算 contiguous_checkpointing 的缓冲区大小,如果提供,将覆盖 deepspeed_config

  • checkpoint_in_cpu – 可选:将激活检查点移动到 CPU。仅适用于 partition_activations。默认值为 false。如果提供,将覆盖 deepspeed_config

  • synchronize – 可选:在每次对 deepspeed.checkpointing.checkpoint 调用时,在前向和后向传递中执行 get_accelerator().synchronize()。默认情况下为 false。如果提供,将覆盖 deepspeed_config

  • profile – 可选:记录每次 deepspeed.checkpointing.checkpoint 调用的前向和后向时间。如果提供,将覆盖 deepspeed_config

返回

deepspeed.checkpointing.is_configured()
如果已配置 deepspeed 激活检查点,则为 True

通过调用 deepspeed.checkpointing.configure,否则返回 false

参数

返回

如果配置则为 True,否则为 False

使用激活检查点

deepspeed.checkpointing.checkpoint(function, *args)

检查点模型或模型的部件。这已直接从 torch.utils.checkpoint 复制过来。

deepspeed.checkpointing.reset()

重置与连续内存优化相关的内存缓冲区。当计算多个前向传播且没有通常用来清除这些缓冲区的后向传播时,应在评估中调用此函数。:param 无

返回

配置和检查点随机种子

deepspeed.checkpointing.get_cuda_rng_tracker()

获取 cuda rng 跟踪器。

deepspeed.checkpointing.model_parallel_cuda_manual_seed(seed)

初始化模型并行 cuda 种子。

在模型并行初始化后应当调用此函数。此外,此函数后不得调用 get_accelerator().manual_seed。基本上,此函数取代了该函数。跟踪两组 RNG 状态

默认状态:此状态用于数据并行,且在一组

模型并行 GPU 中相同,但在不同模型并行组中不同。例如,用于非模型并行区域中的丢弃。

模型并行状态:此状态在一组模型

并行 GPU 中不同,但在数据并行组中相同。例如,用于模型并行区域中的丢弃。

class deepspeed.checkpointing.CudaRNGStatesTracker

cuda RNG 状态的跟踪器。

使用 add 方法,将根据输入 seed 初始化 cuda rng 状态,并分配给 name。稍后,通过派生 rng 状态,我们可以执行操作并返回到我们的初始 cuda 状态。

class deepspeed.checkpointing.CheckpointFunction(*args, **kwargs)

该函数改编自 torch.utils.checkpoint,有两个主要改动

  1. torch.cuda.set_rng_state 已替换为 _set_cuda_rng_state #ignore-cuda

  2. 模型并行跟踪器中的状态也被正确跟踪/设置/重置。

  3. 性能激活分区,连续内存优化

  4. CPU 检查点

  5. 对前向和后向函数进行概要分析