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大模型生成。