房地产网站建设分析,新网做网站怎么上传,智慧团建官网手机登录入口电脑版,求一外国h网站随着ChatGPT的迅速出圈#xff0c;加速了大模型时代的变革。对于以Transformer、MOE结构为代表的大模型来说#xff0c;传统的单机单卡训练模式肯定不能满足上千#xff08;万#xff09;亿级参数的模型训练#xff0c;这时候我们就需要解决内存墙和通信墙等一系列问题加速了大模型时代的变革。对于以Transformer、MOE结构为代表的大模型来说传统的单机单卡训练模式肯定不能满足上千万亿级参数的模型训练这时候我们就需要解决内存墙和通信墙等一系列问题在单机多卡或者多机多卡进行模型训练。
最近我也在探索大模型相关的一些技术下面做一个简单的总结后续争取每一个季度更新一次本文主要涉及AI集群、AI集群通信、大模型训练参数高效微调、大模型推理加速、大模型评估、大模型生态相关技术等相关内容.
同时也对之前写过的一些大模型相关的文章进行了汇总篇幅太长建议先收藏后再阅读。
技术交流群
前沿技术资讯、算法交流、求职内推、算法竞赛、面试交流(校招、社招、实习)等、与 10000来自港科大、北大、清华、中科院、CMU、腾讯、百度等名校名企开发者互动交流~
建了技术交流群星球想要资料、进交流群的同学可以直接加微信号mlc2060。加的时候备注一下研究方向 学校/公司即可。然后就可以拉你进群了。 方式①、添加微信号mlc2060备注大模型资料 or 技术交流 方式②、微信搜索公众号机器学习社区后台回复大模型资料 or 技术交流 AI 集群
由于目前只有3台A800 GPU服务器共24卡基于目前现有的一些AI框架和大模型无法充分利用3台服务器。比如OPT-66B一共有64层Transformer当使用Alpa进行流水线并行时通过流水线并行对模型进行切分要么使用16卡要么使用8卡没法直接使用24卡因此GPU服务器最好是购买偶数台如2台、4台、8台。
具体的硬件配置如下 CPUs: 每个节点具有 1TB 内存的 Intel CPU物理CPU个数为64每颗CPU核数为16。 GPUs: 24 卡 A800 80GB GPUs 每个节点 8 个 GPU3 个节点。 目前使用Huggingface Transformers和DeepSpeed进行通过数据并行进行训练pretrain单卡可以跑三百亿参数启用ZeRO-2或ZeRO-3如OPT-30B具体训练教程参考官方样例。
使用Alpa进行流水线并行和数据并行进行训练fine tuning时使用了3台共24卡PP12DP2进行训练OPT-30B具体训练教程参考官方样例。但是进行模型训练之前需要先进行模型格式转换将HF格式转换为Alpa格式的模型文件具体请参考官方代码。如果不想转换官网也提供了转换好的模型格式具体请参考文档Serving OPT-175B, BLOOM-176B and CodeGen-16B using Alpa。 前几天对H800进行过性能测试整体上来说对于模型训练Huggingface Transformers和模型推理FasterTransformer都有30%左右的速度提升。但是对于H800支持的新数据类型FP8目前很多开源框架暂不支持虽然Nvidia自家一些开源框架支持该数据类型目前不算太稳定。 AI处理器加速卡
目前主流的AI处理器无疑是NVIDIA的GPUNVIDIA的GPU产品主要有GeForce、Tesla和Quadro三大系列虽然从硬件角度来看它们都采用同样的架构设计也都支持用作通用计算(GPGPU)但因为它们分别面向的目标市场以及产品定位的不同这三个系列的GPU在软硬件的设计和支持上都存在许多差异。其中GeForce为消费级显卡而Tesla和Quadro归类为专业级显卡。GeForce主要应用于游戏娱乐领域而Quadro主要用于专业可视化设计和创作Tesla更偏重于深度学习、人工智能和高性能计算。 TeslaA100A800、H100H800、A30、A40、V100、P100… GeForceRTX 3090、RTX 4090 … QuadroRTX 6000、RTX 8000 …
其中A800/H800是针对中国特供版低配版相对于A100/H100主要区别 A100的Nvlink最大总网络带宽为600GB/s而A800的Nvlink最大总网络带宽为400GB/s。 H100的Nvlink最大总网络带宽为900GB/s而A800的Nvlink最大总网络带宽为400GB/s。
其他的一些国外AI处理器加速卡 AMDGPU MI300X IntelXeon Phi GoogleTPU
国产AI处理器加速卡 华为昇腾910用于训练和推理昇腾310用于推理。采用自家设计的达芬奇架构。 海光DCU8100系列深算一号以GPGPU架构为基础。 寒武纪思元370、思元590。 百度昆仑芯采用的是其自研XPU架构。 阿里含光800。
大模型算法
模型结构
目前主流的大模型都是Transformer、MOE结构为基础进行构建如果说Transformer结构使得模型突破到上亿参数量MoE 稀疏混合专家结构使模型参数量产生进一步突破达到数万亿规模。
大模型算法
下图详细展示了AI大模型的发展历程
可以说Transformer 开创了继 MLP 、CNN和 RNN之后的第四大类模型。而基于Transformer结构的模型又可以分为Encoder-only、Decoder-only、Encoder-Decoder这三类。 仅编码器架构Encoder-only自编码模型破坏一个句子然后让模型去预测或填补更擅长理解类的任务例如文本分类、实体识别、关键信息抽取等。典型代表有Bert、RoBERTa等。 仅解码器架构Decoder-only自回归模型将解码器自己当前步的输出加入下一步的输入解码器融合所有已经输入的向量来输出下一个向量所以越往后的输出考虑了更多输入更擅长生成类的任务例如文本生成。典型代表有GPT系列、LLaMA、OPT、Bloom等。 编码器-解码器架构Encoder-Decoder序列到序列模型编码器的输出作为解码器的输入主要用于基于条件的生成任务例如翻译概要等。典型代表有T5、BART、GLM等。
大语言模型
目前业界可以下载到的一些大语言模型 ChatGLM-6B / ChatGLM2-6B 清华开源的中英双语的对话语言模型。目前第二代ChatGLM在官网允许的情况下可以进行商用。 GLM-10B/130B 双语中文和英文双向稠密模型。 OPT-2.7B/13B/30B/66B Meta开源的预训练语言模型。 LLaMA-7B/13B/30B/65B Meta开源的基础大语言模型。 AlpacaLLaMA-7B斯坦福提出的一个强大的可复现的指令跟随模型种子任务都是英语收集的数据也都是英文因此训练出来的模型未对中文优化。 BELLEBLOOMZ-7B/LLaMA-7B/LLaMA-13B本项目基于 Stanford Alpaca针对中文做了优化模型调优仅使用由ChatGPT生产的数据不包含任何其他数据。 Bloom-7B/13B/176B可以处理46 种语言包括法语、汉语、越南语、印度尼西亚语、加泰罗尼亚语、13 种印度语言如印地语和 20 种非洲语言。其中Bloomz系列模型是基于 xP3 数据集微调。 推荐用于英语的提示promptingBloomz-mt系列模型是基于 xP3mt 数据集微调。推荐用于非英语的提示prompting。 Vicuna(7B/13B)由UC Berkeley、CMU、Stanford和 UC San Diego的研究人员创建的 Vicuna-13B通过在 ShareGPT 收集的用户共享对话数据中微调 LLaMA 获得。其中使用 GPT-4 进行评估发现 Vicuna-13B 的性能在超过90%的情况下实现了与ChatGPT和Bard相匹敌的能力同时在 90% 情况下都优于 LLaMA 和 Alpaca 等其他模型。而训练 Vicuna-13B 的费用约为 300 美元。不仅如此它还提供了一个用于训练、服务和评估基于大语言模型的聊天机器人的开放平台FastChat。 Baize白泽是在LLaMA上训练的。目前包括四种英语模型白泽-7B、13B 、 30B通用对话模型以及一个垂直领域的白泽-医疗模型供研究 / 非商业用途使用并计划在未来发布中文的白泽模型。白泽的数据处理、训练模型、Demo 等全部代码已经开源。 LLMZoo来自香港中文大学和深圳市大数据研究院团队推出的一系列大模型如Phoenix凤凰 和 Chimera等。 MOSS由复旦 NLP 团队推出的 MOSS 大语言模型。 baichuan-7B由百川智能推出的大模型可进行商用。 CPM-Bee百亿参数的开源中英文双语基座大模型可进行商用。 前两天测试了BELLE对中文的效果感觉还不错。具体的模型训练预训练方法可参考Hugingface Transformers的样例SFT指令精调方法可参考Alpaca的训练代码。 从上面可以看到开源的大语言模型主要有三大类GLM衍生的大模型wenda、ChatSQL等、LLaMA衍生的大模型Alpaca、Vicuna、BELLE、Phoenix、Chimera等、Bloom衍生的大模型Bloomz、BELLE、Phoenix等。
模型训练数据量模型参数训练数据范围词表大小LLaMA1T1.4T tokens(其中7B/13B使用1T33B/65B使用1.4T)7B65B以英语为主要语言的拉丁语系32000ChatGLM-6B约 1T tokens6B中文、英语130528Bloom1.6TB预处理文本转换为 350B 唯一 tokens300M~176B46种自然语言13种编程语言250680
从表格中可以看到对于像ChatGLM-6B、LLaMA、Bloom这类大模型要保证基座模型有比较好的效果至少需要保证上千亿、万亿级的Token量。
目前来看LLaMA无疑是其中最闪亮的星。但是国内关于LLaMA比较大的一个争论就是LLaMA是以英语为主要语言的拉丁语系上进行训练的LLaMA词表中的中文token比较少只有几百个需不需要扩充词表如果不扩充词表中文效果会不会比较差 如果不扩充词表对于中文效果怎么样根据Vicuna官方的报告经过Instruction Turing的Vicuna-13B已经有非常好的中文能力。 LLaMA需不需要扩充词表根据Chinese-LLaMA-Alpaca和BELLE的报告扩充中文词表可以提升中文编解码效率以及模型的性能。但是扩词表相当于从头初始化开始训练这些参数。如果想达到比较好的性能需要比较大的算力和数据量。同时Chinese-LLaMA-Alpaca也指出在进行第一阶段预训练冻结transformer参数仅训练embedding在尽量不干扰原模型的情况下适配新增的中文词向量时模型收敛速度较慢。如果不是有特别充裕的时间和计算资源建议跳过该阶段。因此虽然扩词表看起来很诱人但是实际操作起来还是很有难度的。
下面是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模型。
多模态大模型
目前业界可以下载到的一些多模态大模型 MiniGPT-4沙特阿拉伯阿卜杜拉国王科技大学的研究团队开源。 LLaVA由威斯康星大学麦迪逊分校微软研究院和哥伦比亚大学共同出品。 VisualGLM-6B开源的支持图像、中文和英文的多模态对话语言模型语言模型基于 ChatGLM-6B具有 62 亿参数图像部分通过训练 BLIP2-Qformer 构建起视觉模型与语言模型的桥梁整体模型共78亿参数。 VisCPM于CPM基础模型的中英双语多模态大模型。
领域大模型
金融领域大模型 轩辕在BLOOM-176B的基础上针对中文通用领域和金融领域进行了针对性的预训练与微调。 Cornucopia聚宝盆开源了经过中文金融知识指令精调/指令微调(Instruct-tuning) 的LLaMA-7B模型。通过中文金融公开数据爬取的金融数据构建指令数据集并在此基础上对LLaMA进行了指令微调提高了 LLaMA 在金融领域的问答效果。基于相同的数据后期还会利用GPT3.5 API构建高质量的数据集另在中文知识图谱-金融上进一步扩充高质量的指令数据集。 BBT-FinCUGE-Applications开源了中文金融领域开源语料库BBT-FinCorpus中文金融领域知识增强型预训练语言模型BBT-FinT5及中文金融领域自然语言处理评测基准CFLEB。
法律领域大模型 ChatLaw由北京大学开源的大模型主要有13B、33B。 LexiLawLexiLaw 是一个经过微调的中文法律大模型它基于 ChatGLM-6B 架构通过在法律领域的数据集上进行微调使其在提供法律咨询和支持方面具备更高的性能和专业性。 LaWGPT该系列模型在通用中文基座模型如 Chinese-LLaMA、ChatGLM 等的基础上扩充法律领域专有词表、大规模中文法律语料预训练增强了大模型在法律领域的基础语义理解能力。在此基础上构造法律领域对话问答数据集、中国司法考试数据集进行指令精调提升了模型对法律内容的理解和执行能力。 Lawyer LLaMA开源了一系列法律领域的指令微调数据和基于LLaMA训练的中文法律大模型的参数。Lawyer LLaMA 首先在大规模法律语料上进行了continual pretraining。在此基础上借助ChatGPT收集了一批对中国国家统一法律职业资格考试客观题以下简称法考的分析和对法律咨询的回答利用收集到的数据对模型进行指令微调让模型习得将法律知识应用到具体场景中的能力。
医疗领域大模型 DoctorGLM基于 ChatGLM-6B的中文问诊模型通过中文医疗对话数据集进行微调实现了包括lora、p-tuningv2等微调及部署。 BenTsao源了经过中文医学指令精调/指令微调(Instruct-tuning) 的LLaMA-7B模型。通过医学知识图谱和GPT3.5 API构建了中文医学指令数据集并在此基础上对LLaMA进行了指令微调提高了LLaMA在医疗领域的问答效果。 BianQue一个经过指令与多轮问询对话联合微调的医疗对话大模型基于ClueAI/ChatYuan-large-v2作为底座使用中文医疗问答指令与多轮问询对话混合数据集进行微调。 HuatuoGPT开源了经过中文医学指令精调/指令微调(Instruct-tuning)的一个GPT-like模型。 Med-ChatGLM基于中文医学知识的ChatGLM模型微调微调数据与BenTsao相同。 QiZhenGPT该项目利用启真医学知识库构建的中文医学指令数据集并基于此在LLaMA-7B模型上进行指令精调大幅提高了模型在中文医疗场景下效果首先针对药品知识问答发布了评测数据集后续计划优化疾病、手术、检验等方面的问答效果并针对医患问答、病历自动生成等应用展开拓展。 XrayGLM该项目为促进中文领域医学多模态大模型的研究发展发布了XrayGLM数据集及模型其在医学影像诊断和多轮交互对话上显示出了非凡的潜力。 MedicalGPT训练医疗大模型实现包括二次预训练、有监督微调、奖励建模、强化学习训练。发布中文医疗LoRA模型shibing624/ziya-llama-13b-medical-lora基于Ziya-LLaMA-13B-v1模型SFT微调了一版医疗模型医疗问答效果有提升发布微调后的LoRA权重。
教育领域大模型 桃李Taoli一个在国际中文教育领域数据上进行了额外训练的模型。项目基于目前国际中文教育领域流通的500余册国际中文教育教材与教辅书、汉语水平考试试题以及汉语学习者词典等构建了国际中文教育资源库构造了共计 88000 条的高质量国际中文教育问答数据集并利用收集到的数据对模型进行指令微调让模型习得将知识应用到具体场景中的能力。 EduChat该项目华东师范大学计算机科学与技术学院的EduNLP团队研发主要研究以预训练大模型为基底的教育对话大模型相关技术融合多样化的教育垂直领域数据辅以指令微调、价值观对齐等方法提供教育场景下自动出题、作业批改、情感支持、课程辅导、高考咨询等丰富功能服务于广大老师、学生和家长群体助力实现因材施教、公平公正、富有温度的智能教育。
数学领域大模型
chatglm-maths基于chatglm-6b微调/LORA/PPO/推理的数学题解题大模型, 样本为自动生成的整数/小数加减乘除运算, 可gpu/cpu部署开源了训练数据集等。
RLHF(人工反馈强化学习)
根据 OpenAI 之前做的一些实验可以看到使用了 PPO近端策略优化算法的 RLHF 模型整体上都更好一些。当把结果提供给人类时相比于 SFT 模型和通过 prompt 化身为助理的基础模型人类也基本更喜欢来自 RLHF 模型的 token。 那 RLHF 为什么能让模型更好呢目前 AI 研究界还没有找到一个得到大家认可的理论一种可能与比较和生成的计算难度之间的不对称性有关。
举个例子说明一下假设我们要让一个模型写一首关于回形针的俳句。如果你是一位正努力创建训练数据的合同工正在为 SFT 模型收集数据。那么你该怎样写出一首关于回形针的好俳句呢而你可能并不是一位优秀的俳句诗人。但是如果给你几首俳句你却有能力辨别它们中哪首更好一些。也就是说比起创建一个好样本判断哪个样本更好是简单得多的任务。因此这种不对称性可能使得比较是一种更好的方法能更好地利用人类的判断来创造出好一些的模型。
但目前来看RLHF 并不总是会为基石模型带来提升。在某些情况下RLHF 模型会失去一些熵也就是说它们会输出更加单调、变化更少的结果。而基础模型的熵更高可以输出更加多样化的结果。
RLHF开源工具
下面是目前开源的一些RLHF工具 DeepSpeed Chat基于Opt系列模型进行示例。 ColossalChat基于LLaMA系列模型进行示例。
分布式并行及显存优化技术
并行技术 数据并行如PyTorch DDP 模型/张量并行如Megatron-LM1D、Colossal-AI2D、2.5D、3D 流水线并行如GPipe、PipeDream、PipeDream-2BW、PipeDream Flush1F1B 多维混合并行如3D并行数据并行、模型并行、流水线并行 自动并行如Alpa自动算子内/算子间并行 优化器相关的并行如ZeRO零冗余优化器在执行的逻辑上是数据并行但可以达到模型并行的显存优化效果、PyTorch FSDP
显存优化技术 重计算(Recomputation)Activation checkpointing(Gradient checkpointing)本质上是一种用时间换空间的策略。 卸载Offload技术一种用通信换显存的方法简单来说就是让模型参数、激活值等在CPU内存和GPU显存之间左右横跳。如ZeRO-Offload、ZeRO-Infinity等。 混合精度BF16/FP16降低训练显存的消耗还能将训练速度提升2-4倍。 BF16 计算时可避免计算溢出出现Inf case。 FP16 在输入数据超过65506 时计算结果溢出出现Inf case。
分布式训练框架
如何选择一款分布式训练框架 训练成本不同的训练工具训练同样的大模型成本是不一样的。对于大模型训练一次动辄上百万/千万美元的费用。合适的成本始终是正确的选择。 训练类型是否支持数据并行、张量并行、流水线并行、多维混合并行、自动并行等 效率将普通模型训练代码变为分布式训练所需编写代码的行数我们希望越少越好。 灵活性你选择的框架是否可以跨不同平台使用
常见的分布式训练框架 第一类深度学习框架自带的分布式训练功能。如TensorFlow、PyTorch、MindSpore、Oneflow、PaddlePaddle等。 第二类基于现有的深度学习框架如PyTorch、Flax进行扩展和优化从而进行分布式训练。如Megatron-LM张量并行、DeepSpeedZero-DP、Colossal-AI高维模型并行如2D、2.5D、3D、Alpa自动并行等
目前训练超大规模语言模型主要有两条技术路线 TPU XLA TensorFlow/JAX 由Google主导由于TPU和自家云平台GCP深度绑定。 GPU PyTorch Megatron-LM DeepSpeed 由NVIDIA、Meta、MicroSoft大厂加持社区氛围活跃也更受到大家欢迎。
对于国内来说华为昇腾在打造 AI 全栈软硬件平台昇腾NPUCANNMindSporeMindFormers。不过目前整个生态相对前两者还差很远。
参数高效微调PEFT技术
在面对特定的下游任务时如果进行Full FineTuning即对预训练模型中的所有参数都进行微调太过低效而如果采用固定预训练模型的某些层只微调接近下游任务的那几层参数又难以达到较好的效果。
PEFT技术旨在通过最小化微调参数的数量和计算复杂度来提高预训练模型在新任务上的性能从而缓解大型预训练模型的训练成本。这样一来即使计算资源受限也可以利用预训练模型的知识来迅速适应新任务实现高效的迁移学习。因此PEFT技术可以在提高模型效果的同时大大缩短模型训练时间和计算成本让更多人能够参与到深度学习研究中来。除此之外FEFT可以缓解全量微调带来灾难性遗忘的问题。 Prefix Tuning与full fine-tuning更新所有参数的方式不同该方法是在输入token之前构造一段任务相关的virtual tokens作为Prefix然后训练的时候只更新Prefix部分的参数而Transformer中的其他部分参数固定。该方法其实和构造Prompt类似只是Prompt是人为构造的“显式”的提示,并且无法更新参数而Prefix则是可以学习的“隐式”的提示。 同时为了防止直接更新Prefix的参数导致训练不稳定的情况他们在Prefix层前面加了MLP结构(相当于将Prefix分解为更小维度的Input与MLP的组合后输出的结果)训练完成后只保留Prefix的参数。 Prompt Tuning该方法可以看作是Prefix Tuning的简化版本只在输入层加入prompt tokens并不需要加入MLP进行调整来解决难训练的问题。随着预训练模型参数量的增加Prompt Tuning的方法会逼近fine-tuning的结果。 P-Tuning该方法的提出主要是为了解决这样一个问题大模型的Prompt构造方式严重影响下游任务的效果。P-Tuning将Prompt转换为可以学习的Embedding层并用MLPLSTM的方式来对prompt embedding进行一层处理。 P-Tuning v2让Prompt Tuning能够在不同参数规模的预训练模型、针对不同下游任务的结果上都达到匹敌Fine-tuning的结果。相比Prompt Tuning和P-tuning的方法P-Tuning v2方法在多层加入了Prompts tokens作为输入带来两个方面的好处 带来更多可学习的参数从P-tuning和Prompt Tuning的0.1%增加到0.1%-3%同时也足够参数高效。 加入到更深层结构中的Prompt能给模型预测带来更直接的影响。 Adapter Tuning该方法设计了Adapter结构首先是一个down-project层将高维度特征映射到低维特征然后过一个非线形层之后再用一个up-project结构将低维特征映射回原来的高维特征同时也设计了skip-connection结构确保了在最差的情况下能够退化为identity并将其嵌入Transformer的结构里面在训练时固定住原来预训练模型的参数不变只对新增的Adapter结构进行微调。同时为了保证训练的高效性也就是尽可能少的引入更多参数。 LoRA在涉及到矩阵相乘的模块引入A、B这样两个低秩矩阵模块去模拟full fine-tuning的过程相当于只对语言模型中起关键作用的低秩本质维度进行更新。 QLoRA使用一种新颖的高精度技术将预训练模型量化为 4 bit然后添加一小组可学习的低秩适配器权重这些权重通过量化权重的反向传播梯度进行微调。目前训练速度较慢。 AdaLoRA对LoRA的一种改进它根据重要性评分动态分配参数预算给权重矩阵。
典型应用 ChatGLM-Tuning 一种平价的chatgpt实现方案基于清华的 ChatGLM-6B LoRA 进行finetune。 Alpaca-Lora使用低秩自适应LoRA复现斯坦福羊驼的结果。Stanford Alpaca 是在 LLaMA 整个模型上微调而 Alpaca-Lora 则是利用 Lora 技术在冻结原模型 LLaMA 参数的情况下通过往模型中加入额外的网络层并只训练这些新增的网络层参数。由于这些新增参数数量较少这样不仅微调的成本显著下降还能获得和全模型微调类似的效果。 BLOOM-LORA由于LLaMA的限制我们尝试使用Alpaca-Lora重新实现BLOOM-LoRA。
PEFT实现 PEFTHuggingface推出的PEFT库。 unify-parameter-efficient-tuning一个参数高效迁移学习的统一框架。
高效微调技术目前存在的两个问题
相比全参数微调大部分的高效微调技术目前存在的两个问题 推理速度会变慢 模型精度会变差
影响大模型性能的主要因素
OpenAI的论文Scaling Laws for Neural Language Models中列举了影响模型性能最大的三个因素计算量、数据集大小、模型参数量。也就是说当其他因素不成为瓶颈时计算量、数据集大小、模型参数量这3个因素中的单个因素指数增加时loss会线性的下降。
除了以上的因素之外还有一个比较大的影响因素就是数据质量。在微软的论文Instruction Tuning with GPT-4中指出同样基于LLaMA模型使用GPT3和GPT4产生的数据对模型进行Instruction Turing可以看到GPT4的数据微调过的模型效果远远好于GPT3数据微调的模型可见数据质量带来的影响。同样的Vicuna7B/13B的Instruction Turing中也对shareGPT的数据做了很细致的清洗工作。
衡量大模型水平
要评估一个大型语言模型的水平可以从以下几个维度提出具有代表性的问题。 理解能力提出一些需要深入理解文本的问题看模型是否能准确回答。 语言生成能力让模型生成一段有关特定主题的文章或故事评估其生成的文本在结构、逻辑和语法等方面的质量。 知识面广度请模型回答关于不同主题的问题以测试其对不同领域的知识掌握程度。这可以是关于科学、历史、文学、体育或其他领域的问题。一个优秀的大语言模型应该可以回答各种领域的问题并且准确性和深度都很高。 适应性让模型处理各种不同类型的任务例如写作、翻译、编程等看它是否能灵活应对。 长文本理解提出一些需要处理长文本的问题例如提供一篇文章让模型总结出文章的要点或者请模型创作一个故事或一篇文章让其有一个完整的情节并且不要出现明显的逻辑矛盾或故事结构上的错误。一个好的大语言模型应该能够以一个连贯的方式讲述一个故事让读者沉浸其中。 长文本生成请模型创作一个故事或一篇文章让其有一个完整的情节并且不要出现明显的逻辑矛盾或故事结构上的错误。一个好的大语言模型应该能够以一个连贯的方式讲述一个故事让读者沉浸其中。 多样性提出一个问题让模型给出多个不同的答案或解决方案测试模型的创造力和多样性。 情感分析和推断提供一段对话或文本让模型分析其中的情感和态度或者推断角色间的关系。 情感表达请模型生成带有情感色彩的文本如描述某个场景或事件的情感、描述一个人物的情感状态等。一个优秀的大语言模型应该能够准确地捕捉情感将其表达出来。 逻辑推理能力请模型回答需要进行推理或逻辑分析的问题如概率或逻辑推理等。这可以帮助判断模型对推理和逻辑思考的能力以及其在处理逻辑问题方面的准确性。例如“所有的动物都会呼吸。狗是一种动物。那么狗会呼吸吗” 问题解决能力提出实际问题例如数学题、编程问题等看模型是否能给出正确的解答。 道德和伦理测试模型在处理有关道德和伦理问题时的表现例如“在什么情况下撒谎是可以接受的” 对话和聊天请模型进行对话以测试其对自然语言处理的掌握程度和能力。一个优秀的大语言模型应该能够准确地回答问题并且能够理解人类的语言表达方式。
大模型评估方法
人工评估LIMA、Phoenix
使用 GPT-4 的反馈进行自动评估Vicuna、Phoenix、Chimera、BELLE
指标评估BLEU-4、ROUGE分数ChatGLM-6B对于像ROUGE-L分数的指标评估有些地方称其为非自然指令评估Unnatural Instruction Evaluation。
Chatbot Arena目前用来衡量一个模型好不好的东西基本都是基于一些学术的benchmark比如在一个某个NLP任务上构建一个测试数据集然后看测试数据集上准确率多少。然而这些学术benchmark如HELM在大模型和聊天机器人上就不好用了。其原因在于 由于评判聊天机器人聊得好不好这件事是非常主观的因此现有的方法很难对其进行衡量。 这些大模型在训练的时候就几乎把整个互联网的数据都扫了一个遍因此很难保证测试用的数据集没有被看到过。甚至更进一步用测试集直接对模型进行「特训」如此一来表现必然更好。 理论上我们可以和聊天机器人聊任何事情但很多话题或者任务在现存的benchmark里面根本就不存在。
因此Chatbot Arena 的做法是放弃benchmark通过对抗实时聊天两两比对人工进行打分采用elo分数进行评测。
大模型评估工具 OpenAI evalsOpenAI的自动化评估脚本核心思路就是通过写prompt模版来自动化评估。 PandaLM其是直接训练了一个自动化打分模型0,1,2三分制用模型对两个候选模型进行打分。
大模型推理加速
模型推理作为模型投产的最后一公里需要确保模型精度的同时追求极致的推理性能。相比传统模型来说大模型面临着更多的挑战。
当前优化模型最主要技术手段概括来说有以下三个层面 算法层面蒸馏、量化 软件层面计算图优化、模型编译 硬件层面FP8NVIDIA H系列GPU开始支持FP8兼有fp16的稳定性和int8的速度
推理加速框架 FasterTransformer英伟达推出的FasterTransformer不修改模型架构而是在计算加速层面优化 Transformer 的 encoder 和 decoder 模块。具体包括如下 尽可能多地融合除了 GEMM 以外的操作 支持 FP16、INT8、FP8 移除 encoder 输入中无用的 padding 来减少计算开销 TurboTransformers腾讯推出的 TurboTransformers 由 computation runtime 及 serving framework 组成。加速推理框架适用于 CPU 和 GPU最重要的是它可以无需预处理便可处理变长的输入序列。具体包括如下 与 FasterTransformer 类似它融合了除 GEMM 之外的操作以减少计算量 smart batching对于一个 batch 内不同长度的序列它也最小化了 zero-padding 开销 对 LayerNorm 和 Softmax 进行批处理使它们更适合并行计算 引入了模型感知分配器以确保在可变长度请求服务期间内存占用较小
AI 集群网络通信
通信硬件
机器内通信 共享内存比如CPU与CPU之间的通信可以通过共享内存。 PCIe通常是CPU与GPU之间的通信也可以用于GPU与GPU之间的通信。 NVLink直连模式通常是GPU与GPU之间的通信也可以用于CPU与GPU之间的通信。
机器间通信 TCP/IP网络 RDMA远程直接内存访问目前主要有如下三种技术 InfiniBand iWarp RoCE v2
通信软件
下面是一些常见的网络通信库 Gloo Facebook 开源的一套集体通信库提供了对机器学习中有用的一些集合通信算法。 NCCL英伟达基于 NVIDIA-GPU 的一套开源的集合通信库。 OpenMPI一个开源 MPI消息传递接口 的实现由学术研究和行业合作伙伴联盟开发和维护。 HCCL华为开发的网络通信库。
通信网络监控 nvbandwidth用于测量 NVIDIA GPU 带宽的工具。 DCGM一个用于收集telemetry数据和测量 NVIDIA GPU 运行状况。
大模型生态相关技术
大模型是基座要想让其变成一款产品我们还需要一些其他相关技术
LLM 应用开发工具 langchain一个用于构建基于大型语言模型LLM的应用程序的库。它可以帮助开发者将LLM 与其他计算或知识源结合起来创建更强大的应用程序。 llama-index一个将大语言模型和外部数据连接在一起的工具。 gpt-cacheLLM 语义缓存层caching layer它采用语义缓存semantic cache技术能够存储 LLM 响应从而显著减少检索数据所需的时间、降低 API 调用开销、提升应用可扩展性。
向量数据库 Pinecone Milvus Vespa Weaviate
总的来说如果想快速验证Pinecone 是个不错的选择。如果想拥有更灵活的查询方式可以考虑 Vespa 或 Weaviate.如果需要更好的可扩展性和可靠性那么经过大客户验证的 Vespa 或 Milvus 可能是不错的选择。
经验与教训
经验 对于同一模型选择不同的训练框架对于资源的消耗情况可能存在显著差异比如使用Huggingface Transformers和DeepSpeed训练OPT-30相对于使用Alpa对于资源的消耗会低不少。 进行大模型模型训练时先使用小规模模型如OPT-125m/2.7b进行尝试然后再进行大规模模型如OPT-13b/30b…的尝试便于出现问题时进行排查。目前来看业界也是基于相对较小规模参数的模型6B/7B/13B进行的优化同时13B模型经过指令精调之后的模型效果已经能够到达GPT4的90%的效果。 对于一些国产AI加速卡目前来说坑还比较多如果时间不是时间非常充裕还是尽量选择Nvidia的AI加速卡。
教训 针对已有的环境进行分布式训练环境搭建时一定要注意之前环境的python、pip、virtualenv、setuptools的版本。不然创建的虚拟环境即使指定对了Python版本也可能会遇到很多安装依赖库的问题GPU服务器能够访问外网的情况下建议使用Docker相对来说更方便。 遇到需要升级GLIBC等底层库需要升级的提示时一定要慎重不要轻易升级否则可能会造成系统宕机或很多命令无法操作等情况。
大模型实践文章
LLM训练:
LLM预训练/微调/RLHF…参数教程代码Alpacafull fine-turning7B从0到1复现斯坦福羊驼Stanford Alpaca 7BN/AAlpacalora7B1. 足够惊艳使用Alpaca-Lora基于LLaMA(7B)二十分钟完成微调效果比肩斯坦福羊驼2. 使用 LoRA 技术对 LLaMA 65B 大模型进行微调及推理配套代码BELLE(LLaMA-7B/Bloomz-7B1-mt)full fine-turning7B1. 基于LLaMA-7B/Bloomz-7B1-mt复现开源中文对话大模型BELLE及GPTQ量化2. BELLE(LLaMA-7B/Bloomz-7B1-mt)大模型使用GPTQ量化后推理性能测试N/AChatGLMlora6B从0到1基于ChatGLM-6B使用LoRA进行参数高效微调N/AChatGLMfull fine-turning/P-Tuning v26B使用DeepSpeed/P-Tuning v2对ChatGLM-6B进行微调N/AVicunafull fine-turning7B大模型也内卷Vicuna训练及推理指南效果碾压斯坦福羊驼N/AOPTRLHFN/A1. 一键式 RLHF 训练 DeepSpeed Chat一理论篇2. 一键式 RLHF 训练 DeepSpeed Chat二实践篇N/AMiniGPT-4full fine-turning7B大杀器多模态大模型MiniGPT-4入坑指南N/AChinese-LLaMA-Alpacalora预训练微调7B使用 LoRA 技术对 LLaMA 65B 大模型进行微调及推理配套代码
结语
实践出真知以上是这段时间进行大模型实践的一点点总结写的有一些主观和片面后续会持续更新自己研究大模型获得的一些认知和实践经验希望能够帮助大家欢迎点赞收藏加关注。