huggingface笔记 accelerate launch
1 介绍
用正确的参数在分布式系统上启动指定的脚本
用法:
accelerate launch [arguments] {training_script} --{training_script-argument-1} --{training_script-argument-2} ...
{training_script} | 要并行启动的脚本的路径 |
{training_script-argument-1}..... | 训练脚本的参数 |
2 可选参数
-h, --help | 显示帮助信息并退出 |
--config_file CONFIG_FILE | 用于启动脚本中默认值的配置文件 |
-m, --module | 将每个进程更改为将启动脚本解释为Python模块,执行行为与 ‘python -m’ 相同 |
--debug | 是否在出错时打印torch.distributed的堆栈跟踪 |
--no_python | 跳过在训练脚本前添加‘python’,直接执行它。 当脚本不是Python脚本时很有用 |
-q, --quiet | 将启动堆栈跟踪中的子进程错误静音,只显示相关的回溯 仅适用于DeepSpeed和单进程配置 |
3 硬件选择参数
--cpu | 是否强制在CPU上进行训练 |
--multi_gpu | 是否应该启动分布式GPU训练 |
--tpu | 是否应该启动TPU训练 |
--ipex | 是否应该启动Intel Pytorch Extension (IPEX)训练 |
4 资源选择参数
--mixed_precision | {no,fp16,bf16} 是否使用混合精度训练。
|
--num_processes NUM_PROCESSES | 并行启动的进程总数 |
--num_machines NUM_MACHINES | 此训练中使用的机器总数 |
--num_cpu_threads_per_process NUM_CPU_THREADS_PER_PROCESS | 每个进程的CPU线程数。 可以调整以获得最佳性能。 |
5 训练范式参数
--use_deepspeed | 是否使用DeepSpeed进行训练 |
--use_fsdp | 是否使用FullyShardedDataParallel进行训练 |
--use_megatron_lm | 是否使用Megatron-LM进行训练 |
--use_xpu | 是否使用IPEX插件在XPU上特别加速训练 |
6 分布式GPU参数
仅在传递multi_gpu或通过accelerate配置配置了多GPU训练时有用
--gpu_ids | 在此机器上用于训练的GPU ID,用逗号分隔列表 |
--same_network | 所有用于多节点训练的机器是否存在于同一个本地网络上。 |
--machine_rank MACHINE_RANK | 启动此脚本的机器的排名 |
--main_process_ip MAIN_PROCESS_IP | 排名第0的机器的IP地址。 |
--main_process_port MAIN_PROCESS_PORT | 用于与排名第0的机器通信的端口。 |
-rdzv_backend (str) | 使用的集结方法,如“static”或“c10d” |
--rdzv_conf (str) | 额外的集结配置(<key1>=<value1>,<key2>=<value2>,…) |
--max_restarts (int) | 在失败前工作组重启的最大次数。 |
--monitor_interval (float) | 以秒为单位,监控工作状态的间隔。 |
7 TPU参数
仅在传递 tpu 或通过 accelerate 配置进行 TPU 训练时有用
--main_training_function MAIN_TRAINING_FUNCTION | 要在脚本中执行的主函数的名称。 |
--downcast_bf16 | 当在TPU上使用bf16精度时,是否将float和double张量都转换为bfloat16,或者double张量保持为float32。 |
8 DeepSpeed 参数
仅在传递 use_deepspeed 或通过 accelerate 配置配置了 deepspeed 时有用
--deepspeed_config_file | DeepSpeed配置文件 |
--zero_stage | DeepSpeed的ZeRO优化阶段 |
--offload_optimizer_device | 决定在哪里(none|cpu|nvme)卸载优化器状态 |
--offload_param_device | 决定在哪里(none|cpu|nvme)卸载参数 |
--gradient_accumulation_steps | 在训练脚本中使用的梯度累积步数。 |
--gradient_clipping | 训练脚本中使用的梯度裁剪值。 |
--zero3_init_flag | 决定是否启用 deepspeed.zero.Init 来构建大型模型。 仅适用于DeepSpeed ZeRO Stage-3 |
--zero3_save_16bit_model | 决定在使用ZeRO Stage-3时是否保存16位模型权重。 仅适用于DeepSpeed ZeRO Stage-3。 |
--deepspeed_hostfile | 用于配置多节点计算资源的DeepSpeed主机文件 |
--deepspeed_exclusion_filter | 使用多节点设置时的DeepSpeed排除过滤器字符串 |
--deepspeed_inclusion_filter | --deepspeed_inclusion_filter |
--deepspeed_multinode_launcher | 使用的DeepSpeed多节点启动器 |
9 完全分片数据并行参数(FSDP)
以下参数仅在传递 use_fsdp 或通过 accelerate 配置配置了完全分片数据并行(Fully Sharded Data Parallelism, FSDP)时有用
--fsdp_offload_params | 决定是否(true|false)将参数和梯度卸载到CPU |
--fsdp_min_num_params | FSDP的默认自动包装的最小参数数量 |
--fsdp_sharding_strategy | FSDP的分片策略 |
--fsdp_auto_wrap_policy | FSDP的自动包装策略 |
--fsdp_transformer_layer_cls_to_wrap | 要包装的Transformer层类名(区分大小写),例如 BertLayer, GPTJBlock, T5Block 等 |
--fsdp_backward_prefetch_policy | FSDP的后向预取策略 |
--fsdp_state_dict_type | FSDP的状态字典类型 |
--fsdp_forward_prefetch | FSDP的前向预取 |
--fsdp_use_orig_params | 如果为真,允许在FSDP单元中混入非均匀的requires_grad |
--fsdp_cpu_ram_efficient_loading | 如果为真,只有第一个进程加载预训练的模型检查点,而所有其他进程的权重为空。 使用此功能时,需要设置 --fsdp_sync_module_states 为真 |
--fsdp_sync_module_states | 如果为真,每个独立包装的FSDP单元将从0级广播模块参数 |
10 Megatron-LM 参数
以下参数仅在传递 use_megatron_lm 或通过 accelerate 配置配置了 Megatron-LM 时有用
--megatron_lm_tp_degree | Megatron-LM的张量并行度(TP degree) |
--megatron_lm_pp_degree | Megatron-LM的流水线并行度(PP degree) |
--megatron_lm_num_micro_batches | 当PP度大于1时,Megatron-LM的微批次数量 |
--megatron_lm_sequence_parallelism | 决定是否(true|false)在TP度大于1时启用序列并行 |
--megatron_lm_recompute_activations | 决定是否(true|false)启用选择性激活重计算 |
--megatron_lm_use_distributed_optimizer | 决定是否(true|false)使用分布式优化器,该优化器在数据并行(DP)等级间分片优化器状态和梯度 |
--megatron_lm_gradient_clipping | 基于全局L2范数的Megatron-LM的梯度裁剪值(0为禁用) |
11 AWS SageMaker 参数
以下参数仅在SageMaker训练时有用
--aws_access_key_id AWS_ACCESS_KEY_ID | 用于启动Amazon SageMaker训练工作的AWS_ACCESS_KEY_ID |
--aws_secret_access_key AWS_SECRET_ACCESS_KEY | 用于启动Amazon SageMaker训练工作的AWS_SECRET_ACCESS_KEY |