public-sft-qwen9b-v6 · Qwen3.5-9B × Open-Orca/OpenOrca(英文,FLAN 任务经 GPT-4 增广的合成数据)LoRA 适配器(实验产物)
English TL;DR. A LoRA adapter (r=32, alpha=64) for
Qwen/Qwen3.5-9B, trained with QLoRA for 3 epochs / 300 optimizer steps on a 1,600-example random subset ofOpen-Orca/OpenOrca, file1M-GPT4-Augmented.parquet(mit, revisione9c87b4abb2609913751f9b26553fdb9c061796c, https://huggingface.co/datasets/Open-Orca/OpenOrca). The training data is synthetic: per the dataset card, each row is an entry from the FLAN Collection "augmented by submitting the listed question to either GPT-4 or GPT-3.5"; only the GPT-4-augmented file was used here. Questions come from FLAN Collection tasks; responses were written by GPT-4, not by humans. The per-rowsystem_prompt(generic FLAN wrapper instructions) was dropped. Training only: no evaluation of any kind was run, so no claim is made about reasoning (or any other ability). The adapter weights are released under apache-2.0; the dataset's own license (mit) is not changed by this release. This is a lab experiment, not a product.
本仓库是一个 LoRA 适配器:在 Qwen/Qwen3.5-9B 上,用公开数据集 Open-Orca/OpenOrca 中 1M-GPT4-Augmented.parquet(英文为主;FLAN Collection 任务经 GPT-4 增广的合成数据)随机抽取的 1600 条做了一轮指令微调(SFT)。
只做了训练,没有做任何评测。 本卡所有数字都取自这一轮训练的实际产物(训练记录、训练元数据、适配器文件本身)以及对数据筛选的复算;没有估算值。
⚠ 请先读这三条
- 训练数据是合成数据,不是人工撰写。 据上游数据集卡原文:"A data instance in this dataset represents entries from the FLAN collection which have been augmented by submitting the listed question to either GPT-4 or GPT-3.5. The response is then entered into the response field." 本轮只用了 GPT-4 增广的那份文件(
1M-GPT4-Augmented.parquet),没有用 GPT-3.5 增广的那份。也就是说:问题来自 FLAN Collection 的各类任务,回复全部由 GPT-4 生成,其中的事实错误、文体偏好与偏差会原样进入训练。本轮没有对回复内容做任何人工核对或质量过滤。 - 丢弃了 system_prompt。 上游每行带一条生成回复时给 GPT-4 的
system_prompt(通用的 FLAN wrapper 指令)。本轮忽略它,只用 question → user、response → assistant。但这些回复的风格正是由这些 system prompt 塑造的:入训 1600 条里有 1,493 条(93.3%)原本带非空 system prompt,例如 "You must generate a detailed and long answer."(374 条)、"Think like you are answering to a five year old."(244 条)。去掉之后,模型学到的是在没有任何此类要求时也照这些风格回答。 - 不声称任何能力。 本轮没有做任何评测(没有基准、没有验证集、没有人工抽检生成结果),因此无法说明本适配器在推理或任何其他方面比基座更好、更差或没有变化。
Provenance 一览
| 项 | 内容 |
|---|---|
| 基座模型 Base model | Qwen/Qwen3.5-9B,HF 快照 commit c202236235762e1c871ad0ccb60c8ee5ba337b9a(训练机本地缓存中唯一的快照,refs/main 指向它)。基座自身许可为 apache-2.0 |
| 数据集 Dataset | Open-Orca/OpenOrca(Lian et al. 2023;按 Orca 论文 Mukherjee et al. 2023, arXiv:2306.02707 的做法,对 FLAN Collection, arXiv:2301.13688 做 GPT 增广):https://huggingface.co/datasets/Open-Orca/OpenOrca |
| 数据快照 Revision | commit e9c87b4abb2609913751f9b26553fdb9c061796c;只用其中的 1M-GPT4-Augmented.parquet(994,896 行,上游 LFS sha256 8d3f4a6e5980a5f163ca22be60336f8b47796d43836d984569f857ec56aadfd8);未用 3_5M-GPT3_5-Augmented.parquet |
| 合成来源 Synthetic origin | 问题来自 FLAN Collection(niv / t0 / cot / flan 四个子混合),回复由 GPT-4 生成(上游数据集卡原文);本轮丢弃 system_prompt |
| 数据许可 Data license | mit(上游数据集卡 YAML 头逐字 license: mit)。原数据集许可不因本发布而改变。 |
| 子集 / 筛选 | parquet 全量 994,896 行 → 只扫描前 40,000 行 → 去空 0 → 按 (user,assistant) 整对去重 −14 → 可用 39,986 → 丢弃经 chat template 渲染后 >1024 token 的 1,397 条 → fit 38,589 → seed=42 洗牌后取 1600 条(1,576 个不同 prompt) |
| 权重许可 Weights license | apache-2.0(仅指本仓库的 LoRA 适配器权重) |
| 训练配置 Training | QLoRA(基座以 4-bit NF4 加载)· LoRA r32 / α64 / dropout 0.05 / targets auto · seq 1024 · batch 4 × grad_accum 4(有效 16)· lr 1e-4(cosine)· warmup 0.03 · 3 epoch = 300 步(steps) · seed 42 · bf16 + Liger kernel · 单卡 |
| 已知局限 Limitations | 只训 3 epoch / 300 步 / 1600 条;GPT-4 合成数据;丢弃了 system_prompt;未做任何评测;单一 seed;交付 LoRA 未合并;不是产品。详见下文「已知局限」 |
文件 Files
| 文件 | 说明 |
|---|---|
adapter_model.safetensors |
LoRA 适配器权重,fp32,496 个张量 / 86,556,672 个参数,346,302,176 字节,sha256 6ea92478a82b6fba5be8a4450b8bcff7de692543a1856e3ebc06f3caa4404f13(= 第 300 步,也就是最终 checkpoint) |
adapter_config.json |
PEFT 配置(由 peft 0.20.0 写出) |
tokenizer.json / tokenizer_config.json / chat_template.jinja |
训练时实际使用的 tokenizer 与对话模板,由 transformers 5.15.0 随适配器一起保存(见下文「tokenizer 说明」) |
不包含:合并后的完整权重、中间 checkpoint(第 100 / 200 步)、优化器状态、训练语料或其副本。训练数据请从上游获取。
数据 Data
- 数据集:
Open-Orca/OpenOrca,按 Orca 论文(Mukherjee et al. 2023, arXiv:2306.02707)的思路,把 FLAN Collection(Longpre et al. 2023, arXiv:2301.13688)的问题提交给 GPT-4 / GPT-3.5 得到回复的合成数据集。来源 URL:https://huggingface.co/datasets/Open-Orca/OpenOrca - 快照:revision
e9c87b4abb2609913751f9b26553fdb9c061796c,取其中的1M-GPT4-Augmented.parquet(1,008,442,855 字节,994,896 行;上游 LFS sha2568d3f4a6e5980a5f163ca22be60336f8b47796d43836d984569f857ec56aadfd8,与本地下载文件逐字一致)。 - 合成来源(上游数据集卡原文):"The OpenOrca dataset is a collection of augmented FLAN Collection data. Currently ~1M GPT-4 completions, and ~3.2M GPT-3.5 completions." 字段说明:
question是 FLAN Collection 提供的问题,response是 GPT-3.5 或 GPT-4 的回复,system_prompt是生成时给 API 的系统提示。本轮只用 GPT-4 那份文件。训练数据的回复全部是模型生成的合成文本。 - 许可:上游数据集卡 YAML 头逐字为
license: mit。MIT 允许再分发与商用。原数据集许可不因本发布而改变。 FLAN Collection 各源数据集的许可、以及生成回复所用模型(GPT-4)的使用条款,请以其上游为准。 - 筛选(CPU 复算,口径与训练读取一致):
- 只扫描文件前 40,000 行(可复现的切片;文件并非按质量排序,全量 994,896 行)
- → 只取
question/response两列,忽略system_prompt - → 去空(strip 后为空)0 条 → 按 (user, assistant) 整对去重 −14 → 可用 39,986
- → 用 Qwen3.5-9B chat template(
apply_chat_template(..., add_generation_prompt=False))实测 token 长度,丢弃 >1024 的 1,397 条(3.49%) - → fit 38,589 →
random.Random(42).shuffle后取前 1,600 条写入训练文件 - 去重只针对 (user, assistant) 整对,因此同一问题配不同回复的会都保留:1,600 条对应 1,576 个不同 prompt。
- 子集构成(把 1,600 条逐条对回原始行复算):
- FLAN 子混合(按
id前缀):flan 827 · t0 511 · niv 149 · cot 113。 - 被丢弃的
system_prompt:16 种不同取值,空的 107 条,非空 1,493 条;最多的是 "You are an AI assistant. User will you give you a task. Your goal is to complete the task as faithfully as you can. While performing the task think step-by-step and justify your steps."(381 条)、"You are an AI assistant. You will be given a task. You must generate a detailed and long answer."(374 条)、"You are a helpful assistant, who always provide explanation. Think like you are answering to a five year old."(244 条)。 - 语言以英文为主;FLAN 中的翻译、多语种分类等任务会带入少量其他语言文本(例如下文 tokenizer 说明里提到的泰卢固文、孟加拉文、古木基文、印地文样本)。
- FLAN 任务里包括有害内容分类之类的任务,问题文本本身可能含仇恨或冒犯性内容(例如入训样本中有一条要求对孟加拉文仇恨帖子分类的任务);本轮没有做内容过滤。
- FLAN 子混合(按
- 子集长度(token,含 chat template):p50 281 / p90 604 / p99 910 / max 1,024,均值 322.7,合计 516,385 token/epoch。assistant 回复长度(字符):p50 462,均值 716.7,min 1,max 5,015(FLAN 含分类/选择题,部分回复只有一两个字符)。
- 映射:
question→ user,response→ assistant,两轮消息({"messages":[{role,content}...]});无 system 提示。 - loss 只算在 assistant 回复 token 上(
all_tokens_loss=false);user 部分与模板标记不计入。
训练配置 Training
| 参数 | 值 |
|---|---|
| 方法 | QLoRA:基座经 bitsandbytes 以 4-bit NF4(double quant)加载,计算 dtype bf16;训练 bf16=True |
| LoRA | r=32,lora_alpha=64,lora_dropout=0.05,bias=none,task_type=CAUSAL_LM |
| target_modules | auto,解析为 q_proj/k_proj/v_proj/o_proj/gate_proj/up_proj/down_proj/in_proj_qkv/in_proj_z/in_proj_a/in_proj_b/out_proj;exclude_modules 排除 vision/audio/visual/mtp(只覆盖文本解码器) |
| 可训练参数 | 86,556,672(496 个 fp32 张量) |
| max_seq_len | 1024(训练集中 0 条被截断;子集最长 1,024 token,恰等于上限,不触发截断) |
| batch | 每卡 4 × grad_accum 4 = 有效 batch 16 |
| optimizer | paged_adamw_8bit |
| lr / schedule | 1e-4,cosine |
| warmup | warmup_ratio 0.03 |
| epochs / steps | 3 epoch;1600 条 / 有效 batch 16 = 100 步/epoch,共 300 步(训练记录的最终 step 与最终 checkpoint 的 global_step 均为 300) |
| seed | 42 |
| loss 范围 | 只算 assistant 回复 token(all_tokens_loss=false) |
| kernels | Liger kernel;attention sdpa;开启 gradient checkpointing |
| 硬件 / 显存峰值 | 单卡;显存峰值 11.9 GiB |
| 时长 / 吞吐 | 4,837 秒(约 1.34 小时),320.3 tok/s;每 epoch 516,385 token |
| 软件 | transformers 5.15.0、peft 0.20.0 |
| 训练日期 | 2026-10-16 |
训练集 loss:第 5 步 1.214,第 300 步(最后一个记录点)0.638。这只是训练集上的 loss,不是验证或评测指标;本轮没有验证集。对合成数据,训练集 loss 下降只说明模型更贴合 GPT-4 回复的风格,不说明回答质量或推理能力。
怎么用 Usage
import torch
from transformers import AutoModelForImageTextToText, AutoTokenizer
from peft import PeftModel
base_id = "Qwen/Qwen3.5-9B"
adapter_id = "alfaplus/public-sft-qwen9b-v6"
tok = AutoTokenizer.from_pretrained(adapter_id)
# 用 AutoModelForImageTextToText 加载基座(与训练时一致)。Qwen3.5 的 checkpoint 是 *ForConditionalGeneration,
# 用 AutoModelForCausalLM 加载可能静默漏掉文本解码器权重(只打警告),LoRA 也就挂不对地方。
base = AutoModelForImageTextToText.from_pretrained(
base_id, revision="c202236235762e1c871ad0ccb60c8ee5ba337b9a",
dtype=torch.bfloat16, device_map="auto")
model = PeftModel.from_pretrained(base, adapter_id)
msgs = [{"role": "user", "content": "Summarize the following sentence in five words: The committee postponed the vote until next week."}]
inputs = tok.apply_chat_template(msgs, add_generation_prompt=True, enable_thinking=False,
return_tensors="pt", return_dict=True).to(model.device)
out = model.generate(**inputs, max_new_tokens=256)
print(tok.decode(out[0, inputs["input_ids"].shape[1]:], skip_special_tokens=True))
- 这段示例代码没有在本发布流程中实际运行过(准备发布时不占用 GPU)。加载方式(
AutoModelForImageTextToText+ PEFT)与训练脚本一致,但请自行验证。 - 训练样本采用
enable_thinking=False的格式(空思考块),且不含 system 提示;思考模式、或带 system 提示时的行为没有评测。 - 训练时基座是 4-bit NF4 加载的;挂到 bf16 基座上的差异没有测过。
tokenizer 说明(对本仓库实测)
本仓库附带的 tokenizer.json 不是基座 tokenizer.json 的逐字节副本(chat_template.jinja 则与基座逐字节相同)。实测对比本仓库这份与基座那份:
- 本仓库这份的预切分(pre-tokenizer)正则是
…[\p{L}\p{N}]?\p{L}+…,而基座文件写的是…[\p{L}\p{N}]?[\p{L}\p{M}]+…(即基座含\p{M}组合附加符类、本仓库这份不含)。这是 transformers 5.15.0 保存 Qwen3.5 tokenizer 时的已知行为。 - 行为探针:直接用
tokenizers库分别读取基座与本仓库的tokenizer.json,对 10 条多语种/组合字符探针切分,有 2 条不同(都含组合附加符:天城文、带变音符的阿拉伯文)。 - 对本轮训练用的 1,600 条样本(user / assistant 共 3,200 段文本)逐段比对,两份 tokenizer 的切分有 6 段不同(出自 4 条样本,都含组合附加符:3 条翻译任务,涉及泰卢固文、孟加拉文→古木基文、天城文印地语;1 条孟加拉文分类任务);其余 3,194 段相同。
- 也就是说,训练时实际使用的切分就是本仓库附带的这份 tokenizer。如果推理栈不经过 transformers、直接读取基座的 tokenizer 文件,含组合附加符的文本会被切得和训练时不同。
已知局限 Limitations
- 训练量小:只训了 3 epoch / 300 步,只用了 1600 条样例(取自文件前 40,000 行的随机子集,不代表全量 994,896 行的分布)。
- 合成数据:问题来自 FLAN Collection,回复全部由 GPT-4 生成,没有人工撰写或人工核对;GPT-4 的事实错误、偏差和文体习惯会被学进去。上游数据集卡自述的局限(例如数据集仍是 "partial completion"、部分 FLAN 子混合不足量)同样适用。
- 丢弃了 system_prompt:回复是在 system prompt(「详细且长」「像对五岁小孩解释」「逐步说明理由」等)约束下生成的,训练时却没有这些提示;适配器可能在用户没有要求时也套用这些风格。
- FLAN 任务形态:大量样本是分类、选择、抽取、翻译等模板化任务,部分回复极短(13 条回复不超过 2 个字符,最短 1 个字符);与开放式对话的分布不同。问题文本未做内容过滤,可能含有害内容分类任务里的冒犯性文本。
- 没有任何评测:只跑了训练,没有做任何基准评测,没有留出验证集,也没有人工检查生成结果。上面的 loss 只是训练集 loss,不能说明泛化能力或与基座的优劣。不声称任何能力,包括推理能力。
- 单一 seed,未做超参搜索:只有 seed 42 这一次运行,结果的稳定性未知。
- 交付形态:交付 LoRA 适配器本体,未合并权重;合并 / 低比特量化(如 GGUF)之后的效果未验证,低比特量化可能削弱适配器的作用。
- 训练与推理条件:训练时基座 4-bit NF4;其他精度 / 思考模式未测。
- 只有单轮、只有文本:训练样本全是单轮对话、无 system 提示;多轮对话下的行为未测。只训练了文本解码器;挂上适配器后基座的图像 / 视频能力是否受影响未测。
- 没有任何保证:未做安全评测或红队测试。这是实验室的实验产物,不是产品。
许可 License
- 适配器权重:apache-2.0。 本仓库 YAML 中的
license: apache-2.0指适配器权重与本卡。 - 训练数据:mit(上游数据集卡 YAML 头逐字
license: mit)。原数据集许可不因本发布而改变。 本仓库不包含 OpenOrca 数据或其衍生副本;如需使用数据,请从上游按其许可获取。 - 基座模型:
Qwen/Qwen3.5-9B按其自身许可(apache-2.0,https://huggingface.co/Qwen/Qwen3.5-9B/blob/main/LICENSE)发布;使用本适配器需另行获取基座并遵守其条款。
引用 / 出处 Citation
数据集:Open-Orca/OpenOrca,https://huggingface.co/datasets/Open-Orca/OpenOrca 。上游数据集卡列出的引用(节选与本轮相关的三条):
@misc{OpenOrca,
title = {OpenOrca: An Open Dataset of GPT Augmented FLAN Reasoning Traces},
author = {Wing Lian and Bleys Goodson and Eugene Pentland and Austin Cook and Chanvichet Vong and "Teknium"},
year = {2023},
publisher = {HuggingFace},
howpublished = {\url{https://huggingface.co/datasets/Open-Orca/OpenOrca}}
}
@misc{mukherjee2023orca,
title={Orca: Progressive Learning from Complex Explanation Traces of GPT-4},
author={Subhabrata Mukherjee and Arindam Mitra and Ganesh Jawahar and Sahaj Agarwal and Hamid Palangi and Ahmed Awadallah},
year={2023},
eprint={2306.02707},
archivePrefix={arXiv}
}
@misc{longpre2023flan,
title={The Flan Collection: Designing Data and Methods for Effective Instruction Tuning},
author={Shayne Longpre and Le Hou and Tu Vu and Albert Webson and Hyung Won Chung and Yi Tay and Denny Zhou and Quoc V. Le and Barret Zoph and Jason Wei and Adam Roberts},
year={2023},
eprint={2301.13688},
archivePrefix={arXiv}
}