基于LLAMA-7B的lora中文指令微调

news2024/9/20 20:44:58

目录

  • 1. 选用工程
  • 2. 中文llama-7b预训练模型下载
  • 3. 数据准备
  • 4. 开始指令微调
  • 5. 模型测试

前言:

  • 系统:ubuntu18.04
  • 显卡:GTX3090 - 24G (惨呀,上次还是A100,现在只有3090了~)
    (本文旨在快速实现基于llama-7b的中文指令微调)

1. 选用工程

咱们还是用lit-llama(环境安装过程见上篇博客)

  • 地址:https://github.com/Lightning-AI/lit-llama在这里插入图片描述

2. 中文llama-7b预训练模型下载

  • 模型下载
    在huggingface上搜索"llama chinese",我们选以下这个模型,如图所示:在这里插入图片描述

  • 模型转换
    切换到lit-llama的工程,修改scripts/convert_hf_checkpoint.py,修改路径,

    • checkpoint_dir:从huggingface下载的权重路径
    • output_dir:转换之后保存的路径
      如下图所示:在这里插入图片描述
  • 切换到lit-llama项目路径下,运行如下指令,进行模型转换:

    python scripts/convert_hf_checkpoint.py
    
  • 转换完毕后,在刚才设置的输出路径,会得到lit-llama.pth文件(26G),在上一级目录有tokenizer.model文件
    在这里插入图片描述

3. 数据准备

  • 这里我们选用alpaca的中文指令数据alpaca_data_zh_51k.json,下载地址如下所示:在这里插入图片描述
  • 打开文件,指令数据如下所示:在这里插入图片描述
  • 切换到lit-llama项目路径,打开scripts/prepare_alpaca.py(这里建议复制一份),主要修改如下图所示:
    1)修改中文指令数据文件名
    2)修改中文指令数据存放路径
    3)修改中文llama模型的tokenizer.model路径
    4)中文llama-7b的max_seq_length设置为2048,但是如果你只有一张3090显卡,设置2048会显存溢出,所以这里我们只设置256
    5)因为已经下载完alpaca_data_zh_51k.json文件了,注释掉36和38行代码
    在这里插入图片描述
  • 切换到lit-llama项目路径,运行如下指令:
    python scripts/prepare_alpaca.py	
    
  • 运行完毕之后,会在刚才设置的destination_path下得到train.pt和test.pt的数据文件,如下图所示:在这里插入图片描述
    到这里,数据准备完成。

4. 开始指令微调

  • 修改vocab_size
    由于原始llama-7b指令的vocab_size为32000,而下载的中文llama-7b的词典大小为49953,需要对其进行修改。打开lit-llama/model.py,将padded_vocab_size设置为49953,如下图所示:
    在这里插入图片描述

  • 打开finetune/lora.py(建议复制一份),修改训练脚本指令路径,包括:
    1)data_dir:中文指令文件路径
    2)pretrained_path:转换之后的中文lit-llama.pth路径
    3)tokenizer_path:中文llama-7b的tokenizer.model路径
    4)out_dir:保存lora权重文件的路径
    在这里插入图片描述

  • 切换到lit-llama项目路径,运行以下指令开始指令微调:

    python finetune/lora.py
    
  • 训练过程如下所示:在这里插入图片描述

5. 模型测试

  • 切换到lit-llama项目路径,打开generate/lora.py(建议复制一份),修改对应的权重路径和tokenizer.model路径,如下图所示:在这里插入图片描述

  • 我们设置prompt为"中国的首都是哪里?",运行如下指令进行测试:

    python generate/lora-chinese.py --prompt "中国的首都是哪里?"
    
  • 测试结果如下所示:在这里插入图片描述

总结:

  • 注意替换vocab_size,原始llama-7b的词典大小为32000,下载的中文预训练模型vocab_size为49953
  • 原工程中max_seq_length设置为256,下载的中文预训练模型max_seq_length为2048,但是由于受显存限制(穷~),做中文指令微调时也设置为max_seq_length=256,可能会影响效果。
  • 下一步工作尝试使用多卡训练以及使用自己的数据进行指令微调

结束。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/715169.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

I.MX RT1170之FlexSPI(3):NOR Flash手册分析和参数配置详解

在上一节中,我们分析了FlexSPI的相关参数:LUT表格的组成和FlexSPI结构体配置,这一节就以WINBOND的W25Q256JV NOR Flash为例,看一下如何根据这个NOR Flash的数据手册配置FlexSPI接口。 文章目录 1 SDK代码2 NOR Flash配置流程2.1 时…

java.lang.IllegalArgumentException: 找到多个名为spring_web的片段。这是不合法的相对排序。

问题 java.lang.IllegalArgumentException: 找到多个名为spring_web的片段。这是不合法的相对排序。 详细问题 笔者使用ServletJSP技术框架进行项目开发,对于项目进行国际化(即i18n,实现中英文页面转换),需要引入 下…

【C语言初阶(9)】函数2

文章目录 1. 函数的嵌套调用和链式访问1.1 嵌套调用1.2 链式访问 2. 函数的声明和定义2.1 函数定义2.2 函数声明2.3 函数的实际应用 3. 函数递归3.1 什么是递归?3.2 递归使用条件3.3 递归的案例3.4 递归的优缺点 4. 递归练习题 1. 函数的嵌套调用和链式访问 函数和函…

悟道·天鹰 Aquila + 天秤 FlagEval,打造大模型能力与评测标准双标杆

为推动大模型在产业落地和技术创新,智源研究院发布“开源商用许可语言大模型系列开放评测平台” 2 大重磅成果,打造“大模型进化流水线”,持续迭代、持续开源开放。 开源商用许可语言大模型系列 悟道天鹰(Aquila) 语…

教师资格证考试(高中数学)-考什么

目录 考什么 及格线 科一-综合素质 ​编辑 科二-教育知识与能力 科三-学科知识与教学能力(数学) 题型 考什么 及格线 大家要明确3个分数: ✅卷面分数:满分为150分,也就是大家平时拿到的试卷及真题卷面分数。 ✅报告分数:…

React 之 组件化开发

本文主讲解类组件,函数组件会在后续文章中学习 一、组件化开发 1. 概念 组件化是一种分而治之的思想: 如果将一个页面中所有的处理逻辑放在一起,处理起来会变得非常复杂,不利于后续的管理以及扩展 但如果讲一个页面拆分成一个个小…

Web安全-AntSword(中国蚁剑)Webshell管理工具使用

为方便您的阅读,可点击下方蓝色字体,进行跳转↓↓↓ 01 工具下载地址02 工具介绍03 使用案例04 参考资料 01 工具下载地址 https://github.com/AntSwordProject/蚂剑工具的下载分为两个部分,一个是项目核心源码antSword,另一个是…

【算法】树形DP ①(树的直径)

文章目录 知识准备例题543. 二叉树的直径124. 二叉树中的最大路径和2246. 相邻字符不同的最长路径 相关题目练习687. 最长同值路径 https://leetcode.cn/problems/longest-univalue-path/solution/shi-pin-che-di-zhang-wo-zhi-jing-dpcong-524j4/1617. 统计子树中城市之间最大…

测试的流程,jira工具的使用

目录: 测试流程价值与体系测试计划业务架构分析思路bug基本概念bug处理流程测试总结业务架构分析工具plantuml测试流程管理jira系统-测试流程定制测试流程管理 jira 系统-Bug管理流程定制 1.测试流程价值与体系 软件测试流程 完成软件测试工作的必要步骤 测试流…

用图计算解密大脑,蚂蚁技术研究院与复旦联手启动类脑研究

大脑为什么会产生意识?我们为什么会失眠?帕金森、阿尔兹海默等神经性疾病如何有效治疗?这一切谜题的背后都绕不开脑科学。可以说脑科学问题是人类面临的基础科学问题之一,是我们解密人类自身的“终极疆域”。 我们的大脑由大约86…

第十二章线程池

文章目录 享元模式手写数据库连接池 为什么需要线程池自定义线程池自定义拒绝策略接口自定义任务队列自定义线程池 JDK中的线程池常用的线程池的类和接口的之间的关系线程池状态构造方法线程池的工作流程拒绝策略 ExecuctorsnewFixedThreadPoolnewCachedThreadPoolnewSingleThr…

【Matlab】智能优化算法_平衡优化器算法EO

【Matlab】智能优化算法_平衡优化器算法EO 1.背景介绍2.数学模型2.1 初始化和功能评估2.2 平衡池和候选者(Ceq)2.3 指数项(F)2.3 生成率(G) 3.文件结构4.伪代码5.详细代码及注释5.1 EO.m5.2 Get_Functions_…

Linux基础服务7——lamp架构

文章目录 一、基本了解二、单机部署LAMP2.1 安装httpd2.2 安装mysql2.3 安装php环境2.4 配置apache 三、分离部署四、脚本单机部署 一、基本了解 LAMP架构介绍: lamp是由LinuxApacheMysql/MariaDBPhp/Perl/Python的一组动态网站或者服务器的开源软件。LAMP指Linux&a…

多元回归预测 | Matlab基于深度置信网络(DBN)回归预测,matlab代码回归预测,多变量输入模型

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 多元回归预测 | Matlab多元回归预测 | Matlab基于深度置信网络(DBN)回归预测,matlab代码回归预测,多变量输入模型 评价指标包括:MAE、RMSE和R2等,代码质量极高,方便学习和替换数据。要求2018版本及以上。 部分…

原来工作18年的企业大佬都是这样自定义企业微信扫码登录的样式

前言 由于企业微信扫码登录都是固定样式和模板,每个公司在前期使用的时候可能会使用原样的模版,随着业务场景的复杂及细分场景优化,这个固定样式的模版满足不了企业的需求,所以需要对模版进行改造,使它更加贴合企业业务…

【elementplus】解决el-table开启show-overflow-tooltip后,tooltip的显示会被表格边框遮挡的问题

如图所示: 原因: 1. el-table没有设置高度;2.就是被遮住了 解决: 方法一:给el-table设置高度 方法二: .el-table {overflow: visible !important;}如果不想给el-table设置高度,就直接使用方法二解决即可

Pycharm使用Anoconda配置虚拟环境

目录 1.Anoconda的介绍 2.Anaconda的作用 3.Anaconda的安装 4.Anaconda的配置 4.1添加镜像源 4.2创建、使用并切换虚拟环境 5.pycharm的集成 1.Anoconda的介绍 Anaconda是一个可用于科学计算的 Python 发行版,可以便捷获取和管理包,同时对环境进行…

Java内存结构分析

一、Java内存结构划分 Java虚拟机的运行时数据区域主要包括程序计数器、Java虚拟机栈、本地方法栈、堆、方法区。 (1)程序计数器(Program Counter Register) 它是一块较小的内存空间,它可以看作是当前线程所执行的字…

SpringBoot项目整合WebSocket+netty实现前后端双向通信(同时支持前端webSocket和socket协议哦)

目录 前言 技术栈 功能展示 一、springboot项目添加netty依赖 二、netty服务端 三、netty客户端 四、测试 五、代码仓库地址 专属小彩蛋:前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家…

OLS回归分析理论基础

前言 由于目前的实证研究中需要对变量间的因果关系进行定量分析,所以以伍德里奇和陈强两版本计量经济学教材为基础,有针对性的整理出OLS回归的相关知识,以解决实证分析中的实际问题。 1)本文重点:本文重点研究OLS下面板…