Skip to content

AttributeError: 'NoneType' object has no attribute 'get_models' #344

@sumufuyun

Description

@sumufuyun

问题描述:

使用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:

Panel Title-logs-2026-02-06 11_39_39.txt

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions