自然语言处理: 第九章DeepSpeed的实践

本文介绍了DeepSpeed的RLHF模块,一个端到端的深度学习框架,用于简化大规模训练和推理。它包括监督微调、奖励模型微调和RLHF训练,以及EMA和混合训练技术,旨在提升模型质量和预训练性能。同时,DeepSpeed支持多数据集训练和多种部署选项,如单GPU和多节点训练。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

理论基础

仓库链接: microsoft/DeepSpeed: DeepSpeed is a deep learning optimization library that makes distributed training and inference easy, efficient, and effective.

DeepSpees正如它官网介绍的一样,它为深度学习模型提供了一站式的快速以及大规模的训练及推理框架,能在尽可能利用你手中的算力去作深度学习的应用

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jy4c1ZHS-1691735368213)(image/09_DeepSpeed/1691662528184.png)]




而本次主要介绍的是它在4月份发布的一站式的端到端的RLHF板块,如同其主页介绍一样,整合了一个B2B的训练流程如下图:

  • 步骤1:监督微调(SFT) —— 使用精选的人类回答来微调预训练的语言模型以应对各种查询;
  • 步骤2:奖励模型微调 —— 使用一个包含人类对同一查询的多个答案打分的数据集来训练一个独立的(通常比 SFT 小的)奖励模型(RW);
  • 步骤3:RLHF 训练 —— 利用PPO算法,根据 RW 模型的奖励反馈进一步微调 SFT 模型。

在步骤3中,我们提供了两个额外的功能,以帮助提高模型质量:

  • 指数移动平均(EMA) —— 可以选择基于 EMA 的检查点进行最终评估, 详情可以参考:【炼丹技巧】指数移动平均(EMA)
  • 混合训练 —— 将预训练目标(即下一个单词预测)与 PPO 目标混合,以防止在像 SQuAD2.0 这样的公开基准测试中的性能损失

这两个训练功能,EMA 和混合训练,常常被其他的开源框架所忽略,因为它们并不会妨碍训练的进行。然而,根据 InstructGPT,EMA 通常比传统的最终训练模型提供更好的响应质量,而混合训练可以帮助模型保持预训练基准解决能力。因此,我们为用户提供这些功能,以便充分获得 InstructGPT 中描述的训练体验,并争取更高的模型质量。

除了与 InstructGPT 论文高度一致外,我们还提供了一项方便的功能,以支持研究人员和从业者使用多个数据资源训练他们自己的 RLHF 模型:

  • 数据抽象和混合能力 : DeepSpeed-Chat 能够使用多个不同来源的数据集训练模型以获得更好的模型质量。它配备了(1)一个抽象数据集层,以统一不同数据集的格式;以及(2)数据拆分/混合功能,以便多个数据集在 3 个训练阶段中被适当地混合然后拆分。

在我们之前的章节中,你可以看到使用整个 DeepSpeed-Chat 训练模型在多轮对话中的表现。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tr8QWSPD-1691735368215)(image/09_DeepSpeed/1691732870229.png)]




整体Deepspeed 框架主要作用除了上文说的端到端,其实还实现了高效性和经济性,其在消费端的显卡就能进行自己的RLHF训练。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oVCkLLVv-1691735368215)(image/09_DeepSpeed/1691733927697.png)]



运行

安装



训练

如果你只拥有一个消费级的显卡, 你可以尝试下训练一个13b参数的OPT,大约需要两个小时左右

python train.py --actor-model facebook/opt-1.3b --reward-model facebook/opt-350m --deployment-type single_gpu

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1gBk1wkN-1691735368216)(image/09_DeepSpeed/1691734960987.png)]

如果你拥有强大的算力群, 你可以尝试下训练一个660b参数的OPT,大约需要9小时左右

python train.py --actor-model facebook/opt-66b --reward-model facebook/opt-350m --deployment-type multi_node

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eJocDNWt-1691735368217)(image/09_DeepSpeed/1691735259164.png)]

同样微软提供了自定义的API 可以自己定义训练流程:


engine = DeepSpeedRLHFEngine(
  actor_model_name_or_path=args.actor_model_name_or_path,
  critic_model_name_or_path=args.critic_model_name_or_path,
  tokenizer=tokenizer,
  num_total_iters=num_total_iters,
  args=args)

trainer = DeepSpeedPPOTrainer(engine=engine, args=args)

for prompt_batch in prompt_train_dataloader:
  out = trainer.generate_experience(prompt_batch)
  actor_loss, critic_loss = trainer.train_rlhf(out)

推理

将训练好的模型导入提供的简易 API,你不仅可以与模型进行问答互动,还可以进行对话式交流。

Human:        Do you know Microsoft?
Assistant:    Yes, I’m a big fan of Microsoft.  What about them?
Human:        Can you explain it to a 6-year old child? I wonder how I should describe it
Assistant:    Sure, I can try.  Microsoft is a company that makes computers, and they make a program called “Windows” which
              is the operating system that runs on the computer. It’s like the “brain” of the computer.  It’s where all the
              programs and files are stored. It’s also where you’ll find the “start” button, which is where you’ll start to
              use the computer.
<think>好的,我现在需要帮助用户分析他们提供的日志信息,特别是关于“DEBUG No ElasicPolicy or Metric is specified, skipping HPA reconciling process”这条日志。首先,用户之前已经询问过类似的问题,并且得到了详细的解答,现在可能是在进一步确认或者需要更简洁的解释。 首先,我需要确认用户的需求。用户可能是在使用Kubernetes运行PyTorch作业时遇到了问题,特别是关于HPA(Horizontal Pod Autoscaler)无法正常工作的情况。用户提供的日志显示,系统跳过了HPA的协调过程,因为没有指定ElasticPolicy或Metric。用户可能想知道为什么会发生这种情况,以及如何解决。 接下来,我要回顾之前的回答。之前的分析分为日志背景、关键日志解析和解决方案建议。用户现在可能希望得到更直接的答案,不需要重复整个结构。此外,用户可能希望明确问题原因和解决步骤,以及如何验证是否解决。 需要注意用户可能的深层需求:他们可能在配置PyTorchJob时遇到了困难,尤其是在弹性伸缩方面,或者集群的HPA相关组件没有正确设置。用户可能不太熟悉Kubernetes的HPA配置,或者遇到了拼写错误(比如ElasicPolicy可能是ElasticPolicy的拼写错误),这也需要指出。 此外,用户提供的日志中有拼写错误“ElasicPolicy”,正确的应该是“ElasticPolicy”。这可能是一个关键点,需要提醒用户检查他们的配置文件是否有拼写错误,导致系统无法识别策略。 在解决方案部分,需要分步骤说明如何添加ElasticPolicy,如何配置Metrics,以及如何验证HPA是否生效。同时,需要建议用户检查集群的HPA支持组件,如Metrics Server是否安装,或者Prometheus Adapter是否配置正确。 最后,总结时需要强调检查拼写错误、正确配置策略和指标,以及确保集群支持HPA的必要条件。用户可能需要具体的YAML示例和命令来验证,所以提供这些会更有帮助。 确保回答简洁明了,结构清晰,避免技术术语过于复杂,同时覆盖所有可能的问题点。还要注意用户可能是在测试或模拟环境中,时间戳显示2025年,可能需要提醒用户检查环境配置是否正确。</think>以下是针对日志 `DEBUG No ElasicPolicy or Metric is specified, skipping HPA reconciling process` 的解析和解决方案: --- ### **问题定位** 这条日志表明:**Kubernetes 集群在协调 PyTorch Job(`pytorch-deepspeed-demo`)时,跳过了 HPA(Horizontal Pod Autoscaler)的自动伸缩流程**,原因是未配置弹性策略(`ElasticPolicy`)或监控指标(`Metric`)。 --- ### **核心原因** 1. **`ElasticPolicy` 缺失** - 在 PyTorchJob 的定义(YAML 文件)中,未声明弹性伸缩策略(例如最小/最大副本数、触发伸缩的指标阈值等)。 - 可能存在的拼写错误:日志中 `ElasicPolicy` 应为 `ElasticPolicy`(少了一个 `t`),需检查配置文件中字段名称是否正确。 2. **未定义监控指标** - HPA 需要依赖指标(如 CPU/内存利用率、自定义 Prometheus 指标等)来决定是否扩缩容。 - 如果未指定 `metrics` 字段,HPA 将无法获取任何指标数据,直接跳过协调过程。 3. **HPA 组件未启用** - 集群未安装 HPA 依赖的组件(如 Metrics Server、Prometheus Adapter),导致无法收集指标。 --- ### **解决方案** #### 步骤 1:检查 PyTorchJob 的配置 在 YAML 文件中添加 `elasticPolicy` 字段并定义指标。例如: ```yaml apiVersion: kubeflow.org/v1 kind: PyTorchJob metadata: name: pytorch-deepspeed-demo spec: elasticPolicy: # 注意字段名称是否拼写正确 minReplicas: 1 maxReplicas: 4 metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 80 # 当 CPU 利用率超过 80% 时触发扩容 ``` #### 步骤 2:验证集群的 HPA 支持 - 检查 Metrics Server 是否运行: ```bash kubectl get pods -n kube-system | grep metrics-server ``` - 若未安装,部署 Metrics Server: ```bash kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml ``` #### 步骤 3:确认 HPA 是否生效 - 查看 HPA 状态: ```bash kubectl get hpa -n <namespace> ``` - 检查 HPA 事件: ```bash kubectl describe hpa <hpa-name> -n <namespace> ``` --- ### **附加说明** - **关于 `ElasticPolicy` 的适用场景** PyTorchJob 的弹性伸缩通常用于分布式训练场景(如动态调整 Worker 数量)。需确保训练框架(如 DeepSpeed)支持弹性训练逻辑。 - **自定义指标配置** 若需使用非 CPU/内存的指标(如 GPU 利用率、训练批次速度),需通过 Prometheus Adapter 提供自定义指标,并在 `metrics` 字段中指定。 --- ### **总结** 这条日志的核心问题是 **HPA 配置缺失**,需在 PyTorchJob 中明确声明 `elasticPolicy` 和 `metrics`,并确保集群支持指标收集。如果配置正确但仍报错,需检查字段拼写和组件状态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

曼城周杰伦

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

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

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

打赏作者

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

抵扣说明:

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

余额充值