Qwen1.5大语言模型微调实践

2024-04-18 07:28

本文主要是介绍Qwen1.5大语言模型微调实践,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在人工智能领域,大语言模型(Large Language Model,LLM)的兴起和广泛应用,为自然语言处理(NLP)带来了前所未有的变革。Qwen1.5大语言模型作为其中的佼佼者,不仅拥有强大的语言生成和理解能力,而且能够通过微调(fine-tuning)来适应各种特定场景和任务。本文将带领大家深入实战,探索如何对Qwen大语言模型进行微调,以满足实际应用的需求。

一、了解Qwen1.5大语言模型

Qwen1.5模型是Qwen的升级版,也是Qwen2的测试版。它与Qwen类似,是只有一个decoder解码器的 transformer 模型,具有SwiGLU激活、RoPE、multi-head attention多头注意力。

  • Qwen1.5有7个模型尺寸:0.5B, 1.8B, 4B, 7B, 14B, 72B 模型,还外加 14B (A2.7B) MoE 模型。
  • chat 聊天模型的质量得到明显提高
  • 在 base 模型和 chat 模型支持多语言的能力(中文,英文等)
  • 支持 32768 tokens 的上下文长度
  • 所有模型启用System prompts,可以进行角色扮演
  • 不再需要 trust_remote_code

二、微调GPU资源评估和环境准备

这里我使用 Llama-Factory 训练框架来对 Qwen1.5 来进行微调,微调的方法可以使用 LoRA 或 QLoRA,可以大大节省GPU资源。具体的 Llama-Factory 环境搭建方法可以看官方链接:https://github.com/hiyouga/LLaMA-Factory

三、准备微调数据集和预训练模型

(1)数据集准备

微调数据集是微调过程中的关键。我们需要根据具体任务的需求,收集并整理相关的数据。这些数据应该包含输入和对应的输出,以便模型在训练过程中学习如何从输入中生成期望的输出。这里我使用一些公开的数据集来进行微调。

  • Alpaca GPT4 (en&zh)
  • Stanford Alpaca (en)
  • Stanford Alpaca (zh)
  • Self Cognition (zh)

更多的数据集请看链接:GitHub - hiyouga/LLaMA-Factory: Unify Efficient Fine-Tuning of 100+ LLMs

(2)Pre-training 模型准备

直接在 huggingface 下载,下载地址:Qwen

如果自己网络无法访问 huggingface ,也可以使用 HF-Mirror - Huggingface 镜像站 来进行下载也可以。

四、模型微调训练

(1)运行打开web ui 界面
按照 LLaMA-Factory 里面的教程搭建好环境之后就可以开始对模型进行微调了,执行以下命令来启动web ui 界面来进行微调:
cd LLaMA-Factoryexport CUDA_VISIBLE_DEVICES=0  # use gpu0
python src/train_web.py        # or python -m llmtuner.webui.interface

如果想修改 网页服务的地址和端口号,直接在 src/train_web.py 修改就可以了。这里也可以代码中的 share 设置为True ,就可以把本地网络的web ui 界面作为一个 public 链接分享出去。

from llmtuner import create_uidef main():create_ui().queue().launch(server_name="127.0.0.1", server_port=6006, share=True, inbrowser=True)if __name__ == "__main__":main()

(2)配置训练参数

然后根据的要求来进行配置,我的配置如下:

模型名称: Qwen1.5-7B-Chat

模型路径:填写自己本地下载的模型的路径,或者 Hugging Face 路径

微调方法:可以选用 lora, freeze, full 等

量化等级:选择 none,不进行量化,也可以启用 4/8 bit 模型量化(即 QLoRA)

提示模板:qwen

训练阶段:Supervised Fine-Tuning,也可以选 Reward Modeling, PPO, DPO, Pre-training等

数据路径:数据所在文件夹,默认为项目中的 data 文件夹

数据集:提取了 data 文件夹中的 *.json 文件,可直接选择。选择完成之后点一下“预览数据集”确认自己的数据是否正确。

其他的参数比如 学习率、训练轮数(epoch)、批处理大小、学习率调节器 等都是深度学习训练常见的参数,可以根据自己的情况选择就好。这里我使用默认的参数。

LoRA 参数设置中,可以修改 lora 秩的大小,缩放系数,权重随机丢弃的概率等参数,这里我保持默认。

所有的参数都配置好之后,点一下“预览命令”,确认命令没有问题之后,就可以点击“开始”进行训练了。训练的过程中可以看到 loss的变化曲线、训练耗时等。

五、模型微调效果测试

微调完成后,我们需要对微调后的模型进行评估,以了解其在实际任务中的性能表现。也可以在web ui 界面直接进行对话体验。

“模型路径”中输入原始模型路径,然后在“适配器路径”中选择自己微调得到的 adapter 路径,然后点击“加载模型”,就可以开始对话聊天了。

通过终端窗口,可以看到模型成功加载

对话聊天:


参考:

1. GitHub - hiyouga/LLaMA-Factory: Unify Efficient Fine-Tuning of 100+ LLMs

2.  GitHub - QwenLM/Qwen1.5: Qwen1.5 is the improved version of Qwen, the large language model series developed by Qwen team, Alibaba Cloud.

3.  快速上手!LLaMa-Factory最新微调实践,轻松实现专属大模型-CSDN博客

这篇关于Qwen1.5大语言模型微调实践的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/914130

相关文章

springboot项目中整合高德地图的实践

《springboot项目中整合高德地图的实践》:本文主要介绍springboot项目中整合高德地图的实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一:高德开放平台的使用二:创建数据库(我是用的是mysql)三:Springboot所需的依赖(根据你的需求再

SpringBoot3应用中集成和使用Spring Retry的实践记录

《SpringBoot3应用中集成和使用SpringRetry的实践记录》SpringRetry为SpringBoot3提供重试机制,支持注解和编程式两种方式,可配置重试策略与监听器,适用于临时性故... 目录1. 简介2. 环境准备3. 使用方式3.1 注解方式 基础使用自定义重试策略失败恢复机制注意事项

MySQL MCP 服务器安装配置最佳实践

《MySQLMCP服务器安装配置最佳实践》本文介绍MySQLMCP服务器的安装配置方法,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下... 目录mysql MCP 服务器安装配置指南简介功能特点安装方法数据库配置使用MCP Inspector进行调试开发指

SQLite3命令行工具最佳实践指南

《SQLite3命令行工具最佳实践指南》SQLite3是轻量级嵌入式数据库,无需服务器支持,具备ACID事务与跨平台特性,适用于小型项目和学习,sqlite3.exe作为命令行工具,支持SQL执行、数... 目录1. SQLite3简介和特点2. sqlite3.exe使用概述2.1 sqlite3.exe

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用

Springboot整合Redis主从实践

《Springboot整合Redis主从实践》:本文主要介绍Springboot整合Redis主从的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言原配置现配置测试LettuceConnectionFactory.setShareNativeConnect

Go语言中泄漏缓冲区的问题解决

《Go语言中泄漏缓冲区的问题解决》缓冲区是一种常见的数据结构,常被用于在不同的并发单元之间传递数据,然而,若缓冲区使用不当,就可能引发泄漏缓冲区问题,本文就来介绍一下问题的解决,感兴趣的可以了解一下... 目录引言泄漏缓冲区的基本概念代码示例:泄漏缓冲区的产生项目场景:Web 服务器中的请求缓冲场景描述代码

Go语言如何判断两张图片的相似度

《Go语言如何判断两张图片的相似度》这篇文章主要为大家详细介绍了Go语言如何中实现判断两张图片的相似度的两种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 在介绍技术细节前,我们先来看看图片对比在哪些场景下可以用得到:图片去重:自动删除重复图片,为存储空间"瘦身"。想象你是一个

Go语言中Recover机制的使用

《Go语言中Recover机制的使用》Go语言的recover机制通过defer函数捕获panic,实现异常恢复与程序稳定性,具有一定的参考价值,感兴趣的可以了解一下... 目录引言Recover 的基本概念基本代码示例简单的 Recover 示例嵌套函数中的 Recover项目场景中的应用Web 服务器中

java中Optional的核心用法和最佳实践

《java中Optional的核心用法和最佳实践》Java8中Optional用于处理可能为null的值,减少空指针异常,:本文主要介绍java中Optional核心用法和最佳实践的相关资料,文中... 目录前言1. 创建 Optional 对象1.1 常规创建方式2. 访问 Optional 中的值2.1