首页 > 其他分享 >课程4-笔记-书生浦语大模型实战营-4

课程4-笔记-书生浦语大模型实战营-4

时间:2024-02-26 11:15:29浏览次数:20  
标签:7b -- 模型 internlm2 笔记 书生 xtuner chat 浦语

1、XTuner安装
# 如果你是在 InternStudio 平台,则从本地 clone 一个已有 pytorch 2.0.1 的环境:
/root/share/install_conda_env_internlm_base.sh xtuner0.1.9
# 如果你是在其他平台:
conda create --name xtuner0.1.9 python=3.10 -y

# 激活环境
conda activate xtuner0.1.9
# 进入家目录 (~的意思是 “当前用户的home路径”)
cd ~
# 创建版本文件夹并进入,以跟随本教程
mkdir xtuner019 && cd xtuner019


# 拉取 0.1.9 的版本源码
git clone -b v0.1.9 https://github.com/InternLM/xtuner
# 无法访问github的用户请从 gitee 拉取:
# git clone -b v0.1.9 https://gitee.com/Internlm/xtuner

# 进入源码目录
cd xtuner

# 从源码安装 XTuner
pip install -e '.[all]'

注意:不管是internlm2--internlm-7b还是internlm--internlm-7b,cuda的版本应该为11.7,显卡驱动版本、torch版本、python版本也随之确定。我一开始装了最新的cuda12,最后排查问题总是怀疑版本不对降到了11.7,后面发现InternStudio官方开发机就只给了cuda11.7的镜像。

2、微调
2.1 准备配置文件
XTuner 提供多个开箱即用的配置文件,用户可以通过下列命令查看:

# 列出所有内置配置
xtuner list-cfg
配置文件名的解释:

xtuner copy-cfg internlm_chat_7b_qlora_oasst1_e3 .

模型名 internlm_chat_7b
使用算法 qlora
数据集 oasst1
把数据集跑几次 跑3次:e3 (epoch 3 )
拷贝一个配置文件到当前目录: # xtuner copy-cfg ${CONFIG_NAME} ${SAVE_PATH}

2.2 模型下载
还是用前两次课程下载的模型internlm2-chat-7b即可,对模型微调的结果会生成到其他目录,不会改变模型原始文件。

2.3 数据集下载
https://huggingface.co/datasets/timdettmers/openassistant-guanaco/tree/main

2.4 修改配置文件


其实这两处路径可以不修改,除非想换数据集,不改也不会重新下载,会引用到之前下载好的internlm2-chat-7b。微调完的新模型文件会生成到另一个目录,不会自动合并到原始模型上,模型的合并是需要手动处理的,后面有单独的小节介绍。

2.5 开始微调

可以看到每训练10个样本花费3分10秒,总共2166个样本训练3轮:

3 * (2166 / 10) * 3min10sec ≈ 34小时

eta也确实显示1 day 10 hours

 

期间显卡一直是满载的,显存16G都没到,QLoRA真省显存啊

 

最后终于训练成功了,训练期间每1000个样本训练完成会打印一次同一问题的回答,确实肉眼可见回答内容在不断丰富

 

训练完就得到了Adapter文件夹

 

后续的步骤跟课程保持一致

2.6 HuggingFace 模型转换
将得到的 PTH 模型转换为 HuggingFace 模型,即:生成 Adapter 文件夹

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

在本示例中,为:

mkdir hf
export MKL_SERVICE_FORCE_INTEL=1
export MKL_THREADING_LAYER=GNU
xtuner convert pth_to_hf ./internlm2_chat_7b_qlora_oasst1_e3_copy.py ./work_dirs/internlm_chat_7b_qlora_oasst1_e3_copy/epoch_3.pth ./hf

此时,hf 文件夹即为我们平时所理解的所谓 “LoRA 模型文件”

3、部署与测试
3.1 将 HuggingFace adapter 合并到大语言模型
xtuner convert merge ./internlm2-chat-7b ./hf ./merged --max-shard-size 2GB
# xtuner convert merge \
# ${NAME_OR_PATH_TO_LLM} \
# ${NAME_OR_PATH_TO_ADAPTER} \
# ${SAVE_PATH} \
# --max-shard-size 2GB
3.2 与合并后的模型对话
# 加载 Adapter 模型对话(Float 16)
xtuner chat ./merged --prompt-template internlm2_chat

# 4 bit 量化加载
# xtuner chat ./merged --bits 4 --prompt-template internlm2_chat
注意:如果跟我一样使用的是internlm2-chat-7b模型,此处的对话模板也必须调整为internlm2_chat,否则可能会不停自动输出,无法交互。

3.3 运行demo
修改cli_demo.py中的模型为上一步merge的结果

这个回答实际上是第一轮微调1000个样本之后的了,最早的截图我找不到了~跟最后的结果比,仍然能看出不小的差异。

 

标签:7b,--,模型,internlm2,笔记,书生,xtuner,chat,浦语
From: https://www.cnblogs.com/russellwang/p/18033872

相关文章

  • 课程5-笔记-书生浦语大模型实战营-5
    一、大模型部署1、模型部署及大模型特点模型大,token不固定,结构简单2、大模型部署遇到的问题及解决方案硬件、速度、技术、方案模型部署存在的问题:1、硬件需求相对较大,特别在于显卡及内存方面。2、由于模型较大,则速度就会很慢优化方法:1、在卷积神经网络中是有:剪枝、量......
  • 课程3-笔记-书生浦语大模型实战营-3
    对LLM进行增强的方法一般有两种:RAG(RetrievalAugmentedGeneration检索增强生成)或者finetune。其中,RAG可以简单理解为外接一个知识库,从而对某个特定的领域进行增强原始LLM的能力。相比Finetune而言,成本低,且实时性好。不需要对原模型进行修改,但是,也非常受限于原LLM的能力。RAG......
  • MMFN论文阅读笔记(Multi-modal Fake News Detection on Social Media via Multi-graine
    论文标题:Multi-modalFakeNewsDetectiononSocialMediaviaMulti-grainedInformationFusion论文作者:YangmingZhou,YuzhouYang,QichaoYing,ZhenxingQian,XinpengZhang论文来源:ICMR2023,paper论文代码:暂无介绍目前的多模态方法主要集中在文本和视觉特征的融......
  • Slope trick 学习笔记
    博客传送门Slopetrick的定义Slopetrick是一种通过分析DP函数在转移时的斜率变化来优化转移的技巧。通常来说,被维护的函数图像是离散的凸函数,Slopetrick会维护函数的斜率或者斜率的差分。维护凸函数主要有以下几个优点:方便维护形如\(dp'[i]\leftarrow\max(dp[i],dp......
  • Lua学习笔记之迭代器、table、模块和包、元表和协程
    迭代器迭代器是一种对象,它能够来遍历标准库模板容器中的部分或全部元素,每个迭代器对象代表容器中确定的地址,在Lua中迭代器是一种支持指针类型的结构,他可以遍历集合的每一个元素。泛型for迭代器泛型for自己内部保存迭代函数,实际上保存三个值:迭代函数、状态常量、控制变量。泛型......
  • 《构建之法》阅读笔记二
    在《构建之法》的第一章就有醒目的黑体字写着软件=程序+软件工程。作为一名程序员,不能仅仅会写代码,深入了解一个软件是通过怎么样的层层工序制作出来,也是我们应当重点掌握的。文中通过生活实例,启发我对什么是程序,什么是软件,什么是软件工程,没有使用到算法需不需要学习、掌握。软......
  • 《构建之法》读书笔记一
    个人的成功不是天生的,而是慢慢积累的。当然,一个优秀的程序员也是慢慢学成的;正所谓:千里之行始于足下,我们必须从最基础的开始,不仅要学会写代码,更要学会看代码,看别人的代码,发表自己的意见;并且还要学会将代码规范化,代码看了要简洁明了,让别人看了就很舒服;当代码完成后,我们在为团队成员......
  • 《构建之法》阅读笔记三
    编程是艺术,开发是工程比起一门编程语言,软件工程的入门过程,要难得多。盖因一门语言,其语法、关键字、系统库和常用工具,总是确定而有限的。而软件工程,作为工程学的一个门类,它肩负着在软件开发的过程中,将种种条件确定下来,将资源安排妥当,使工作过程确定清晰,产出稳定可靠的责任。这其中......
  • 《程序是怎样跑起来的》第十一章读书笔记
    Window控制硬件时借助的是输入输出指令。其中具有代表性的两个输入输出指令就是IN和OUT。这些指令也是汇编语言的助记符。I/O是loput/Output的缩写。显示器、键盘等外围设备都有各自专用的I/O控制器。I/0控制器中有用于临时保存输人输出数据的内存。这个内存就是端口。端口(port)......
  • 《程序是怎样跑起来的》第十二章读书笔记
    C语言的rund(函数中,也肯定通过某些公式生成了伪随机数。假如使用的是线性同余法的话,就需要提前设定Ri、a、b、c的数值,为此就要用到代码清单12-1及代码清单12-2中的srand(time(NULL));。srand(函数中的参数time(NULL),是用来获取当前时间的参数。以time(NULL)的值为基础,来设定Ri、a......