LeeXugar's picture
Simplify model card and refresh continuous training figures
4480baa verified
|
Raw
History Blame Contribute Delete
7.42 kB
---
license: apache-2.0
license_link: https://huggingface.co/Qwen/Qwen3.5-0.8B/blob/main/LICENSE
base_model:
- Qwen/Qwen3.5-0.8B
base_model_relation: finetune
datasets:
- LeeXugar/CodePin-SFT-Qwen3.5-35B-A3B
language:
- en
library_name: transformers
pipeline_tag: text-generation
tags:
- code
- codepin
- code-localization
- repository-search
- software-engineering
- supervised-fine-tuning
- sft
- qwen3.5
model-index:
- name: CodePin-SFT-Qwen3.5-0.8B
results:
- task:
type: text-generation
name: Pure-text trajectory SFT
dataset:
name: CodePin-SFT-Qwen3.5-35B-A3B validation
type: LeeXugar/CodePin-SFT-Qwen3.5-35B-A3B
split: validation
metrics:
- type: loss
value: 0.2157
name: Final evaluation loss
---
# CodePin-SFT-Qwen3.5-0.8B
`CodePin-SFT-Qwen3.5-0.8B` 是基于 [`Qwen/Qwen3.5-0.8B`](https://huggingface.co/Qwen/Qwen3.5-0.8B) 全参数微调的代码定位模型。它通过纯文本工具轨迹学习仓库搜索、文件阅读与证据归纳,面向大型代码仓库中的文件、类和函数定位。
[CodePin Collection](https://huggingface.co/collections/LeeXugar/codepin-6a8afa1064d9f83f9fce2982) · [SFT Dataset](https://huggingface.co/datasets/LeeXugar/CodePin-SFT-Qwen3.5-35B-A3B) · [SWE-smith Code Search](https://huggingface.co/datasets/LeeXugar/SWE-smith-code-search)
## Highlights
- 5,676 条完整训练轨迹,最长 8,192 tokens;不使用会破坏工具调用闭环的硬截断。
- 4 × V100 32GB、FSDP FP16、全参数训练,共 710 optimizer steps / 20.49M 有效 tokens。
- 最终 train loss `0.1577`,validation loss `0.2157`;训练权重已通过 V100 加载、finite 检查和生成测试。
- 发布逐 step 指标、矢量图、训练配置与完整性验证,便于复核和二次分析。
## Quick start
建议使用支持 Qwen3.5 的较新 `transformers` 版本。
```python
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
model_id = "LeeXugar/CodePin-SFT-Qwen3.5-0.8B"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
model_id,
dtype=torch.float16,
attn_implementation="sdpa",
device_map="auto",
)
messages = [{
"role": "user",
"content": "Locate the files and functions that implement request authentication. Return concise evidence.",
}]
prompt = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
with torch.inference_mode():
output = model.generate(**inputs, max_new_tokens=512, do_sample=False)
print(tokenizer.decode(output[0], skip_special_tokens=True))
```
模型训练目标包含工具语义,但权重本身不提供仓库访问能力。实际使用时需要接入与训练数据兼容的搜索、读取和结果提交工具,并对路径、权限与调用参数做隔离校验。
## Training
| Item | Configuration |
|---|---|
| Base model | `Qwen/Qwen3.5-0.8B` |
| Dataset | `LeeXugar/CodePin-SFT-Qwen3.5-35B-A3B` |
| Data | train 5,676 / 5,700;validation 294 / 300 |
| Objective | 全部 assistant messages 的 causal LM loss |
| Context | 最大 8,192 tokens,仅保留完整轨迹 |
| Batch | microbatch 1/GPU,global batch 8 |
| Optimizer | AdamW,peak LR `5e-5`,weight decay `0.01` |
| Schedule | 71-step warmup + cosine decay |
| Runtime | 4 × Tesla V100-PCIE-32GB,FSDP FP16 |
| Training budget | 710 steps,20,487,244 effective tokens |
代码定位是多步行为任务:工具调用、返回结果和最终提交需要形成闭合轨迹,因此本次选择过滤超长样本,而不是在 8,192 tokens 处截断。对变长轨迹,样本数也不足以描述单步成本;本次 padded length 为 3,305–8,164,序列长度与 step time 的 Pearson `r=0.944`,说明训练预算与显存边界更适合用 token 数、最长序列和 padding efficiency 共同衡量。
训练保留完整 Adam 状态和更新顺序;优化器状态的分层放置只改变张量驻留位置,不清空动量或二阶矩。导出时 token embedding 与 LM head 已物化为两组独立训练张量,因此配置明确使用 `tie_word_embeddings=false`,忠实保存最终训练状态。模型实际可加载参数量为 `1,006,672,704`
## Training dynamics
![CodePin SFT training dynamics](assets/fig_sft_training_dynamics.png)
710 个唯一成功 optimizer step 作为一条连续训练轨迹展示。前 50 步和后 50 步 loss 中位数分别为 `0.2919``0.1896`,下降 `35.0%`;gradient norm 在 warmup 初期达到峰值 `34.69`,后 50 步中位数稳定在 `1.31`。最终 train/eval loss 为 `0.1577/0.2157`,可支持“训练过程稳定且终点可用”的结论,但由于没有周期性 validation curve,不能据此断言最后一步是泛化最优 checkpoint。
![Length-dependent systems behavior](assets/fig_sft_length_efficiency.png)
本次 padded length 中位数为 `5,156`,共有 10 个 batch 达到或超过 7,500 tokens;每 GPU throughput 中位数为 `248.7 tokens/s`,non-padding ratio 中位数为 `68.7%`。长尾 batch 决定显存安全边界,而约 31% 的中位 padding 空间也表明下一轮最直接的优化是 length-aware bucketing 或动态 token-budget batching。这里的 loss 用于判断优化健康度;代码定位能力仍应在独立数据上报告 file/function Recall@k、工具调用成功率和轨迹完成率。
## Artifacts
| Path | Description |
|---|---|
| `model.safetensors` | 完整 HF 模型权重 |
| `assets/*.png`, `assets/*.pdf` | 训练过程图及矢量版本 |
| `training/sft_training_metrics.csv` | 710 steps 的逐步训练指标 |
| `training/sft_training_summary.json` | 聚合统计与证据边界 |
| `training/training_config.json` | 训练配置 |
| `training/data_filter_summary.json` | 完整轨迹过滤结果 |
| `training/final_hf_validation.json` | 权重加载与生成验证 |
| `training/public_blob_validation.json` | 公开权重匿名回读验证 |
| `scripts/gen_fig_sft_training_dynamics.py` | 图表与统计生成脚本 |
## Validation and integrity
| File | Size | SHA-256 |
|---|---:|---|
| `model.safetensors` | 4,026,732,464 bytes | `d97009d9e41838a2eb8ce0e6275ac41cf80f1186915628f31662d3ba0b67e48e` |
最终模型在 Tesla V100 上以 FP16 加载,321 个 safetensors 张量全部为有限值,并通过 16-token greedy generation smoke test。发布后又在无 Hugging Face 凭据的条件下完整回读公开权重,重新计算的大小和 SHA-256 与上表一致。
## Limitations
- 数据由教师模型生成,可能继承其搜索偏好、冗余步骤与错误模式。
- 数据主要覆盖英文软件工程任务;其他语言和非代码领域不在目标分布内。
- 当前仅发布最终 validation loss,尚无独立下游代码定位 benchmark 结果。
- 输出不保证正确或可执行;真实仓库中的工具调用需要权限隔离与参数验证。
- 这是代码定位 SFT checkpoint,不是通用编程助手或自主代码修改系统。
## License
模型权重继承 Qwen3.5 基座的 [Apache License 2.0](https://huggingface.co/Qwen/Qwen3.5-0.8B/blob/main/LICENSE)。训练数据和相关项目文件同时受各自来源的许可约束。
## Acknowledgements
[Qwen](https://huggingface.co/Qwen) · [Transformers](https://github.com/huggingface/transformers) · PyTorch FSDP · SkyRL