DeepSpeed-Chat训练整理

DeepSpeed-Chat训练整理

核心参考:七月大模型线上营的《第3课补充文档:如何把微软DSC项目的代码给run起来》1


下述内容中所提及的/mnt/workspace/xxx皆为自定义的路径,请注意甄别并自行替换为相关路径,切莫直接照抄使用。

1.环境准备阶段

1.1硬件环境

  • Linux系统
  • 显存24G2

1.2准备软件环境

  • 创建虚拟环境
# 创建conda虚拟环境 
conda create -n dsc python=3.10 pip 

# 激活虚拟环境 
conda activate dsc
  • 拉取仓库
# 进入用于存储源码的目录 
cd /mnt/workspace/sources_dir 
# 拉取DeepSpeed-Chat仓库(gitcode国内加速)
git clone https://gitcode.com/microsoft/DeepSpeedExamples.git -b master
# 进入DeepSpeedExamples目录
cd DeepSpeedExamples
# 检出指定版本 代码版本时间为2023-12-12,防止因代码改动导致无法部署的情况
git reset --hard dd0f181bad814e5c8cb57e38620e766eccba79bf
  • 安装依赖3
# 进入仓库目录
cd applications/DeepSpeed-Chat/ 
# 单独安装torch和deepspeed,使用requirements.txt安装可能会因为源问题导致安装失败 
# pip install torch torchvision torchaudio 
# pip install deepspeed
# 安装其他必要库  
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
# 对整体进行setup 
pip install -e . 

2.获取模型文件及数据集

  • 安装huggingface_hub
# 安装huggingface_hub
pip install -U huggingface_hub -i https://pypi.tuna.tsinghua.edu.cn/simple
# 配置全局环境变量,需要root权限
# sudo sh -c "echo 'HF_ENDPOINT=https://hf-mirror.com' >> /etc/environment"
# source /etc/environment
# 环境变量(当前shell会话或子shell进程的环境变量)
export HF_ENDPOINT=https://hf-mirror.com
  • 下载模型
# 进入用于存储模型文件的目录 
cd /mnt/workspace/models_dir 
# 获取opt-350m 
huggingface-cli download --resume-download facebook/opt-350m  --local-dir opt-350m
# 获取opt-125m 
huggingface-cli download --resume-download facebook/opt-125m  --local-dir opt-125m  
## 进入opt-350m模型和opt-125m的目录,以opt-350为例
cd opt-350m
## 手动将config.json文件中的_name_or_path属性由opt-350m改为/mnt/workspace/models_dir/opt-350m(模型绝对路径) 

在这里插入图片描述

  • 下载数据集
# 进入用于存储数据集的目录
cd /mnt/workspace/datasets_dir
# 下载rm-static数据集
huggingface-cli download --repo-type dataset --resume-download Dahoas/rm-static --local-dir rm-static
  • 数据集格式处理(需要写一个简单的程序处理一下数据集)
pip install datasets -i https://pypi.tuna.tsinghua.edu.cn/simple 
# 导入datasets库,这是一个用于处理和分析数据的库
import datasets

# 定义训练数据集的文件路径
train_file = "/mnt/workspace/datasets_dir/rm-static/data/train-00000-of-00001-2a1df75c6bce91ab.parquet"

# 定义测试数据集的文件路径
test_file = "/mnt/workspace/datasets_dir/rm-static/data/test-00000-of-00001-8c7c51afc6d45980.parquet"

# 将训练和测试数据集的文件路径存储在一个字典中
data_files = {
    "train": train_file,
    "test": test_file
}

# 使用datasets库的load_dataset函数,将Parquet格式的数据集加载到内存中
dataset = datasets.load_dataset("parquet", data_files=data_files)

# 将加载的数据集保存到指定的磁盘路径中,数据集的格式为Arrow
dataset.save_to_disk("/mnt/workspace/datasets_dir/Dahoas/rm-static-data")

3.运行训练

3.1 step1训练 基于opt-350m训练SFT Model

  • 进入step1目录
cd /mnt/workspace/sources_dir/DeepSpeedExamples/applications/DeepSpeed-Chat/training/step1_supervised_finetuning
  • 编写bash文件以启动第1阶段训练(run_sft.sh)4
#!/bin/bash
# Copyright (c) Microsoft Corporation.
# SPDX-License-Identifier: Apache-2.0
# DeepSpeed Team

# 定义并创建checkpoint等文件的输出目录
OUTPUT_PATH=/mnt/workspace/output/step1
mkdir -p $OUTPUT_PATH

# 执行训练
deepspeed --num_gpus 1 main.py \
    --data_path /mnt/workspace/datasets_dir/Dahoas/rm-static-data \
    --model_name_or_path /mnt/workspace/models_dir/opt-350m \
    --per_device_train_batch_size 4 \
    --per_device_eval_batch_size 4 \
    --max_seq_len 512 \
    --learning_rate 1e-3 \
    --weight_decay 0. \
    --num_train_epochs 3 \
    --gradient_accumulation_steps 16 \
    --lr_scheduler_type cosine \
    --num_warmup_steps 0 \
    --seed 42 \
    --zero_stage 0 \
    --lora_dim 64 \
    --lora_module_name decoder.layers. \
    --deepspeed \
    --output_dir $OUTPUT_PATH 
  • 开始训练
bash run_sft.sh

3.2 step2训练 基于opt-125m训练Reward Model

  • 进入step2目录
cd /mnt/workspace/sources_dir/DeepSpeedExamples/applications/DeepSpeed-Chat/training/step2_reward_model_finetuning
  • 编写bash文件以启动第2阶段训练(run_rm.sh)4
#!/bin/bash 
# Copyright (c) Microsoft Corporation 
# SPDX-License-Identifier: Apache-2.0 

# 定义并创建checkpoint等文件的输出目录
OUTPUT_PATH=/mnt/workspace/output/step2
mkdir -p $OUTPUT_PATH

# 执行训练 
deepspeed --num_gpus 1 main.py \
    --data_path /mnt/workspace/datasets_dir/Dahoas/rm-static-data \
    --model_name_or_path /mnt/workspace/models_dir/opt-125m \
    --weight_decay 0.1 \
    --dropout 0.0 \
    --gradient_accumulation_steps 4 \
    --zero_stage 0 \
    --deepspeed \
    --output_dir $OUTPUT_PATH 
  • 开始训练
bash run_rm.sh

3.3 step3训练

  • 进入step3目录
cd /mnt/workspace/sources_dir/DeepSpeedExamples/applications/DeepSpeed-Chat/training/step3_rlhf_finetuning
  • 编写bash文件以启动第3阶段训练(run_ppo.sh)4
    基于已经微调过的opt-350m(actor)与opt-125m(critic)进行PPO训练。
#!/bin/bash
# Copyright (c) Microsoft Corporation.
# SPDX-License-Identifier: Apache-2.0
# DeepSpeed Team

# 定义并创建checkpoint等文件的输出目录
OUTPUT_PATH=/mnt/workspace/output/step3
mkdir -p $OUTPUT_PATH

# 执行训练
deepspeed --num_gpus 1 main.py \
    --data_path /mnt/workspace/datasets_dir/Dahoas/rm-static-data \
    --actor_model_name_or_path /mnt/workspace/output/step1 \
    --critic_model_name_or_path /mnt/workspace/output/step2 \
    --per_device_generation_batch_size 4 \
    --per_device_training_batch_size 4 \
    --generation_batches 1 \
    --ppo_epochs 1 \
    --max_answer_seq_len 256 \
    --max_prompt_seq_len 256 \
    --actor_learning_rate 5e-4 \
    --critic_learning_rate 5e-6 \
    --num_train_epochs 1 \
    --lr_scheduler_type cosine \
    --gradient_accumulation_steps 16 \
    --num_warmup_steps 100 \
    --deepspeed \
    --seed 42 \
    --actor_zero_stage 0 \
    --critic_zero_stage 0 \
    --actor_lora_dim 64 \
    --actor_dropout 0.0 \
    --enable_hybrid_engine \
    --output_dir $OUTPUT_PATH
  • 开始训练 (预计需要训练3个小时左右)
bash run_ppo.sh

对话测试5

以上训练结束后,就可以导入各阶段的模型进行对话了,比如用step 3保存的模型进行对话。

cd DeepSpeedExamples/applications/DeepSpeed-Chat
python chat.py --path /mnt/workspace/output/step3 --max_new_tokens 512

常见问题

报错提示带有tokenizer、hub等词⼤致原因是DSC的源码中有提及从本地加载tokenizer可能会存在⼀些问题,特意定义了从 huggingface hub上加载tokenizer而非从本地的模型⽂件中加载,但由于访问限制等网络原因, 未能成功从huggingface hub中获取到tokenizer,因此出现相关报错,可尝试如下3种解决方法。

  1. 查看是否开启代理,必要时在相应的main.py⽂件中写⼊如下述代码显式设置proxy来声明代理

    # 代理地址形如 http://127.0.0.1:xxxx
    os.environ["http_proxy"] = {代理地址}
    os.environ["https_proxy"] = {代理地址} 
    
  2. 直接修改源码,实现从本地模型⽂件中获取tokenizer。

# /mnt/workspace/DeepSpeedExamples/applications/DeepSpeed-Chat/dschat/utils/utils.py
def load_hf_tokenizer(model_name_or_path,
                      fast_tokenizer=True,
                      add_special_tokens=None):
    if os.path.exists(model_name_or_path):
        # Locally tokenizer loading has some issue, so we need to force download
        ...
        if os.path.exists(model_json):
            ...
            tokenizer = get_tokenizer(model_name_or_path,
                                      fast_tokenizer=fast_tokenizer)
    else:
        ...

    if add_special_tokens is not None:
        ...

    return tokenizer
  1. 教程中使用的方法,修改模型的config.json文件中的将config.json文件中的_name_or_path属性由opt-350m改为/mnt/workspace/models_dir/opt-350m(模型绝对路径)

  1. 《七月在线大模型项目开发线上营 [实战审稿GPT/RAG/AI Agent等六大商用落地项目]》 ↩︎

  2. 阿里云免费领取3个月GPU的使用额度 ↩︎

  3. pip国内镜像源-Python安装第三方库(一篇足以、都是干货,内含快捷方法) ↩︎

  4. 传参列表 ↩︎ ↩︎ ↩︎

  5. DeepSpeed-Chat全流程训练实战 ↩︎

  • 11
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值