LLM 미세 조정을 위한 4단계: 실리콘클라우드로 대규모 도메인 모델을 구축하기 위한 실습 가이드

AI 실습 튜토리얼7개월 전에 게시 됨 AI 공유 서클
2.3K 00

이전에는 실리콘클라우드의 언어 모델인온라인 LoRA 미세 조정 기능. 말뭉치 데이터를 업로드하고 미세 조정 작업을 생성하기만 하면 독점적으로 미세 조정된 언어 모델을 얻을 수 있습니다.

최근 실리콘클라우드의 LLM 온라인 LoRA 미세 조정은 Qwen2.5-32B, Qwen2.5-14B, Llama-3.1-8B 모델을 미세 조정 기본 모델로 확장하여 미세 조정의 플레이 가능성을 더욱 풍부하게 하고 미세 조정 모델의 훈련 및 사용 비용을 더욱 절감했습니다.

 

사실 독점적인 대규모 언어 모델을 미세 조정하는 것은 매우 간단합니다. 실리콘클라우드의 미세 조정 기능을 사용하면 수십 개의 훈련 코퍼스를 준비하여 기본 모델에서 모델을 '크게' 변경할 수 있습니다.

 

사전 준비

먼저 미세 조정을 통해 달성하고자 하는 목표가 무엇인지 명확히 해야 합니다. 종종 미세 조정을 통해 모델이 훈련에 포함되지 않은 내용을 학습하거나 특정 언어 스타일을 개발하는 데 도움이 될 수 있습니다.

목적에 따라 접근 방식이 달라집니다. 예를 들어 모델이 특정 도메인 지식을 학습하도록 하려면 이러한 데이터를 기반으로 질문과 답변이 포함된 학습 데이터가 필요하고, 모델이 특정 일반적인 언어 스타일을 학습하도록 하려면 이러한 스타일의 대화 데이터가 필요합니다.

 

데이터 준비

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Ω。"}]}

 

일상 업무에서 비교적 많은 양의 고품질 데이터를 축적했다면 간단한 데이터 정리를 통해 형식 요건을 충족하는 데이터 파일을 구성하여 미세 조정을 시작할 수 있습니다. 데이터 축적이 부족하거나 정제 과정이 더 복잡하다면 빅 모델의 도움을 받아 모델을 통해 데이터를 구성하여 미세 조정을 시도할 수 있습니다.

 

다음으로 예제를 통해 데이터 구축 과정을 연습해 보겠습니다. 소방 표준을 사용하여 질문과 답변을 구성하여 '소방 전문가'의 대규모 모델을 훈련해 보겠습니다.

 

지각 미세 조정 데이터

실리콘클라우드는 128K 컨텍스트가 포함된 Qwen2.5 모델을 제공하며, 이는 상당히 풍부한 콘텐츠를 다루기에 충분합니다.

먼저 데이터를 구성하는 데 사용할 파일(예: "GB22370-2008 국내 화재 안전 시스템.pdf")을 로컬에서 준비해야 합니다.

다음으로, 파일의 내용을 추출하고 프롬프트를 작성하여 Qwen 빅 모델이 위의 요구 사항을 충족하는 데이터를 생성하도록 해야 합니다. 이 작업은 코드에서 수행하거나 Dify 및 기타 인터페이스 도구를 사용하여 완료할 수 있습니다.

Dify에서 워크플로를 구성하는 예를 들어 보겠습니다:

1. 시작 노드 구성 파일을 업로드하고 학습 말뭉치의 시스템 프롬프트 필드를 채웁니다;

2. Dify와 함께 제공되는 문서 추출 노드와 코드 노드를 사용하여 파일의 내용을 텍스트로 병합합니다;

3. LLM 노드를 사용하여 실리콘 클라우드의 Qwen/Qwen2.5-72B-Instruct-128K 모델(파일 길이가 32K 이내인 경우 플랫폼에서 제공하는 다른 모델을 선택할 수 있음)을 호출하고, 이 모델을 찾을 수 없는 경우 다음 단계에 따라 추가할 수 있습니다:

      • 설정 - 모델 공급업체에서 SiliconFlow를 선택합니다;
      • 모델 추가를 클릭하고 이미지를 참조하여 필요한 매개변수를 입력한 후 저장합니다.
4 步速通 LLM 微调:手把手带你用 SiliconCloud 打造领域大模型

 

  • 실행 후 매크로 모델의 출력을 워크플로우의 출력으로 사용하여 말뭉치 데이터의 배치를 얻을 수 있습니다;
  • 그런 다음 내용을 복사하여 .jsonl 파일로 저장하고 SiliconCloud에 업로드하여 미세 조정 작업을 생성하기만 하면 됩니다.

 

한 번에 생성된 데이터로 충분하지 않은 경우 여러 번 실행하여 더 많은 데이터를 구성할 수 있습니다.

세밀하게 조정된 데이터라고 해서 반드시 더 좋은 것은 아니라는 점에 유의해야 합니다.데이터가 1개만 있어도 미세 조정을 시작할 수 있습니다. 데이터가 1개만 있어도 미세 조정을 시작할 수 있지만, 반대로 품질이 좋지 않은 데이터가 많으면 미세 조정 효과가 기대에 미치지 못할 수 있습니다.

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 플랫폼의 장점을 최대한 발휘할 수 있습니다. 데이터를 수집할 수 있습니다.

 

미세 조정 교육 및 검증

실리콘클라우드 플랫폼에서 새 미세 조정 작업을 만들고, 방금 저장한 .jsonl 파일을 업로드하여 선택한 다음 미세 조정 시작을 클릭합니다. 4 步速通 LLM 微调:手把手带你用 SiliconCloud 打造领域大模型4 步速通 LLM 微调:手把手带你用 SiliconCloud 打造领域大模型 미세 조정 작업이 대기열에서 대기 완료될 때까지 기다렸다가 실행이 완료되면 미세 조정된 모델을 사용하거나 온라인 경험 또는 API를 통해 결과를 검증할 수 있습니다. 4 步速通 LLM 微调:手把手带你用 SiliconCloud 打造领域大模型 대화 모델 온라인 환경의 비교 기능을 사용하면 여러 체크포인트 및 기본 모델에서 모델 응답 및 출력을 비교하여 계속 사용하기에 가장 적합한 모델을 선택할 수도 있습니다. 모델과 기본 모델 미세 조정하기: 4 步速通 LLM 微调:手把手带你用 SiliconCloud 打造领域大模型 여러 체크포인트 간 비교: 4 步速通 LLM 微调:手把手带你用 SiliconCloud 打造领域大模型 여기서는 로컬 파일을 사용하여 LLM 미세 조정 데이터를 빌드하고 Fire Expert LLM을 미세 조정했습니다. 물론 위의 단계를 통해 도메인별 LLM을 직접 빌드할 수도 있습니다.

© 저작권 정책

관련 문서

댓글 없음

댓글에 참여하려면 로그인해야 합니다!
지금 로그인
없음
댓글 없음...