概述

什么是模型微调?

模型微调是通过微调工具,使用独特的场景数据对平台的基础模型进行调整,帮助你快速定制一个更符合业务需求的大型模型。其优势在于对基础模型进行小幅调整以满足特定需求,相比于训练一个新模型,这种方法更为高效且成本更低。

何时适用微调?

你可以首先尝试调整提示或使用函数调用和检索功能等工具来改善结果。如果你发现基础模型及相关工具仍无法提供满意的答案或处理复杂的推理任务,则可以使用微调来获得更好的结果。 微调可以改善结果的典型场景包括:
  • 需要特定的风格或语气
  • 需要处理复杂任务
  • 需要提高输出可靠性
  • 新任务难以通过提示解释

有哪些微调方式?

SFT:训练后提升模型的指令遵循能力。 DPO:训练后模型输出内容更符合用户偏好。

有哪些训练方式?

LoRA微调

  • 含义: 通过在现有权重矩阵中添加低秩矩阵来调整模型,可以在增加少量计算负担的情况下有效调整模型。
  • 优势: 仅增加少量参数,参数效率高; 资源利用少,训练周期短

全参数微调

  • 含义: 调整预训练模型的所有参数以获得新模型。
  • 优势: 允许对模型进行全面调整,更好地适应新任务; 在有足够数据和计算资源的情况下,更有可能达到最佳性能。

哪些模型可以进行微调?

  • glm-4-0520(支持LoRA微调、全参数微调,云端私有化年套餐用户可用)
  • glm-4-air(支持LoRA微调、全参数微调,所有用户可用)
  • glm-4-air-250414(支持全参数微调,所有用户可用)
  • glm-4-flash(支持LoRA微调、全参数微调,所有用户可用)
  • glm-4-9b(支持LoRA微调、全参数微调,所有用户可用)
  • chatglm3-6b(支持LoRA微调,所有用户可用)
  • cogview-3(支持全参微调,所有用户可用)
  • glm-4v(支持LoRA微调,所有用户可用)
购买 开发者Pro权益 可体验glm-4-flash的LoRA微调训练和推理。

微调步骤

通常,完成模型微调包括以下步骤:
  1. 准备并上传训练数据
  2. 训练新的微调模型
  3. 部署并使用微调模型(仅文生文模型LoRA微调后支持公有池推理,其他情况均需部署后推理使用。)
  4. 评估结果,如有必要,返回步骤1

1. 准备训练数据

微调训练数据通常由一批包含输入和预期输出的数据组成,每条训练数据包含一个输入(Prompt)及其对应的预期输出。目前仅支持JSON格式文件上传训练数据。

数据集要求

一般来说,提供更多高质量的训练数据会得到更好的微调效果。反之,如果训练数据存在问题或缺陷,将会对微调结果产生负面影响。 更多高质量数据: 为了更好地微调模型,你需要提供至少数百条高质量的训练数据;最好由人工严格审核数据,以确保数据质量和微调结果。增加高质量的训练数据是改善微调结果的最佳且最可靠的方法。 根据训练目标调整数据分布: 在构建训练数据时,你需要根据实际业务场景的训练目标,注意构建和调整各类细分任务场景的训练数据分布,并尽量覆盖业务场景中所有可能的数据样本。如果你的训练目标是同时提升文本分类、信息抽取和文本生成的效果,你需要在训练数据中为这些类型的任务提供足够的训练数据。 避免有害数据: 为了确保你的数据隐私,平台不会审核你的数据。请确保你的数据不包含有害信息,包括但不限于色情、恐怖主义、政治敏感、低俗辱骂、隐私信息等。使用有害数据进行微调可能会导致微调后的模型容易生成有害内容,降低模型推理结果中敏感信息验证的通过率。更糟糕的是,一个严重有害的模型可能无法通过平台或相关监管机构的内容合规要求,并会被强制从平台移除。

数据集格式

大语言模型-SFT训练
  1. 数据集分类-文本生成
准备数据集格式如下所示,以JSON格式每行一条,存储在文件中并通过文件管理接口上传文件:
{"messages": [{"role": "system", "content": "你是一个乐于助人且知识渊博的AI助手。"},{"role": "user", "content": "请解释AlphaGo的基本原理。"}, {"role": "assistant", "content": "AlphaGo结合深度神经网络与树搜索算法,通过棋局数据进行训练,逐步提升棋力,能够判断围棋局势并选择最佳着法。"}]}
{"messages": [{"role": "system", "content": "你是一个乐于助人且知识渊博的AI助手。"},{"role": "user", "content": "列举一些健康饮食的重要原则。"}, {"role": "assistant", "content": "健康饮食的重要原则包括:均衡饮食,合理摄入各类营养素;多吃新鲜蔬果,适量饮水;少吃糖、油、盐,忌吃过量快餐;养成规律生活作息习惯,适量运动。"}]}
{"messages": [{"role": "system", "content": "你是一个乐于助人且知识渊博的AI助手。"},{"role": "user", "content": "给出一些改善睡眠质量的建议。"}, {"role": "assistant", "content": "改善睡眠质量的建议包括:保证睡眠时间,避免睡眠不足;睡前放松,避免刺激;养成规律作息时间,不要频繁熬夜;适量运动,但不要运动过度;睡前可以喝一杯热牛奶等温和饮料。"}]}
如果你不需要上传system prompt,只需删除该段落,如下所示:
{"messages": [{"role": "user", "content": "请解释AlphaGo的基本原理。"}, {"role": "assistant", "content": "AlphaGo结合深度神经网络与树搜索算法,通过棋局数据进行训练,逐步提升棋力,能够判断围棋局势并选择最佳着法。"}]}
  1. 数据集分类-文本生成(函数调用)
    目前仅glm-4-airglm-4-flashglm-4-9b模型全参微调支持该格式训练 若您希望微调函数调用能力,可用以下版本训练格式。注意,示例为结构清晰按如下展示,数据上传时需以JSON格式每行一条,存储在文件中并通过文件管理接口上传文件:
{
    "messages": [
        {
            "role": "system",
            "content": "You are a helpful assistant with access to the following functions to help the user. You can use the functions if needed.",
        },
        {
            "role": "user",
            "content": "Can you help me generate anagrams of the words 'listen' and 'race'?",
        },
        {
            "role": "assistant",
            "tool_calls": [
                {
                    "id": "TX92Jm8Zi",
                    "type": "function",
                    "function": {
                        "name": "generate_anagram",
                        "arguments": "{\"word\": \"listen\"}"
                    }
                }
            ]
        },
        {
            "role": "tool",
            "content": "{\"anagram\": \"silent\"}",
            "tool_call_id": "TX92Jm8Zi"
        }
        {
            "role": "assistant",
            "content": "The anagrams of the words 'listen' is 'silent'."
        },
        {
            "role": "user",
            "content": "That's amazing! You are so powerful."
        }
    ],
    "tools": [
        {
            "type": "function",
            "function": {
                "name": "generate_anagram",
                "description": "Generate an anagram of a given word",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "word": {
                            "type": "string",
                            "description": "The word to generate an anagram of"
                        }
                    },
                    "required": ["word"]
                }
            }
        }
    ]
}
大语言模型-DPO训练
  1. 数据集分类-文本生成(偏好对齐) 目前支持glm-4-air、glm-4-flash、glm-4-9b模型的DPO训练能力。训练数据中可标明输出偏好,让模型学习后可以在输出上进一步和用户期望的偏好进行对齐。注意,示例为结构清晰按如下展示,数据上传时需以JSON格式每行一条,存储在文件中并通过文件管理接口上传文件:
{
  "input": {
    "messages": [
      {
        "role": "user",
        "content": "请问可以告诉我北京今天的天气如何吗?"
      }
    ],
    "tools": [],
    "parallel_tool_calls": false
  },
  "preferred_output": [
    {
      "role": "assistant",
      "content": "今日天气以晴天为主,白天最高气温 25℃ ,夜间最低气温 11℃ ,昼夜温差较大,需注意及时调整衣物。"
    }
  ],
  "non_preferred_output": [
    {
      "role": "assistant",
      "content": "今天北京不是特别冷。"
    }
  ]
}
多模态模型
  1. 数据集分类-图像生成(单图)
    目前支持Cogview-3模型微调,您可以选择上传图片时选择http url或者base 64格式。使用base 64格式时url前缀需包含data:image/jpeg;base64, 注意,示例为结构清晰按如下展示,数据上传时需以JSON格式每行一条,存储在文件中并通过文件管理接口上传文件:
  • Http URL
{
  "messages": [{
    "role": "system",
    "content": "你是智谱AI公司的图片生成助手Cogview"},
  {
    "role": "user",
    "content": "一只黑色法式斗牛犬在纽约市摩天大楼的背景下被捕捉到飞行中的瞬间,身穿蓝色西装和红色斗篷,展现出超人的形象。它快乐的表情和张开的嘴巴传达出一种兴奋和顽皮的感觉。这个场景以惊人的真实感呈现,利用光线突出狗的特征,营造出一种生动的氛围,暗示着运动和英雄气概."
  },
  {
    "role": "assistant",
    "content": [{
      "type": "image_url",
      "image_url": {
        "url": "https://www.xxx/xx.jpeg"
      }
    }]
  }]
}
  
  • Base 64
{
  "messages": [{
    "role": "system",
    "content": "你是智谱AI公司的图片生成助手Cogview"},
  {
    "role": "user",
    "content": "一只黑色法式斗牛犬在纽约市摩天大楼的背景下被捕捉到飞行中的瞬间,身穿蓝色西装和红色斗篷,展现出超人的形象。它快乐的表情和张开的嘴巴传达出一种兴奋和顽皮的感觉。这个场景以惊人的真实感呈现,利用光线突出狗的特征,营造出一种生动的氛围,暗示着运动和英雄气概."
  },
  {
    "role": "assistant",
    "content": [{
      "type": "image_url",
      "image_url": {
        "url": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/.........."
      }
    }]
  }]
}
  1. 数据集分类-图像理解(单图) 目前支持GLM-4V模型微调,您可以选择上传图片时选择http url或者base 64格式。使用base 64格式时url前缀需包含前缀:data:image/jpeg;base64, 注意,示例为结构清晰按如下展示,数据上传时需以JSON格式每行一条,存储在文件中并通过文件管理接口上传文件:
  • Http URL
{
  "messages": [{
    "role": "system",
    "content": "你是智谱AI公司的AI助手GLM-4V。"
  },
  {
    "role": "user",
    "content": "图里是什么"
  },
  {
    "role": "user",
    "content": [
    {
      "type": "image_url",
      "image_url": {
        "url": "https://www.zhipuai.cn/assets/images/aboutus/company.jpeg"
      }
    }]
  },
  {
    "role": "assistant",
    "content": "这张图片展示了一张贴在墙上的通知"
  },
  {
    "role": "user",
    "content":"结合最近的新闻"
  },
  {
    "role": "assistant",
    "content": "南京市公安局刚刚报道,今年7月开始,全市查处了100次电动车违规。"
  }]
}
  • Base 64
{
  "messages": [{
    "role": "system",
    "content": "你是智谱AI公司的AI助手GLM-4V。"
  },
  {
    "role": "user",
    "content": "图里是什么"
  },
  {
    "role": "user",
    "content": [
    {
      "type": "image_url",
      "image_url": {
        "url": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/.........."
      }
    }]
  },
  {
    "role": "assistant",
    "content": "这张图片展示了一张贴在墙上的通知"
  },
  {
    "role": "user",
    "content":"结合最近的新闻"
  },
  {
    "role": "assistant",
    "content": "南京市公安局刚刚报道,今年7月开始,全市查处了100次电动车违规。"
  }]
}

数据集上传

入口1:微调数据页面 根据您需要微调的场景,目前可以选择数据集分类为大语言模型(chat)训练数据、大语言模型(function能力)训练数据。 Description 入口2:微调任务创建 您也可以直接在微调任务创建时选择上传新数据集,提交的数据集会自动更新到您的「微调数据」内 Description

2. 创建微调任务

如果你已经按照上述要求准备好了高质量的训练数据,现在可以创建微调任务来训练模型了。 你可以通过页面操作创建微调任务,入口如下: 微调任务入口1:微调任务 点击“创建微调任务”按钮。 Description Description 微调任务入口2:模型广场 鼠标放在指定模型卡片上,会展示出「体验」、「查看详情」按键。点击模型卡片的「查看详情」按钮,进入详情页点击模型微调。 智谱开放平台 智谱开放平台 创建微调任务时,你可以根据需要命名新模型并指定模型代码的后缀。其他参数设置请参考微调API接口文档。创建微调任务后,训练完成需要几分钟到几小时不等,具体取决于模型大小和数据集大小。我们会在训练完成后通过短信通知你。

3. 部署微调模型

模型部署入口:

入口1:私有实例 点击“创建部署任务”按钮,选择要部署的基础模型/微调模型。 智谱开放平台 智谱开放平台 入口2:模型广场 点击模型卡片的详情按钮(微调完成的模型会在模型生成一个微调模型卡片),进入「查看详情」点击「部署」按键。 成功部署后,您可以在该卡片的详情页面看到部署的信息。 智谱开放平台 智谱开放平台 你可以根据实际使用场景的并发需求选择部署实例的数量。实例部署需要一定时间(通常为10-30分钟,具体取决于模型大小)。我们会在部署完成后通过短信通知你。新部署的模型的模型编码、状态及实例信息可在私有实例 页面或模型广场 的模型详情页部署信息查看。

模型实例变更与取消部署

  1. 操作实例变更与模型部署取消
    您可以在模型广场的模型详情页或在私有实例 页面选择已经部署的模型进行实例数量变更或者取消部署。
  • 注意:取消部署动作将在操作后立即生效,取消后该部署模型无法再进行调用。
智谱开放平台 智谱开放平台
  1. 模型卡片删除
  • 当点击模型卡片「删除」按键后,该微调模型及基于该模型部署的模型将均被删除,无法调用。
智谱开放平台

4. 模型推理

1.模型编码获取 可公有池推理的模型可以直接复制模型编码,您也可以选择在测试效果后进行私有实例部署 Description 需要私有部署后推理的模型需要在部署后进行调用。部署后的编码请在模型广场对应模型卡片详情内或私有实例页面查看 Description
  1. 模型调用 你可以通过体验中心或API使用模型。在进行API请求时,你可以将你命名的新的模型代码作为model参数的值传递。

调用示例

安装 SDK
# 安装最新版本
pip install zai-sdk

# 或指定版本
pip install zai-sdk==0.0.1
验证安装
import zai
print(zai.__version__)
使用示例
from zai import ZhipuAiClient

# 初始化客户端
client = ZhipuAiClient(api_key="YOUR_API_KEY")

# 创建聊天完成请求
response = client.chat.completions.create(
    model="chatglm3-6b-1001",  # 填写你需要调用的模型名称
    messages=[
        {
            "role": "system",
            "content": "你是一个名为chatGLM的AI助手。"
        },
        {
            "role": "user",
            "content": "你好,请介绍一下自己。"
        }
    ],
    temperature=0.7
)

# 获取回复
print(response.choices[0].message.content)

5. 微调训练计费说明

模型分类

  1. 大语言模型:训练价格 = 数据集单轮训练tokens * epoch数 * 训练单价(xx元/千tokens)
  2. 文生图模型:训练价格 = 数据集单轮训练图片数*1024tokens * epoch数 x 训练单价(xx元/千tokens) — 单图片将被转换为1024tokens
  3. 图生文模型:训练价格 = (数据集单轮训练图片数*1600tokens+文字部分tokens) * epoch数 x 训练单价(xx元/千tokens)
  • 单图片将被转换为1600tokens

定价详情

模型定价页面