模型信息
- 基座模型: Qwen3-VL-4B-Instruct
- 训练方法: LoRA (rank=32, alpha=64, dropout=0.05)
- Adapter 大小: 253MB (vs 完整模型 8.3GB)
- 训练数据: 937 个高质量样本 (avg reward 0.844)
- 评测基准: ClawEval (300 个真实编程任务)
- 训练时间: 2026-09-22
快速开始
方法 1: 使用 PEFT 加载
from transformers import AutoModelForCausalLM, AutoTokenizerfrom peft import PeftModel # 加载基座模型base_model = AutoModelForCausalLM.from_pretrained( "Qwen/Qwen3-VL-4B-Instruct", trust_remote_code=True, device_map="auto") # 加载 LoRA adaptermodel = PeftModel.from_pretrained( base_model, "zhongweixie/qwen3vl-4b-claweval-lora") tokenizer = AutoTokenizer.from_pretrained( "Qwen/Qwen3-VL-4B-Instruct", trust_remote_code=True)
方法 2: Merge 后使用
# 下载并合并 LoRApython -c "from transformers import AutoModelForCausalLMfrom peft import PeftModel base = AutoModelForCausalLM.from_pretrained('Qwen/Qwen3-VL-4B-Instruct', trust_remote_code=True)model = PeftModel.from_pretrained(base, 'zhongweixie/qwen3vl-4b-claweval-lora')merged = model.merge_and_unload()merged.save_pretrained('./qwen3vl-4b-claweval-merged')"
训练配置
{ "base_model": "Qwen/Qwen3-VL-4B-Instruct", "num_samples": 937, "num_epochs": 3, "learning_rate": 1e-6, "batch_size": 4, "gradient_accumulation_steps": 2, "lora_config": { "r": 32, "lora_alpha": 64, "lora_dropout": 0.05, "target_modules": ["q_proj", "k_proj", "v_proj", "o_proj"], "task_type": "CAUSAL_LM" }, "max_seq_length": 4096}
文件结构
.├── adapter_config.json # LoRA 配置├── adapter_model.safetensors # LoRA 权重 (253MB)├── tokenizer_config.json # Tokenizer 配置├── tokenizer.json # Tokenizer 词表├── chat_template.jinja # Chat 模板├── training_args.bin # 训练参数├── training_data/│ └── sft_messages_iter6_cleaned.jsonl # 训练数据 (937 样本)└── datasets/ └── claweval/ # ClawEval 评测集 (300 任务)
ClawEval 数据集
本仓库包含完整的 ClawEval 评测数据集 (300 个任务):
- 工具调用 (T-series): email/calendar/filesystem API 操作
- 编程任务 (C-series): 代码生成、调试、重构
- 多模态 (M-series): 文档提取、图像理解、视频分析
数据集位于 datasets/claweval/ 目录。
训练数据
训练数据 sft_messages_iter6_cleaned.jsonl 包含 937 个高质量对话样本:
- 平均 reward: 0.844
- 覆盖 ClawEval 121.3% 的任务 (364/300)
- 包含多轮对话、工具调用、代码生成等场景
评测
完整评测流程(推荐)
1. 环境准备
# 克隆本仓库获取 ClawEval 数据集git clone https://huggingface.co/zhongweixie/qwen3vl-4b-claweval-loracd qwen3vl-4b-claweval-lora # 安装依赖pip install transformers peft torch vllm==0.6.1 openai # 配置 API Keys(评测需要)cat > api_keys.sh << 'EOF'export ANTHROPIC_AUTH_TOKEN="your-anthropic-token" # 必需export OPENROUTER_API_KEY="your-openrouter-key" # 可选EOF source api_keys.sh
⚠️ 重要:必须设置 ANTHROPIC_AUTH_TOKEN,否则所有任务 completion=0
2. 合并 LoRA(推荐)
# 方法 A: 使用 Python 脚本python << 'EOF'from transformers import AutoModelForCausalLM, AutoTokenizerfrom peft import PeftModel print("加载基座模型...")base = AutoModelForCausalLM.from_pretrained( 'Qwen/Qwen3-VL-4B-Instruct', trust_remote_code=True, device_map="cpu" # 合并时用 CPU 避免 OOM) print("加载 LoRA adapter...")model = PeftModel.from_pretrained(base, '.') print("合并权重...")merged = model.merge_and_unload() print("保存合并后的模型...")merged.save_pretrained('./merged') tokenizer = AutoTokenizer.from_pretrained( 'Qwen/Qwen3-VL-4B-Instruct', trust_remote_code=True)tokenizer.save_pretrained('./merged')print("✅ 合并完成: ./merged")EOF # 方法 B: 如果 OOM,使用工具脚本# wget https://raw.githubusercontent.com/your-repo/tools/merge_lora.py# python merge_lora.py --base Qwen/Qwen3-VL-4B-Instruct --adapter . --output ./merged
3. 启动模型服务
# 使用 vLLM 启动推理服务python -m vllm.entrypoints.openai.api_server \ --model ./merged \ --port 8210 \ --served-model-name qwen4b-sft \ --gpu-memory-utilization 0.9 \ --trust-remote-code # 验证服务curl http://localhost:8210/v1/models
4. 运行 ClawEval 评测
# 安装 Harbor 评测框架pip install harbor-agent # ⚠️ 务必先 source API keyssource api_keys.sh # 快速测试(单任务)python -m harbor.cli run-batch \ --adapter claude_code \ --model-name qwen4b-sft \ --base-url http://localhost:8210 \ --anthropic-base-url http://localhost:8210 \ --tasks-dir datasets/claweval \ --filter T001zh_email_triage \ --output-dir jobs/quick_test # 完整评测(300 任务,约 2-4 小时)python -m harbor.cli run-batch \ --adapter claude_code \ --model-name qwen4b-sft \ --base-url http://localhost:8210 \ --anthropic-base-url http://localhost:8210 \ --tasks-dir datasets/claweval \ --output-dir jobs/full_eval_$(date +%Y%m%d_%H%M%S)
5. 查看评测结果
# 查看汇总结果EVAL_DIR=$(ls -td jobs/full_eval_* | head -1)cat $EVAL_DIR/batch_results.json | jq '.summary' # 输出示例:# {# "avg_reward": 0.547,# "avg_completion": 0.523,# "avg_safety": 1.0,# "avg_robustness": 0.989,# "num_valid": 298,# "total_tasks": 300# } # 查看分类别统计cat $EVAL_DIR/batch_results.json | jq '.by_category' # 查看单个任务详情cat $EVAL_DIR/T001zh_email_triage__*/result.json | jq '.verifier_result.rewards'
常见问题
Q: 评测结果 completion=0 但无报错?
A: 未 source api_keys.sh,执行 source api_keys.sh 后重新运行。
Q: Docker DNS 解析失败?
A: 添加 DNS 配置:
cat > /tmp/dns-fix.yaml << 'EOF'services: main: dns: - 8.8.8.8 - 8.8.4.4EOF # 评测时添加参数python -m harbor.cli run-batch \ --extra-docker-compose /tmp/dns-fix.yaml \ ...
Q: vLLM OOM?
A: 降低 --gpu-memory-utilization 或使用 --tensor-parallel-size 2(双卡)。
性能对比
Table with columns: 模型, 大小, 下载时间 (100Mbps), 加载内存| 模型 | 大小 | 下载时间 (100Mbps) | 加载内存 |
|---|
| 完整模型 | 8.3GB | ~11分钟 | 8.3GB |
| LoRA (本仓库) | 253MB | ~20秒 | 253MB + 基座 |
相关链接
引用
@misc{qwen3vl4b-claweval-lora, title={Qwen3-VL-4B ClawEval LoRA}, author={Zhongwei Xie}, year={2026}, url={https://huggingface.co/zhongweixie/qwen3vl-4b-claweval-lora}}
License
本 adapter 继承 Qwen3-VL 的 Apache 2.0 许可证。