大语言模型的分布式训练

什么是大语言模型

大语言模型(Large Language Model,缩写LLM),也称大型语言模型,是一种人工智能模型,旨在理解和生成人类语言。它们在大量的文本数据上进行训练,可以执行广泛的任务,包括文本总结、翻译、情感分析等等。LLM的特点是规模庞大,包含数十亿的参数,帮助它们学习语言数据中的复杂模式。

训练方式

训练语言模型需要向其提供大量的文本数据,模型利用这些数据来学习人类语言的结构、语法和语义。这个过程通常是通过无监督学习完成的,使用一种叫做自我监督学习的技术。在自我监督学习中,模型通过预测序列中的下一个词或标记,为输入的数据生成自己的标签,并给出之前的词。训练过程包括两个主要步骤:预训练(pre-training)和微调(fine-truning):在预训练阶段,模型从一个巨大的、多样化的数据集中学习,通常包含来自不同来源的数十亿词汇,如网站、书籍和文章。这个阶段允许模型学习一般的语言模式和表征。在微调阶段,模型在与目标任务或领域相关的更具体、更小的数据集上进一步训练。这有助于模型微调其理解,并适应任务的特殊要求。

面临的挑战

1. 资源消耗巨大:训练LLM需要大量的计算资源,这使得较小的组织或研究人员在开发和部署这些模型方面面临挑战。此外,与训练LLM有关的能源消耗也引起了一定程度的环境问题。
2. 输出可能带有偏见:由于训练数据中可能带有偏见,而LLM可!以学习并延续其训练数据中的偏见,导致有偏见的输出,可能是冒犯性的、歧视性甚至是错误性的观念。
3. 理解能力受限:虽然大语言模型有能力产生看似连贯和和与背景上下文相关的文本,但LLM有时对其所写的概念缺乏深刻的理解,这很可能导致不正确或无意义的输出。

什么是分布式计算

和集中式计算相反,分布式计算的一个计算过程将会在多台机器上进行。组件之间彼此进行交互以实现一个共同的目标,把需要进行大量计算的工程数据分区成小块,由多台计算机分别计算,再上传运算结果后,将结果统一合并得出数据结论。

如何实现

- 如何拆分计算逻辑
- 如何分发计算逻辑

拆分逻辑

从在哪里发生计算的角度来看,所有的计算逻辑都能够划分为这两种类型:
1能够分发到各个节点上并行执行的
2需要经过一定量的结果合并之后才能继续执行的
两者之间协调完成还需要解决 通讯、容灾、任务调度等问题
首先对此公开提出解决方案的是Google的MapReduce论文
Map Job 对应的就是可以在各个节点上一起执行相互不影响的逻辑
Reduce Job 处理的就是Map产生的中间结果
Map和Reduce之间通过一个Shuffle过程来链接

分发逻辑

与集中式计算最大的不同点:移动计算逻辑而不移动数据

大语言模型的分布式训练

大模型可以带来更精准强大的语义理解和推理能力,所以随着规模计算的普及和数据集的增大,使得模型的参数数量也以指数级的速度增长。训练这样大的模型非常具有挑战性,具体原因如下:
对显存的挑战。即使是最大的GPU的主内存也不可能适合这些模型的参数,比如一个175B的GPT-3模型需要(175B * 4bytes)就是700GB模型参数空间,从而梯度也是700G,优化器状态是1400G,一共2.8TB。
对计算的挑战。即使我们能够把模型放进单个GPU中(例如,通过在主机和设备内存之间交换参数),但是其所需的大量计算操作会导致漫长训练时间(例如,使用单个V100 NVIDIA GPU来训练1750亿个参数的GPT-3需要大约288年)。如何计算可以参见 2104.04473的附录 FLOATING-POINT OPERATIONS。
对计算的挑战。不同并行策略对应的通信模式和通信量不同。数据并行:通信发生在后向传播的梯度规约all-reduce操作,通信量是每个GPU之上模型的大小。模型并行:在下面会详述。
这就需要采用并行化来加速。使用硬件加速器来横向扩展(scale out)深度神经网络训练主要有两种模式:数据并行,模型并行。

数据并行

数据并行模式会在每个worker之上复制一份模型,这样每个worker都有一个完整模型的副本。输入数据集是分片的,一个训练的小批量数据将在多个worker之间分割;
worker定期汇总它们的梯度,以确保所有worker看到一个一致的权重版本。对于无法放进单个worker的大型模型,人们可以在模型之中较小的分片上使用数据并行。
数据并行扩展通常效果很好,但有两个限制:a)超过某一个点之后,每个GPU的batch size变得太小,这降低了GPU的利用率,增加了通信成本;b)可使用的最大设备数就是batch size,着限制了可用于训练的加速器数量。

模型并行

WHY:业界内训练的模型越来越大,模型朝着更深和更宽的方向发展。以自然语言处理(NLP)领域为例,模型从Bert发展到GPT,模型规模从数亿参数量增加到数百亿甚至是数千亿。当参数规模为千亿时,存储模型参数就需要数百GB的显存空间,超出单个GPU卡的显存容量。显然,仅靠数据并行无法满足超大规模模型训练对于显存的需求。为了解决这个问题,可以采用模型并行技术。人们会使用一些内存管理技术,如激活检查点(activation checkpointing)来克服数据并行的这种限制,也会使用模型并行来对模型进行分区来解决这两个挑战,使得权重及其关联的优化器状态不需要同时驻留在处理器上。WHAT:模型并行模式会让一个模型的内存和计算分布在多个worker之间,以此来解决一个模型在一张卡上无法容纳的问题,其解决方法是把模型放到多个设备之上。
模型并行分为两种:流水线并行和张量并行,就是把模型切分的方式。
流水线并行
流水线并行(pipeline model parallel)是把模型不同的层放到不同设备之上,比如前面几层放到一个设备之上,中间几层放到另外一个设备上,最后几层放到第三个设备之上。
张量并行
张量并行则是层内分割,把某一个层做切分,放置到不同设备之上,也可以理解为把矩阵运算分配到不同的设备之上,比如把某个矩阵乘法切分成为多个矩阵乘法放到不同设备之上。
通信
张量并行:通信发生在每层的前向传播和后向传播过程之中,通信类型是all-reduce,不但单次通信数据量大,并且通信频繁。
流水线并行:通信在流水线阶段相邻的切分点之上,通信类型是P2P通信,单词通信数据量较少但是比较频繁,而且因为流水线的特点,会产生GPU空闲时间,这里称为流水线气泡(Bubble)。

PS

NCCL是Nvidia Collective multi-GPU Communication Library的简称,它是一个实现多GPU的collective communication通信(all-gather, reduce, broadcast)库,Nvidia做了很多优化,以在PCIe、Nvlink、InfiniBand上实现较高的通信速度。

All-reduce:从多个sender那里接收数据,最终combine到每一个节点上。

Transformer Attention MLP GeLU Dropout

未完待续…

引用

https://blog.csdn.net/weixin_47364682/article/details/122674457
https://zhuanlan.zhihu.com/p/507877303
https://zhuanlan.zhihu.com/p/617087561
https://zhuanlan.zhihu.com/p/28653942
https://zhuanlan.zhihu.com/p/129912419
https://www.zhihu.com/question/508671222

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/56333.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图片的宽高等比例放大缩小使用padding-bottom来实现

图片的宽高等比例放大缩小使用padding-bottom来实现 使用padding-bottom来实现图片或容器的等比例放大和缩小是一个巧妙的技巧,特别是在制作响应式设计时。这种方法依赖于CSS的一个特点:当为元素设置百分比的padding-bottom或padding-top时,这…

Android 可扩展的网络请求框架

网络框架设计 搭建一个通用的、扩展性好、解耦合的网络框架需要一些设计和技术策略。以下是一些步骤和建议,可以帮助您构建一个高质量的网络框架: 明确需求: 在开始之前,明确您的项目需求和目标。考虑您需要支持哪些网络协议&…

分布式事务(7):SpringCloud2.0整合LCN

目前LCN版本已经升级为4.0了,但是官方没有SpringCloud2.0的demo案例。 因为LCN本身是开源的,有些大神对LCN框架源码做修改,可以支持SpringCloud2.0版本。 下载地址:https://download.csdn.net/download/u013938578/88251904 1 下载LCN服务端源码 https://download.csdn.…

net.ipv4.ip_forward=0导致docker容器无法与外部通信

在启动一个docker容器时报错: WARNING: IPv4 forwarding is disabled. Networking will not work. 并且,此时本机上的其他容器的网络服务,只能在本机上访问,其他机器上访问不到。 原因: sysctl net.ipv4.ip_forward …

【OpenCV • c++】图像对比度调整 | 图像亮度调整

🚀 个人简介:CSDN「博客新星」TOP 10 , C/C 领域新星创作者💟 作 者:锡兰_CC ❣️📝 专 栏:【OpenCV • c】计算机视觉🌈 若有帮助,还请关注➕点赞➕收藏&#xff…

C# Emgu.CV 条码检测

效果 项目 代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using Emgu.CV; using Emgu.CV.Util; using static Emgu.C…

机器人制作开源方案 | 桌面级机械臂--本体说明+驱动及控制

一、本体说明 1. 机械臂整体描述 该桌面级机械臂为模块化设计,包含主机模块1个、转台模块1个、二级摆动模块1个、可编程示教盒1个、2种末端执行器、高清摄像头,以及适配器、组装工具、备用零件等。可将模块快速组合为一个带被动关节的串联3自由度机械臂…

【业务功能篇73】web系统架构演变-单体-集群-垂直化-服务化-微服务化

1.服务架构的演 1.1 单体架构 单体架构应该是我们最先接触到的架构实现了,在单体架构中使用经典的三层模型,即表现层,业务逻辑层和数据访问层。 单体架构只适合在应用初期,且访问量比较下的情况下使用,优点是性价比很…

返还给前端数据时间格式使用哪个注解保证只返回时间单位到天

在 Java 中,可以使用 JsonFormat 注解来指定日期时间的格式。如果你只需要返回时间单位到天,可以使用 JsonFormat 注解,并设置 pattern 属性为 “yyyy-MM-dd”。 例如,假设你有一个 POJO 类 DataModel,其中包含一个类…

C#: Json序列化和反序列化,集合为什么多出来一些元素?

如下面的例子,很容易看出问题: 如果类本身的无参构造函数, 就添加了一些元素,那么在序列化,再反序列化,会导致元素增加。 如果要避免,必须添加: new JsonSerializerSettings() { …

Linux目录结构与文件管理(01) (三)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 一、Linux 系统的组成 二、目录结构 根目录 三、文件管理 目录管理 总结 前言 今天主要学习了Linux的目录结构,主要是一些命令的含义和用法&am…

拼多多anti-token分析

前言:拼多多charles抓包分析发现跟商品相关的请求头里都带了一个anti-token的字段且每次都不一样,那么下面的操作就从分析anti-token开始了 1.jadx反编译直接搜索 选中跟http相关的类对这个方法进行打印堆栈 结合堆栈方法调用的情况找到具体anti-token是由拦截器类f…

Spring 容器启动耗时统计

为了了解 Spring 为什么会启动那么久,于是看了看怎么统计一下加载 Bean 的耗时。 极简版 几行代码搞定。 import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanPostProcessor;import java.util.HashMap; imp…

算法通关村——数组实现加法和幂运算问题解析

1. 数组实现加法 1.1 加一 加一 给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。 你可以假设除了整数 0 之外,这个整数不会以零开头。 示例 1&#…

k8s挂载映射操作详解

k8s投射数据卷 Projected Volume 在 k8s 中,有几种特殊的 Volume,它们的意义不是为了存放容器里的数据,也不是用来进行容器和宿主机之间的数据交换。"而是为容器提供预先定义好的数据。" 从容器的角度来看,这些 Volume…

SQL 错误 [22007]: ERROR: invalid input syntax for type date: ““

0. 背景 PG数据库一张表有这样一个varchar类型的字段end_date,存储的值是格式化后的年月日日期如 2024-08-10 现在我需要根据当前日期与end_date的差值作为where条件过滤,我的写法 select …… from my_table_name where current_date - cast (end_date as date) >100报错…

【PCL (Point Cloud Library)可视化点云的工具汇总】

PCL (Point Cloud Library)可视化点云的工具 PCL (Point Cloud Library) 提供了一系列的工具和类用于点云的可视化。以下是其中的一些主要工具和功能: pcl::visualization::CloudViewer: 如前所述,这是一个简单易用的可视化工具,主要用于基本的点云显示。pcl::visualizatio…

五度易链最新“产业大数据服务解决方案”亮相,打造数据引擎,构建智慧产业

快来五度易链官网 点击网址【http://www.wdsk.net/】 看看我们都发布了哪些新功能!!! 自2015年布局产业大数据服务行业以来,“五度易链”作为全国产业大数据服务行业先锋企业,以“让数据引领决策,以智慧驾驭未来”为愿景,肩负“打…

10. 肥宅快乐串

目录 题目 思路 注意事项 C代码 题目 Description 龙龙在研究字符串和字符串处理。龙龙发现有一些字符串让他第一眼看到就会发自内心的感到快乐,他把这些字符串称为“肥宅快乐串"。龙龙进一步研究发现,一个字符串是"肥宅快乐串"&#…

mongTemplate实现group分组查询aggregation

MongoService封装 <T> List<T> group(Class<T> clazz, Aggregation aggregation,String documentName); MongoServiceImpl实现类 Overridepublic <T> List<T> group(Class<T> clazz, Aggregation aggregation,String documentName) {//…