Skip to content

番外篇: 微调OpenAI OSS模型

此篇内容已经过实机测试(vgpu 32g)

如有Bug请发Issues或联系作者

能直接PR修复那就更棒了


请注意

在测试时使用unsloth/gpt-oss-20b-unsloth-bnb-4bit似乎可以正常微调并合并
但是在转化为GGUF时失败了
在测试unsloth/gpt-oss-20b时遇到了'GptOssTopKRouter' object has no attribute 'weight'错误
似乎这是一个群体性错误,我发现很多人在微调时也遇到了这个问题
请给Unsloth和OpenAI团队一些时间,他们会搞定的
在更新后我会第一时间更新这个文档和代码


微调OSS模型

因为OSS发布的时间,似乎微调OSS和Qwen的并不能通用
并且最好使用新的unsloth torch transformers 等库

这是Unsloth提供的OSS微调经验

以下是快速微调指南

建议使用新的虚拟环境
和Qwen的微调环境分离

请确保以下的库: torch>=2.8.0 triton>=3.4.0并且!请保证Unsloth和Unsloth_zoo的最新版

原requirements.txt的unsloth只支持到2025.8.1版本,并不能微调oss

先运行以下命令再安装依赖

bash
pip install "unsloth_zoo[base] @ git+https://github.com/unslothai/unsloth-zoo" "unsloth[base] @ git+https://github.com/unslothai/unsloth" torchvision bitsandbytes git+https://github.com/huggingface/transformers git+https://github.com/triton-lang/triton.git@main#subdirectory=python/triton_kernels

安装依赖

bash
pip install -r requirements_oss.txt

请注意,此模型需要使用OpenAI Harmony格式的训练数据进行微调

请使用chatml_to_harmony.py将chatml格式的训练数据转换为harmony格式

bash
python3 chatml_to_harmony.py --input training_data.jsonl --output training_data_harmony.txt

下载模型

bash
huggingface-cli download unsloth/gpt-oss-20b-BF16 --local-dir gpt-oss-20b

如果没有huggingface-cli,请先安装

bash
pip install huggingface-hub

如果需要镜像站请先运行

bash
export HF_ENDPOINT=https://hf-mirror.com

在测试时使用unsloth/gpt-oss-20b-unsloth-bnb-4bit似乎可以正常微调并合并
但是在转化为GGUF时失败了
在测试unsloth/gpt-oss-20b时遇到了'GptOssTopKRouter' object has no attribute 'weight'错误
似乎这是一个群体性错误,我发现很多人在微调时也遇到了这个问题
请给Unsloth和OpenAI团队一些时间,他们会搞定的
在更新后我会第一时间更新这个文档和代码

开始微调

bash
python3 run_finetune_oss.py

参数类型默认值可选值说明
--repo_idstrunsloth/gpt-oss-20b-unsloth-bnb-4bit-HF 仓库ID
--local_dirstrgpt-oss-20b-unsloth-bnb-4bit-本地模型目录
--use_unslothstrfalsetrue, false是否使用unsloth
--use_qlorastrtruetrue, false是否使用QLoRA
--data_pathstrtraining_data.jsonl-训练数据路径
--eval_data_pathstr / NoneNone-验证数据路径
--max_samplesstr / NoneNone-最大训练样本数
--max_eval_samplesstr / NoneNone-最大验证样本数
--model_max_lengthstr2048-最大序列长度
--output_dirstrfinetune/models/qwen3-30b-a3b-qlora-输出目录
--seedstr42-随机种子
--per_device_train_batch_sizestr1-每设备训练批次大小
--per_device_eval_batch_sizestr1-每设备验证批次大小
--gradient_accumulation_stepsstr16-梯度累积步数
--learning_ratestr2e-4-学习率
--num_train_epochsstr3-训练轮数
--max_stepsstr-1-最大步数(-1为不限)
--lora_rstr16-LoRA 秩
--lora_alphastr32-LoRA alpha
--lora_dropoutstr0.05-LoRA dropout率
--target_modulesstrq_proj,k_proj,v_proj,o_proj,gate_proj,up_proj,down_proj-LoRA 目标模块
--weight_decaystr0.0-权重衰减
--moe_enablestrfalsetrue, false是否启用 MoE
--moe_lora_scopestrexpert_onlyexpert_only, router_only, allLoRA 注入范围
--moe_expert_patternsstrexperts.ffn.(gate_proj|up_proj|down_proj),layers.[0-9]+.mlp.experts.[0-9]+.(w1|w2|w3)-专家线性层模式(正则)
--moe_router_patternsstrrouter.(gate|dense)-路由/门控层模式(正则)
--moe_max_experts_lorastr-1-每层最多注入 LoRA 的专家数
--moe_dry_runstrfalsetrue, false仅打印匹配模块并退出
--load_precisionstrfp16int8, int4, fp16模型加载精度
--use_flash_attention_2strfalsetrue, false是否启用 FlashAttention2
--logging_stepsstr1-日志记录步数
--eval_stepsstr50-验证间隔步数
--save_stepsstr200-保存模型步数
--save_total_limitstr2-最多保存数
--warmup_ratiostr0.05-预热比例
--lr_scheduler_typestrcosine-学习率调度器类型
--resume_from_checkpointstr / NoneNone-从检查点恢复
--no-gradient_checkpointingflagFalse-不使用梯度检查点
--no-merge_and_saveflagFalse-不合并并保存模型
--fp16strtruetrue, false是否使用fp16
--optimstradamw_torch_fused-优化器
--dataloader_pin_memorystrfalsetrue, false是否固定数据加载器内存
--dataloader_num_workersstr0-DataLoader 线程数
--dataloader_prefetch_factorstr2-DataLoader 预取因子
--use_gradient_checkpointingstrtruetrue, false, unsloth梯度检查点设置
--full_finetuningstrfalsetrue, false是否全量微调
--data_formatstrharmonyharmony, jsonl数据格式

下面是一个微调gpt-oss-20b-unsloth-bnb-4bit的范例

bash
python3 run_finetune_oss.py --output_dir /root/autodl-fs/gpt-oss-20b-unsloth-bnb-4bit --local_dir gpt-oss-20b-4bit --data_path ./harmony_small.txt --eval_data_path ./harmony_small_eval.txt --use_qlora true --lora_dropout 0.05 --num_train_epochs 8 --per_device_train_batch_size 4 --per_device_eval_batch_size 4 --gradient_accumulation_steps 8 --learning_rate 2e-5 --lr_scheduler cosine --logging_steps 5 --eval_steps 40 --save_steps 200 --warmup_ratio 0.05 --dataloader_num_workers 16 --fp16 true --use_unsloth true --no-gradient_checkpointing --dataloader_prefetch_factor 4 --load_precision int4 --data_format harmony