随着ChatGPT的迅速出圈,加速了大模型时代的变革。对于以Transformer、MOE结构为代表的大模型来说,传统的单机单卡训练模式肯定不能满足上千(万)亿级参数的模型训练,这时候我们就需要解决内存墙和通信墙等一系列问题,在单机多卡或者多机多卡进行模型训练。
最近一段时间,我也在探索大模型相关的一些技术,下面做一个简单的总结。
写在前面,我创建了一个大模型学习交流群,供大家一起学习交流大模型相关的最新技术,可加我微信( lgd215666835 )进群(加微信请备注来意,如: 进大模型学习交流群+CSDN ,否则不予通过哦)。
由于目前只有3台A800 GPU服务器(共24卡)。基于目前现有的一些AI框架和大模型,无法充分利用3台服务器。比如:OPT-66B一共有64层Transformer,当使用Alpa进行流水线并行时,通过流水线并行对模型进行切分,要么使用16卡,要么使用8卡,没法直接使用24卡,因此,GPU服务器最好是购买偶数台(如:2台、4台、8台)。
具体的硬件配置如下:
目前使用Huggingface Transformers和DeepSpeed进行通过数据并行进行训练(pretrain),单卡可以跑三百亿参数(启用ZeRO-2或ZeRO-3),如OPT-30B,具体训练教程参考官方 样例 。
使用Alpa进行流水线并行和数据并行进行训练(fine tuning)时,使用了3台共24卡(PP:12,DP:2)进行训练OPT-30B,具体训练教程参考官方 样例 。但是进行模型训练之前需要先进行模型格式转换,将HF格式转换为Alpa格式的模型文件,具体请参考官方 代码 。如果不想转换,官网也提供了转换好的模型格式,具体请参考文档: Serving OPT-175B, BLOOM-176B and CodeGen-16B using Alpa 。
模型结构 :
目前主流的大模型都是Transformer、MOE结构为基础进行构建,如果说Transformer结构使得模型突破到上亿参数量,MoE 稀疏混合专家结构使模型参数量产生进一步突破,达到数万亿规模。
大模型算法 :
下图详细展示了AI大模型的发展历程:
可以说,Transformer 开创了继 MLP 、CNN和 RNN之后的第四大类模型。而基于Transformer结构的模型又可以分为Encoder-only、Decoder-only、Encoder-Decoder这三类。
目前业界可以下载到的一些大语言模型 :
20230325(当时官方还未开源训练代码,目前直接基于官方的训练代码即可):
前两天测试了BELLE,对中文的效果感觉还不错。具体的模型训练(预训练)方法可参考Hugingface Transformers的 样例 ,SFT(指令精调)方法可参考 Alpaca的训练代码 。
从上面可以看到,开源的大语言模型主要有三大类:GLM衍生的大模型(wenda、 ChatSQL 等)、LLaMA衍生的大模型(Alpaca、Vicuna、BELLE、Phoenix、Chimera等)、Bloom衍生的大模型(Bloomz、BELLE、Phoenix等)。
模型 | 训练数据量 | 模型参数 | 训练数据范围 | 词表大小 |
---|---|---|---|---|
LLaMA | 1T~1.4T tokens(其中,7B/13B使用1T,33B/65B使用1.4T) | 7B~65B | 以英语为主要语言的拉丁语系 | 32000 |
ChatGLM-6B | 约 1T tokens | 6B | 中文、英语 | 130528 |
Bloom | 1.6TB预处理文本,转换为 350B 唯一 tokens | 300M~176B | 46种自然语言,13种编程语言 | 250680 |
从表格中可以看到,对于像ChatGLM-6B、LLaMA、Bloom这类大模型,要保证基座模型有比较好的效果,至少需要保证上千亿、万亿级的Token量。
目前来看,LLaMA无疑是其中最闪亮的星。但是国内关于LLaMA比较大的一个争论就是LLaMA是以英语为主要语言的拉丁语系上进行训练的,LLaMA词表中的中文token比较少(只有几百个),需不需要扩充词表?如果不扩充词表,中文效果会不会比较差?
下面是BELLE针对是否扩充词表,数据质量、数据语言分布、数据规模对于模型性能的对比:
其中, BELLE-0.5M-CLEAN 是从230万指令数据中清洗得到0.5M数据(包含单轮和多轮对话数据)。LLaMA-7B-EXT是针对LLaMA做了中文词表扩充的预训练模型。
下面是Chinese-LLaMA-Alpaca针对中文Alpaca-13B、中文Alpaca-Plus-7B、中文Alpaca-Plus-13B的效果对比:
其中,Plus系列Alpaca是在原版LLaMA的基础上扩充了中文词表,使用了120G中文通用纯文本数据进行二次预训练。
因此,如果既想要中文词表,又没有很大的算力,那建议直接使用ChatGLM-6B或者使用BELLE和Chinese-LLaMA-Alpaca进行中文词表扩充后训练好的模型作为Base模型。
目前业界可以下载到的一些多模态大模型 :
并行技术 :
显存优化技术 :
如何选择一款分布式训练框架 ?
常见的分布式训练框架 :
目前训练超大规模语言模型主要有两条技术路线 :
在面对特定的下游任务时,如果进行Full FineTuning(即对预训练模型中的所有参数都进行微调),太过低效;而如果采用固定预训练模型的某些层,只微调接近下游任务的那几层参数,又难以达到较好的效果。
PEFT技术旨在 通过最小化微调参数的数量和计算复杂度,来提高预训练模型在新任务上的性能,从而缓解大型预训练模型的训练成本 。这样一来,即使计算资源受限,也可以利用预训练模型的知识来迅速适应新任务,实现高效的迁移学习。因此,PEFT技术可以在提高模型效果的同时,大大缩短模型训练时间和计算成本,让更多人能够参与到深度学习研究中来。
典型应用 :
PEFT实现 :
高效微调技术目前存在的两个问题 :
相比全参数微调,高效微调技术目前存在的两个问题:
OpenAI的论文 Scaling Laws for Neural Language Models 中列举了影响模型性能最大的三个因素: 计算量 、 数据集大小 、 模型参数量 。也就是说,当其他因素不成为瓶颈时,计算量、数据集大小、模型参数量这3个因素中的单个因素指数增加时,loss会线性的下降。
除了以上的因素之外,还有一个比较大的影响因素就是 数据质量 。在微软的论文 Instruction Tuning with GPT-4 中指出,同样基于LLaMA模型,使用GPT3和GPT4产生的数据,对模型进行Instruction Turing,可以看到GPT4的数据微调过的模型效果远远好于GPT3数据微调的模型,可见数据质量带来的影响。同样的,Vicuna(7B/13B)的Instruction Turing中,也对shareGPT的数据做了很细致的清洗工作。
要评估一个大型语言模型的水平,可以从以下几个维度提出具有代表性的问题。
大模型评估方法 :
大模型评估工具 :
模型推理作为模型投产的最后一公里,需要确保模型精度的同时追求极致的推理性能。相比传统模型来说,大模型面临着更多的挑战。
当前优化模型最主要技术手段概括来说有以下三个层面:
推理加速框架 :
下面是最近大模型实践过程中的一些文章,配套代码放置在GitHub: llm-action
LLM训练 :
LLM | 预训练/微调/RLHF… | 参数 | 教程 | 代码 |
---|---|---|---|---|
Alpaca | full fine-turning | 7B | 从0到1复现斯坦福羊驼(Stanford Alpaca 7B) | N/A |
Alpaca | lora | 7B |
1.
足够惊艳,使用Alpaca-Lora基于LLaMA(7B)二十分钟完成微调,效果比肩斯坦福羊驼
2. 使用 LoRA 技术对 LLaMA 65B 大模型进行微调及推理 |
配套代码 |
BELLE(LLaMA-7B/Bloomz-7B1-mt) | full fine-turning | 7B |
1.
基于LLaMA-7B/Bloomz-7B1-mt复现开源中文对话大模型BELLE及GPTQ量化
2. BELLE(LLaMA-7B/Bloomz-7B1-mt)大模型使用GPTQ量化后推理性能测试 |
N/A |
ChatGLM | lora | 6B | 从0到1基于ChatGLM-6B使用LoRA进行参数高效微调 | N/A |
ChatGLM | full fine-turning/P-Tuning v2 | 6B | 使用DeepSpeed/P-Tuning v2对ChatGLM-6B进行微调 | N/A |
Vicuna | full fine-turning | 7B | 大模型也内卷,Vicuna训练及推理指南,效果碾压斯坦福羊驼 | N/A |
OPT | RLHF | N/A |
1.
一键式 RLHF 训练 DeepSpeed Chat(一):理论篇
2. 一键式 RLHF 训练 DeepSpeed Chat(二):实践篇 |
N/A |
MiniGPT-4 | full fine-turning | 7B | 大杀器,多模态大模型MiniGPT-4入坑指南 | N/A |
Chinese-LLaMA-Alpaca | lora(预训练+微调) | 7B | 使用 LoRA 技术对 LLaMA 65B 大模型进行微调及推理 | 配套代码 |
LLM推理 :
LLM微调技术
:
对于普通大众来说,进行大模型的预训练或者全量微调遥不可及。由此,催生了各种参数高效微调技术,让科研人员或者普通开发者有机会尝试微调大模型。
因此,该技术值得我们进行深入分析其背后的机理,本系列大体分七篇文章进行讲解。
实践出真知,以上是这段时间进行大模型实践的一点点总结,写的有一些主观和片面,后续会持续更新自己研究大模型获得的一些认知和实践经验。
随着 人工智能 技术的不断发展, 深度学习 已经成为了目前最为热门的技术之一。而在 深度学习 领域中,大 模型 (Large Scale Model)则是一种备受关注的技术。大 模型 是指由数百万、甚至数十亿个参数组成的神经网络 模型 ,它们可以处理大规模的数据集,并且具有非常强的学习能力和泛化能力。大 模型 是 深度学习 领域的一种重要技术,它们具有强大的学习能力和泛化能力,可以应用于各种领域。虽然使用大 模型 需要一定的技术和资源支持,但是随着技术的不断发展和硬件设备的不断提升,相信大 模型 将会在未来得到更广泛的应用。 试试Colab上的预训练模式! 该存储库包含企业使用低秩适应 (LoRA)重现Stanford Alpaca结果的代码。我们提供了一个类似的质量指令 模型 ,可以在 Raspberry Pi 上运行(用于研究) ,并且代码可以很容易地扩展到,和 模型 。text-davinci-00313b30b65b 除了在单个RTX 4090上运行五个小时的训练代码之外,我们还发布了一个脚本,用于下载和推理基本 模型 和LoRA,以及生成的LoRA权重本身。为了廉价高效地进行微调,我们使用了 Hugging Face 的PEFT 以及 Tim Dettmers 的bitsandbytes。 在没有超参数进行调整或基于数据验证的检查点的情况下,LoRA 模型 可以产生的输出可与 Stanford Alpaca 模型 系统相媲美。(参见下面的输出。)进一步调整可能导致更好的性能;我邀请感兴趣的用户试一试并报告他们的结果。 为了讨论和支持,用户在这里创建一个专用的 Discord 服务器。 BLOOM的原理见 BLOOM是由HuggingFace推出的大 模型 ,其参数量达到176B(GPT-3是175B)。目前超过100B参数量且能够支持中文的开源大 模型 只有BLOOM和GLM-130B。由于HuggingFace是著名开源工具Transformers的开发公司,很多推理工具都会支持Transformers中的 模型 。 LLM(大语言 模型 )推理的两个问题:(1) 单张显卡无法容纳整个 模型 ;(2) 推理速度太慢。本文初步整理了一些推理大 模型 的工具和代码,并简单测试了推理速度。 来自:老刘说NLP进NLP群—>加入NLP交流群LLM(大语言 模型 )推理存在两个两个问题:(1) 单张显卡无法容纳整个 模型 ;(2) 推理速度太慢。针对这类问题,本文初步整理了一些推理大 模型 的工具和代码,并简单测试了推理速度。下面是本文测试的一些背景:目前是使用7B 模型 bloom-7b1-mt、4张3090(但在实际推理中仅使用2张3090)、依赖包的版本:transformers==4.26... 近几年,随着“大 模型 ”概念的提出, 深度学习 模型 越来越大,如何训练这些大 模型 成为一个亟待解决的工程问题。最初的视觉 模型 只有几百兆的参数量,而现在的语言 模型 中,动则百亿,千亿的参数量,甚至万亿的大 模型 也是见怪不怪.那么你是否好奇,这些大 模型 是如何训练起来的呢? 来自:老刘说NLP进NLP群—>加入NLP交流群近年来,大型语言 模型 的指令微调是 自然语言处理 领域的一个重要研究领域。由于资源和成本的限制,一些研究人员采用了参数有效的调整技术,如LoRA,并取得了不错的结果。与全参数微调相比,基于LoRA的微调在训练成本方面表现出显著的优势。针对这类问题,本文介绍一篇关于全监督微调和lora微调的对比评估工作:该工作主要对比了全参数微调和Lora微调的对比,... BOPPPS-教学 模型 在计算机硬件基础课程中的探索和 实践 分析全文共7页,当前为第1页。BOPPPS-教学 模型 在计算机硬件基础课程中的探索和 实践 分析全文共7页,当前为第1页。BOPPPS 教学 模型 在计算机硬件基础课程中的探索和 实践 分析 BOPPPS-教学 模型 在计算机硬件基础课程中的探索和 实践 分析全文共7页,当前为第1页。 BOPPPS-教学 模型 在计算机硬件基础课程中的探索和 实践 分析全文共7页,当前为第1页。 计算机硬件基础课程是我院部分非计算机专业开设的一门必修课,课程以信息在计算机内部的加工、处理为主线,介绍微型计算机的硬件结构、工作原理和功能特性以及系统内部各部件之间的互连;指令及程序在计算机内部的执行过程;主机和外部设备之间的连接和数据交换方法。但是教学效果总是不尽如人意,我们对课程教学特点进行分析,并尝试运用新的教学 模型 。 1 计算机硬件基础课程教学特点 (1)先导知识要求高。学习计算机硬件基础课程,要求学生学习过高级语言程序设计,对计算机基本工作原理有所了解,掌握数据在计算机内部的存储表示,对计算机科学中常用思维方式有所了解。目前对于非计算机专业的学生,在学习计算机硬件基础课程之前一般仅开设了大学计算机基础和计算机程序设计两门课程,对于课程所要求的先导知识虽然有所涉及,但是学生学习情况并不理想,有待进一步加强。 (2)概念抽象难理解。计算机硬件基础课程包含CPU、存储器、输入输出接口及设备和总线四个方面,有很多抽象枯燥的概念,比如寻址方式、指令流水线、存储器分段、总线仲裁、总线握手、I/O 同步控制和中断等,对于非计算机专业的学生而言,确实较难理解。而且,课程还涉及众多算法思想,对于仅从大学计算机基础和计算机程序设计两门课程建立起来的编程思想是远不够用的。 BOPPPS-教学 模型 在计算机硬件基础课程中的探索和 实践 分析全文共7页,当前为第2页。BOPPPS-教学 模型 在计算机硬件基础课程中的探索和 实践 分析全文共7页,当前为第2页。(3)实验效果不明显。计算机硬件基础课程开设了实验,实验内容主要包含汇编语言程序设计和输入输出接口。汇编语言程序设计部分的实验,侧重于指令的应用,因为有源代码很多实验题目演变为验证性质的实验,学生只是输入代码然后运行,可能代码本身都不理解,更不用说调试程序和理解CPU 的工作原理了。而输入输出接口部分的实验,主要采用试验箱进行实验,大部分学生只是在进行连线的工作,对计算机硬件工作原理的理解帮助甚微。 (4)思维方式待提高。计算机科学包括其独有的思维方式,而且该思维方式贯穿于计算机相关课程的学习,经过大学计算机基础和计算机程序设计两门课程不到120 学时的学习培养起来的计算思维,对于计算机硬件基础课程的学习略显单薄。从以上几点不难看出,对于计算机硬件基础课程的教学,还有很多方面值得任课教师取探讨和研究。本文尝试将BOPPPS 教学 模型 应用到计算机硬件基础课程的教学中。 2 BOPPPS 教学 模型 BOPPPS 教学 模型 由加拿大教师技能培训工作坊(InstructionalSkills Workshop,ISW)创建,目前已被全世界超过33 个国家引进采用,在全球超过100 所大学和培训机构实施[1],近两年开始引入中国大陆地区。BOPPPS 教学 模型 [2]将教学过程分为6个阶段:导入(Bridge-in)、目标(Objective)、前测(Pre-assessment)、参与式学习(Participatory Learning)、后测(Post-assessment)和 总结 (Summary),其名称来源于各阶段英文单词首字母缩写。 BOPPPS-教学 模型 在计算机硬件基础课程中的探索和 实践 分析全文共7页,当前为第3页。BOPPPS-教学 模型 在计算机硬件基础课程中的探索和 实践 分析全文共7页,当前为第3页。2.1B导入(Bridge-in) 导入就是帮助学生专注于即将要介绍的内容,从而引起学生的学习兴趣。可以由问题或案例引出,或者讲述一个与主题相关的故事,或者其他方式。 2.2O目标(Objective) 目标是让学生了解到通过内容的学习要达到何种学习效果。为了方便学生有效实施,对于目标的描述要求具体明确,最好是可量化、可观察、可操作的。可以采用布鲁姆(B.S.Bloom)等人于1956 年提出的认知领域教育目标分类系统[3]。 2.3P前测(Pre-assessment) 前测是正式学习之前进行的一种测试,目的是通过测试了解学生的兴趣、能力和当前知识结构,从而帮助教师适当调整内容的深度和进度。可以采用小测验、正式考试、作业或非正式提问等,甚至开展讨论、头脑风暴等形式。 2.4P参与式学习(Participatory Learning) 参与式学习是具体进行学习的环节,包括师生之间以及生生之间进行的参与式 目前Foundation Model或者是大 模型 ,特别地火,接下来介绍什么是大 模型 ,大 模型 的基本概念;接着看看大 模型 的实际作用,然后基于这些实际作用,我们简单展开几个应用场景。最后就是介绍支持大 模型 训练的AI框架。在往下看之前,想抛出几个问题,希望引起大家的一个思考:1)为什么预训练网络 模型 变得越来越重要?2)预训练大 模型 的未来的发展趋势,仍然是以 模型 参数量继续增大吗?3)如何预训练一个百亿规模的大 模型 ? MindSpore官方资料GitHub : https://github.com/mindspore- 第二我要减小十倍的学习率,观察一下减小十倍的学习率能不能提升ptuning的效果。基于终端的交互,基于简单界面的交互,基于fastapi框架提供的接口进行交互。从中国大百科爬下来的数据,有一些标题的输入是比较短的。喜欢大 模型 的小伙伴可以加我的 15246115202 一起交流训练大 模型 所需要的细节都有哪些。用这样的方式去加载已经ptuning训练好的 模型 就可以开始测试我们自己训练的数据集的效果了。找到了一些中国大百科的一对一对的数据集来ptuning chatglm 6B的对话 模型 。