ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

拼接微调:0.69B参数的中文多模态小模型

拼接微调:0.69B参数的中文多模态小模型 拼接微调0.69B参数的中文多模态小模型【免费下载链接】happy-llm 从零开始构建大模型项目地址: https://gitcode.com/GitHub_Trending/ha/happy-llm这个实验做的事情很朴素把端侧多模态小模型SmolVLM2的语言模型换成Qwen3-0.6B再重建一层12M参数的特征映射层。得到的Qwen3-SmVL模型既有了视觉理解能力又保住了Qwen3原本的中文对话和函数调用。轻量微调8卡跑满全流程只要1.5小时。实验目标与约束动手之前先把四条硬性约束钉死参数量≤0.7B目标是在端侧部署场景下4G显存就能跑推理单卡显存≥40G2K文本长度的多模态微调并不轻松训练时长≤2小时方案必须能快速验证必须支持中文——这正是SmolVLM2最致命的短板最后一条是全部动机所在。SmolVLM2视觉能力很强但中文一句都听不懂Qwen3-0.6B中文 fluent却是个盲人。两个选手各缺一块拼图。方案选型为什么走拼接通向目标的路大概有三条。从零训练一个多模态小模型最正统但数据量和算力都不在一个量级直接用现成的中文VLM比如3B级的视觉语言模型又太重端侧部署直接出局。所以选了拼接保留SmolVLM2的SigLip-93M视觉模型和整套图像预处理流程把文本塔整个换成Qwen3-0.6B中间只重建一层特征映射层做维度对齐。就像给手机换CPU——屏幕和摄像头不动换掉处理器和主板转接件。新增可训练参数12M只占总参数的1.81%其余全是现成权重。动手过程第一步重写聊天模板把图像塞进Qwen3上下文两个模型的上下文格式chat template即告诉模型谁在说话、哪里该答的文本模板差异巨大。做法是把SmolVLM2的图像占位符改成Qwen3分词器里预留的多模态标记视觉特征直接插进Qwen3自己的上下文骨架里保留思考标签和函数调用等控制结构。这样换进来的Qwen3权重不会水土不服。这步最磨人模板用Jinja语言写变量作用域玄学原作者光改模板就花了2小时。第二步换语言模型别忘了嵌套参数核心替换就两行把Qwen3的backbone和输出头赋给SmolVLM2。smolvlm_model AutoModelForImageTextToText.from_pretrained(SmolVLM2-256M-Video-Instruct) qwen_model AutoModelForCausalLM.from_pretrained(Qwen3-0.6B) smolvlm_model.model.text_model qwen_model.model # 换语言模型 smolvlm_model.lm_head qwen_model.lm_head # 换输出头 smolvlm_model.image_token_id 151655 # Qwen3的图像占位符⚠️ 坑就在这Transformers的参数是层层嵌套的。vocab_size、image_token_id、eos_token_id这些关键量要在外层模型、内层model、config、text_config多处同步替换。只改顶层、漏掉内层图像特征就传不进去。症状极具迷惑性训练loss快速降到0.1以下梯度范数看着也到位了仿佛学得很好一到推理模型完全没有图像理解能力——等于闭着眼睛瞎聊。第三步重建768→1024的特征映射层SigLip输出768维Qwen3隐藏层是1024维原映射层没法复用重建一个就行。new_connector SmolVLMConnector( ConnectConfig(scale_factor4, vision_configVisionConfig(hidden_size768), text_configTextConfig(hidden_size1024)) ).to(device).to(torch.bfloat16) smolvlm_model.model.connector new_connector这个简单的MLP就是整个拼接的桥梁也是唯一从零开始训练的组件。第四步冻结主体只训12M的桥梁训练策略是冻结主体、微调接口冻住93M视觉模型和600M语言模型的参数只训练特征映射层加语言模型头共12M可训练参数占1.81%。配置走社区惯例每卡batch 1×梯度累加48卡等效batch 32学习率1e-4配cosine衰减warmup占10%步数bf16混合精度。数据集用整合了50个视觉任务的Cauldron按参数量1:10的比例采样6万条参与训练。数据说话完整训练1000步后验证损失稳定在0.58梯度范数走平说明模型已经学够。8张64G卡全程约1.5小时。效果对比非常直观。200步小批量阶段拿三只狗的照片问图中有什么动物模型自信地答兔子——能看图只是没学够。加到1000步后同样的图、同样的问题回答变成图中有三只狗中文对话和函数调用能力也原样保留模型参数量推理显存中文视觉能力Qwen3-0.6B0.6B约3GB✅❌SmolVLM2-256M0.256B约1GB❌✅Qwen3-SmVL0.69B约4GB✅✅参数只多了15%小模型就多了完整的感官。复现指南完整代码在教程目录中训练需要40G以上显存按顺序执行即可git clone https://gitcode.com/GitHub_Trending/ha/happy-llm cd happy-llm/Extra-Chapter/vlm-concatenation-finetune pip install -r requirements.txt bash download_resource.sh # 单卡小批量验证约20min/8卡 CUDA_VISIBLE_DEVICES0 python train.py ./cocoqa_train.yaml # 8卡完整训练约1.5h accelerate launch --num_processes 8 train.py ./full_train.yaml局限与下一步诚实地说目前结果还停在方案验证阶段训练数据全是英文Cauldron有169G但中文图文样本基本为零中文视觉问答目前靠的是拼接框架的外推仍需翻译合成补齐数据图像特征占0.8K~1.3K个token吃掉2K上下文的大部分优化图像分块策略是自然的改进点映射层全参微调已经够用但试试低秩适应LoRA只训练少量附加参数的方法挂到语言模型上还能再压训练成本数据集优化、视觉位置编码、模型测评与对齐这三个方向系列后续章节会展开。 完整实验记录见 Extra-Chapter/vlm-concatenation-finetune/README.md附录索引在 Extra-Chapter/Readme.md项目主教程与其他章节在 docs/ 目录下。【免费下载链接】happy-llm 从零开始构建大模型项目地址: https://gitcode.com/GitHub_Trending/ha/happy-llm创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表