ms-swift 训练、微调、推理、评估、量化与部署的统一框架。配合comfyui使用

一站式大模型与多模态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/3GaLoreUnSloth 等技术,大幅降低显存消耗,并将训练速度提升100%以上。

    • 推理加速 :无缝集成 vLLMSGLangLmDeploy 三大高性能推理引擎。正如你之前了解到的,这可以实现最高3倍的推理吞吐量提升和40%的首字延迟下降。

  • 多模态与强化学习 :不仅支持纯文本,还全面支持图像、视频、音频等多模态数据的训练与推理。同时,内置了丰富的强化学习算法(如 GRPO、DPO、PPO 等),方便进行人类对齐训练。

  • 友好的用户交互 :提供命令行Python API 以及 Web-UI 界面三种使用方式。你可以通过拖拽式界面完成训练、推理、量化等全链路操作,极大降低了使用门槛。

⚙️ 原理架构:它是如何工作的?

ms-swift 的设计哲学是"以任务为中心",其核心原理可以概括为 "统一抽象""插件化"

  1. 分层架构:框架通常分为三层:

    • 用户接口层:提供统一的命令行、API和Web界面,接收用户的指令(如"微调Qwen模型")。

    • 核心调度层:解析用户指令,自动进行环境检测(硬件、CUDA版本)、模型下载、数据集加载,并根据任务类型(训练、推理、评估)调度最佳的执行引擎。

    • 后端执行层 :对接具体的计算引擎。例如,微调时可能使用 DeepSpeedMegatron-LM;推理时则根据你的设置或硬件条件,自动选择并调用 vLLMSGLang 的高效实现。

  2. 关键技术实现

    • LoRA等微调技术 :通过在预训练模型的关键层(如注意力层的 q_proj, v_proj)旁路添加低秩矩阵,训练时只更新这些少量参数,从而将计算量降低几个数量级。

    • vLLM的PagedAttention:借鉴操作系统虚拟内存的分页思想,将KV缓存划分为固定大小的"内存块",按需分配和复用,解决了长文本推理时显存碎片化和冗余存储的问题,大幅提升了吞吐量。

    • 模型量化 :通过 GPTQAWQ 等技术,将模型权重从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-APIComfyUI-Simple-API)。

    1. 通过ComfyUI管理器,搜索并安装一个支持POST请求和JSON解析的自定义节点。

    2. 在画布中添加该节点,并进行如下配置:

      • 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
        }
    3. 将节点的输出(通常是模型返回的文本)连接到后续的文生图、文生视频等节点,形成一个完整的"理解-生成"创作闭环。

🛠️ 方法二:开发专用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带来的加速效果。如果你有开发能力并希望将这个能力产品化,方法二是更优雅的长期方案。

相关推荐
GEO行业研究员1 小时前
AI是否正在重构个体在健康相关场景中的决策路径——基于系统建模与决策链条结构分析的讨论
人工智能·算法·重构·geo优化·医疗geo·医疗geo优化
youcans_2 小时前
【AI辅助编程】ROP 图像预处理
图像处理·人工智能·ai编程·辅助编程
撩妹小狗2 小时前
科赫雪花--Python--数学原理--turtle绘图
python·线性代数·几何学
jerryinwuhan2 小时前
LORA时间
人工智能
码农葫芦侠2 小时前
Vercel Labs Skills:AI 编程安装「技能Skills」的工具
人工智能·ai·ai编程
宝贝儿好2 小时前
【强化学习】第十章:连续动作空间强化学习:随机高斯策略、DPG算法
人工智能·python·深度学习·算法·机器人
未来之窗软件服务2 小时前
AI人工智能(二十三)错误示范ASR 语音识别C#—东方仙盟练气期
人工智能·c#·语音识别·仙盟创梦ide·东方仙盟
金智维科技官方2 小时前
智能体,重构企业自动化未来
人工智能·自动化·agent·智能体·数字员工
桂花饼2 小时前
谷歌正式发布 Gemini 3.1 Pro:核心智能升级与国内极速接入指南
人工智能·qwen3-next·claude-sonnet·sora2pro·gemini-3.1pro·grok-420-fast·openclaw 配置教程