使用DeepSpeed进行多机多卡训练模型

在 DeepSpeed 中进行多机多卡训练时,需要进行以下几方面的配置和设置:

1. 设置主节点和节点之间的通信

为了使各节点(机器)能够相互通信,你需要设置主节点的地址和端口。DeepSpeed 使用 torch.distributed 进行进程间通信,因此要确保以下环境变量配置正确:

  • 主节点地址和端口:使用 MASTER_ADDRMASTER_PORT 环境变量指定主节点的 IP 和端口号。假设主节点 IP 为 192.168.1.1,可以这样设置:
export MASTER_ADDR=192.168.1.1
export MASTER_PORT=29500
  • 总节点数和 GPU 数量:通过 WORLD_SIZE 变量定义所有节点的 GPU 总数量。例如,有 2 台机器,每台有 4 张 GPU,那么 WORLD_SIZE 应设为 8:
export WORLD_SIZE=8

2. 启动主节点和从节点

在主节点和从节点上分别启动训练进程。主节点使用 deepspeed 启动脚本,而从节点使用 deepspeed --hostfiledeepspeed.launcher 启动进程。

例如,在主节点上运行:

deepspeed --num_gpus=4 train.py

在从节点上运行以下命令:

deepspeed --num_gpus=4 --master_addr=192.168.1.1 --master_port=29500 --node_rank=1 train.py

其中,node_rank 区分主节点和从节点;master_addrmaster_port 需要与主节点一致。

3. 代码调整

代码方面的调整较少,DeepSpeed 会自动处理多机分布式训练。确保在 deepspeed.initialize() 中正确配置参数:

model_engine, optimizer, _, _ = deepspeed.initialize(
    model=model,
    optimizer=optimizer,
    config=ds_config
)

ds_config 中可根据多机多卡环境调整批量大小、梯度累积等超参数,DeepSpeed 会自动管理训练过程。

4. 使用 hostfile 文件(可选)

多机训练时可以用一个 hostfile 文件列出所有节点的主机名和 GPU 数量,例如:

192.168.1.1 slots=4
192.168.1.2 slots=4

然后指定使用该文件:

deepspeed --hostfile=hostfile train.py

5. DeepSpeed 配置文件设置

ds_config 配置文件中,不需特别调整机器数量相关的配置,主要是根据训练环境进行优化。例如:

{
  "train_batch_size": 32,
  "gradient_accumulation_steps": 1,
  "fp16": {
    "enabled": true
  },
  "zero_optimization": {
    "stage": 2,
    "contiguous_gradients": true,
    "reduce_scatter": true,
    "overlap_comm": true
  }
}

6. 启动命令汇总

假设有 2 台机器,每台 4 张 GPU,启动步骤如下:

  • 主节点
deepspeed --num_gpus=4 train.py
  • 从节点
deepspeed --num_gpus=4 --master_addr=192.168.1.1 --master_port=29500 --node_rank=1 train.py

完成这些步骤即可启动多机多卡训练。

### 使用 DeepSpeed 进行单训练 ChatGLM 模型 #### 配置文件设置 对于使用 DeepSpeed 训练大型语言模型(LLMs),配置文件至关重要。通常情况下,DeepSpeed 的配置通过 JSON 文件指定。下面是一个适用于 ChatGLM 模型的典型 DeepSpeed 配置文件 `ds_config.json`: ```json { "fp16": { "enabled": true, "loss_scale": 0, "initial_scale_power": 32, "loss_scale_window": 1000, "hysteresis": 2, "min_loss_scale": 1 }, "optimizer": { "type": "AdamW", "params": { "lr": 5e-5, "betas": [0.9, 0.999], "eps": 1e-8, "weight_decay": 0.01 } }, "scheduler": { "type": "WarmupLR", "params": { "warmup_min_lr": 0, "warmup_max_lr": 5e-5, "warmup_num_steps": 500 } }, "zero_optimization": { "stage": 2, "allgather_partitions": true, "allgather_bucket_size": 2e8, "reduce_scatter": true, "reduce_bucket_size": 2e8, "overlap_comm": true, "load_from_fp32_weights": true, "cpu_offload": false }, "gradient_accumulation_steps": 1, "steps_per_print": 2000, "wall_clock_breakdown": false } ``` 此配置启用了 FP16 和 ZeRO stage 2 来优化内存效率和加速训练过程[^1]。 #### 启动命令 要利用 DeepSpeed 执行单训练,可以采用如下 bash 脚本启动训练任务。假设已经准备好了上述提到的 `ds_config.json` 文件以及必要的 Python 环境,则可以通过以下方式启动训练: ```bash #!/bin/bash set -ex export PYTHONPATH=$PYTHONPATH:/path/to/your/project/ export DEEPSPEED=1 torchrun \ --nnodes=1 \ --nproc_per_node=4 \ # 假设每台器有四个 GPU 可用 /path/to/fine_tune.py \ --deepspeed \ --deepspeed_config=/path/to/ds_config.json \ --model_name_or_path=chatglm-model-path \ --output_dir=output_directory \ --train_file=train_data_path \ --validation_file=val_data_path \ --do_train \ --per_device_train_batch_size=4 \ --learning_rate=5e-5 \ --num_train_epochs=3 \ --save_strategy="epoch" ``` 这段脚本同样遵循了良好的实践习惯,在遇到错误时会自动终止,并且显示执行过的每一行命令以便于调试[^3]。 #### 常见问题解决方法 当尝试使用 DeepSpeed 对 LLM 如 ChatGLM 进行微调时可能会碰到一些挑战或障碍。以下是几个常见的解决方案: - **显存不足**:如果发现显存在训练过程中耗尽,考虑调整 batch size 或者启用更高级别的 Zero Redundancy Optimizer (ZeRO),即增加 `"zero_optimization.stage"` 参数至更高的数值。 - **性能瓶颈**:若观察到 I/O 成为性能瓶颈,可探索异步加载数据集的方法或是提高读取速度的数据预处理技术;另外也可以适当减少日志记录频率以减轻磁盘压力。 - **通信延迟过高**:针对跨个 GPU 协同工作的场景下可能出现较高的网络通讯开销问题,建议检查集群内部网路状况确保其稳定高效运作的同时合理规划节点间连接拓扑结构。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Coder小谢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值