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

目录

  • 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.hqwc.cn/news/9616.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python】基于Python的机器学习分类的模型选择:交叉验证和模型质量评估

目录 1 简介2 思路分解与说明3 完整代码 1 简介 最近完成一个工作,就基于一些表格化的数据进行机器学习分类。 由于分类是研究中的关键步骤,所以首先要选择到底哪个模型适合我们的分类任务。 比较传统且经典的选择方法就是用交叉验证。 交叉验证是什么可…

传输控制协议 TCP

文章目录 一、TCP报文格式1.报头格式2.TCP最大段长度 MSS 二、TCP连接建立与释放1.连接建立:三次握手2.报文传输3.连接释放:四次挥手4.保持定时器与时间等待定时器 三、TCP差错重传1.字节流状态分类与滑动窗口(发送)① 滑动窗口两…

Spring Boot中的Elasticsearch自动配置

Spring Boot中的Elasticsearch自动配置 Elasticsearch是一个基于Lucene的分布式全文搜索引擎,它在搜索、分析等方面具有出色的表现。Spring Boot中的Elasticsearch自动配置为我们提供了一种快速集成Elasticsearch的方式,使我们可以在Spring Boot应用程序…

【探索 Kubernetes|作业管理篇 系列 16】离线业务 Job、CronJob

前言 大家好,我是秋意零。 在上一篇中,我们讲解了 DaemonSet 控制器,相信你以及理解了其的工作过程,分为三部。一是,获取所有 Node 节点中的 Pod;二是,判断是否有符合 DaemonSet 管理的 Pod&a…

Linux基础工具|C/C++编译器:gcc/g++的使用

1.基础使用 gcc是专门用来编译C语言的编译器,而g是编译C的编译器(也可以编译C语言,毕竟C语言兼容C)。Linux下gcc默认使用8字节的指针。 下载安装:gcc的安装指令“sudo yum install gcc”(在Linux里大部分…

固态硬盘优化设置

文章目录 前言关闭Windows Search禁用系统保护(不建议)不建议禁用系统保护原因 关闭碎片整理提升固态硬盘速度开启TRIM合理使用固态硬盘的容量正确关机关闭开机自启 前言 提示:这里可以添加本文要记录的大概内容: 电脑配备固态硬…

大数据Doris(五十六):RESOTRE数据恢复

文章目录 RESOTRE数据恢复 一、RESTORE数据恢复原理 二、RESTORE 数据恢复语法 三、RESOTRE数据恢复案例 1、在 Doris 集群中创建 mydb_recover 库 2、执行如下命令恢复数据 3、查看 restore 作业的执行情况 四、注意事项 RESOTRE数据恢复 Doris 支持BACKUP方式将当前…

1.3 Metasploit 生成SSL加密载荷

在本节中,我们将介绍如何通过使用Metasploit生成加密载荷,以隐藏网络特征。前一章节我们已经通过Metasploit生成了一段明文的ShellCode,但明文的网络传输存在安全隐患,因此本节将介绍如何通过生成SSL证书来加密ShellCode&#xff…

BUU [网鼎杯 2020 青龙组]AreUSerialz

BUU [网鼎杯 2020 青龙组]AreUSerialz 先看题目&#xff0c;是个php反序列化。源码如下。 <?phpinclude("flag.php");highlight_file(__FILE__);class FileHandler {protected $op;protected $filename; protected $content;function __construct(…

openwrt使用记录

背景&#xff1a; 平时在vmware中做实验时候&#xff0c;经常需要在不同的机器上下载一些github上的项目进行调试&#xff0c;之前解决方案是在路由器层小米ac2100上装openwrt&#xff0c;试用一番发现太卡了。放弃&#xff0c;这次在vmware中安装作为小米ac2100的旁路由 规划…

全新QQ架构的“NT”版来袭

最近&#xff0c;全新发布的"NT"架构的QQ迎来了更新&#xff0c;同时面向用户开放了下载渠道&#xff0c;有些用户戏称为NT为脑瘫版本&#xff08;bushi&#xff09;苏音体验了以后&#xff0c;描述为&#xff1a;清爽简约还很流畅。 先来看看原来的QQ与现在的NT版本…

STM32外设系列—ESP8266(WIFI)

文章目录 一、ESP8266简介二、固件库烧录三、常用AT指令四、访问API4.1 获取IP地址4.2 GET天气信息4.3 访问结果展示 五、实战项目5.1 串口配置5.2 检测WIFI模块连接状态5.3 发送配置指令5.4 解析天气信息 六、成果展示 一、ESP8266简介 ESP8266是嵌入式和物联网开发中常用的模…