-
Notifications
You must be signed in to change notification settings - Fork 207
Open
Description
问题描述:
使用DPO强化学习qwen80Bnext模型,单机8卡H100.报错
详细描述:
1、使用官方的镜像构建的新的镜像
FROM roll-registry.cn-hangzhou.cr.aliyuncs.com/roll/pytorch:nvcr-25.06-py3-torch280-vllm0110
RUN git clone https://github.com/alibaba/ROLL.git /app/ROLL
RUN cd /app/ROLL && \
pip install -r requirements_torch280_vllm.txt
2、修改了部分代码,主要是我构造的数据集是inst和input都有,我看了一下源码他只使用了inst,所以我简单修改了一下,我认为这个应该影响不大
def get_encode_function_with_input(template_name, tokenizer, input_key, chosen_key, rejected_key):
chat_template_func = get_chat_template(template_name, tokenizer)
def build_conversation(instruction: str, inpu: str, response: str = None):
conversation = [
{"role": 'system', "content": instruction},
{"role": "user", "content": inpu},
]
if response is not None:
conversation.append({"role": "assistant", "content": response})
return conversation
3、使用k8s部署的项目
FROM nexus.metazh.cn:8088/sumu_dpo:0.0.1
LABEL authors="sumu" name="qwen80b-dpo"
RUN useradd coder
WORKDIR /app
COPY . .
RUN pip install -e ./ROLL
RUN chmod +x start.sh # 确保脚本有执行权限
ENTRYPOINT []
CMD ["./start.sh"]
4、sh启动命令内容如下
export CUDA_DISABLE_CONTROL=True
export PYTORCH_ALLOC_CONF=expandable_segments:True
export nproc_per_node=8
export CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7
export NPROC_PER_NODE=$nproc_per_node
set +x
# 获取当前文件所在路径
CONFIG_PATH=$(basename $(dirname $0))/qwen3-next-80BA3B-dpo_megatron
# 两个参数
# config_path为配置文件所在路径
# config_name为配置文件的名字,不带后缀名
python ROLL/examples/start_dpo_pipeline.py --config_path $CONFIG_PATH --config_name dpo_config
5、运行的参数如下
# ============================================================================
# 默认配置项
# 使用Hydra的多配置覆盖功能,集成多种DeepSpeed ZeRO优化策略
# 注意:实际生效的配置由命令行参数或后续覆盖决定
# ============================================================================
defaults:
- ../config/deepspeed_zero@_here_ # DeepSpeed ZeRO-0: 不使用分区优化(显存占用最大)
- ../config/deepspeed_zero2@_here_ # DeepSpeed ZeRO-2: 分区优化器状态和梯度
- ../config/deepspeed_zero3@_here_ # DeepSpeed ZeRO-3: 分区优化器状态、梯度和模型参数
- ../config/deepspeed_zero3_cpuoffload@_here_ # ZeRO-3 + CPU卸载(进一步节省显存,但速度变慢)
# ============================================================================
# Hydra框架配置
# Hydra用于配置管理和实验运行控制
# ============================================================================
hydra:
run:
dir: . # 运行目录设为当前目录
output_subdir: null # 不创建输出子目录
# ============================================================================
# 1. 实验基本设置
# ============================================================================
exp_name: "qwen_80B_hy" # 实验名称,用于标识不同的训练实验
seed: 42 # 随机种子,保证实验可复现
# ============================================================================
# 日志保存地址
# 用于存储训练过程中的日志文件
# ============================================================================
logging_dir: /shared/datamining/sumu/models/DPO/${exp_name}/logs # 训练日志目录
output_dir: /shared/datamining/sumu/models/DPO/${exp_name}/models # 模型输出目录
# ============================================================================
# 系统环境变量
# 用于控制运行时的环境配置
# ============================================================================
system_envs:
USE_MODELSCOPE: '1' # 使用ModelScope作为模型下载源(国内镜像)
# ============================================================================
# 模型检查点保存配置
# 用于保存训练过程中的模型快照
# ============================================================================
checkpoint_config:
type: file_system # 使用文件系统作为存储后端
output_dir: /shared/datamining/sumu/models/DPO/${exp_name}/checkpoints # 检查点保存目录
# 2. 实验跟踪
# track_with: wandb
# tracker_kwargs:
# api_key:
# project: roll_qwen3_80b
# notes: legal_dpo_80b
# tags:
# - dpo
# - 80b
# - legal
track_with: tensorboard # 使用TensorBoard作为跟踪工具
tracker_kwargs:
log_dir: /shared/datamining/sumu/models/DPO/${exp_name}/tensorboard # TensorBoard日志目录
# ============================================================================
# 3. 训练控制参数
# 控制训练过程的关键参数
# ============================================================================
max_steps: 1000 # 最大训练步数(可根据7k数据量适当增加到1000-2000)
save_steps: 200 # 每训练多少步保存一次检查点
logging_steps: 1 # 每训练多少步记录一次日志
eval_steps: 100 # 每训练多少步进行一次验证(如果配置了验证集)
resume_from_checkpoint: false # 是否从检查点恢复训练
sequence_length: 4096 # 序列最大长度(80B模型支持长上下文,根据数据平均长度调整)
train_batch_size: 16 # 全局训练批大小 = (per_device_batch_size * gradient_accumulation * num_gpus)
val_batch_size: 16 # 全局验证批大小
# local_rank: -1 # 本地GPU rank(自动设置,通常不需要手动指定)
num_nodes: 1 # 节点数量(单机训练设为1)
num_gpus_per_node: 8 # 每个节点使用的GPU数量(总共使用8张卡)
# ============================================================================
# 4. 模型与数据路径
# ============================================================================
# 预训练模型路径(Qwen3-80B-A3B-Instruct)
# pretrain: /shared/models/huggingface/hub/models--Qwen--Qwen3-Next-80B-A3B-Instruct/snapshots/9c7f2fbe84465e40164a94cc16cd30b6999b0cc7
pretrain:
# ============================================================================
# DPO(Direct Preference Optimization)算法参数
# DPO是一种直接偏好优化方法,用于从人类偏好数据中学习
# ============================================================================
ipo: false # 是否使用IPO(Identity Preference Optimization)算法(IPO是DPO的变体)
beta: 0.1 # DPO温度参数,控制偏好优化的强度(值越大越保守,值越小越激进)
label_smoothing: 0.0 # 标签平滑系数,用于正则化,防止模型过于自信
# ============================================================================
# 数据集字段映射
# 指定JSON数据文件中各字段的名称(根据你的数据集结构调整)
# ============================================================================
input_key: input
chosen_key: chosen # 被选中的回答字段名(人类标注为"更好"的回答)
rejected_key: rejected # 被拒绝的回答字段名(人类标注为"更差"的回答)
# ============================================================================
# 验证集配置(可选)
# 如果没有单独的验证集,可以注释掉或指向同一个文件
# ============================================================================
# validation:
# data_args:
# template: qwen3 # 使用Qwen3模板格式化数据
# file_name: /shared/datamining/sumu/dataset/RFT/legal_DPO/train.json # 验证集文件路径
# ============================================================================
# 5. Actor 模型训练配置
# Actor是在DPO训练中需要优化的模型(前向传播生成答案,反向传播更新参数)
# 使用前4张GPU卡(索引:0,1,2,3)
# ============================================================================
actor_train:
# ---------------------------------------------------------------------------
# 模型参数配置
# ---------------------------------------------------------------------------
model_args:
disable_gradient_checkpointing: false # 是否禁用梯度检查点(false=开启GC以节省显存,但训练速度会变慢)
dtype: bf16 # 使用BFloat16混合精度训练(平衡精度和显存占用)
model_type: ~ # 模型类型(~表示自动推断)
# ---------------------------------------------------------------------------
# 训练参数配置
# ---------------------------------------------------------------------------
training_args:
lr_scheduler_type: constant # 学习率调度器类型:constant(恒定学习率)
learning_rate: 1.0e-6 # 学习率(DPO通常使用较小的学习率,如1e-6到1e-5)
weight_decay: 0.01 # 权重衰减(L2正则化,防止过拟合)
per_device_train_batch_size: 2 # 每个GPU的批大小(需要根据显存大小调整)
gradient_accumulation_steps: 4 # 梯度累积步数(实际批次=8*2*4=64,可节省显存但训练变慢)
warmup_steps: 50 # 学习率预热步数(前50步学习率从0逐渐增加到目标值)
num_train_epochs: 3 # 训练轮数
# ---------------------------------------------------------------------------
# 数据参数配置
# ---------------------------------------------------------------------------
data_args:
template: native # 数据格式化模板(使用Qwen3的DPO格式)
file_name: # 训练数据文件列表(可指定多个文件)
- /shared/datamining/sumu/dataset/RFT/legal_DPO/train.json
dataset_dir: /shared/datamining/sumu/dataset/RFT/legal_DPO # 数据集目录
preprocessing_num_workers: 1 # 数据预处理工作进程数
# ---------------------------------------------------------------------------
# 分布式训练策略配置
# 使用Megatron-LM框架进行分布式训练
# ---------------------------------------------------------------------------
strategy_args:
strategy_name: megatron_train # 使用Megatron训练策略
strategy_config:
tensor_model_parallel_size: 2 # 张量并行度(4张卡分别承载模型的不同层或矩阵)
pipeline_model_parallel_size: 1 # 流水线并行度(1表示不打流水线,适合短序列)
expert_model_parallel_size: 1 # 专家并行度(1表示非MoE模型,MoE模型需要>1)
use_distributed_optimizer: true # 使用分布式优化器,进一步节省显存
recompute_granularity: full # 激活值重算粒度:full=全局重算(省显存但慢)
device_mapping: list(range(0,4)) # 绑定前4张GPU给Actor模型
infer_batch_size: 4 # 推理时的批大小(用于生成回答时)
# ============================================================================
# 6. Reference 模型推理配置
# Reference是冻结的参考模型(用于计算logits,不更新参数)
# 使用后4张GPU卡(索引:4,5,6,7)
# ============================================================================
reference:
# ---------------------------------------------------------------------------
# 模型参数配置
# ---------------------------------------------------------------------------
model_args:
disable_gradient_checkpointing: true # 推理时不需要梯度,禁用GC可提高推理速度
dtype: bf16 # 使用BFloat16精度进行推理
model_type: ~ # 模型类型:因果语言模型(自回归生成)
# ---------------------------------------------------------------------------
# 数据参数配置
# ---------------------------------------------------------------------------
data_args:
template: native # 使用Qwen3模板格式化数据
# ---------------------------------------------------------------------------
# 分布式推理策略配置
# 使用Megatron-LM框架进行分布式推理
# ---------------------------------------------------------------------------
strategy_args:
strategy_name: megatron_infer # 使用Megatron推理策略
strategy_config:
tensor_model_parallel_size: 2 # 张量并行度(后4张卡承载模型的不同部分)
pipeline_model_parallel_size: 1 # 流水线并行度(1表示不打流水线)
expert_model_parallel_size: 1 # 专家并行度(1表示非MoE模型)
device_mapping: list(range(4,8)) # 绑定后4张GPU给Reference模型
infer_batch_size: 16 # 推理时的批大小
报错日志如下,内容比较多放不下,我添加附件了,里面还有爆显存的问题,这个我自己尝试解决,如果大佬能帮我看看怎么修改配置文件,能不爆显存就更好了55555:
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels