书生·浦语大模型实战营——第四次作业

资料来源:
github网址:InternLM/tutorial (github.com)
b站视频:书生·浦语大模型全链路开源体系_哔哩哔哩_bilibili

参考学习文档:tutorial/xtuner/README.md at main · InternLM/tutorial (github.com)

第四次作业XTuner

基础作业:

构建数据集,使用 XTuner 微调 InternLM-Chat-7B 模型, 让模型学习到它是你的智能小助手,效果如下图所示,本作业训练出来的模型的输出需要将不要葱姜蒜大佬替换成自己名字或昵称!

我第一次在把昵称改成了ZHY后,发现无论训练多少次都无法得到一个稳定的结果,同时在训练过程中的evaluation时会出现更奇怪的回答,比如:我是M语言模型之类的(未截图)

后来思考下可能是大语言模型微调时对于英语字符的编码效果不佳,将ZHY改成了千里茫茫如梦或者是其他的中文名就正常了

进阶作业:

将训练好的Adapter模型权重上传到 OpenXLabHugging Face 或者 MoelScope 任一一平台。

Json文件发表在浦源 HaoyunZhang/firstMEDlm

学习笔记:

课堂内容

指令微调与增量预训练微调

指令微调,提供大题模板,使得更好的回复问题,不同的模型有不同的模板,LLM分为System,User,Assistant,

增量预训练微调:

LoRA&QLoRA

Lora(Low-Rank Adaptation of Large Langage Models),大语言模型参数通常极大,进行全参数的调参开销太大,而LoRA只是在新开一个“支线”使得在这条支线上能够适配新的数据,训练只需要多新加的网络层进行训练微调,高效、开销低。

4bits 量化

# 加载 Adapter 模型对话(Float 16)全量操作

xtuner chat ./merged --prompt-template internlm_chat

# 4 bit 量化加载 开销较小

# xtuner chat ./merged --bits 4 --prompt-template internlm_chat

量化是指将连续的无限值映射到一组较小的离散有限值的过程。在LLM的上下文中,它指的是将模型的权重从高精度数据类型转换为低精度数据类型的过程。LLM量化综合指南(8bits/4bits) - 知乎 (zhihu.com)

QLoRA本身讲的是模型本身用4bit加载,训练时把数值反量化到bf16后进行训练,利用LoRA[2]可以锁定原模型参数不参与训练,只训练少量LoRA参数的特性使得训练所需的显存大大减少。例如33B的LLaMA模型经过这种方式可以在24 GB的显卡上训练,也就是说单卡4090、3090都可以实现,大大降低了微调的门槛(QLoRA: 4bit量化+LoRA训练=瞬间起飞 - 知乎 (zhihu.com)

Tmux的使用

tmux使用教程 - 知乎 (zhihu.com)

tmux是一个 terminal multiplexer(终端复用器),它可以启动一系列终端会话。实现的意义是当我们的连接服务器的主机以任何方式停止连接了(相当于ctrl-c终止了命令行),之前跑的结果都终止了,这在训练大模型的是时候这种高昂时间成本的时候是难以接受的。Tmux能够在中断SSH链接,但微调工作还不会中断

#命令行

apt update -y

apt install tmux -y

tmux new -s finetune#新开一个session 写入需要执行命令

tmux detach

# tmux detach的快捷键按一下 ctrl+B  松开后再按D 【快捷键】

tmux attach -t <session-name>  #重新连接回finetune

虽然没有前面的(xtuner0.1.9)环境提示,但也已经在该环境下了

tmux终端链接工具退出进程以及销毁进程_tmux 退出-CSDN博客

tmux kill-server #关闭所有session

记录终端输出的方式

由于服务器在定时会释放了,之前跑的结果就都不知道了,可以把内容保存到一个txt文件,方便之后进行查阅

Linux中记录终端(Terminal)输出到文本文件四种方法_linux 如何把终端打印信息输出到文件里-CSDN博客

#将命令行输出的结果存入txt文件

Command>>file.txt

#例如ls>>file.txt

但仍然有部分内容无法重定向

Map过程

from xtuner.dataset.map_fns import oasst1_map_fn, template_map_fn_factory #map过程内置写好的函数,将原数据内容转化成conversation的标注三元框架

学习内容

准备配置文件

配置文件的含义:

模型下载

软链这个内容对我也很新颖。软链相当于 几个文档下放有相同的文件(且能共同修改)

linux 软连接的使用 - 少说点话 - 博客园 (cnblogs.com)

将得到的 PTH 模型转换为 HuggingFace 模型

xtuner convert pth_to_hf ${CONFIG_NAME_OR_PATH} ${PTH_file_dir} ${SAVE_PATH}

模型底座

有很多的基准底座模型,可简答一览

自定义数据集

这部分感觉很重要,才是真的设计使用自己的模型的步骤。

首先需要获取数据(或公开数据集,或爬取数据),然后要将数据转化成Xtuner的数据格式

原始数据excel的截图

需要转化为标准的system、input、output的三段

可以看出system是固定的,input是数据集excel里面的question,output是数据集的answer

(优化?能否把数据集的Focus和Question Type也加入进去,写做训练的模板,比如对于不同的种类问题都可以定义一个回答模板)

BTW,这个让chatgpt生成代码的方式也值得学习,比起简单的直接让gpt干一个活,提供详细的数据格式、步骤大致思路、最终完成的文件格式,是十分必要的!对话的艺术hhh

详情tutorial/xtuner/README.md at main · InternLM/tutorial (github.com)

Git上传文件

将服务器文件上传到GitHub——从注册、创建、链接再到上传保存_连接远程服务器如何使用github-CSDN博客

Git init

git config --global user.email <your_email>

git config --global user.name <your_name>

git remote -v

git remote add origin <仓库提供的链接>

git add -A

Git报错:Another git process seems to be running in this repository - willingtolove - 博客园 (cnblogs.com)

上次git add -A需要终止重传,报错

Another git process seems to be running in this repository, e.g. an editor opened by 'git commit'. Please make sure all processes are terminated then try again. If it still fails, a git process may have crashed in this repository earlier: remove the file manually to continue.

git clean -f .git/index.lock

rm -f .git/index.lock

  • 20
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值