如何使用PyTorch训练LLM
推荐:使用 NSDT场景编辑器 快速搭建3D应用场景
像LangChain这样的库促进了上述端到端AI应用程序的实现。我们的教程介绍 LangChain for Data Engineering & Data Applications 概述了您可以使用 Langchain 做什么,包括 LangChain 解决的问题,以及数据用例的示例。
本文将解释训练大型语言模型的所有过程,从设置工作区到使用 Pytorch 2.0.1 的最终实现,Pytorch <>.<>.<> 是一个动态且灵活的深度学习框架,允许简单明了的模型实现。
先决条件
为了充分利用这些内容,重要的是要熟悉 Python 编程,对深度学习概念和转换器有基本的了解,并熟悉 Pytorch 框架。完整的源代码将在GitHub上提供。
在深入研究核心实现之前,我们需要安装和导入相关库。此外,重要的是要注意,训练脚本的灵感来自 Hugging Face 中的这个存储库。
库安装
安装过程详述如下:
首先,我们使用语句在单个单元格中运行安装命令作为 Jupyter 笔记本中的 bash 命令。%%bash
- Trl:用于通过强化学习训练转换器语言模型。
- Peft使用参数高效微调(PEFT)方法来有效地适应预训练的模型。
- Torch:一个广泛使用的开源机器学习库。
- 数据集:用于帮助下载和加载许多常见的机器学习数据集。
变形金刚:由Hugging Face开发的库,带有数千个预训练模型,用于各种基于文本的任务,如分类,摘要和翻译。

现在,可以按如下方式导入这些模块:

数据加载和准备
羊驼数据集,在拥抱脸上免费提供,将用于此插图。数据集有三个主要列:指令、输入和输出。这些列组合在一起以生成最终文本列。
加载数据集的指令在下面通过提供感兴趣的数据集的名称给出,即:tatsu-lab/alpaca

我们可以看到,结果数据位于包含两个键的字典中:
- 特点:包含主列数据
- Num_rows:对应于数据中的总行数

train_dataset的结构
可以使用以下说明显示前五行。首先,将字典转换为熊猫数据帧,然后显示行。


train_dataset的前五行
为了获得更好的可视化效果,让我们打印有关前三行的信息,但在此之前,我们需要安装库以将每行的最大字数设置为 50。第一个 print 语句用 15 个短划线分隔每个块。textwrap



前三行的详细信息
模型训练
在继续训练模型之前,我们需要设置一些先决条件:
- 预训练模型:我们将使用预训练模型Salesforce/xgen-7b-8k-base,该模型可在Hugging Face上使用。Salesforce 训练了这一系列名为 XGen-7B 的 7B LLM,对高达 8K 的序列进行了标准的密集关注,最多可获得 1.5T 代币。
- 分词器: 这是训练数据上的标记化任务所必需的。加载预训练模型和分词器的代码如下:
pretrained_model_name = "Salesforce/xgen-7b-8k-base"
model = AutoModelForCausalLM.from_pretrained(pretrained_model_name, torch_dtype=torch.bfloat16)
tokenizer = AutoTokenizer.from_pretrained(pretrained_model_name, trust_remote_code=True)
训练配置
训练需要一些训练参数和配置,下面定义了两个重要的配置对象,一个是 TrainingArguments 的实例,一个是 LoraConfig 模型的实例,最后是 SFTTrainer 模型。
训练参数
这用于定义模型训练的参数。
在此特定场景中,我们首先使用属性定义存储训练模型的目标,然后再定义其他超参数,例如优化方法、优化方法、、 等。output_dirlearning ratenumber of epochs

洛拉康菲格
用于此方案的主要参数是 LoRA 中低秩转换矩阵的秩, 设置为 16.然后, LoRA 中其他参数的比例因子设置为 32.
此外,辍学比率为 0.05,这意味着在训练期间将忽略 5% 的输入单元。最后,由于我们正在处理一个普通语言建模,因此该任务使用属性进行初始化。CAUSAL_LM
SFTTrainer
这旨在使用训练数据、分词器和附加信息(如上述模型)来训练模型。
由于我们使用训练数据中的文本字段,因此查看分布以帮助设置给定序列中的最大令牌数非常重要。


文本列长度的分布
基于上述观察,我们可以看到大多数文本的长度在 0 到 1000 之间。此外,我们可以在下面看到,只有 4.5% 的文本文档的长度大于 1024。
mask = pandas_format['text_length'] > 1024
percentage = (mask.sum() / pandas_format['text_length'].count()) * 100
print(f"The percentage of text documents with a length greater than 1024 is: {percentage}%")
![]()
然后,我们将序列中的最大标记数设置为 1024,以便任何比此长度的文本都被截断。

培训执行
满足所有先决条件后,我们现在可以按如下方式运行模型的训练过程:

值得一提的是,此培训是在具有GPU的云环境中进行的,这使得整个培训过程更快。但是,在本地计算机上进行培训需要更多时间才能完成。
我们的博客,在云中使用LLM与在本地运行LLM的优缺点,提供了为LLM选择最佳部署策略的关键考虑因素
让我们了解上面的代码片段中发生了什么:
- tokenizer.pad_token = tokenizer.eos_token:将填充标记设置为与句尾标记相同。
- model.resize_token_embeddings(len(tokenizer)):调整模型的标记嵌入层的大小,以匹配分词器词汇表的长度。
- model = prepare_model_for_int8_training(model):准备模型以进行 INT8 精度的训练,可能执行量化。
- model = get_peft_model(model, lora_peft_config):根据 PEFT 配置调整给定的模型。
- training_args = model_training_args:将预定义的训练参数分配给training_args。
- trainer = SFT_trainer:将 SFTTrainer 实例分配给变量训练器。
- trainer.train():根据提供的规范触发模型的训练过程。
结论
本文提供了使用 PyTorch 训练大型语言模型的明确指南。从数据集准备开始,它演练了准备先决条件、设置训练器以及最后运行训练过程的步骤。
尽管它使用了特定的数据集和预先训练的模型,但对于任何其他兼容选项,该过程应该大致相同。现在您已经了解如何训练LLM,您可以利用这些知识为各种NLP任务训练其他复杂的模型。
原文链接:如何使用PyTorch训练LLM (mvrlink.com)
相关文章:
如何使用PyTorch训练LLM
推荐:使用 NSDT场景编辑器 快速搭建3D应用场景 像LangChain这样的库促进了上述端到端AI应用程序的实现。我们的教程介绍 LangChain for Data Engineering & Data Applications 概述了您可以使用 Langchain 做什么,包括 LangChain 解决的问题…...
uniapp 手机 真机测试 云打包 要是没申请 可以使用云打包 然后采用 测试权限即可
uniapp 手机 真机测试 打开手机 找到手机的 版本号 点击 知道提示 (启动开发者模式) 然后 在进行usb的连接打开 运行uniapp 到手机基台 手机确认 即可 四, 云打包 要是没申请 可以使用云打包 然后采用 测试权限即可...
RTSP流媒体服务器EasyNVR视频平台以服务方式启动异常却无报错,该如何解决?
EasyNVR是基于RTSP/Onvif协议的安防视频云服务平台,可实现设备接入、实时直播、录像、检索与回放、云存储、视频分发、级联等视频能力服务,可覆盖全终端平台(电脑、手机、平板等终端),在智慧工厂、智慧工地、智慧社区、…...
【List篇】使用Arrays.asList生成的List集合,操作add方法报错
早上到公司,刚到工位,测试同事就跑来说"功能不行了,报服务器异常了,咋回事";我一脸蒙,早饭都顾不上吃,要来了测试账号复现了一下,然后仔细观察测试服务器日志,发现报了一个…...
c++的类模板里,可以直接为静态变量赋值么?
一直以来,咱们学的是,给类模板里的静态变量赋值,要在类外面。但对于类常量,则可以直接在定义时赋值。起因是看STL源码时有这么的写法,又验证了一下。 但是在类模板里直接定义静态活动变量是不可以的,即去…...
【录用案例】CCF-C类,1/2区SCIEI,3个月14天录用,30天见刊,11天检索
计算机科学类SCI&EI 【期刊简介】IF:5.5-6.0,JCR1/2区,中科院2区 【检索情况】SCI&EI 双检(CCF-C类) 【征稿领域】边缘计算、算法与机器学习的结合研究 录用案例:3个月14天录用,录用…...
qt day 3
1.完成自定义的记事本文件的保存功能 ------------------------------------------------------------------------- widget.cpp ------------------------------------------------------------------------- #include "widget.h" #include "ui_widget.h"…...
SpotBugs检查java代码:在整数上进行没有起任何实际作用的位操作(INT_VACUOUS_BIT_OPERATION)
https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#int-vacuous-bit-mask-operation-on-integer-value-int-vacuous-bit-operation 在整数上进行无用的与、异或操作,实质上没有做任何有用的工作。 例如:v & 0xffffffff 再例如&…...
javaWeb录入数据异常,mysql显示错误
由于项目,需要输入 电脑的mac地址 ,在web页面中进行录入,但是某个同事录入一直有问题,数据查询时使用 in 或者 都查询不到 通过like %% 可以查询到,非常奇怪,请广大网友不吝赐教. 通过 toHex 进行显示发现 数据开头多了 E2808E...
Vue + Element UI 前端篇(十):动态加载菜单
Vue Element UI 实现权限管理系统 前端篇(十):动态加载菜单 动态加载菜单 之前我们的导航树都是写死在页面里的,而实际应用中是需要从后台服务器获取菜单数据之后动态生成的。 我们在这里就用上一篇准备好的数据格式Mock出模…...
图的应用(最小生成树,最短路径,有向无环图)
目录 一.最小生成树 1.生成树 2.无向图的生成树 3.最小生成树算法 二.最短路径 1.单源最短路径---Dijkstra(迪杰斯特拉)算法 2.所有顶点间的最短路径---Floyd(弗洛伊德)算法 三.有向无环图的应用 1.AOV网(拓扑…...
python正则表达式笔记2
由 \ 和一个字符组成的特殊序列在以下列出。 如果普通字符不是ASCII数位或者ASCII字母,那么正则样式将匹配第二个字符。比如,\$ 匹配字符 $. \number 匹配数字代表的组合。每个括号是一个组合,组合从1开始编号。 比如 (.) \1 匹配 the the 或…...
matplotlib 的默认字体和默认字体系列
matplotlib 的默认字体和默认字体系列 查看默认字体和默认字体系列查看默认字体系列下包含的字体查看 plt.rcParams 设置的所有参数查看所有支持的字体格式设置默认字体方法1:方法2 今天给大家介绍一下 matplotlib 包中的默认字体以及默认字体系列。 查看默认字体和…...
STMCUBEMX_IIC_DMA_AT24C64读取和写入
STMCUBEMX_IIC_DMA_AT24C64读取和写入 说明: 1、此例程只是从硬件IIC升级到DMA读写,因为暂时存储的掉电不丢失数据不多,一页就可以够用,不用担心跨页读写的问题 2、使用DMA后,程序确实是变快了,但是也要注意…...
wsl2相关问题
磁盘空间 wsl 删除相关文件后,如删除docker 无用的容器和镜像,windows上磁盘仍然无法自动回收空间 (参考:[microsoft/WSL](https://github.com/microsoft/WSL/issues/4699#issuecomment-627133168)) # 如清除无用do…...
使用idea时,光标变成了不能按空格键,只能修改的vim格式,怎么切换回正常光标
情况1 你可能不小心启用了 IntelliJ IDEA 中的 Vim 插件。你可以尝试以下步骤来禁用它: 在 IntelliJ IDEA 中,选择 "File" -> "Settings" (如果你在 macOS 上,选择 "IntelliJ IDEA" -> &quo…...
vue+antd——实现table表格的打印——分页换行,每页都有表头——基础积累
这里写目录标题 场景效果图功能实现1:html代码功能实现2:css样式功能实现3:js代码补充内容page-break-inside 属性page-break-after属性page-break-before 属性 场景 最近在写后台管理系统时,遇到一个需求,就是要实现…...
linux C MD5计算
#include <stdio.h> #include <string.h> #include <openssl/md5.h>int main() {char str[] "Hello, world!"; // 需要计算MD5哈希值的字符串unsigned char digest[MD5_DIGEST_LENGTH]; // 存储MD5哈希值的数组MD5((unsigned char*)&str, str…...
vue3学习源码笔记(小白入门系列)------ 组件更新流程
目录 说明例子processComponentcomponentUpdateFnupdateComponentupdateComponentPreRender 总结 说明 由于响应式相关内容太多,决定先接着上文组件挂载后,继续分析组件后续更新流程,先不分析组件是如何分析的。 例子 将这个 用例 使用 vi…...
数学建模B多波束测线问题B
数学建模多波束测线问题 1.问题重述: 单波束测深是一种利用声波在水中传播的技术来测量水深的方法。它通过测量从船上发送声波到声波返回所用的时间来计算水深。然而,由于它是在单一点上连续测量的,因此数据在航迹上非常密集,但…...
【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...
练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...
听写流程自动化实践,轻量级教育辅助
随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...
九天毕昇深度学习平台 | 如何安装库?
pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...
算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...
宇树科技,改名了!
提到国内具身智能和机器人领域的代表企业,那宇树科技(Unitree)必须名列其榜。 最近,宇树科技的一项新变动消息在业界引发了不少关注和讨论,即: 宇树向其合作伙伴发布了一封公司名称变更函称,因…...
BLEU评分:机器翻译质量评估的黄金标准
BLEU评分:机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域,衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标,自2002年由IBM的Kishore Papineni等人提出以来,…...
