当前位置: 首页 > article >正文

DeepSpeed框架配置解析:一份详细的日志分析

DeepSpeed框架配置解析:一份详细的日志分析

DeepSpeed是一个由Microsoft开发的深度学习训练优化库,旨在提高大规模模型的训练效率和性能。本文将详细分析和解释您提供的DeepSpeed配置日志中的各个参数,帮助读者理解这些配置如何影响模型训练过程。


1. activation_checkpointing_config 激活检查点配置

activation_checkpointing_config  {
    "partition_activations": false,
    "contiguous_memory_optimization": false,
    "cpu_checkpointing": false,
    "number_checkpoints": null,
    "synchronize_checkpoint_boundary": false,
    "profile": false
}
  • partition_activations: 是否对激活值进行分区以节省内存。在此配置中,设置为false,意味着不会分区。
  • contiguous_memory_optimization: 是否优化连续内存分配。这里设置为false,意味着不会做此优化。
  • cpu_checkpointing: 是否使用CPU保存检查点。在此配置中为false,表明不会使用CPU检查点。
  • number_checkpoints: 指定激活检查点的数量,这里为null,表示没有限制。
  • synchronize_checkpoint_boundary: 是否同步检查点的边界。false表示不做同步。
  • profile: 是否启用性能分析。在这里为false,即没有开启性能分析功能。

此部分主要涉及DeepSpeed的激活检查点机制,用于节省内存,但在此配置中没有启用相关优化。


2. aio_config 异步输入输出配置

aio_config ................... {
'block_size': 1048576, 
'queue_depth': 8, 
'thread_count': 1, 
'single_submit': False, 
'overlap_events': True, 
'use_gds': False}
  • block_size: 每个IO请求的块大小,单位字节。这里设置为1048576字节,即1MB。
  • queue_depth: 输入输出队列的深度,设置为8,表示最多可同时处理8个IO请求。
  • thread_count: 用于处理IO操作的线程数,设置为1,即单线程执行。
  • single_submit: 是否每次提交一个IO请求,False表示每次可以提交多个请求。
  • overlap_events: 是否启用事件重叠,设置为True表示启用,以便加速IO操作。
  • use_gds: 是否使用GPU直接存储(GDS)。设置为False,即不启用GDS。

这部分配置决定了DeepSpeed如何处理异步IO操作,尤其是在使用GPU时,如何优化数据的读取与写入。


3. amp_enabled 自动混合精度(AMP)

amp_enabled .................. False
  • amp_enabled: 表示是否启用自动混合精度训练。设置为False,即未启用AMP。这意味着训练过程中不会自动使用FP16精度,以减少内存使用和加速计算。

4. autotuning_config 自动调优配置

autotuning_config ............ {
    "enabled": false,
    "start_step": null,
    "end_step": null,
    "metric_path": null,
    "arg_mappings": null,
    "metric": "throughput",
    "model_info": null,
    "results_dir": "autotuning_results",
    "exps_dir": "autotuning_exps",
    "overwrite": true,
    "fast": true,
    "start_profile_step": 3,
    "end_profile_step": 5,
    "tuner_type": "gridsearch",
    "tuner_early_stopping": 5,
    "tuner_num_trials": 50,
    "model_info_path": null,
    "mp_size": 1,
    "max_train_batch_size": null,
    "min_train_batch_size": 1,
    "max_train_micro_batch_size_per_gpu": 1.024000e+03,
    "min_train_micro_batch_size_per_gpu": 1,
    "num_tuning_micro_batch_sizes": 3
}
  • enabled: 是否启用自动调优。此处设置为false,表示未启用自动调优功能。
  • metric: 用于评估调优效果的指标。设置为throughput,即通过吞吐量来评估模型性能。
  • tuner_type: 调优类型,这里使用的是gridsearch,即网格搜索方法。
  • tuner_early_stopping: 早停条件,表示如果调优进程连续5次未能提高性能,则停止调优。
  • tuner_num_trials: 调优的尝试次数,这里设置为50
  • max_train_batch_size: 最大训练批量大小,未指定。
  • num_tuning_micro_batch_sizes: 调优过程中使用的微批量大小数量,这里设置为3

此配置定义了自动调优功能,尽管在当前设置中被禁用,但如果启用,将自动调整训练过程中使用的超参数,以提高吞吐量。


5. bfloat16_enabled BFloat16支持

bfloat16_enabled ............. True
  • bfloat16_enabled: 是否启用BFloat16支持。设置为True表示启用BFloat16格式,通常用于减少内存占用和加速训练。

6. zero_config 零优化配置

{
  "stage": 2,
  "contiguous_gradients": false,
  "reduce_scatter": true,
  "reduce_bucket_size": 1000000,
  "use_multi_rank_bucket_allreduce": true,
  "allgather_partitions": true,
  "allgather_bucket_size": 500000000,
  "overlap_comm": true,
  "load_from_fp32_weights": true,
  "elastic_checkpoint": false,
  "offload_param": null,
  "offload_optimizer": null,
  "sub_group_size": 1000000,
  "cpu_offload_param": null,
  "cpu_offload_use_pin_memory": null,
  "cpu_offload": null,
  "prefetch_bucket_size": 50000000,
  "param_persistence_threshold": 100000,
  "model_persistence_threshold": 9223372036854775807,
  "max_live_parameters": 1000000000,
  "max_reuse_distance": 1000000000,
  "gather_16bit_weights_on_model_save": false,
  "use_all_reduce_for_fetch_params": false,
  "stage3_gather_fp16_weights_on_model_save": false,
  "ignore_unused_parameters": true,
  "legacy_stage1": false,
  "round_robin_gradients": false,
  "zero_hpz_partition_size": 1,
  "zero_quantized_weights": false,
  "zero_quantized_nontrainable_weights": false,
  "zero_quantized_gradients": false,
  "mics_shard_size": -1,
  "mics_hierarchical_params_gather": false,
  "memory_efficient_linear": true,
  "pipeline_loading_checkpoint": false,
  "override_module_apply": true
}

  • stage=2: 指定Zero Redundancy Optimizer(ZeRO)的优化阶段,阶段2提供了模型参数的部分优化,适用于大规模训练。
  • contiguous_gradients=False: 表示不使用连续梯度优化来减少内存占用。
  • reduce_scatter=True: 启用reduce-scatter策略,通过分布式训练来减少全局通信的开销。
  • allgather_partitions=True: 启用全聚合策略,以支持跨节点通信。
  • overlap_comm=True: 启用通信重叠,允许在计算和通信之间并行执行,减少时间浪费。

ZeRO优化器的配置帮助减少内存使用,特别是在训练超大规模模型时,通过分布式的方式优化模型参数的存储和计算过程。


7. monitor_config 监控配置

{
  "tensorboard": {
    "enabled": false,
    "output_path": "",
    "job_name": "DeepSpeedJobName"
  },
  "comet": {
    "enabled": false,
    "samples_log_interval": 100,
    "project": null,
    "workspace": null,
    "api_key": null,
    "experiment_name": null,
    "experiment_key": null,
    "online": null,
    "mode": null
  },
  "wandb": {
    "enabled": false,
    "group": null,
    "team": null,
    "project": "deepspeed"
  },
  "csv_monitor": {
    "enabled": false,
    "output_path": "",
    "job_name": "DeepSpeedJobName"
  }
}

  • 该配置部分控制如何监控训练过程。它包括多种监控工具的配置,如TensorBoard、Comet、Wandb和CSV日志。
  • 所有的监控工具在此配置中均被禁用(enabled=False),意味着不会记录任何训练过程中的日志。

结论

目前详细分析了DeepSpeed日志中的一部分配置项。这些配置项涵盖了内存优化、自动调优、混合精度、分布式训练等多个方面。通过合理配置这些参数,可以显著提高模型训练的效率和性能,尤其是在大规模训练任务中。在实际应用中,针对硬件资源和任务特点调整这些配置,可以更好地满足训练需求,优化训练流程。

继续补充

继续补充:

在上文的基础上,继续分析如下部分,格式要求一样,不要存在和上面的重复的解释:[2024-11-29 13:55:09,762] [INFO] [config.py:1003:print] compression_config … {‘weight_quantization’: {‘shared_parameters’: {‘enabled’: False, ‘quantizer_kernel’: False, ‘schedule_offset’: 0, ‘quantize_groups’: 1, ‘quantize_verbose’: False, ‘quantization_type’: ‘symmetric’, ‘quantize_weight_in_forward’: False, ‘rounding’: ‘nearest’, ‘fp16_mixed_quantize’: False, ‘quantize_change_ratio’: 0.001}, ‘different_groups’: {}}, ‘activation_quantization’: {‘shared_parameters’: {‘enabled’: False, ‘quantization_type’: ‘symmetric’, ‘range_calibration’: ‘dynamic’, ‘schedule_offset’: 1000}, ‘different_groups’: {}}, ‘sparse_pruning’: {‘shared_parameters’: {‘enabled’: False, ‘method’: ‘l1’, ‘schedule_offset’: 1000}, ‘different_groups’: {}}, ‘row_pruning’: {‘shared_parameters’: {‘enabled’: False, ‘method’: ‘l1’, ‘schedule_offset’: 1000}, ‘different_groups’: {}}, ‘head_pruning’: {‘shared_parameters’: {‘enabled’: False, ‘method’: ‘topk’, ‘schedule_offset’: 1000}, ‘different_groups’: {}}, ‘channel_pruning’: {‘shared_parameters’: {‘enabled’: False, ‘method’: ‘l1’, ‘schedule_offset’: 1000}, ‘different_groups’: {}}, ‘layer_reduction’: {‘enabled’: False}}
[2024-11-29 13:55:09,762] [INFO] [config.py:1003:print] curriculum_enabled_legacy … False
[2024-11-29 13:55:09,762] [INFO] [config.py:1003:print] curriculum_params_legacy … False
[2024-11-29 13:55:09,762] [INFO] [config.py:1003:print] data_efficiency_config … {‘enabled’: False, ‘seed’: 1234, ‘data_sampling’: {‘enabled’: False, ‘num_epochs’: 1000, ‘num_workers’: 0, ‘curriculum_learning’: {‘enabled’: False}}, ‘data_routing’: {‘enabled’: False, ‘random_ltd’: {‘enabled’: False, ‘layer_token_lr_schedule’: {‘enabled’: False}}}}
[2024-11-29 13:55:09,762] [INFO] [config.py:1003:print] data_efficiency_enabled … False
[2024-11-29 13:55:09,762] [INFO] [config.py:1003:print] dataloader_drop_last … False
[2024-11-29 13:55:09,762] [INFO] [config.py:1003:print] disable_allgather … False
[2024-11-29 13:55:09,762] [INFO] [config.py:1003:print] dump_state … False
[2024-11-29 13:55:09,762] [INFO] [config.py:1003:print] dynamic_loss_scale_args … None
[2024-11-29 13:55:09,762] [INFO] [config.py:1003:print] eigenvalue_enabled … False
[2024-11-29 13:55:09,762] [INFO] [config.py:1003:print] eigenvalue_gas_boundary_resolution 1
[2024-11-29 13:55:09,763] [INFO] [config.py:1003:print] eigenvalue_layer_name … bert.encoder.layer
[2024-11-29 13:55:09,763] [INFO] [config.py:1003:print] eigenvalue_layer_num … 0
[2024-11-29 13:55:09,763] [INFO] [config.py:1003:print] eigenvalue_max_iter … 100
[2024-11-29 13:55:09,763] [INFO] [config.py:1003:print] eigenvalue_stability … 1e-06
[2024-11-29 13:55:09,763] [INFO] [config.py:1003:print] eigenvalue_tol … 0.01
[2024-11-29 13:55:09,763] [INFO] [config.py:1003:print] eigenvalue_verbose … False
[2024-11-29 13:55:09,763] [INFO] [config.py:1003:print] elasticity_enabled … False
[2024-11-29 13:55:09,763] [INFO] [config.py:1003:print] flops_profiler_config … {
“enabled”: false,
“recompute_fwd_factor”: 0.0,
“profile_step”: 1,
“module_depth”: -1,
“top_modules”: 1,
“detailed”: true,
“output_file”: null
}
[2024-11-29 13:55:09,763] [INFO] [config.py:1003:print] fp16_auto_cast … None
[2024-11-29 13:55:09,763] [INFO] [config.py:1003:print] fp16_enabled … False
[2024-11-29 13:55:09,763] [INFO] [config.py:1003:print] fp16_master_weights_and_gradients False
[2024-11-29 13:55:09,763] [INFO] [config.py:1003:print] global_rank … 0
[2024-11-29 13:55:09,763] [INFO] [config.py:1003:print] grad_accum_dtype … None
[2024-11-29 13:55:09,763] [INFO] [config.py:1003:print] gradient_accumulation_steps … 2
[2024-11-29 13:55:09,763] [INFO] [config.py:1003:print] gradient_clipping … 1.0
[2024-11-29 13:55:09,763] [INFO] [config.py:1003:print] gradient_predivide_factor … 1.0
[2024-11-29 13:55:09,763] [INFO] [config.py:1003:print] graph_harvesting … False
[2024-11-29 13:55:09,763] [INFO] [config.py:1003:print] hybrid_engine … enabled=False max_out_tokens=512 inference_tp_size=1 release_inference_cache=False pin_parameters=True tp_gather_partition_size=8
[2024-11-29 13:55:09,763] [INFO] [config.py:1003:print] initial_dynamic_scale … 1
[2024-11-29 13:55:09,763] [INFO] [config.py:1003:print] load_universal_checkpoint … False
[2024-11-29 13:55:09,763] [INFO] [config.py:1003:print] loss_scale … 1.0
[2024-11-29 13:55:09,763] [INFO] [config.py:1003:print] memory_breakdown … False
[2024-11-29 13:55:09,763] [INFO] [config.py:1003:print] mics_hierarchial_params_gather False
[2024-11-29 13:55:09,763] [INFO] [config.py:1003:print] mics_shard_size … -1
[2024-11-29 13:55:09,764] [INFO] [config.py:1003:print] monitor_config … tensorboard=TensorBoardConfig(enabled=False, output_path=‘’, job_name=‘DeepSpeedJobName’) comet=CometConfig(enabled=False, samples_log_interval=100, project=None, workspace=None, api_key=None, experiment_name=None, experiment_key=None, online=None, mode=None) wandb=WandbConfig(enabled=False, group=None, team=None, project=‘deepspeed’) csv_monitor=CSVConfig(enabled=False, output_path=‘’, job_name=‘DeepSpeedJobName’)
[2024-11-29 13:55:09,764] [INFO] [config.py:1003:print] nebula_config … {
“enabled”: false,
“persistent_storage_path”: null,
“persistent_time_interval”: 100,
“num_of_version_in_retention”: 2,
“enable_nebula_load”: true,
“load_path”: null
}
[2024-11-29 13:55:09,764] [INFO] [config.py:1003:print] optimizer_legacy_fusion … False
[2024-11-29 13:55:09,764] [INFO] [config.py:1003:print] optimizer_name … None
[2024-11-29 13:55:09,764] [INFO] [config.py:1003:print] optimizer_params … None
[2024-11-29 13:55:09,764] [INFO] [config.py:1003:print] pipeline … {‘stages’: ‘auto’, ‘partition’: ‘best’, ‘seed_layers’: False, ‘activation_checkpoint_interval’: 0, ‘pipe_partitioned’: True, ‘grad_partitioned’: True}
[2024-11-29 13:55:09,764] [INFO] [config.py:1003:print] pld_enabled … False
[2024-11-29 13:55:09,764] [INFO] [config.py:1003:print] pld_params … False
[2024-11-29 13:55:09,764] [INFO] [config.py:1003:print] prescale_gradients … False
[2024-11-29 13:55:09,764] [INFO] [config.py:1003:print] scheduler_name … None
[2024-11-29 13:55:09,764] [INFO] [config.py:1003:print] scheduler_params … None
[2024-11-29 13:55:09,764] [INFO] [config.py:1003:print] seq_parallel_communication_data_type torch.float32
[2024-11-29 13:55:09,764] [INFO] [config.py:1003:print] sparse_attention … None
[2024-11-29 13:55:09,764] [INFO] [config.py:1003:print] sparse_gradients_enabled … False
[2024-11-29 13:55:09,764] [INFO] [config.py:1003:print] steps_per_print … inf
[2024-11-29 13:55:09,764] [INFO] [config.py:1003:print] timers_config … enabled=True synchronized=True
[2024-11-29 13:55:09,764] [INFO] [config.py:1003:print] train_batch_size … 8
[2024-11-29 13:55:09,764] [INFO] [config.py:1003:print] train_micro_batch_size_per_gpu 1
[2024-11-29 13:55:09,764] [INFO] [config.py:1003:print] use_data_before_expert_parallel_ False
[2024-11-29 13:55:09,764] [INFO] [config.py:1003:print] use_node_local_storage … False
[2024-11-29 13:55:09,764] [INFO] [config.py:1003:print] wall_clock_breakdown … False
[2024-11-29 13:55:09,764] [INFO] [config.py:1003:print] weight_quantization_config … None
[2024-11-29 13:55:09,764] [INFO] [config.py:1003:print] world_size … 4
[2024-11-29 13:55:09,765] [INFO] [config.py:1003:print] zero_allow_untested_optimizer True

在本部分的配置中,我们可以看到多个与深度学习训练相关的参数和配置选项。以下是对其中每个重要项的详细分析:


1. compression_config

压缩配置项涉及模型权重和激活值的量化、稀疏修剪等技术,旨在通过减小模型大小和计算量来提高训练和推理效率。

  • weight_quantization: 权重量化配置,启用与否会直接影响模型大小和计算速度。参数包括:

    • enabled: 是否启用权重量化(这里为False,表示未启用)。
    • quantization_type: 使用的量化方式为对称量化(symmetric),常用于减少量化带来的精度损失。
    • quantize_weight_in_forward: 是否在前向传播时进行量化(这里为False,即不进行)。
    • rounding: 量化时使用的四舍五入方法(这里为nearest,即四舍五入)。
  • activation_quantization: 激活量化配置,控制激活值的量化方式(同样未启用)。

  • sparse_pruning: 稀疏修剪配置,使用L1正则化方法对网络进行修剪,减少不重要的连接。

  • row_pruning: 行修剪配置,用于去除某些神经网络层中的冗余行(未启用)。

  • head_pruning: 针对注意力头进行修剪,减少冗余的注意力头(未启用)。

  • channel_pruning: 通道修剪,用于减少卷积层的通道数(未启用)。

  • layer_reduction: 层数减少,用于减少模型的层数(未启用)。

这些配置项显示了尽管启用了多个压缩选项,但大多数选项都没有启用。因此,当前配置的训练过程中并没有实施压缩策略。


2. curriculum_enabled_legacy & curriculum_params_legacy

这两个参数与curriculum learning(课程学习)相关,旨在通过逐步增加训练任务的难度来提高模型的学习效率。

  • curriculum_enabled_legacy: 设置为False表示未启用课程学习。

  • curriculum_params_legacy: 设置为False表示未配置课程学习的具体参数。

这两个参数指示当前配置不使用课程学习。


3. data_efficiency_config

数据效率配置项用于优化数据处理和输入管道,以提高训练的效率。

  • enabled: 设置为False,表示数据效率优化未启用。

  • data_sampling: 控制数据采样配置,涉及数据重复使用等策略,但当前未启用。

    • num_epochs: 设置为1000,指定数据采样的轮数,但由于未启用,这一参数实际上不起作用。
    • curriculum_learning: 未启用,表示没有使用课程学习方法。
  • data_routing: 控制数据路由策略(目前未启用)。

总的来说,数据效率相关的配置未被启用。


4. gradient_accumulation_steps

该配置项控制梯度累积的步骤数。此设置为2,表示在每两次微批次更新后才会进行一次梯度更新,这对于显存限制较小的GPU是有用的。

  • gradient_accumulation_steps: 设置为2,表示每两个微批次累积一次梯度。

5. gradient_clipping

梯度裁剪用于防止梯度爆炸,特别是在深层网络中。配置为1.0表示在训练过程中,若梯度的L2范数超过1.0,则进行裁剪。

  • gradient_clipping: 设置为1.0,表示对梯度进行L2范数裁剪,确保梯度不会过大。

6. hybrid_engine

该配置项用于启用混合引擎,控制模型推理过程中的并行性和缓存释放等操作。

  • enabled: 设置为False,表示未启用混合引擎。
  • max_out_tokens: 设置为512,表示每次推理最多处理512个输出token。
  • inference_tp_size: 设置为1,表示推理时使用单个模型并行分区。
  • release_inference_cache: 设置为False,表示不释放推理缓存。
  • pin_parameters: 设置为True,表示在推理过程中固定模型参数,以提高推理性能。

7. optimizer_name & optimizer_params

这些参数涉及优化器的选择与配置。

  • optimizer_name: 当前未设置,说明未选择特定优化器。
  • optimizer_params: 当前未设置,说明没有配置优化器的额外参数。

8. pipeline

流水线并行配置,涉及模型的分布式训练时的分区方式。

  • stages: 设置为auto,表示自动分配流水线阶段。
  • partition: 设置为best,表示使用最佳的分区策略来优化训练性能。
  • pipe_partitioned: 设置为True,表示模型进行流水线分区。
  • grad_partitioned: 设置为True,表示梯度也进行分区,进一步优化分布式训练。

9. train_batch_size & train_micro_batch_size_per_gpu

这些参数决定了训练过程中批次的大小。

  • train_batch_size: 设置为8,表示整个训练批次的大小为8。
  • train_micro_batch_size_per_gpu: 设置为1,表示每个GPU上的微批次大小为1。

10. monitor_config

监控配置项用于训练过程中实时追踪训练进度和性能。

  • enabled: 各种监控工具(TensorBoard、Wandb等)未启用,说明没有进行训练过程的监控。

11. zero_allow_untested_optimizer

此参数控制是否允许在未经过测试的优化器上进行训练,当前设置为True,意味着可以在未测试的优化器上进行训练。


总结来说,本部分的配置主要集中在模型训练的细节方面,包括压缩、梯度处理、优化器配置、数据效率、流水线并行等。当前未启用多个高效训练选项(如课程学习、数据效率优化、混合精度等),但提供了丰富的配置选项,以便根据实际需求启用相关功能。在大规模模型训练中,合理的配置这些参数将帮助提高训练效率并减少计算资源的消耗。

后记

2024年11月29日14点15分于上海,基于GPT4o大模型生成。


http://www.kler.cn/a/415333.html

相关文章:

  • 【81-90期】Java核心面试问题深度解析:性能优化与高并发设计
  • python学习——enumerate
  • sd webui整合包怎么安装comfyui
  • 【SPIE出版|四大高校联合举办】先进算法与图像处理技术国际学术会议(IC-AAIP 2025)
  • 快速理解微服务中Fegin的概念
  • 电脑无互联网连接怎么解决?分享5种解决方案
  • 电子应用设计方案-30:智能扫地机器人系统方案设计
  • 18. 【.NET 8 实战--孢子记账--从单体到微服务】--记账模块--账本
  • eBay 基于 Celeborn RESTful API 进行自动化工具集成实践
  • Flink四大基石之CheckPoint
  • 计算机网络:数据链路层(二)
  • Milvus×Florence:一文读懂如何构建多任务视觉模型
  • 矩阵重构——reshape函数
  • Vue 3 组件通信教程
  • 不同云计算网络安全等级
  • HTTPTomcatServlet
  • Node报错:npm error code ETIMEDOUT
  • 智能合约开发框架--Hardhat
  • 电商数据采集电商行业数据分析电商平台数据获取|保障稳定的API接口数据
  • 如何在CodeIgniter中调用构造函数
  • DataOps 体系对企业数据管理价值及落地的探讨
  • 合并视频文件:使用Python和MoviePy库的简单指南
  • Python 视频合并工具
  • 乐鑫发布 esp-iot-solution v2.0 版本
  • RPC——Remote Procedure Call(远程过程调用)
  • I/O流程图