大模型训练

##大模型

使用的大模型是:Qwen3-8B.

理论上qwen3系列应该都是通用的

##训练集格式

json 复制代码
{"messages": [{"role": "system", "content": "这里是系统提示词"}, {"role": "user", "content": "## xxx文本\n这里是用户文本\n\n请根据上述文本,判断xxx。"}, {"role": "assistant", "content": "分类任务,一定要包含reason,推理理由"}]}

##测试集格式

正确情况在制作训练集后,按照9:1比例分割就可以得到测试集。

但是qwen3大模型,LlamaFactory框架无法直接使用上述的格式进行推理。需要转换为如下格式进行推理:

json 复制代码
{"instruction":"## xxx文本\n这里是用户文本\n\n请根据上述文本,判断xxx。","system":"这里是系统提示词"}

说明:

  1. instruction 对应的就是训练集格式中的user的content内容
  2. 上个这个格式是扒LlamaFactory源码得到的,否则无法进行有效推理。

##训练脚本

shell 复制代码
#!/bin/bash
set +x

# ============================================================
# 执行命令(复制即用)
# ============================================================
#   bash sft_lora_qwen3_8b_v9.sh
# ============================================================

# 模型:Qwen3-8B(dense,非 MoE)
workdir=$(cd $(dirname $0); pwd)
source $workdir/../../../scripts/config.sh
source $workdir/../../common.sh

# === 业务专属:星云任务名 ===
JOB_NAME="xxx_qwen3_8b_rebalanced_v9"

WORLD_SIZE=1

# === 模型与模板 ===
PROMPT_TEMPLATE="qwen3_nothink"
MODEL_NAME="Qwen/Qwen3-8B"

# === LoRA 产出地址 ===
SAVE_MODEL="xxx_qwen3_8b/version=rebalanced_v9"

# === 数据集 ===
# rebalanced_v7:在 V7(v5) 基础上追加 supplement_v5 困难样本(184条,8x变体)
# 总计 2822 条,困难样本比例进一步提升
# 上传命令:
#   ossutil cp data_process/train/商家未营业/shop_not_open_train_rebalanced_v7.jsonl \
#              oss://woos-service-zbprod-zb1-oss-1/sgy/dataset/shop_not_open/train/
INPUT="xxx_train_rebalanced_v7.jsonl"

LR=5e-6

# ============================================================
# 超参数设计依据(v9 继续追加困难样本)
# ============================================================
# 数据:2822 条(基于 V7 的 2638 条 + supplement_v5 184 条困难样本)
#
# V7 结果(最佳 checkpoint-400):
#   - 大分类准确率 92.6%,完整匹配 91.7%
#   - 已打烊 F1=0.950,非打烊 F1=0.870
#   - 困难样本(优先级冲突 case)仍有部分未学会
#
# V8 结果(下采样策略,已失败):
#   - 准确率降至 89.0%,下采样导致已打烊学习不足 + 过拟合
#
# V9 策略:
#   - 回归 V7 完整数据基础,追加新一轮困难样本变体
#   - 超参完全沿用 V7(LR=5e-6, QKVO, rank=16)
#   - effective_batch=16:per_device_batch=4 × accum=4 × world_size=1
#   - 2822 样本 + eff_batch=16 → ~176 步/epoch
#   - max_steps=500 → 约 2.84 epochs
# ============================================================
args="--stage=sft \
    --model_name_or_path=$MODEL_NAME \
    --do_train \
    --file_name=$INPUT \
    --messages=messages \
    --role_tag=role \
    --content_tag=content \
    --user_tag=user \
    --assistant_tag=assistant \
    --system_tag=system \
    --template=$PROMPT_TEMPLATE \
    --finetuning_type=lora \
    --lora_rank=16 \
    --lora_target=q_proj,k_proj,v_proj,o_proj \
    --output_dir=local/tmp/ckpt_save_path/ \
    --overwrite_cache \
    --per_device_train_batch_size=4 \
    --gradient_accumulation_steps=4 \
    --lr_scheduler_type=cosine \
    --warmup_ratio=0.1 \
    --weight_decay=0.02 \
    --logging_steps=10 \
    --save_steps=100 \
    --max_steps=500 \
    --learning_rate=$LR \
    --cutoff_len=8192 \
    --preprocessing_num_workers=8 \
    --dataloader_num_workers=4 \
    --plot_loss \
    --report_to=ml_tracker \
    --bf16 \
    --gradient_checkpointing=false"

if [ -n "${LORA_CKPT}" ]; then
    args="${args} --adapter_name_or_path=${LORA_CKPT}"
fi

说明:

  1. 并非完整脚本,只列举了训练超参数;
  2. 一开始只有--lora_target=q_proj,v_proj,后来需要学习困难样本的时候,增加了k_proj和o_proj,所以就变成了--lora_target=q_proj,k_proj,v_proj,o_proj

##推理脚本

shell 复制代码
#!/bin/bash
set +x

# ============================================================
# 执行命令(复制即用)------ 多个 checkpoint 可并行提交
# ============================================================
#   VERSION=rebalanced_v9 CKPT_ID=checkpoint-100 bash inference_qwen3_8b_v9.sh
#   VERSION=rebalanced_v9 CKPT_ID=checkpoint-200 bash inference_qwen3_8b_v9.sh
#   VERSION=rebalanced_v9 CKPT_ID=checkpoint-300 bash inference_qwen3_8b_v9.sh
#   VERSION=rebalanced_v9 CKPT_ID=checkpoint-400 bash inference_qwen3_8b_v9.sh
#   VERSION=rebalanced_v9 CKPT_ID=checkpoint-500 bash inference_qwen3_8b_v9.sh
# ============================================================

# 分类推理 ------ Qwen3-8B + LoRA)
workdir=$(cd $(dirname $0); pwd)
source $workdir/../../../scripts/config.sh
source $workdir/../../common.sh

# === 要推理的版本与 checkpoint ===
VERSION="${VERSION:-rebalanced_v9}"
CKPT_ID="${CKPT_ID:-checkpoint-300}"

# 星云任务名
JOB_NAME="xxx_qwen3_8b_${VERSION}_${CKPT_ID}"

WORLD_SIZE=1

# === 模型配置 ===
# 推理必须用 qwen3(ReasoningTemplate),配合 --enable_thinking=false
# qwen3 + enable_thinking=false 会在 prompt 末尾注入空 <think></think> 块
# 从而在 token 级别阻止模型输出思考内容,确保直接输出 JSON 结果
# qwen3_nothink 是普通 Template,enable_thinking 参数对它无效
PROMPT_TEMPLATE="qwen3"
MODEL_NAME="Qwen/Qwen3-8B"
LORA_CKPT="xxx_qwen3_8b/version=${VERSION}/ckpt_id=${CKPT_ID}"

BATCH_SIZE=1

# === 数据 ===
INPUT="xxx_test_simplified_corrected_v3_flat.jsonl"
OUTPUT="xxx_result_Qwen3-8B_${CKPT_ID}.jsonl"

PROMPT_COLUMN="instruction"
SYSTEM_COLUMN="system"
INPUT_COLUMNS="instruction,system"

# === 推理引擎配置 ===
GENERATE_MODE="vllm-async"
TENSOR_PARALLEL_SIZE=1

args="--model_name_or_path=$MODEL_NAME \
      --batch_size=$BATCH_SIZE \
      --template=$PROMPT_TEMPLATE \
      --enable_thinking=false \
      --load_from=file \
      --temperature=0.7 \
      --top_p=0.8 \
      --top_k=100 \
      --seed=1 \
      --cutoff_len=8192 \
      --max_new_tokens=512 \
      --infer_mode=$GENERATE_MODE \
      --tensor_parallel_size=$TENSOR_PARALLEL_SIZE \
      --max_model_len=8192 \
      --gpu_memory_utilization=0.9 \
      --max_seq_len_to_capture=4096 \
      --inputs=$INPUT \
      --outputs=$OUTPUT \
      --prompt_column=$PROMPT_COLUMN \
      --system_column=$SYSTEM_COLUMN \
      --input_columns=$INPUT_COLUMNS"

if [ -n "${LORA_CKPT}" ]; then
    args="$args --adapter_name_or_path=$LORA_CKPT"
fi

说明:

  1. 只列举了推理的超参数,并不是完整脚本
  2. 因为LlamaFactory框架推理参数并不能指定messages,只能指定prompt_columnsystem_columninput_columns,这就是为什么直接分割训练集得到的测试集无法使用的原因,而是需要将messages平铺开来。
相关推荐
x_lrong1 个月前
昇腾Ascend环境微调部署Qwen3(LlamaFactory+vLLM-Ascend)
微调·部署·昇腾·ascend·llamafactory·qwen3·vllm-ascend
爱打代码的小林2 个月前
LLaMA-Factory大模型微调
人工智能·llamafactory
一招定胜负2 个月前
LlamaFactory使用教程
人工智能·lora·模型微调·llamafactory
一招定胜负2 个月前
LlamaFactory的微调指令
llamafactory
郭庆汝4 个月前
大模型——LlamaFactory利用情感对话数据集微调Qwen2.5-32B-Instruct大模型
llamafactory
郭庆汝4 个月前
大模型——LlamaFactory微调多模态大模型流程记录
llamafactory·多模态大模型微调
羊城迷鹿4 个月前
从LoRA到OFT:Qwen2.5-VL在昇腾910B与4090上的多模态微调实践与踩坑记录
大模型·微调·多模态·qwen·llamafactory·oft
yubin12774086294 个月前
llamafactory调试
llamafactory·qwen模型
jjjddfvv5 个月前
超级简单启动llamafactory!
windows·python·深度学习·神经网络·微调·audiolm·llamafactory