自然语言处理: 第九章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>好的,用户想了解本地部署大语言模型的相关内容。首先,我需要明确本地部署的定义,然后解释为什么有人会选择这样做。接下来,应该分步骤说明部署的基本流程,可能涉及到的工具和技术,比如Hugging Face的Transformers库、Llama.cpp等。还要考虑硬件需求,比如GPU和内存的要求,以及可能遇到的挑战,比如模型优化和资源限制。同时,用户可能需要一些实际案例或推荐模型,比如Llama 2、Falcon等。需要确保语言通俗易懂,结构清晰,逐步引导用户理解整个过程。另外,要提醒用户注意数据隐私、成本和技术门槛等问题。最后,总结本地部署的优缺点,帮助用户做出决策。</think>本地部署大语言模型是指将大型语言模型(如Llama 2、Falcon、ChatGLM等)部署在用户自己的服务器或计算机上运行,而非通过API调用云端服务。以下是分步说明: ### 一、为什么要本地部署? 1. **数据隐私**:敏感数据无需上传第三方 2. **定制化**:可对模型进行微调(fine-tuning) 3. **成本控制**:长期使用可能比API调用更经济 4. **离线使用**:无需依赖网络连接 ### 二、部署流程(以7B参数模型为例) ```mermaid graph TD A[硬件准备] --> B[模型选择] B --> C[环境配置] C --> D[模型量化] D --> E[推理部署] ``` #### 1. 硬件准备 - **最低配置**: - CPU:支持AVX2指令集的x86架构(如Intel i5十代+) - 内存:16GB+(7B模型需8-12GB) - **推荐配置**: - GPU:NVIDIA RTX 3090/4090(24GB显存) - 内存:32GB DDR4 - 存储:NVMe SSD(模型文件通常20-40GB) #### 2. 模型选择 | 模型名称 | 参数量 | 最低显存 | 量化版大小 | |----------------|--------|----------|------------| | Llama 2 | 7B | 10GB | 3.8GB | | Falcon | 7B | 9.5GB | 3.6GB | | ChatGLM3 | 6B | 8GB | 3.2GB | #### 3. 环境配置(以Llama.cpp为例) ```bash # 安装基础依赖 sudo apt-get install build-essential libopenblas-dev # 克隆仓库 git clone https://github.com/ggerganov/llama.cpp cd llama.cpp && make # 转换模型格式(需原始PyTorch模型) python3 convert.py --input-model /path/to/model --output-type gguf ``` #### 4. 模型量化(降低资源占用) 使用4-bit量化可减少75%内存占用: $$ \text{原始大小} \times \frac{\text{bit数}}{32} = \text{量化后大小} $$ 例如:7B模型(FP32约26GB)经4-bit量化后约3.8GB #### 5. 启动推理服务 ```python from transformers import AutoModelForCausalLM, AutoTokenizer model = AutoModelForCausalLM.from_pretrained( "meta-llama/Llama-2-7b-chat-hf", device_map="auto", load_in_4bit=True ) tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-2-7b-chat-hf") inputs = tokenizer("北京的首都是", return_tensors="pt").to("cuda") outputs = model.generate(**inputs, max_new_tokens=50) print(tokenizer.decode(outputs[0])) ``` ### 三、关键技术 1. **量化方法**: - GPTQ(GPU优化) - GGUF(CPU优化) 2. **推理加速**: - CUDA(NVIDIA GPU) - Metal(Apple Silicon) - OpenBLAS(CPU加速) ### 四、典型应用场景 1. 企业内部知识库问答 2. 医疗数据隐私分析 3. 工业文档智能检索 4. 法律文书自动生成 ### 五、挑战与解决方案 | 挑战 | 解决方案 | |---------------------|-----------------------------| | 显存不足 | 模型量化+CPU卸载 | | 推理速度慢 | 使用CUDA核心优化 | | 微调困难 | 采用LoRA低秩适配技术 | | 知识更新滞后 | RAG检索增强生成 | ### 六、推荐工具链 1. **推理框架**: - llama.cpp - text-generation-webui 2. **微调工具**: - PEFT(参数高效微调) - DeepSpeed 3. **硬件方案**: - 单卡方案:RTX 4090 - 多卡方案:2xRTX 3090(NVLink连接) ### 七、性能指标参考 在Intel i9-13900K + RTX 4090环境下: ``` Llama 2-7B(4-bit量化): - 生成速度:25 token/s - 内存占用:5.8GB - 显存占用:4.2GB ``` 本地部署需要权衡硬件成本与技术门槛,对于有数据隐私要求或长期使用需求的企业,这是值得投入的解决方案。建议从小规模模型开始实践,逐步掌握模型优化和部署技巧。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

曼城周杰伦

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

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

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

打赏作者

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

抵扣说明:

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

余额充值