deepspeed

deepspeed config 键值使用

  • train_batch_size:设置训练时的批量大小。

  • gradient_accumulation_steps:设置梯度累积的步数,以减少通信开销和内存占用。

  • fp16:设置是否使用混合精度训练,以提高速度和减少内存占用。min_loss_scale参数有时候可以设置为1e-10防止loss scale at minimum问题。

    "fp16": {
      "enabled": "auto",
      "auto_cast": false,
      "loss_scale": 0,
      "initial_scale_power": 16,
      "loss_scale_window": 1000,
      "hysteresis": 2,
      "consecutive_hysteresis": false,
      "min_loss_scale": 1
    }
  • zero_optimization:设置是否使用ZeRO优化器,以进一步减少内存占用和提高扩展性。ZeRO-stage-1优化梯度;ZeRO-stage-2优化梯度和优化器参数;ZeRO-stage-3优化梯度、优化器、模型参数。

    • overlap_comm: 控制是否使用通信与计算的重叠。当设置为True时,DeepSpeed将在梯度计算时尝试并行执行梯度通信。可以有效地减少通信时间,从而加速整个训练过程
    • allgather_bucket_size 用于控制Allgather操作的分桶大小。Allgather操作是指在分布式训练中,每个进程收集其他所有进程的张量,并将这些张量按顺序拼接起来。通过将张量划分为较小的桶(buckets),可以在通信过程中更高效地传输数据。allgather_bucket_size值越大,每个桶的大小越大,通信操作可能会变得更快,但也需要更多的内存来存储中间结果。合适的桶大小要根据实际情况调整。
    • reduce_bucket_size:类似于allgather_bucket_size,用于控制Allreduce操作的分桶大小。Allreduce操作是将所有进程的某个张量进行规约(例如求和),并将结果广播回所有进程。通过将张量划分为较小的桶,可以更高效地传输数据。reduce_bucket_size值越大,每个桶的大小越大,通信操作可能会变得更快,但同时也需要更多的内存来存储中间结果。合适的桶大小需要根据实际情况进行调整。
    • overlap_comm使用的是allgather_bucket_sizereduce_bucket_size值的4.5倍。如果它们被设置为5e8,需要9GB显存(5e8 x 2Bytes x 2 x 4.5)。如果内存大小是8GB或更小,需要将这些参数减少到约2e8,从而避免OOM,这需要3.6GB显存。如果在大容量GPU上也出现OOM,也需要做同样的调整。
    • stage3_gather_16bit_weights_on_model_save 在保存模型时启用模型 fp16 权重合并。 对大型模型和多GPU,在内存和速度方面都是一项昂贵的操作。 需要设置为True,否则pytorch_model.bin将不会被创建。
  "zero_optimization": {
    "stage": [0|1|2|3],
    "allgather_partitions": [true|false],
    "allgather_bucket_size": 5e8,
    "overlap_comm": false,
    "reduce_scatter": [true|false],
    "reduce_bucket_size": 5e8,
    "contiguous_gradients" : [true|false],
    "offload_param": {
      ...
    }
  }
  • optimizer:设置训练优化器的类型和参数,如Adam、Lamb等。具体参数可能由transformers设置,因此config设置为“auto”即可。
    "optimizer": {
      "type": "Adam",
      "params": {
        "lr": "auto",
        "betas": "auto",
        "eps": "auto",
        "weight_decay": "auto"
      }
    }
  • scheduler:设置学习率调度器的类型和参数,如WarmupLR、OneCycle等。
    • DS scheduler + DS optimizer: Yes
    • HF scheduler + HF optimizer: Yes
    • DS scheduler + HF optimizer: Yes
    • HF scheduler + DS optimizer: Yes
  • train_micro_batch_size_per_gpu:设置每个GPU上训练时的微批量大小。
  • steps_per_print:设置每隔多少步打印训练日志。
  • wall_clock_breakdown:设置是否记录训练过程中各个部分的时间消耗。
  • communication_data_type:设置通信时使用的数据类型,如float16、float32等。
  • sparse_gradients:设置是否使用稀疏梯度,以减少通信开销。
  • gradient_clipping:设置是否使用梯度裁剪,以防止梯度爆炸。
  • prescale_gradients:设置是否在累积梯度之前进行缩放,以防止数值溢出

   转载规则


《deepspeed》 yao 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
QLoRA-Efficient Finetuning of Quantized LLMs QLoRA-Efficient Finetuning of Quantized LLMs
论文QLORA: Efficient Finetuning of Quantized LLMs 摘要作者提出了QLORA,一种高效的微调方法,可以在单个48GB的GPU上微调一个65B参数的模型,同时保持完整的16位微调任务性能,从而降低内
下一篇 
MobileBERT a Compact Task-Agnostic BERT for Resource-Limited Devices MobileBERT a Compact Task-Agnostic BERT for Resource-Limited Devices
论文MobileBERT: a Compact Task-Agnostic BERT for Resource-Limited Devices introductionMobileBERT被设计成和$BERT_{large}$一样深,而每一
  目录