llama factory 从数据集起步 跑通 qwen系列开源生成式大模型 微调

本文涉及的产品
NLP自然语言处理_高级版,每接口累计50万次
NLP 自学习平台,3个模型定制额度 1个月
视觉智能开放平台,视频资源包5000点
简介: `dataset_info.json` 文件用于管理 llama factory 中的所有数据集,支持 `alpaca` 和 `sharegpt` 格式。通过配置此文件,可以轻松添加自定义数据集。数据集的相关参数包括数据源地址、数据集格式、样本数量等,支持 Hugging Face 和 ModelScope 两个平台的数据集仓库。针对不同格式的数据集,提供了详细的配置示例,如 `alpaca` 格式的指令监督微调数据集、偏好数据集等,以及 `sharegpt` 格式的多模态数据集等。今天我们通过自定义数据集的方式来进行qwen2.5_14B_instruct模型进行微调

一、总体概述

dataset_info.json文件包含了llama factory所有可用的数据集,若使用自定义数据集,需在该文件中添加数据集描述,并通过修改dataset: 数据集名称配置来使用数据集。目前支持alpaca格式和sharegpt格式的数据集。

二、数据集相关参数说明(在dataset_info.json中对应数据集描述部分)

  • 通用参数
    • hf_hub_url:Hugging Face的数据集仓库地址(若指定,则忽略script_urlfile_name)。
    • ms_hub_url:ModelScope的数据集仓库地址(若指定,则忽略script_urlfile_name)。
    • script_url:包含数据加载脚本的本地文件夹名称(若指定,则忽略file_name)。
    • file_name:该目录下数据集文件夹或文件的名称(若上述参数未指定,则此项必需)。
    • formatting:数据集格式(可选,默认:alpaca,可以为alpacasharegpt)。
    • ranking:是否为偏好数据集(可选,默认:False)。
    • subset:数据集子集的名称(可选,默认:None)。
    • split:所使用的数据集切分(可选,默认:train)。
    • folder:Hugging Face仓库的文件夹名称(可选,默认:None)。
    • num_samples:该数据集所使用的样本数量(可选,默认:None)。
    • columns(可选):包含诸多代表不同含义表头名称的配置,如prompt(数据集代表提示词的表头名称,默认:instruction)等。
    • tags(可选,用于sharegpt格式):包含消息中代表不同角色、内容等的键名相关配置,如role_tag(消息中代表发送者身份的键名,默认:from)等。
  • 具体格式相关参数示例(以下以不同类型数据集按格式分别举例说明如何在dataset_info.json中配置数据集描述)
    1. alpaca格式
      • 指令监督微调数据集
        "数据集名称": {
                 
        "file_name": "data.json",
        "columns": {
                 
        "prompt": "instruction",
        "query": "input",
        "response": "output",
        "system": "system",
        "history": "history"
        }
        }
        
      • 预训练数据集
        "数据集名称": {
                 
        "file_name": "data.json",
        "columns": {
                 
        "prompt": "text"
        }
        }
        
      • 偏好数据集
        "数据集名称": {
                 
        "file_name": "data.json",
        "ranking": true,
        "columns": {
                 
        "prompt": "instruction",
        "query": "input",
        "chosen": "chosen",
        "rejected": "rejected"
        }
        }
        
      • KTO数据集:详情请参阅sharegpt格式相关内容(此处未给出完整dataset_info.json配置示例)。
      • 多模态图像数据集:详情请参阅sharegpt格式相关内容(此处未给出完整dataset_info.json配置示例)。
      • 多模态视频数据集:详情请参阅sharegpt格式相关内容(此处未给出完整dataset_info.json配置示例)。
    2. sharegpt格式
      • 指令监督微调数据集
        "数据集名称": {
                 
        "file_name": "data.json",
        "formatting": "sharegpt",
        "columns": {
                 
        "messages": "conversations",
        "system": "system",
        "tools": "tools"
        }
        }
        
      • 偏好数据集
        "数据集名称": {
                 
        "file_name": "data.json",
        "formatting": "sharegpt",
        "ranking": true,
        "columns": {
                 
        "messages": "conversations",
        "chosen": "chosen",
        "rejected": "rejected"
        }
        }
        
      • KTO数据集
        "数据集名称": {
                 
        "file_name": "data.json",
        "formatting": "sharegpt",
        "columns": {
                 
        "messages": "conversations",
        "kto_tag": "kto_tag"
        }
        }
        
      • 多模态图像数据集
        "数据集名称": {
                 
        "file_name": "data.json",
        "formatting": "sharegpt",
        "columns": {
                 
        "messages": "conversations",
        "images": "images"
        }
        }
        
      • 多模态视频数据集
        "数据集名称": {
                 
        "file_name": "data.json",
        "formatting": "sharegpt",
        "columns": {
                 
        "messages": "conversations",
        "videos": "videos"
        }
        }
        
      • OpenAI格式(特殊的sharegpt格式情况)
        "数据集名称": {
                 
        "file_name": "data.json",
        "formatting": "sharegpt",
        "columns": {
                 
        "messages": "messages"
        },
        "tags": {
                 
        "role_tag": "role",
        "content_tag": "content",
        "user_tag": "user",
        "assistant_tag": "assistant",
        "system_tag": "system"
        }
        }
        

三、不同格式数据集特点及示例数据格式

  • alpaca格式
    • 指令监督微调数据集
      • 人类指令由instruction列和input列(可选填)内容拼接(instruction\ninput),output列对应模型回答,system列(可选填)对应系统提示词,history列(可选填)是由多个字符串二元组构成的列表代表历史消息。
      • 示例数据格式:
        [
        {
                 
        "instruction": "人类指令(必填)",
        "input": "人类输入(选填)",
        "output": "模型回答(必填)",
        "system": "系统提示词(选填)",
        "history": [
        ["第一轮指令(选填)", "第一轮回答(选填)"],
        ["第二轮指令(选填)", "第二轮回答(选填)"]
        ]
        }
        ]
        
    • 预训练数据集:只有text列中的内容会用于模型学习。
      • 示例数据格式:
        [
        {
                 "text": "document"},
        {
                 "text": "document"}
        ]
        
    • 偏好数据集:需要在chosen列中提供更优的回答,并在rejected列中提供更差的回答。
      • 示例数据格式:
        [
        {
                 
        "instruction": "人类指令(必填)",
        "input": "人类输入(选填)",
        "chosen": "优质回答(必填)",
        "rejected": "劣质回答(必填)"
        }
        ]
        
  • sharegpt格式
    • 指令监督微调数据集:相比alpaca格式支持更多角色种类,如humangptobservationfunction等,它们构成对象列表呈现在conversations列中,且humanobservation须出现在奇数位置,gptfunction须出现在偶数位置。
      • 示例数据格式:
        [
        {
                 
        "conversations": [
        {
                 
        "from": "human",
        "value": "人类指令"
        },
        {
                 
        "from": "function_call",
        "value": "工具参数"
        },
        {
                 
        "from": "observation",
        "value": "工具结果"
        },
        {
                 
        "from": "gpt",
        "value": "模型回答"
        }
        ],
        "system": "系统提示词(选填)",
        "tools": "工具描述(选填)"
        }
        ]
        
    • 偏好数据集:同样需要在chosen列中提供更优的消息,并在rejected列中提供更差的消息。
      • 示例数据格式:
        [
        {
                 
        "conversations": [
        {
                 
        "from": "human",
        "value": "人类指令"
        },
        {
                 
        "from": "gpt",
        "value": "模型回答"
        },
        {
                 
        "from": "human",
        "value": "人类指令"
        }
        ],
        "chosen": {
                 
        "from": "gpt",
        "value": "优质回答"
        },
        "rejected": {
                 
        "from": "gpt",
        "value": "劣质回答"
        }
        }
        ]
        
    • KTO数据集:需要额外添加一个kto_tag列,包含bool类型的人类反馈。
      • 示例数据格式:
        [
        {
                 
        "conversations": [
        {
                 
        "from": "human",
        "value": "人类指令"
        },
        {
                 
        "from": "gpt",
        "value": "模型回答"
        }
        ],
        "kto_tag": "人类反馈 [true/false](必填)"
        }
        ]
        
    • 多模态图像数据集:需要额外添加一个images列,包含输入图像的路径,且图片数量须与文本中所有<image>标记的数量严格一致。
      • 示例数据格式:
        [
        {
                 
        "conversations": [
        {
                 
        "from": "human",
        "value": "<image>人类指令"
        },
        {
                 
        "from": "gpt",
        "value": "模型回答"
        }
        ],
        "images": [
        "图像路径(必填)"
        ]
        }
        ]
        
    • 多模态视频数据集:需要额外添加一个videos列,包含输入视频的路径,且视频数量须与文本中所有<video>标记的数量严格一致。
      • 示例数据格式:
        [
        {
                 
        "conversations": [
        {
                 
        "from": "human",
        "value": "<video>人类指令"
        },
        {
                 
        "from": "gpt",
        "value": "模型回答"
        }
        ],
        "videos": [
        "视频路径(必填)"
        ]
        }
        ]
        
    • OpenAI格式(特殊的sharegpt格式情况):第一条消息可能是系统提示词。
      • 示例数据格式:
        [
        {
                 
        "messages": [
        {
                 
        "role": "system",
        "content": "系统提示词(选填)"
        },
        {
                 
        "role": "user",
        "content": "人类指令"
        },
        {
                 
        "role": "assistant",
        "content": "模型回答"
        }
        ]
        }
        ]
        

通过上述内容详细展示了不同格式数据集在使用时涉及的配置、特点以及示例数据格式等相关信息,便于根据实际需求进行相应数据集的运用及描述配置。

Qwen 系列开源生成式大模型由阿里云推出,在人工智能领域引起了广泛关注。

2023 年 9 月 25 日,阿里云开源通义千问 140 亿参数模型,并宣布 Qwen-14B 及其对话模型 Qwen-14B-Chat 免费可商用。Qwen-14B 是一款支持多种语言的高性能开源模型,整体训练数据超过 3 万亿 Token,最大支持 8k 的上下文窗口长度。在此之前,一个多月前刚刚开源了 70 亿参数模型 Qwen-7B 等模型。

2024 年 1 月 31 日,阿里巴巴团队推出 Qwen-VL-Plus 和 Qwen-VL-Max 模型。这两个模型大幅超越此前所有开源 LVLM 模型的最佳水平,在多项图文多模态标准测试中获得了堪比 Gemini Ultra 和 GPT4-v 的水准,甚至在中文问答、中文文字理解相关的任务上超越了 OpenAI 的 GPT4-v 和 Google 的 Gemini-Pro,并且是开源的。它主要是一款图像理解模型,能够对图像进行标注和回应,理解图像中各部分的重要性,还能理解流程图、图表、表格和图形并进行推理。

2024 年 6 月 8 日,阿里巴巴通义千问团队发布了 Qwen2 系列开源模型,包括 5 个尺寸的预训练和指令微调模型:Qwen2-0.5B、Qwen2-1.5B、Qwen2-7B、Qwen2-57B-A14B 以及 Qwen2-72B。Qwen2 在多个评测基准上具有领先优势,Qwen2-72B 在包括自然语言理解、知识、代码、数学及多语言等多项能力上均显著超越当前领先的模型。

2024 年 9 月 19 日,在 2024 云栖大会上,阿里云 CTO 周靖人发布通义千问新一代开源模型 Qwen2.5。Qwen2.5 全系列涵盖多个尺寸的大语言模型、多模态模型、数学模型和代码模型,每个尺寸都有基础版本、指令跟随版本、量化版本,总计上架 100 多个模型。Qwen2.5 全系列模型都在 18T tokens 数据上进行预训练,相比 Qwen2,整体性能提升 18%以上,拥有更多的知识、更强的编程和数学能力。Qwen2.5-72B 模型在多个基准测评中表现出色,在 MMLU-redux 等十多个基准测评中,Qwen2.5-72B 表现超越 Llama3.1-405B。Qwen2.5 还包括用于编程的 Qwen2.5-Coder 和用于数学的 Qwen2.5-Math,以及视觉语言模型 Qwen2-VL-72B,该模型在权威测评中成为全球得分最高的开源模型。

截至 2024 年 9 月中旬,通义千问开源模型累计下载量已突破 4000 万,成为仅次于 Llama 的世界级模型群。

综上所述,Qwen 系列开源生成式大模型不断发展和创新,在性能和功能方面取得了显著进步,为人工智能领域的发展做出了重要贡献。

Qwen 系列模型的发展历程

Qwen 模型是近年来涌现的先进语言模型之一。2023 年 4 月,“通义千问”上线并邀请用户测试体验,成为国内最早一批类 ChatGPT 大模型产品。2023 年 6 月,“通义听悟”上线,聚焦音视频内容。2023 年 7 月,“通义万相”开启定向邀测。2023 年 8 月,通义千问 70 亿参数模型 Qwen - 7B 开源,阿里巴巴成为国内首个开源自研大模型的大型科技企业,随后陆续开源视觉理解模型 Qwen - VL、音频理解模型 Qwen - Audio 等,实现“全尺寸、全模态”开源。2023 年 10 月底,通义千问升级到 2.0 版本,参数规模达千亿级。2024 年 6 月 7 日,阿里云发布开源模型 Qwen2 - 72B,性能超过美国的开源模型 Llama3 - 70B,也超过众多中国闭源大模型。Qwen2 系列包含多个尺寸的预训练和指令微调模型,如 Qwen2 - 0.5B、Qwen2 - 1.5B 等,其中 Qwen2 - 57B - A14B 为混合专家模型。所有尺寸模型都使用了 GQA 机制,增加了多语言相关的高质量数据,提升了多语言能力,还增大了上下文长度支持。2024 年 8 月 30 日,阿里通义千问开源新一代视觉语言模型 Qwen2 - VL。2024 年 11 月 12 日,阿里云通义大模型团队宣布开源通义千问代码模型全系列,共 6 款 Qwen2.5 - Coder 模型。

Qwen 系列模型的性能优势

Qwen 系列模型具有多方面的性能优势。首先,在与现有的大型模型对比时,表现令人印象深刻。例如,Qwen2 - 72B 版本在推理能力和任务完成度方面取得了优异成绩,在多个权威评测中超越包括美国 Llama3 - 70B 在内的多个模型。在理科任务上,与 GPT - 4o 的分差仅为 5 分,显示出其在计算、逻辑推理和代码测评方面的强劲实力。在文科任务和 Hard 任务上也表现不俗。Qwen2 系列模型大幅提升了代码、数学、推理、指令遵循、多语言理解等能力。Qwen2 - 72B - Instruct 能够完美处理 128k 上下文长度内的信息抽取任务,支持高达 128K 的上下文长度,可生成最多 8K 内容。模型拥有强大的多语言能力,支持中文、英文、法文、西班牙文、俄文、日文、越南文、阿拉伯文等 29 种以上语言。在模型架构方面,基于 Transformer,其自注意力机制使得模型能够有效处理长距离的上下文依赖关系,同时支持并行计算,大幅提升了模型的训练和推理效率。

Qwen 系列模型的应用场景

Qwen 系列模型的应用场景广泛。在广告、市场营销和内容创作中,这些模型可以快速生成高质量的文案和图形,更好地满足企业的需求。对于个人创作者、博主和设计师来说,能够显著缩短创作时间,提高创作效率,提升市场竞争力。在教学、科研等领域,Qwen2 - Math 模型在数学推理和计算能力上的显著提升,将对提高学习效率、促进知识传播起到积极作用。在编程领域,基于 Qwen2.5 - Coder,AI 编程性能和效率均实现大幅提升,编程“小白”也可轻松生成网站、数据图表、简历、游戏等各类应用。此外,Qwen2 - VL 可用于基于视频的问答、对话和内容创作等应用中,还能集成到手机、机器人等设备,根据视觉环境和文字指令进行自动操作。

Qwen 系列模型的开源影响

Qwen 系列模型的开源具有重大影响。首先,为更多的研究者提供了方便,能够方便地使用和改进这个模型,推动自然语言处理领域的发展。全球基于 Qwen 系列二次开发的衍生模型数量 9 月底突破 7.43 万,超越 Llama 系列衍生模型的 7.28 万。开源也为开发者和企业提供了全新的机会,Qwen - Plus 和 Qwen - Turbo 等旗舰模型的 API 接口开放,将加速生成式 AI 在各行各业的应用普及。在教育、医疗、金融等多个领域,通过接入这些 API,企业可以快速开发出适合自身需求的应用,从而抓住技术革命带来的机会。开源模式也引发了关于开源和闭源大模型关系的讨论,有人认为开源和闭源的大模型会并存和互补,未来 80%的企业会用到开源大模型,闭源可以给剩下的 20%提供服务。

Qwen 系列模型的未来发展方向

从目前的发展趋势来看,Qwen 系列模型未来可能会在多个方面继续发展。一方面,性能会不断提升,随着技术的进步,模型在知识量、编程和数学能力等方面将持续进步。例如,Qwen2.5 全系列模型在 18T tokens 数据上进行预训练,相比 Qwen2,整体性能提升 18%以上。另一方面,应用场景会更加丰富,可能会进一步拓展到更多的领域,如智能设备、虚拟现实等。同时,在多语言支持方面可能会不断优化,支持更多的语言种类,提高语言理解和生成的准确性。此外,随着对模型安全和社会责任的关注增加,未来 Qwen 系列模型在发展过程中也会更加注重道德和社会责任,确保 AI 技术的发展不会带来负面影响。

Qwen 系列开源生成式大模型在自然语言处理领域展现出了强大的实力和广阔的发展前景。从发展历程来看,它不断演进和完善,性能优势日益凸显,应用场景广泛多样,开源影响深远,未来发展方向也充满了潜力。它不仅为研究者和开发者提供了强大的工具,也为各行各业的发展带来了新的机遇和挑战。

讲我们上次通过qwen max商业大模型接口生成的数据集转换成 微调结构。
1732518161503.jpg

那我们为什么要训练呢 因为整体按照我们要求返回的样本比例非常低。只有一部分数据集进入了图谱之中,我希望提升大模型的指令执行能力。
首先prompt部分我们从之前的代码里面找到,从而减少模型的输入发生重复的现象。

import pandas as pd

yaml_builder = pd.read_excel(
    "上市公司ESG报告基于非限制性图谱类别性质的大模型生成_yaml_builder_2024年11月25日.xlsx").values.tolist()

c = []

for yaml_builder_data in yaml_builder:
    if "```yaml" in yaml_builder_data[1] or "跳过" in yaml_builder_data[1]:
        c.append([
            {
   
                "instruction": """1. **输入内容**
   提供上市公司ESG报告的文本数据,包含但不限于以下内容:
   - 企业基本信息(行业、总部、市值等)
   - 环境指标(碳排放量、资源消耗、能源使用)
   - 社会指标(员工权益、供应链责任、社区影响)
   - 治理指标(董事会构成、治理透明度、反腐败政策)
   - 企业可持续发展理念与实践细节
如果内容中没有可以抽取的知识图谱 直接返回跳过
2. **输出内容**
   按以下知识图谱结构提取并输出数据:
   knowledge_graph:
     entities:
       - name: "<实体名称>"
         type: "<实体类型>"  # 如 "公司", "环境指标", "社会指标", "治理指标"
         attributes:
           - {name: "<属性名称>", value: "<属性值>"}  # 如 "行业", "科技"
     relationships:
       - {from: "<实体1名称>", to: "<实体2名称>", relationship: "<关系描述>"}
**基于以上要求及以下内容构建知识图谱**:
   ``` """,
                "input": yaml_builder_data[0],
                "output": yaml_builder_data[1]}
        ])
print(len(c))
import json
json.dump(c, open("ESG_Knowledge_Network.json", "w", encoding="utf-8"),ensure_ascii=False)

总共搞到了300多条数据

第二我们要采用llama factory的微调模型的数据结构。
额 上面那一步已经实现了把表格数据转换成 llama factory 所需要的alpaca微调数据结构。
第三我们要采用免费的计算资源来生成lora模型。
畅享充沛的普惠算力资源(GPU/NPU/GCU/GPGPU/DCU/MLU)。
注册地址:https://openi.pcl.ac.cn/user/sign_up?sharedUser=nlp_future

因为是华为昇腾算力所以需要做一些基础工作。

git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory

安装华为CANN。

在昇腾 NPU 设备上安装 LLaMA Factory 时,需要指定额外依赖项,使用 pip install -e ".[torch-npu,metrics]" 命令安装。此外,还需要安装 Ascend CANN Toolkit 与 Kernels,安装方法请参考安装教程或使用以下命令:

# 请替换 URL 为 CANN 版本和设备型号对应的 URL
# 安装 CANN Toolkit
wget https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/Milan-ASL/Milan-ASL%20V100R001C17SPC701/Ascend-cann-toolkit_8.0.RC1.alpha001_linux-"$(uname -i)".run
bash Ascend-cann-toolkit_8.0.RC1.alpha001_linux-"$(uname -i)".run --install

# 安装 CANN Kernels
wget https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/Milan-ASL/Milan-ASL%20V100R001C17SPC701/Ascend-cann-kernels-910b_8.0.RC1.alpha001_linux.run
bash Ascend-cann-kernels-910b_8.0.RC1.alpha001_linux.run --install

# 设置环境变量
source /usr/local/Ascend/ascend-toolkit/set_env.sh
依赖项 至少 推荐
CANN 8.0.RC1 8.0.RC1
torch 2.1.0 2.1.0
torch-npu 2.1.0 2.1.0.post3
deepspeed 0.13.2 0.13.2

请使用 ASCEND_RT_VISIBLE_DEVICES 而非 CUDA_VISIBLE_DEVICES 来指定运算设备。

如果遇到无法正常推理的情况,请尝试设置 do_sample: false

接下来我们在 data\dataset_info.json数据集格式文件中加入以下信息

  "ESG_Knowledge_Network": {
   
    "file_name": "ESG_Knowledge_Network.json"
  }

再接下来我们可以指定模型下载镜像

从魔搭社区下载

如果您在 Hugging Face 模型和数据集的下载中遇到了问题,可以通过下述方法使用魔搭社区。

export USE_MODELSCOPE_HUB=1 # Windows 使用 `set USE_MODELSCOPE_HUB=1`

model_name_or_path 设置为模型 ID 来加载对应的模型。在魔搭社区查看所有可用的模型,例如 LLM-Research/Meta-Llama-3-8B-Instruct

从魔乐社区下载

您也可以通过下述方法,使用魔乐社区下载数据集和模型。

export USE_OPENMIND_HUB=1 # Windows 使用 `set USE_OPENMIND_HUB=1`

model_name_or_path 设置为模型 ID 来加载对应的模型。在魔乐社区查看所有可用的模型,例如 TeleAI/TeleChat-7B-pt
魔塔的模型比较全面。
再接下来,我们构建lora训练配置文件 注意啊这里我们使用的是魔搭社区的模型下载方式。魔搭社区中qwen2.5 14B instruct的名字是 Qwen/Qwen2.5-14B-Instruct。

vim examples/train_lora/qwen2.5_14B_lora_sft.yaml

文件内容

### model
model_name_or_path: Qwen/Qwen2.5-14B-Instruct

### method
stage: sft
do_train: true
finetuning_type: lora
lora_target: all

### dataset
dataset: ESG_Knowledge_Network
template: qwen
cutoff_len: 2048
max_samples: 1000
overwrite_cache: true
preprocessing_num_workers: 16

### output
output_dir: saves/llama3-8b/lora/sft
logging_steps: 10
save_steps: 500
plot_loss: true
overwrite_output_dir: true

### train
per_device_train_batch_size: 1
gradient_accumulation_steps: 8
learning_rate: 1.0e-4
num_train_epochs: 3.0
lr_scheduler_type: cosine
warmup_ratio: 0.1
bf16: true
ddp_timeout: 180000000

### eval
val_size: 0.1
per_device_eval_batch_size: 1
eval_strategy: steps
eval_steps: 500

以下是对上述各参数含义的详细介绍:

model(模型相关参数)

  • model_name_or_path: Qwen/Qwen2.5-14B-Instruct
    • 含义:指定了所使用模型的名称或路径。在这里表明使用的是阿里云的Qwen2.5系列下的14B(140亿参数)规模的指令微调(Instruct)版本模型。通过这个参数,程序能够找到对应的预训练模型文件及相关配置,以便后续进行进一步的微调训练等操作。

method(方法相关参数)

  • stage: sft
    • 含义:表示当前任务所处的阶段,“sft”通常代表“Supervised Fine-Tuning(监督微调)”阶段,意味着会基于已有的预训练模型,利用有标注的数据进行有监督的微调训练,使模型能更好地适应特定的任务或领域需求。
  • do_train: true
    • 含义:布尔类型参数,设置为true表明要进行训练操作。如果设为false,则会跳过训练相关流程,可能只进行如模型加载、评估等其他操作。
  • finetuning_type: lora
    • 含义:指定了微调的具体类型为“LoRA(Low-Rank Adaptation,低秩自适应)”。LoRA是一种在微调大模型时较为高效的方法,它通过在原始模型基础上添加少量可训练的低秩矩阵,来减少微调时需要训练的参数量,同时又能达到较好的性能提升效果,避免对整个大模型进行全量参数的微调,节省计算资源和训练时间。
  • lora_target: all
    • 含义:表明将LoRA方法应用的目标范围是“所有”,意味着模型中所有相关的模块或者层都可以应用LoRA进行微调,具体哪些是“相关”取决于模型自身的结构设计,不过此参数设定下基本涵盖了尽可能多的部分,旨在全面地对模型进行适配性调整。

dataset(数据集相关参数)

  • dataset: ESG_Knowledge_Network
    • 含义:指定了要用于训练和评估等操作的数据集名称为“ESG_Knowledge_Network”,程序会依据这个名称去查找对应的数据集文件或者数据加载逻辑,以获取训练和评估所需的数据。
  • template: qwen
    • 含义:表示数据在输入模型前会按照“qwen”这种特定的模板格式进行处理。不同的模板可能对应着不同的文本组织、拼接等方式,以便更好地适配所选用的Qwen系列模型,使其能正确理解输入数据的结构和语义。
  • cutoff_len: 2048
    • 含义:定义了输入文本的截断长度为2048个字符(或token,取决于具体的计数单位设定)。在处理输入数据时,如果文本长度超过这个值,就会按照一定的截断策略(例如截断末尾部分等)将其缩短,避免输入过长导致模型处理困难或者超出其处理能力范围。
  • max_samples: 1000
    • 含义:限制了从数据集中选取的最大样本数量为1000个。这在数据集样本数量较多但出于训练时间、资源等考虑不需要全部使用时很有用,只选取一部分有代表性的样本进行训练和评估等操作。
  • overwrite_cache: true
    • 含义:布尔类型参数,设置为true表示如果存在之前处理数据集时生成的缓存文件,会直接覆盖重写它们。这样做可以确保数据处理过程总是基于最新的配置和逻辑,但会丢失之前缓存的数据,重新进行数据的读取、预处理等操作。
  • preprocessing_num_workers: 16
    • 含义:指定了在进行数据集预处理时使用的工作进程数量为16个。通过多进程并行处理的方式,可以加快数据集的预处理速度,比如数据的清洗、格式转换、按照模板组织等操作都可以分配到多个进程同时进行,提升整体的数据准备效率。

output(输出相关参数)

  • output_dir: saves/llama3-8b/lora/sft
    • 含义:定义了模型训练输出结果(如训练好的模型权重文件、训练日志等)的保存目录路径,在这里指定的路径为“saves/llama3-8b/lora/sft”,后续训练过程产生的相关文件都会存放在这个目录下,方便后续查找、使用和管理训练结果。
  • logging_steps: 10
    • 含义:表示每隔10个训练步骤(通常指的是模型参数更新的次数)记录一次训练日志信息,这些日志包含了如当前训练损失值、训练速度、模型在验证集上的表现等关键指标,方便查看训练过程中的进展情况以及分析模型是否正常收敛等。
  • save_steps: 500
    • 含义:设定每经过500个训练步骤就保存一次模型的当前状态,包括模型的权重参数等,这样在训练过程中可以得到多个不同阶段的模型版本,一方面可以用于后续的对比分析,另一方面如果训练意外中断,也可以从较近的保存点恢复继续训练。
  • plot_loss: true
    • 含义:布尔类型参数,设置为true表示会绘制训练过程中的损失值变化曲线(通常是随着训练步骤的增加),以可视化的方式展示模型的收敛情况,更直观地观察训练是否平稳、是否出现过拟合或欠拟合等问题。
  • overwrite_output_dir: true
    • 含义:布尔类型参数,设置为true意味着如果指定的输出目录(即output_dir所定义的目录)已经存在,会直接覆盖该目录下原有的内容。与overwrite_cache类似,这样做可以保证输出结果是最新的训练过程产生的,但会丢失之前目录下已有的文件,需谨慎使用。

train(训练相关参数)

  • per_device_train_batch_size: 1
    • 含义:指定了在每个设备(比如单个GPU或者CPU核心等,如果是分布式训练则是每个计算节点上)上进行训练时的批次大小为1,即每次向模型输入1个样本进行参数更新计算,批次大小会影响模型训练的稳定性、收敛速度以及内存占用等情况,较小的批次大小可能使训练更稳定但速度较慢。
  • gradient_accumulation_steps: 8
    • 含义:梯度累积步数设置为8,由于某些情况下单个设备的内存有限不能设置很大的批次大小,通过梯度累积的方式,可以先多次(这里是8次)计算小批次(如前面per_device_train_batch_size定义的批次大小为1)的梯度但不立即更新模型参数,而是将这些梯度累积起来,等累积到一定步数(8步)后再统一进行一次参数更新,相当于模拟了一个更大批次的训练效果,有助于在有限内存下训练更大的模型或者提升训练效率。
  • learning_rate: 1.0e-4
    • 含义:定义了模型训练时的学习率为1.0e-4(即0.0001),学习率是控制模型参数更新步长的重要超参数,决定了每次根据梯度信息调整模型参数时的幅度大小,合适的学习率对模型能否顺利收敛、训练速度以及最终性能都有很大影响,通常需要根据不同的模型和任务进行调试选择。
  • num_train_epochs: 3.0
    • 含义:设定了训练的轮数为3轮,一轮训练指的是模型完整遍历一次训练数据集,经过多个轮次的训练,模型可以逐步学习到数据中的模式和规律,提高对任务的处理能力,轮数过少可能导致模型学习不充分,轮数过多则可能出现过拟合等问题。
  • lr_scheduler_type: cosine
    • 含义:指定了学习率调度器的类型为“余弦(cosine)”调度器。学习率调度器用于在训练过程中动态调整学习率,余弦调度器通常会按照余弦函数的变化规律来逐渐降低学习率,例如在训练前期学习率相对较大,便于快速探索参数空间,随着训练轮次增加学习率逐渐减小,使模型能更精细地收敛到较优的参数值,有助于提升模型最终的性能。
  • warmup_ratio: 0.1
    • 含义:定义了热身(warmup)阶段占总训练轮数的比例为0.1(即10%)。热身阶段是训练开始时的一个特殊阶段,在此期间学习率会从一个较小的值逐渐上升到设定的初始学习率(如前面的1.0e-4),这样做有助于模型在训练初期更平稳地开始参数更新,避免一开始学习率过大导致模型不稳定等问题,尤其对于一些复杂的大模型训练很有帮助。
  • bf16: true
    • 含义:布尔类型参数,设置为true表示在训练过程中使用bf16(Brain Floating Point 16,一种16位的浮点数格式)数据类型进行计算。与传统的32位浮点数(如fp32)相比,bf16可以在一定程度上减少内存占用和计算量,同时又能保持较好的计算精度,适合在一些支持该数据类型的硬件(如部分新型GPU)上加速训练过程。
  • ddp_timeout: 180000000
    • 含义:在分布式数据并行(Distributed Data Parallel,DDP)训练场景下,此参数定义了超时时间(单位通常是秒等时间单位,这里数值较大,具体需结合实际代码中的时间单位设定),如果某个节点在训练过程中超过这个时间没有响应或者通信出现问题等,就会触发相应的超时处理机制,保证分布式训练的稳定性和健壮性。

eval(评估相关参数)

  • val_size: 0.1
    • 含义:指定了从整个数据集中划分出用于验证(validation)的数据集所占的比例为0.1(即10%)。在训练过程中,除了使用训练集来训练模型外,还需要一个验证集来评估模型在未见过的数据上的表现,以便监控模型是否出现过拟合等情况,根据验证集的评估结果可以调整训练策略,如提前停止训练等。
  • per_device_eval_batch_size: 1
    • 含义:类似于训练时的批次大小参数,这里是指在每个设备上进行模型评估时的批次大小为1,即每次向模型输入1个样本计算评估指标,评估批次大小同样会影响评估速度和内存占用等情况。
  • eval_strategy: steps
    • 含义:定义了评估的策略为按照训练“步骤(steps)”来进行,也就是在训练过程中,每经过一定数量的训练步骤(如前面eval_steps参数定义的步数)就对模型进行一次评估,还有其他评估策略比如按照训练“轮数(epochs)”等,根据不同的任务和需求可以选择合适的评估策略来及时掌握模型的性能变化情况。
  • eval_steps: 500
    • 含义:结合eval_strategy参数来看,表明每经过500个训练步骤就对模型进行一次评估,基于评估的结果(如准确率、损失值等指标)来判断模型的训练情况以及是否需要调整训练参数、提前停止训练等操作。

在接下来我们就可以开心的训练模型啦。

llamafactory-cli train examples/train_lora/qwen2.5_14B_lora_sft.yaml
相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
相关文章
|
7月前
|
人工智能 边缘计算 测试技术
MLPerf推理基准测试引入Llama 2 新结果公布
【4月更文挑战第5天】MLCommons发布了最新MLPerf推理基准测试结果,涉及数据中心和边缘计算,引入了大型语言模型Llama 2进行性能评估。Llama 2在OPEN ORCA数据集上的表现提升测试复杂性,提供了更全面的性能数据。MLPerf测试涵盖图像分类、对象检测等边缘计算任务,为开发者和研究人员提供参考。测试结果存在硬件和软件配置影响的局限性,但仍是衡量AI系统性能的重要标准。
138 9
MLPerf推理基准测试引入Llama 2 新结果公布
|
7月前
|
自然语言处理 数据可视化 物联网
Qwen1.5-MoE开源,魔搭社区推理训练最佳实践教程来啦
通义千问团队推出Qwen系列的首个MoE模型,Qwen1.5-MoE-A2.7B。
|
7月前
|
人工智能 算法 开发工具
Mixtral 8X7B MoE模型在阿里云PAI平台的微调部署实践
Mixtral 8x7B 是Mixtral AI最新发布的大语言模型,是当前最为先进的开源大语言模型之一。阿里云人工智能平台PAI,提供了对于 Mixtral 8x7B 模型的全面支持,开发者和企业用户可以基于 PAI-快速开始轻松完成Mixtral 8x7B 模型的微调和部署。
|
3月前
|
机器学习/深度学习 人工智能 分布式计算
使用PAI+LLaMA Factory 微调 Qwen2-VL 模型,搭建文旅领域知识问答机器人
本次教程介绍了如何使用 PAI ×LLaMA Factory 框架,基于全参方法微调 Qwen2-VL 模型,使其能够进行文旅领域知识问答,同时通过人工测试验证了微调的效果。
使用PAI+LLaMA Factory 微调 Qwen2-VL 模型,搭建文旅领域知识问答机器人
|
14天前
|
编解码 机器人 测试技术
技术实践 | 使用 PAI+LLaMA Factory 微调 Qwen2-VL 模型快速搭建专业领域知识问答机器人
Qwen2-VL是一款具备高级图像和视频理解能力的多模态模型,支持多种语言,适用于多模态应用开发。通过PAI和LLaMA Factory框架,用户可以轻松微调Qwen2-VL模型,快速构建文旅领域的知识问答机器人。本教程详细介绍了从模型部署、微调到对话测试的全过程,帮助开发者高效实现定制化多模态应用。
|
2天前
|
自然语言处理 并行计算 API
Qwen模型应用:微调与部署实践
Qwen模型应用:微调与部署实践
102 0
|
5月前
|
机器学习/深度学习 自然语言处理 Swift
从头构建和训练 GPT-2 |实战
从头构建和训练 GPT-2 |实战
67 4
|
6月前
|
自然语言处理 监控 并行计算
Qwen2大模型微调入门实战(完整代码)
该教程介绍了如何使用Qwen2,一个由阿里云通义实验室研发的开源大语言模型,进行指令微调以实现文本分类。微调是通过在(指令,输出)数据集上训练来改善LLMs理解人类指令的能力。教程中,使用Qwen2-1.5B-Instruct模型在zh_cls_fudan_news数据集上进行微调,并借助SwanLab进行监控和可视化。环境要求Python 3.8+和英伟达显卡。步骤包括安装所需库、准备数据、加载模型、配置训练可视化工具及运行完整代码。训练完成后,展示了一些示例以验证模型性能。相关资源链接也一并提供。
Qwen2大模型微调入门实战(完整代码)
|
5月前
|
监控 算法 物联网
LLaMA-Factory:大语言模型微调框架 | AIGC
LLaMA-Factory 是一个国内北航开源的低代码大模型训练框架,专为大型语言模型(LLMs)的微调而设计【7月更文挑战第5天】
511 9
|
5月前
|
存储 人工智能 物联网