一站式大模型与多模态LLM开发平台
ms-swift 是由魔搭社区(ModelScope) 提供的一个一站式 大模型(LLM)和多模态大模型(MLLM)训练、微调、推理、评估、量化与部署 的统一框架。你可以把它理解为大模型领域的"操作系统 "或"工作台",它封装了从模型获取到最终产品落地的复杂链路,让开发者能更专注于创意和业务逻辑本身。
目前,ms-swift 已经支持了 600+ 款纯文本大模型和 300+ 款多模态大模型,涵盖了主流模型如 Qwen3、DeepSeek-R1、LLaMA4、InternVL3.5 等,并且对热门模型提供近乎"Day-0"的即时支持。
✨ 核心特性:为什么选择 ms-swift?
ms-swift 的强大之处在于其全流程覆盖 和技术深度。以下是它的核心能力概览:
-
广泛的模型与硬件支持:支持海量模型的同时,也兼容多种硬件,包括NVIDIA(A100/A10/RTX系列)、华为昇腾NPU、CPU、MPS等,为国产化替代提供了坚实支撑。
-
轻量级与参数高效微调 :集成了几乎所有的微调技术,如 LoRA、QLoRA、DoRA 等,即使只有24GB显存的消费级显卡(如RTX 3090),也能轻松微调7B-14B级别的大模型。
-
极致的内存与性能优化:
-
训练优化 :支持 Flash-Attention 2/3 、GaLore 、UnSloth 等技术,大幅降低显存消耗,并将训练速度提升100%以上。
-
推理加速 :无缝集成 vLLM 、SGLang 和 LmDeploy 三大高性能推理引擎。正如你之前了解到的,这可以实现最高3倍的推理吞吐量提升和40%的首字延迟下降。
-
-
多模态与强化学习 :不仅支持纯文本,还全面支持图像、视频、音频等多模态数据的训练与推理。同时,内置了丰富的强化学习算法(如 GRPO、DPO、PPO 等),方便进行人类对齐训练。
-
友好的用户交互 :提供命令行 、Python API 以及 Web-UI 界面三种使用方式。你可以通过拖拽式界面完成训练、推理、量化等全链路操作,极大降低了使用门槛。
⚙️ 原理架构:它是如何工作的?
ms-swift 的设计哲学是"以任务为中心",其核心原理可以概括为 "统一抽象" 和 "插件化"。
-
分层架构:框架通常分为三层:
-
用户接口层:提供统一的命令行、API和Web界面,接收用户的指令(如"微调Qwen模型")。
-
核心调度层:解析用户指令,自动进行环境检测(硬件、CUDA版本)、模型下载、数据集加载,并根据任务类型(训练、推理、评估)调度最佳的执行引擎。
-
后端执行层 :对接具体的计算引擎。例如,微调时可能使用
DeepSpeed或Megatron-LM;推理时则根据你的设置或硬件条件,自动选择并调用vLLM或SGLang的高效实现。
-
-
关键技术实现:
-
LoRA等微调技术 :通过在预训练模型的关键层(如注意力层的
q_proj,v_proj)旁路添加低秩矩阵,训练时只更新这些少量参数,从而将计算量降低几个数量级。 -
vLLM的PagedAttention:借鉴操作系统虚拟内存的分页思想,将KV缓存划分为固定大小的"内存块",按需分配和复用,解决了长文本推理时显存碎片化和冗余存储的问题,大幅提升了吞吐量。
-
模型量化 :通过 GPTQ 、AWQ 等技术,将模型权重从16位浮点(FP16)压缩到4位或8位整数,在几乎不损失精度的情况下,将模型体积减小60-70%,使其能在更低显存的设备上运行。
-
🚀 安装与快速上手
1. 环境安装
推荐使用 conda 创建一个干净的环境:
bash
# 创建环境 (Python 3.9 - 3.11 均可)
conda create -n swift_env python=3.10 -y
conda activate swift_env
# 安装 PyTorch (请根据你的CUDA版本选择命令,这里以CUDA 11.8为例)
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
# 安装 ms-swift
pip install ms-swift -U
# 或者从源码安装最新开发版
# pip install git+https://github.com/modelscope/ms-swift.git
安装完成后,你可以通过 swift --help 查看所有可用的命令。
2. 数据准备
ms-swift 支持自定义数据集。最通用的格式是 JSONL ,每行一个样本,遵循类似 messages 的对话格式:
json
{"messages": [{"role": "user", "content": "解释什么是机器学习?"}, {"role": "assistant", "content": "机器学习是..."}]}
{"messages": [{"role": "user", "content": "写一首关于春天的诗"}, {"role": "assistant", "content": "春风又绿江南岸..."}]}
你也可以包含 system 字段来设定系统提示词。
🛠️ 实战演练:微调与推理一个模型
下面我们以微调 Qwen2.5-7B-Instruct 模型为例,演示 ms-swift 的核心用法。这个例子可以在单张24GB显存的显卡(如RTX 3090)上运行。
1. 微调 (Supervised Fine-Tuning, SFT)
使用 swift sft 命令,我们进行LoRA微调,让模型学会"自我认知"。
bash
CUDA_VISIBLE_DEVICES=0 \
swift sft \
--model Qwen/Qwen2.5-7B-Instruct \
--train_type lora \
--dataset 'AI-ModelScope/alpaca-gpt4-data-zh#500' \
'AI-ModelScope/alpaca-gpt4-data-en#500' \
'swift/self-cognition#500' \
--torch_dtype bfloat16 \
--num_train_epochs 1 \
--per_device_train_batch_size 1 \
--per_device_eval_batch_size 1 \
--learning_rate 1e-4 \
--lora_rank 8 \
--lora_alpha 32 \
--target_modules all-linear \
--gradient_accumulation_steps 16 \
--output_dir output \
--model_author "你的名字" \
--model_name "你的助手名"
参数解读:
-
--model: 指定要微调的模型ID(魔搭或HuggingFace都会自动下载)。 -
--train_type lora: 使用LoRA进行轻量微调。 -
--dataset: 指定训练数据集,这里混合了中英文指令数据和自我认知数据。#500表示只取500条样本以快速演示。 -
--target_modules all-linear: LoRA适配器作用于所有线性层,这是效果较好的常见设置。 -
--model_author/--model_name: 在自我认知数据集中,将模型的作者和名字替换为你指定的内容。
2. 推理 (Inference)
微调完成后,我们可以使用 swift infer 命令来测试模型效果。这里展示了两种方式:基础推理和使用 vLLM 加速推理。
bash
# 方式一:使用基础Transformers进行推理(指定微调产生的checkpoint路径)
CUDA_VISIBLE_DEVICES=0 \
swift infer \
--adapters output/vx-xxx/checkpoint-xxx \
--stream true \
--temperature 0
# 方式二:合并LoRA权重并使用vLLM加速推理(体验3倍速!)
CUDA_VISIBLE_DEVICES=0 \
swift infer \
--adapters output/vx-xxx/checkpoint-xxx \
--merge_lora true \
--infer_backend vllm \
--max_model_len 8192 \
--temperature 0
启动推理后,你可以直接在命令行与模型对话。你可以问"你是谁?",微调后的模型会回答它是你设定的"你的助手名",由"你的名字"创造,而不是Qwen原版的回答。
🌐 部署服务
ms-swift 可以将微调后的模型一键部署成兼容 OpenAI API 格式的服务,方便其他应用(如你之前提到的ComfyUI)调用。
bash
# 部署服务
CUDA_VISIBLE_DEVICES=0 \
swift deploy \
--adapters output/vx-xxx/checkpoint-xxx \
--merge_lora true \
--infer_backend vllm \
--served_model_name my-qwen-model \
--port 8000
服务启动后,你可以使用标准的 openai Python库来访问它:
python
from openai import OpenAI
client = OpenAI(base_url="http://localhost:8000/v1", api_key="EMPTY")
response = client.chat.completions.create(
model="my-qwen-model",
messages=[{"role": "user", "content": "杭州的省会是哪里?"}],
stream=True
)
for chunk in response:
print(chunk.choices[0].delta.content, end="", flush=True)
💡 总结
ms-swift 不仅仅是一个工具,它是一个为大模型时代的开发者量身定制的"瑞士军刀"。它将复杂的分布式训练、高性能推理、模型量化等技术难题封装在简洁的接口之下,让你能够:
-
用几行命令完成模型的微调和部署。
-
在消费级硬件上玩转前沿大模型。
-
通过标准API,轻松地将AI能力集成到你的现有系统(如ComfyUI、Web应用)中。
要让ms-swift为ComfyUI加速,最核心的方法就是采用 "API解耦"模式。简单来说,就是把ComfyUI作为前端操作界面,把ms-swift作为后端高性能推理引擎,两者通过标准的API接口进行通信。
接下来,我将为你梳理出四种具体的方法,并附上详细的操作步骤,你可以根据自己的技术背景和需求来选择。
🚀 方法一:一键部署ms-swift服务 + 通用HTTP节点(最快上手)
这是最直接、最快速的方式,适合所有用户,特别是希望快速体验的设计师和创作者。
-
第一步:部署ms-swift推理服务
在你的服务器或本地带有GPU的机器上,使用ms-swift的一键脚本启动一个兼容OpenAI API格式的服务。这是整个加速方案的核心,因为ms-swift后端集成了vLLM等高性能引擎,能带来3倍的推理速度提升。
bash
# 推荐使用vLLM后端启动Qwen-VL服务,开启推理加速 swift deploy \ --model_type qwen-vl-chat \ --infer_backend vllm \ --port 8000 \ --gpu_memory_utilization 0.9 \ --max_model_len 32768关键参数说明:
-
--infer_backend vllm:指定使用vLLM引擎,这是实现推理吞吐量提升3倍的关键。 -
--quantization_bit 4:如果你的显存有限(如RTX 3090/4090),可以加上这个参数进行4bit量化,将7B模型显存需求降至约6-10GB。 -
服务启动后,会暴露一个API地址,例如
http://你的IP:8000/v1/chat/completions。
-
-
第二步:在ComfyUI中配置通用HTTP节点
由于目前没有官方的专用节点,你需要使用社区开发的通用HTTP请求节点(如
ComfyUI-to-API或ComfyUI-Simple-API)。-
通过ComfyUI管理器,搜索并安装一个支持POST请求和JSON解析的自定义节点。
-
在画布中添加该节点,并进行如下配置:
-
URL :填写上一步ms-swift服务的API地址,例如
http://127.0.0.1:8000/v1/chat/completions。 -
请求头 (Header) :添加
Content-Type: application/json。 -
请求体 (Body):按照OpenAI的格式构造JSON。对于多模态任务,你需要将图像处理为Base64编码或提供可访问的URL。
json
{ "model": "qwen-vl-chat", "messages": [ { "role": "user", "content": [ {"type": "text", "text": "请详细描述这张图片"}, {"type": "image_url", "image_url": {"url": "你的图像URL或Base64数据"}} ] } ], "max_tokens": 512 }
-
-
将节点的输出(通常是模型返回的文本)连接到后续的文生图、文生视频等节点,形成一个完整的"理解-生成"创作闭环。
-
🛠️ 方法二:开发专用ComfyUI自定义节点(更强大、可定制)
如果你有一定的Python开发经验,可以开发一个专用的自定义节点,实现更深度的集成和更优的体验。这种方法能更好地处理异步请求、错误重试等复杂逻辑。
-
核心思路:创建一个ComfyUI节点,其内部逻辑是向ms-swift服务发起HTTP请求并获取结果。可以借鉴下面这个简化版的节点示例:
python
# 将此文件放在 ComfyUI/custom_nodes/ 目录下 import requests import json class SwiftInferenceNode: def __init__(self): # 默认的ms-swift服务地址 self.url = "http://localhost:8000/v1/chat/completions" @classmethod def INPUT_TYPES(cls): return { "required": { "prompt": ("STRING", {"multiline": True, "default": "描述这张图片"}), "image_data": ("IMAGE",), # 直接从ComfyUI连接图像 } } RETURN_TYPES = ("STRING",) FUNCTION = "run" CATEGORY = "AI-Inference/ms-swift" def run(self, prompt, image_data): # 在这里需要将ComfyUI的image tensor转换为Base64 # ... (图像格式转换代码) headers = {"Content-Type": "application/json"} # 构造支持多模态的payload payload = { "model": "qwen-vl-chat", "messages": [{ "role": "user", "content": [ {"type": "text", "text": prompt}, {"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{base64_image}"}} ] }], "max_tokens": 512 } try: response = requests.post(self.url, headers=headers, json=payload, timeout=60) result = response.json() generated_text = result['choices'][0]['message']['content'] return (generated_text,) except Exception as e: raise RuntimeError(f"调用ms-swift服务失败: {e}")进阶优化 :对于生产环境,建议使用
aiohttp实现异步非阻塞请求,并加入自动重试机制,防止UI卡死。
⚙️ 方法三:利用ms-swift命令行工具进行工作流编排(高级用户)
ms-swift本身提供了强大的命令行工具,你可以将这些命令与ComfyUI的外部调用功能结合,实现更复杂的任务,例如在ComfyUI中触发一个模型微调任务。
- 场景示例:当你在ComfyUI中生成了不满意的结果时,可以通过一个"反馈节点"将不良案例和修正后的文本收集起来,然后触发一个shell命令,在后台用这些新数据对模型进行增量微调(LoRA)。微调完成后,再自动重启ms-swift服务加载新权重。这需要你编写一些胶水代码来协调ComfyUI和命令行。
💡 方法四:使用预集成镜像(开箱即用)
对于不想折腾环境配置的用户,可以直接使用一些云平台提供的预集成镜像,如GitCode上的AI镜像,这些镜像已经预装了ms-swift、CUDA、PyTorch等所有依赖。
- 操作步骤 :选择一个包含ms-swift的镜像创建云实例,登录后通常有一个一键启动脚本(如
/root/yichuidingyin.sh),通过交互式菜单选择"启动推理服务",然后获取服务地址,再按照"方法一"的第二步连接到你的ComfyUI即可。
📝 方法汇总与选型建议
为了让你更清晰地选择,我整理了一个对比表格:
| 实现方法 | 加速原理 | 核心步骤 | 适用人群 | 关键优势 |
|---|---|---|---|---|
| 方法一:一键部署+通用节点 | 后端由ms-swift(vLLM)加速 | 1. swift deploy 启动服务 2. ComfyUI安装通用HTTP节点并配置API |
所有用户,快速体验 | 上手最快,无需编程 |
| 方法二:开发专用自定义节点 | 后端加速 + 前端逻辑优化 | 1. 服务端同方法一 2. 开发Python节点处理图像、请求、重试 | Python开发者,追求深度集成 | 体验最佳,可定制化处理数据流和错误 |
| 方法三:命令行工具编排 | 利用ms-swift训练/推理全能力 | 1. 服务端部署 2. 在ComfyUI中封装命令调用 | 高级用户/研究员 | 能力最强,可触发微调等复杂任务 |
| 方法四:预集成镜像 | 环境预置,一键启动 | 1. 选择并启动预装ms-swift的云镜像 2. 同方法一第二步 | 怕麻烦的用户 | 零配置,解决所有环境依赖 |
总结一下 :对于绝大多数用户,方法一是最快捷的路径 ,能让你在几分钟内体验到ms-swift带来的加速效果。如果你有开发能力并希望将这个能力产品化,方法二是更优雅的长期方案。