4 шага к точной настройке LLM: практическое руководство по построению больших доменных моделей с помощью SiliconCloud

Ранее SiliconCloud вышла в сеть с языковой модельюВстроенная функция точной настройки LoRA. Просто загрузив данные корпуса и создав задачу тонкой настройки, вы можете получить собственную тонко настроенную языковую модель.

В последнее время система тонкой настройки LLM онлайн LoRA компании SiliconCloud была расширена за счет использования моделей Qwen2.5-32B, Qwen2.5-14B и Llama-3.1-8B в качестве базовых моделей для тонкой настройки, что еще больше повышает удобство игры в тонкую настройку и снижает затраты на обучение и использование моделей для тонкой настройки.

 

На самом деле, тонкая настройка собственной модели большого языка - это очень просто. Используя функцию тонкой настройки SiliconCloud, вы можете подготовить всего несколько десятков обучающих корпораций, чтобы внести "значительные" изменения в вашу модель по сравнению с базовой моделью.

 

предварительная подготовка

Во-первых, необходимо четко определить, чего именно пытается добиться тонкая настройка. Часто тонкая настройка может помочь модели научиться чему-то, что не было включено в обучение, или выработать определенный отличительный лингвистический стиль.

Для разных целей наш подход будет отличаться. Например, если вы хотите, чтобы модель обучалась определенным знаниям о домене, вам нужны обучающие данные, содержащие вопросы и ответы, основанные на этих данных, а если вы хотите, чтобы модель обучалась определенному типичному стилю речи, вам нужны данные диалога с этим стилем.

 

Подготовка данных

Тонкая настройка модели LLM требует, чтобы данные предоставлялись в виде диалога со структурой данных, которая по сути совпадает с сообщением о вызове LLM. Можно сказать, что для создания тонко настраиваемых данных будет вызван интерфейс генерации текста.

Ниже приведен пример типичного фрагмента уточненных данных:

{"messages": [{"role": "system", "content": "你是消防系统专家"}, {"role": "user", "content": "家里的火灾报警器怎么安装?"}, {"role": "assistant", "content": "根据《家用火灾安全系统》(GB22370—2008)的规定,家用火灾报警器的安装应符合制造商的要求。具体来说,安装时应确保设备处于正常监视状态,并且连接到相应的火灾探测器和其他部件。安装位置应避免高温、潮湿和尘土较多的地方,以保证设备的正常运行。"}]}

 

Для тонкой настройки обычно необходимо подготовить десятки таких данных и сохранить их в виде файла "jsonl" по одной строке:

{"messages": [{"role": "system", "content": "你是消防系统专家"}, {"role": "user", "content": "家里的火灾报警器怎么安装?"}, {"role": "assistant", "content": "根据《家用火灾安全系统》(GB22370—2008)的规定,家用火灾报警器的安装应符合制造商的要求。具体来说,安装时应确保设备处于正常监视状态,并且连接到相应的火灾探测器和其他部件。安装位置应避免高温、潮湿和尘土较多的地方,以保证设备的正常运行。"}]}
{"messages": [{"role": "system", "content": "你是消防系统专家"}, {"role": "user", "content": "火灾报警器的电源要求是什么?"}, {"role": "assistant", "content": "根据《家用火灾安全系统》(GB22370—2008)的规定,家用火灾报警控制器的主电源应采用220V、50Hz交流电源,电源线输入端应设接线端子。备用电源应为可多次充放电的蓄电池,在不超过生产厂商规定的极限放电情况下,应能将电池在24小时内充至额定容量80%以上,再充48小时后应能充满。"}]}
{"messages": [{"role": "system", "content": "你是消防系统专家"}, {"role": "user", "content": "火灾报警器的声光信号有什么要求?"}, {"role": "assistant", "content": "根据《家用火灾安全系统》(GB22370—2008)的规定,火灾声警报器的声信号至少在一个方向上3米处的声压级应不小于75dB(A计权),且在任意方向上3米处的声压级应不大于120dB(A计权)。火灾光警报器的光信号在100lx~500lx环境光线下,25米处应清晰可见。"}]}
{"messages": [{"role": "system", "content": "你是消防系统专家"}, {"role": "user", "content": "火灾报警器的故障信号怎么处理?"}, {"role": "assistant", "content": "根据《家用火灾安全系统》(GB22370—2008)的规定,当发生与所连接部件之间的通讯故障、备用电源充电器与备用电源间连接线断路或短路、备用电源与其负载间连接线断路或短路、主电源欠压等故障时,家用火灾报警控制器应在100秒内发出故障声、光信号,并指示故障类型。故障声信号应能手动消除,再有故障信号输入时,应能再次启动。"}]}
{"messages": [{"role": "system", "content": "你是消防系统专家"}, {"role": "user", "content": "火灾报警器的自检功能怎么用?"}, {"role": "assistant", "content": "根据《家用火灾安全系统》(GB22370—2008)的规定,家用火灾报警控制器应能对本机进行功能检查(自检)。在执行自检功能期间,受其控制的外接设备和输出接点均不应动作。自检时间超过1分钟或不能自动停止自检功能时,其非自检部位和控制器本身的火灾报警功能不应受到影响。"}]}
{"messages": [{"role": "system", "content": "你是消防系统专家"}, {"role": "user", "content": "火灾报警器的信息显示有什么要求?"}, {"role": "assistant", "content": "根据《家用火灾安全系统》(GB22370—2008)的规定,采用数字、字母显示工作状态的家用火灾报警控制器应按显示火灾报警、监管报警及其他状态顺序由高至低排列信息显示等级。高等级的状态信息应优先显示,低等级状态信息显示不应影响高等级状态信息显示。显示的信息应与对应的状态一致且易于辨识。"}]}
{"messages": [{"role": "system", "content": "你是消防系统专家"}, {"role": "user", "content": "火灾报警器的声压级是多少?"}, {"role": "assistant", "content": "根据《家用火灾安全系统》(GB22370—2008)的规定,家用火灾报警控制器在各种报警状态下的声压级(正前方1米处)应不小于75dB(A计权)。"}]}
{"messages": [{"role": "system", "content": "你是消防系统专家"}, {"role": "user", "content": "可燃气体探测器怎么安装?"}, {"role": "assistant", "content": "根据《可燃气体报警控制器》(GB16808—2008)的规定,可燃气体探测器应按制造商的要求进行安装,并连接到可燃气体报警控制器上。安装位置应避免高温、潮湿和尘土较多的地方,以保证设备的正常运行。"}]}
{"messages": [{"role": "system", "content": "你是消防系统专家"}, {"role": "user", "content": "可燃气体探测器的报警功能有什么要求?"}, {"role": "assistant", "content": "根据《可燃气体报警控制器》(GB16808—2008)的规定,可燃气体探测器应具有低限报警或低限、高限两段报警功能。当有可燃气体报警信号输入时,控制器应在10秒内发出报警声、光信号,并保持至手动复位。"}]}
{"messages": [{"role": "system", "content": "你是消防系统专家"}, {"role": "user", "content": "如何检查火灾报警器的绝缘性能?"}, {"role": "assistant", "content": "根据《家用火灾安全系统》(GB22370—2008)的规定,通过绝缘电阻试验装置分别对试样的外部带电端子与机壳之间施加500V±50V直流电压,持续60秒±5秒后测量其绝缘电阻值。试样有绝缘要求的外部带电端子与机壳间的绝缘电阻值应不小于20MΩ;试样的电源输入端与机壳间的绝缘电阻值应不小于50MΩ。"}]}

 

Если в ходе повседневной деятельности мы накопили относительно большой объем высококачественных данных, мы можем начать тонкую настройку с создания файлов данных, отвечающих требованиям формата, путем простой очистки данных. Если накопленных данных недостаточно или процесс очистки сложнее, можно попытаться выполнить тонкую настройку с помощью больших моделей и построить данные с помощью моделей.

 

Далее мы используем пример, чтобы отработать процесс построения данных. Попробуем обучить большую модель "эксперта по пожаротушению", построив вопросы и ответы с использованием стандартов пожаротушения.

 

Данные о тектонической тонкой настройке

SiliconCloud предоставляет модель Qwen2.5 с 128 КБ контекстов, что более чем достаточно для покрытия довольно богатого контента.

Во-первых, нам нужно локально подготовить файл, который будет использоваться для построения данных, например "GB22370-2008 Domestic Fire Safety Systems.pdf".

Далее нам нужно извлечь содержимое файла, записать подсказку и заставить Qwen Big Model генерировать данные, удовлетворяющие вышеуказанным требованиям. Это можно сделать в коде или с помощью Dify и другие интерфейсные инструменты для завершения работы.

Возьмем пример настройки рабочего процесса в Dify:

1. Загружается файл конфигурации узла Start, заполняются поля System Prompt в учебном корпусе;

2. Используйте узел извлечения документа и узел кода, поставляемые с Dify, чтобы объединить содержимое файла в текст;

3. используя узел LLM, вызовите модель Qwen/Qwen2.5-72B-Instruct-128K от SiliconCloud (если длина файла не превышает 32K, вы можете выбрать другую модель, предоставляемую платформой), если вы не можете найти эту модель, вы можете добавить ее с помощью следующих шагов:

      • Настройки - Модель поставщика, выберите SiliconFlow;
      • Нажмите кнопку Добавить модель, заполните необходимые параметры и сохраните, как показано на рисунке.
4 步速通 LLM 微调:手把手带你用 SiliconCloud 打造领域大模型

 

  • Пакет корпусных данных может быть получен после запуска, если использовать выход макромодели в качестве выхода рабочего процесса;
  • Далее просто скопируйте, сохраните содержимое в виде файла .jsonl и загрузите его в SiliconCloud для создания задачи тонкой настройки.

 

Если данных, полученных за один раз, недостаточно, можно провести несколько запусков, чтобы получить больше данных.

Важно отметить, что более точные данные не обязательно лучше.Даже если у нас есть только один фрагмент данных, мы можем начать тонкую настройку. Даже если у нас есть только один фрагмент данных, мы можем начать тонкую настройку; напротив, если у нас есть много данных недостаточно хорошего качества, эффект тонкой настройки может оказаться не таким, как ожидалось.

4 步速通 LLM 微调:手把手带你用 SiliconCloud 打造领域大模型4 步速通 LLM 微调:手把手带你用 SiliconCloud 打造领域大模型

 

app:
  description: '上传文件,基于文件内容,使用 SiliconCloud 128K 上下文的 Qwen2.5 模型,生成日常问答内容,JSONL 格式的语料数据

    ⚠️ 注:

    - 由于 Dify 限制,超过 80000 字符的文件内容会被截断

    - 生成内容仅供参考,可能存在幻觉或内容错漏、格式错误,请注意甄别'
  icon: 🤖
  icon_background: '#FFEAD5'
  mode: workflow
  name: Fine-tune 语料构造器
  use_icon_as_answer_icon: false
kind: app
version: 0.1.5
workflow:
  conversation_variables: []
  environment_variables: []
  features:
    file_upload:
      allowed_file_extensions:
      - .JPG
      - .JPEG
      - .PNG
      - .GIF
      - .WEBP
      - .SVG
      allowed_file_types:
      - image
      allowed_file_upload_methods:
      - local_file
      - remote_url
      enabled: false
      fileUploadConfig:
        audio_file_size_limit: 50
        batch_count_limit: 5
        file_size_limit: 15
        image_file_size_limit: 10
        video_file_size_limit: 100
        workflow_file_upload_limit: 10
      image:
        enabled: false
        number_limits: 3
        transfer_methods:
        - local_file
        - remote_url
      number_limits: 3
    opening_statement: ''
    retriever_resource:
      enabled: true
    sensitive_word_avoidance:
      enabled: false
    speech_to_text:
      enabled: false
    suggested_questions: []
    suggested_questions_after_answer:
      enabled: false
    text_to_speech:
      enabled: false
      language: ''
      voice: ''
  graph:
    edges:
    - data:
        isInIteration: false
        sourceType: start
        targetType: document-extractor
      id: 1735807686274-source-1735807758092-target
      source: '1735807686274'
      sourceHandle: source
      target: '1735807758092'
      targetHandle: target
      type: custom
      zIndex: 0
    - data:
        isInIteration: false
        sourceType: document-extractor
        targetType: code
      id: 1735807758092-source-1735807761855-target
      source: '1735807758092'
      sourceHandle: source
      target: '1735807761855'
      targetHandle: target
      type: custom
      zIndex: 0
    - data:
        isInIteration: false
        sourceType: code
        targetType: llm
      id: 1735807761855-source-1735807764975-target
      source: '1735807761855'
      sourceHandle: source
      target: '1735807764975'
      targetHandle: target
      type: custom
      zIndex: 0
    - data:
        isInIteration: false
        sourceType: llm
        targetType: end
      id: 1735807764975-source-1735807769820-target
      source: '1735807764975'
      sourceHandle: source
      target: '1735807769820'
      targetHandle: target
      type: custom
      zIndex: 0
    nodes:
    - data:
        desc: ''
        selected: false
        title: 开始
        type: start
        variables:
        - allowed_file_extensions: []
          allowed_file_types:
          - document
          allowed_file_upload_methods:
          - local_file
          - remote_url
          label: 语料文件
          max_length: 10
          options: []
          required: true
          type: file-list
          variable: attachments
        - allowed_file_extensions: []
          allowed_file_types:
          - image
          allowed_file_upload_methods:
          - local_file
          - remote_url
          label: 触发词(训练中的 system prompt)
          max_length: 48
          options: []
          required: true
          type: text-input
          variable: trigger
      height: 116
      id: '1735807686274'
      position:
        x: 30
        y: 258
      positionAbsolute:
        x: 30
        y: 258
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 244
    - data:
        desc: ''
        is_array_file: true
        selected: false
        title: 文档提取器
        type: document-extractor
        variable_selector:
        - '1735807686274'
        - attachments
      height: 92
      id: '1735807758092'
      position:
        x: 334
        y: 258
      positionAbsolute:
        x: 334
        y: 258
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 244
    - data:
        code: "def main(articleSections: list) -> dict:\n    try:\n        # 将列表项合并为字符串\n\
          \        combined_text = \"\\n\".join(articleSections)\n        \n     \
          \   # 截取前80000个字符\n        truncated_text = combined_text[:80000]\n    \
          \    \n        return {\n            \"result\": truncated_text\n      \
          \  }\n    except Exception as e:\n        # 错误处理\n        return {\n   \
          \         \"result\": \"\"\n        }"
        code_language: python3
        desc: ''
        outputs:
          result:
            children: null
            type: string
        selected: false
        title: 代码执行
        type: code
        variables:
        - value_selector:
          - '1735807758092'
          - text
          variable: articleSections
      height: 54
      id: '1735807761855'
      position:
        x: 638
        y: 258
      positionAbsolute:
        x: 638
        y: 258
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 244
    - data:
        context:
          enabled: false
          variable_selector: []
        desc: ''
        model:
          completion_params:
            frequency_penalty: 0.5
            max_tokens: 4096
            temperature: 0.3
          mode: chat
          name: Qwen/Qwen2.5-72B-Instruct-128K
          provider: siliconflow
        prompt_template:
        - id: b6913d40-d173-45d8-b012-98240d42a196
          role: system
          text: '【角色】

            你是一位 LLM 大语言模型科学家,参考用户提供的内容,帮助用户构造符合规范的 Fine-tune(微调)数据


            【任务】

            - 对于给定的「内容」,你每次回列出 10 个通俗「问题」;

            - 针对每个「问题」,引用「内容」原文及对内容的合理解释和演绎,做出「解答」;

            - 并将「问题」「解答」整理为规范的 JSONL 格式


            【要求】

            1. 问题 **不要** 直接引用「内容」,应该贴近当代现实生活;

            2. 问题应该是通俗白话,避免“假、大、空“;

            3. 答案应忠于原文,对于原文的解释不能脱离原文的主旨、思想;


            【输出规范】

            * 输出规范的 JSONL,每行一条数据

            * 每条数据应包含一个 message 数组,每个数组都应该包含 role 分别为 system、user 和 assistant 的三条记录

            * 其中 role 为 system 的数据,作为训练中的 system prompt 格外重要,其 content 使用用户指定的「触发词」

            * role 为 user 的数据对应列出的「问题」

            * role 为 assistant 的数据则对应针对「问题」的「解答」

            * 示例如下:

            ```

            {"messages": [{"role": "system", "content": "你是当代大儒"}, {"role": "user",
            "content": "应该怎么学习?"}, {"role": "assistant", "content": "贤贤易色;事父母,能竭其力;事君,能致其身;与朋友交,言而有信。虽曰未学,吾必谓之学矣。"}]}

            ```'
        - id: 61530521-14cf-4eaf-8f06-a4bc89db3cb1
          role: user
          text: '「内容」

            {{#1735807761855.result#}}

            「触发词」

            {{#1735807686274.trigger#}}'
        selected: false
        title: LLM
        type: llm
        variables: []
        vision:
          enabled: false
      height: 98
      id: '1735807764975'
      position:
        x: 942
        y: 258
      positionAbsolute:
        x: 942
        y: 258
      selected: true
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 244
    - data:
        desc: ''
        outputs:
        - value_selector:
          - '1735807764975'
          - text
          variable: text
        selected: false
        title: 结束
        type: end
      height: 90
      id: '1735807769820'
      position:
        x: 1246
        y: 258
      positionAbsolute:
        x: 1246
        y: 258
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom
      width: 244
    - data:
        author: Dify
        desc: ''
        height: 88
        selected: false
        showAuthor: true
        text: '{"root":{"children":[{"children":[{"detail":0,"format":0,"mode":"normal","style":"","text":"设置较低的
          Temperature,提高输出格式的稳定性","type":"text","version":1}],"direction":"ltr","format":"","indent":0,"type":"paragraph","version":1,"textFormat":0}],"direction":"ltr","format":"","indent":0,"type":"root","version":1}}'
        theme: blue
        title: ''
        type: ''
        width: 240
      height: 88
      id: '1735808753316'
      position:
        x: 951.4285714285714
        y: 375.7142857142857
      positionAbsolute:
        x: 951.4285714285714
        y: 375.7142857142857
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom-note
      width: 240
    - data:
        author: Dify
        desc: ''
        height: 88
        selected: false
        showAuthor: true
        text: '{"root":{"children":[{"children":[{"detail":0,"format":0,"mode":"normal","style":"","text":"合并多个文档内容,并截取前
          8W 字符","type":"text","version":1}],"direction":"ltr","format":"","indent":0,"type":"paragraph","version":1,"textFormat":0}],"direction":"ltr","format":"","indent":0,"type":"root","version":1}}'
        theme: blue
        title: ''
        type: ''
        width: 240
      height: 88
      id: '1735808799815'
      position:
        x: 640
        y: 338.5714285714286
      positionAbsolute:
        x: 640
        y: 338.5714285714286
      selected: false
      sourcePosition: right
      targetPosition: left
      type: custom-note
      width: 240
    viewport:
      x: 0
      y: 0
      zoom: 0.7

 

Помимо использования таких инструментов, как Dify, непосредственное применение таких моделей, как Qwen/Qwen2.5-Coder-32B-Instruct, для помощи в написании скриптов для запуска также является эффективным способом создания точных данных и позволяет обойти ряд ограничений трехсторонних платформ, в полной мере используя преимущества платформы SiliconCloud, такие как богатые моделями и эффективные рассуждения, а также сбор более качественных корпусных данных. данных.

 

Тонкая настройка обучения и проверки

Создайте новую задачу тонкой настройки на платформе SiliconCloud, загрузите и выберите файл .jsonl, который вы только что сохранили, и нажмите кнопку Start Fine-Tuning. 4 步速通 LLM 微调:手把手带你用 SiliconCloud 打造领域大模型4 步速通 LLM 微调:手把手带你用 SiliconCloud 打造领域大模型 Дождитесь окончания очереди задачи тонкой настройки, и после завершения ее выполнения вы сможете использовать настроенную модель или проверить результаты через онлайн-опыт или API. 4 步速通 LLM 微调:手把手带你用 SiliconCloud 打造领域大模型 Функция "Сравнение" в онлайн-режиме Диалоговой модели также позволяет сравнивать отклики и результаты модели в нескольких контрольных точках и базовых моделях, выбирая ту модель, которая лучше всего подходит для дальнейшего использования. Модель тонкой настройки в сравнении с базовой моделью: 4 步速通 LLM 微调:手把手带你用 SiliconCloud 打造领域大模型 Сравнение между несколькими контрольными точками: 4 步速通 LLM 微调:手把手带你用 SiliconCloud 打造领域大模型 На данном этапе мы использовали локальные файлы для создания LLM с точной настройкой данных и тонкой настройки Fire Expert LLM. Конечно, с помощью описанных выше шагов вы также можете попробовать создать свой собственный LLM для конкретного домена.

© заявление об авторских правах

Похожие статьи

Нет комментариев

Вы должны войти в систему, чтобы участвовать в комментариях!
Войти сейчас
нет
Нет комментариев...