ms-swift模型推送:将微调结果发布到ModelScope全步骤
1. 为什么要把微调模型推送到ModelScope
你花了几小时甚至几天时间,用ms-swift完成了Qwen2.5-7B-Instruct的LoRA微调,训练日志里写着“best_model_checkpoint”和“last_model_checkpoint”,本地磁盘上多出了一个checkpoint-873文件夹——但这时模型还只是你电脑里的一个临时产物。
它没名字、没主页、没文档、没人能复现,更谈不上被别人使用或引用。就像写完一篇论文却锁在抽屉里,再好的成果也失去了传播价值。
把微调结果推送到ModelScope,不是简单的“上传文件”,而是完成一次模型资产的正式发布:
- 它会获得唯一的模型ID(如
your-name/qwen2.5-7b-instruct-finetuned) - 自动生成可交互的在线Demo界面,访客点开就能试用
- 支持一键下载、一键部署、一键推理,降低他人使用门槛
- 被ModelScope社区索引,出现在搜索结果、排行榜和推荐流中
- 可关联论文、技术博客、评测报告,构建完整的技术叙事
更重要的是,ms-swift的export --push_to_hub命令,把整个流程压缩成一条命令——不需要手动打包、改配置、写README、生成卡片图。它自动读取训练时保存的参数、模板、系统提示词,甚至能根据数据集自动标注任务类型(如“指令微调”“DPO偏好学习”),让发布这件事真正变得轻量、可靠、可复现。
本文不讲原理、不堆参数,只聚焦一件事:从你本地的checkpoint文件夹出发,一步步走到ModelScope模型页面上线成功。每一步都经过实测验证,所有命令可直接复制粘贴运行。
2. 推送前的三项关键准备
2.1 确认你的微调输出结构是否合规
ms-swift要求checkpoint目录必须包含完整的训练元信息,否则export命令无法自动还原模型配置。请检查你的checkpoint路径(例如output/v0-20240901-141800/checkpoint-873)下是否存在以下三个核心文件:
args.json:记录全部训练参数(--model、--train_type、--template_type等)configuration.json:模型结构定义(由原始模型自带,ms-swift会保留)adapter_config.json:LoRA配置(lora_rank、target_modules等)
正确示例:
ls output/v0-20240901-141800/checkpoint-873/ adapter_config.json args.json configuration.json pytorch_model.bin tokenizer.model
❌ 常见问题:
- 如果只有
pytorch_model.bin而没有args.json,说明训练时未启用--save_args true(默认开启,一般不会出错)- 如果
args.json里model_id_or_path是相对路径(如../qwen2-7b-instruct),请确保该路径在目标机器上可访问,或改用ModelScope模型ID(如Qwen/Qwen2.5-7B-Instruct)
2.2 获取并配置ModelScope SDK Token
推送模型需要身份认证。这不是GitHub的Personal Access Token,而是ModelScope专属的User Access Token。
操作路径:
- 登录 ModelScope官网
- 点击右上角头像 → 「个人设置」→ 「Access Tokens」
- 点击「创建新Token」→ 勾选
write权限(仅需此项)→ 生成并复制
将Token保存为环境变量(推荐),避免明文写入命令:
# Linux/macOS echo "export MS_TOKEN='hf_xxx...xxx'" >> ~/.bashrc source ~/.bashrc # Windows PowerShell $env:MS_TOKEN="hf_xxx...xxx"验证是否生效:
python -c "from modelscope import HubApi; print(HubApi().get_user_info())"应返回你的用户名和邮箱。若报错Authentication failed,请检查Token是否过期或权限不足。
2.3 规划你的模型ID与仓库可见性
ModelScope模型ID格式为用户名/模型名,例如myname/qwen2.5-7b-instruct-zh-customer-service。命名需遵守:
- 用户名:必须是你ModelScope账户的注册名(非昵称)
- 模型名:小写字母、数字、短横线(
-)组成,长度≤64字符 - 避免敏感词:
admin、root、system、test等易被系统拦截
关于仓库可见性:
- 公开(Public):默认选项,任何人可查看、下载、fork。适合开源项目、技术分享
- 私有(Private):仅自己和授权协作者可见。企业用户可用,但需注意:私有模型无法被ModelScope评测平台扫描,也不会出现在搜索结果中
实用建议:首次发布建议设为公开。你可以在模型页面上线后,进入「Settings」→ 「Change visibility」随时切换。
3. 三步完成模型推送:命令行实操详解
3.1 第一步:执行export命令,生成可发布的模型包
这是最关键的一步。swift export不仅合并LoRA权重,更会重建一个符合Hugging Face/ModelScope标准的模型仓库结构。
CUDA_VISIBLE_DEVICES=0 \ swift export \ --adapters output/v0-20240901-141800/checkpoint-873 \ --push_to_hub true \ --hub_model_id 'your-username/qwen2.5-7b-instruct-zh-customer-service' \ --hub_token $MS_TOKEN \ --use_hf false \ --safe_serialization true \ --overwrite_generation_config true参数逐项说明(非技术术语版):
--adapters:指向你的checkpoint文件夹,ms-swift会自动读取其中的args.json来还原原始模型路径和LoRA配置--push_to_hub true:告诉命令“最终目标是上传”,而非仅本地保存--hub_model_id:你规划好的模型ID,务必与2.3节一致--hub_token:前面获取的SDK Token,用$MS_TOKEN引用更安全--use_hf false:明确指定使用ModelScope而非Hugging Face(国内网络更稳)--safe_serialization true:用safetensors格式保存权重,加载更快、更安全(推荐)--overwrite_generation_config true:用训练时的--temperature、--max_new_tokens等参数覆盖默认生成配置,保证线上Demo行为与训练时一致
预期输出关键日志:
[INFO:swift] Loading model from /path/to/qwen2.5-7b-instruct... [INFO:swift] Merging LoRA adapters into base model... [INFO:swift] Saving merged model to /tmp/swift_export_XXXXX... [INFO:swift] Uploading to ModelScope: your-username/qwen2.5-7b-instruct-zh-customer-service [INFO:swift] Successfully pushed to https://www.modelscope.cn/models/your-username/qwen2.5-7b-instruct-zh-customer-service注意:如果遇到
OSError: Can't write config.json错误,大概率是--hub_model_id已存在且为私有仓库。请先删除旧仓库,或换一个ID。
3.2 第二步:等待上传完成,验证模型页面基础信息
命令执行成功后,打开浏览器访问:https://www.modelscope.cn/models/your-username/qwen2.5-7b-instruct-zh-customer-service
你会看到一个自动生成的模型页面,包含:
- 顶部卡片:模型名称、作者、最后更新时间、下载量(初始为0)
- 左侧菜单栏:「Files and versions」显示所有文件(
config.json、model.safetensors、tokenizer.model等) - 右侧预览区:一个可交互的Chat Demo(自动加载
--system提示词和qwen模板)
此时模型已可被他人下载:
from modelscope import snapshot_download model_dir = snapshot_download('your-username/qwen2.5-7b-instruct-zh-customer-service')但页面还缺少关键信息:你是谁、这个模型干什么用、怎么用它。这需要第三步手动完善。
3.3 第三步:编辑模型README.md,让技术价值被看见
ModelScope模型页的「Overview」内容完全来自仓库根目录下的README.md。ms-swift不会自动生成它,必须你手动编写。
点击模型页右上角「Edit files」→ 创建新文件 → 文件名填README.md→ 粘贴以下模板(根据你的实际情况修改方括号内内容):
--- license: apache-2.0 language: - zh - en tags: - qwen2.5 - instruction-tuning - lora - customer-service pipeline_tag: text-generation --- # Qwen2.5-7B-Instruct 中文客服微调模型 本模型基于通义千问Qwen2.5-7B-Instruct,使用[AI-ModelScope/alpaca-gpt4-data-zh](https://www.modelscope.cn/datasets/AI-ModelScope/alpaca-gpt4-data-zh)和自建客服对话数据,在ms-swift框架下完成LoRA微调。专注于提升中文场景下的**多轮对话理解**与**专业话术生成**能力。 ## 模型能力 - 准确识别用户咨询意图(售前咨询、售后问题、投诉建议) - 生成符合企业规范的回复话术(礼貌、简洁、无歧义) - 支持128K长上下文,可处理复杂工单描述 - 在RTX 4090上推理速度达28 tokens/s(batch_size=1) ## 快速开始 ```bash # 下载模型 from modelscope import snapshot_download model_dir = snapshot_download('your-username/qwen2.5-7b-instruct-zh-customer-service') # 使用ms-swift推理(需安装ms-swift) swift infer --model $model_dir --stream true --max_new_tokens 1024📜 训练细节
- 基座模型: Qwen/Qwen2.5-7B-Instruct
- 微调方法: LoRA (rank=8, alpha=32, target_modules=all-linear)
- 训练数据: 5000条中文客服对话 + 3000条通用指令数据
- 训练硬件: 单卡RTX 4090 (24GB)
- 训练时长: 2.3小时(873 steps)
- 评估指标: 在自建测试集上准确率86.2%
引用
如在研究中使用本模型,请引用:
@misc{qwen25-customer-service-2024, author = {Your Name}, title = {Qwen2.5-7B-Instruct Chinese Customer Service Fine-tuned Model}, year = {2024}, publisher = {ModelScope}, howpublished = {\url{https://www.modelscope.cn/models/your-username/qwen2.5-7b-instruct-zh-customer-service}} }**编辑要点提醒:** - `---`之间的YAML头信息必须保留,它控制模型分类、标签、许可证等元数据 - `pipeline_tag: text-generation` 是必需的,否则Demo无法加载 - `tags`里加入具体任务关键词(如`customer-service`、`medical-assistant`),方便他人搜索 - “训练细节”部分的数据要真实,哪怕写“训练数据:内部脱敏数据集”也比留空好 保存后,刷新模型页,「Overview」区域将立即更新为你编写的结构化内容。 ## 4. 进阶技巧:让模型更具专业性和传播力 ### 4.1 添加模型卡片图(Model Card Image),提升第一印象 ModelScope支持为模型页添加一张封面图,显示在搜索结果和模型列表中。它不是必须的,但能显著提升专业感。 制作要求: - 尺寸:1200×630像素(宽高比1.91:1) - 格式:PNG或JPG - 内容:建议包含模型名称、Logo(可选)、一句核心价值标语(如“专为中文客服场景优化”) 上传方式: 1. 在模型页点击「Edit files」 2. 上传图片文件,命名为 `card.jpg` 或 `card.png` 3. 编辑`README.md`,在YAML头中添加一行: ```yaml model_card_image: card.jpg4.2 配置在线Demo的默认参数,降低用户试用门槛
ModelScope自动生成的Chat Demo使用默认参数,但你的微调模型可能需要特定设置才能展现最佳效果。例如:
- 你的模型在
--temperature=0.1时回复最稳定 - 你需要默认开启
--system "你是一名资深客服专家" - 你想限制最大输出长度为512 tokens
这些都可以通过在README.md中添加demo配置块实现:
<!-- more --> <details> <summary>🔧 Demo Configuration</summary> ```json { "model": "your-username/qwen2.5-7b-instruct-zh-customer-service", "parameters": { "temperature": 0.1, "top_p": 0.9, "max_new_tokens": 512, "system": "你是一名资深客服专家,回答需专业、简洁、有同理心。" } }```保存后,用户点击Demo的「⚙ Settings」按钮,就能看到你预设的参数,并一键应用。
4.3 关联评测报告,用数据证明模型价值
如果你已用ms-swift的eval命令对模型做过评测(如在CMMLU、C-Eval子集上测试),可以将评测结果以表格形式嵌入README.md,放在「模型能力」下方:
## 评测结果 | 数据集 | 准确率 | 对比基座模型 | |--------|--------|--------------| | CMMLU-客服子集 | 86.2% | +12.5% | | C-Eval-法律常识 | 73.1% | +8.3% | | 自建测试集 | 89.7% | +15.2% | > 注:基座模型指Qwen/Qwen2.5-7B-Instruct官方版本,评测使用相同prompt和eval脚本。真实数据比任何宣传语都有说服力。即使只有一项评测,也值得展示。
5. 常见问题排查指南
5.1 问题:export命令卡在“Uploading to ModelScope”超过10分钟
可能原因与解法:
- 网络超时:国内部分地区访问ModelScope API不稳定。尝试添加
--timeout 600(单位秒)延长超时:swift export ... --timeout 600 - Token无效:重新生成Token并确认
$MS_TOKEN环境变量已生效。 - 磁盘空间不足:
export会先在内存/临时目录合并模型,再上传。确保/tmp或$HOME/.cache有≥15GB空闲空间。
5.2 问题:模型页Demo报错“Failed to load model”
典型错误信息:ValueError: Cannot find a valid configuration file
根本原因:export未正确生成config.json,常见于:
- checkpoint目录缺少
args.json --adapters路径末尾多了斜杠(如checkpoint-873/),导致路径解析失败
验证方法:
# 进入你的checkpoint目录,检查文件完整性 ls -l output/v0-20240901-141800/checkpoint-873/ | grep -E "(args|config)" # 应看到:args.json configuration.json adapter_config.json5.3 问题:推送后模型页显示“404 Not Found”
唯一原因:--hub_model_id中的用户名与你的ModelScope账户名不一致。
自查步骤:
- 访问
https://www.modelscope.cn/,登录后看右上角显示的用户名(如zhangsan) - 确保命令中写的是
--hub_model_id 'zhangsan/...',而非zhang_san或ZhangSan
ModelScope用户名区分大小写,且不支持下划线。
5.4 问题:如何更新已发布的模型?
ms-swift不支持增量推送。正确做法是:
- 在本地完成新一轮训练,得到新checkpoint(如
checkpoint-1200) - 用相同
--hub_model_id执行export命令 - 新版本将自动成为“Latest”,旧版本保留在「Files and versions」中可回溯
优势:所有历史版本均可下载,符合可复现性原则
❌ 注意:不要手动删除旧版本,否则依赖它的项目会失效
6. 总结:一次发布,长期受益
把微调模型推送到ModelScope,看似只是执行一条命令,实则完成了从“个人实验”到“公共资产”的关键跃迁。它带来的价值远超技术层面:
- 对你个人:模型页就是你的技术简历,每一次点击、下载、fork,都在为你的工程能力背书
- 对团队:统一的ModelScope ID让协作零成本——同事只需
snapshot_download('team/qwen2.5-customer')即可复现你的结果 - 对社区:你发布的模型可能成为他人微调的起点,形成正向循环:“你用Qwen2.5微调→别人用你的模型微调→社区涌现更多中文场景方案”
记住,ms-swift的设计哲学是“让复杂的事变简单”。export --push_to_hub正是这一理念的集中体现:它把模型序列化、权重合并、配置重建、API调用、Git提交等底层细节全部封装,留给你的只有一个清晰接口。
现在,你的checkpoint文件夹已经准备好。打开终端,复制那条swift export命令,按下回车——几秒钟后,一个属于你的、可被世界访问的大模型,就诞生了。
7. 下一步行动建议
- 立刻实践:用你最近一次的微调checkpoint,按本文第3节步骤完成首次推送
- 完善文档:花10分钟编辑
README.md,补充模型用途和使用示例 - 分享链接:将模型页URL发到技术群、论坛,收集第一批用户反馈
- 探索进阶:尝试用
--quant_bits 4 --quant_method awq导出量化版,减小模型体积
模型的价值,始于训练,成于发布。你离那个被千万人使用的AI,只差一次export。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。