Skip to content

grpo多轮训练中vllm推理的模板与sft使用的模板不一致且存在Bug #9168

@fyw1999

Description

@fyw1999

Checklist / 检查清单

  • I have searched existing issues, and this is a new bug report. / 我已经搜索过现有的 issues,确认这是一个新的 bug report。

Bug Description / Bug 描述

通过在grpo多轮训练中设置参数--log_completions true,观察记录的prompt和completion发现grpo多轮训练中vllm推理时的模板与sft阶段使用的模板存在比较大的差异,有以下几个问题

  1. 无法把tools字段自动添加到system的消息中
  2. 工具返回结果以后需要手动用<tool_reponse></tool_response>包裹工具的结果,而sft的模板会自动处理。(grpo中这个问题或许可以在把工具返回结果添加到消息列表中的时候把role设置为tool来解决,还没尝试)
  3. 使用qwen3.5时,vllm对多轮对话的消息列表应用模板时会去掉之前所有模型回答的思考过程,而qwen3-vl则会保留所有模型回答的思考过程。sft的模板在处理这种Agent消息的时候好像是保留之前模型回答的思考过程的。
  4. 使用qwen3.5时,vllm对多轮对话的消息列表应用模板后prompt的末尾是当前轮模型回答的思考前缀<think>,当前轮模型回答的内容在completion中,而使用qwen3-vl时,prompt的末尾不包含当前轮模型回答的思考前缀<think>,该前缀<think>在completion中

总结来看最大的问题是3和4,1,2都可以通过自己预处理数据和代码层面解决

How to Reproduce / 如何复现

vllm端启动命令如下:

CUDA_VISIBLE_DEVICES=0,1 \
swift rollout \
    --model model/path \
    --vllm_tensor_parallel_size 2 \
    --vllm_use_async_engine true \
    --multi_turn_scheduler vision_agent_compress_scheduler \
    --external_plugins plugin.py \
    --vllm_gpu_memory_utilization 0.8 \
    --max_turns 10 \
    --vllm_max_model_len 20480

grpo训练端启动如下

PYTORCH_CUDA_ALLOC_CONF='expandable_segments:True' \
CUDA_VISIBLE_DEVICES=2,3,4,5,6,7 \
IMAGE_MAX_TOKEN_NUM=4096 \
NPROC_PER_NODE=6 \
swift rlhf \
    --rlhf_type grpo \
    --model model/path \
    --output_dir output/Qwen3.5-9B/grpo \
    --tuner_type lora \
    --lora_rank 64 \
    --lora_alpha 128 \
    --external_plugins plugin.py \
    --multi_turn_scheduler my_scheduler \
    --reward_funcs trajectory_reward \
    --loss_scale last_round \
    --use_vllm true \
    --vllm_mode server \
    --vllm_enable_lora true \
    --vllm_server_host 127.0.0.1 \
    --vllm_server_port 8000 \
    --vllm_server_pass_dataset true \
    --torch_dtype bfloat16 \
    --attn_impl flash_attention_2 \
    --dataset dataset.jsonl \
    --load_from_cache_file true \
    --max_length 20480 \
    --max_completion_length 4096 \
    --overlong_filter true \
    --num_train_epochs 2 \
    --per_device_train_batch_size 1 \
    --learning_rate 1e-6 \
    --gradient_accumulation_steps 8 \
    --gradient_checkpointing true \
    --gradient_checkpointing_kwargs '{"use_reentrant": false}' \
    --save_total_limit 2 \
    --save_steps 20 \
    --logging_steps 1 \
    --warmup_ratio 0.05 \
    --dataloader_num_workers 4 \
    --dataset_num_proc 4 \
    --num_generations 8 \
    --temperature 1.0 \
    --deepspeed zero2 \
    --log_completions true \
    --report_to tensorboard swanlab \

Additional Information / 补充信息

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions