AI大模型探索之路-训练篇2:大语言模型预训练基础认知

文章目录

  • 前言
  • 一、预训练流程分析
  • 二、预训练两大挑战
  • 三、预训练网络通信
  • 四、预训练数据并行
  • 五、预训练模型并行
  • 六、预训练3D并行
  • 七、预训练代码示例
  • 总结


前言

在人工智能的宏伟蓝图中,大语言模型(LLM)的预训练是构筑智慧之塔的基石。预训练过程通过调整庞大参数空间以吸纳数据中蕴含的知识,为模型赋予从语言理解到文本生成等多样化能力。本文将深入探讨预训练过程中的技术细节、所面临的挑战、通信机制、并行化策略以及如何通过这些技术的融合提升预训练的效率和性能。

一、预训练流程分析

预训练大语言模型涉及对海量参数的优化。这个过程起始于一个简单的前提:

给定输入(X)和相应的输出(Y),模型通过不断迭代学习,不断更新修改参数,使得其生成的输出尽可能接近真实结果(Y)。

当模型输出与实际结果之间的差距—通常由损失函数量化—减小到一个可接受的阈值时,我们可以认为预训练过程达到预期效果。在这个过程中,模型参数经历从随机初始化到精细调整的转变,逐步捕捉并内化语言的复杂规律。
在这里插入图片描述

大语言模型预训练过程核心:
1)输入 Batch 数据
2)前向传播计算损失
3)后向传播计算梯度
4)优化器更新大模型参数
5)反复迭代循环
在这里插入图片描述

二、预训练两大挑战

随着模型规模向百亿甚至千亿参数迈进,预训练任务面临两大主要挑战:
1.显存效率:模型参数量的巨大使得即便是最先进的GPU也难以单独容纳所有参数,这直接导致了显存溢出的问题。例如,一个具有1750亿参数的GPT-3模型,其参数本身就需要消耗约700GB的显存,加上Adam优化器的状态,总共需要超过2.8TB的显存
2.计算效率:巨大的模型参数和海量的训练数据使得计算量激增,导致单机训练时间长达数年,这对于计算资源的有效利用提出了极大的挑战。

三、预训练网络通信

网络通信是多机多GPU预训练过程中不可或缺的环节。点对点通信方式因其一对一的数据交换模式,虽然成本较低,但传输速率较慢,成为速度瓶颈。相对而言,集体通信方式通过同时进行多个进程间的数据传输,大大提升了通信速度,但相应地增加了成本。选择合适的通信方式对于提高预训练效率至关重要。
1.点对点通信:一个进程发送数据,一个进程接收数据,速度慢,成本低。
在这里插入图片描述

2.集体通信:多个进程发送数据,多个进程接收数据,速度快,成本高。

在这里插入图片描述

四、预训练数据并行

1. 数据并行:数据并行是处理大规模数据集的常用策略,它通过将整个数据集分割成多个子集,每张GPU分配一部分数据独立进行模型训练。

在这里插入图片描述

2. 数据并行三个提高效率的技巧
1)梯度分桶:动机是集体通信在大张量上比在小张量上效率更高。
2)计算与通信重叠:有了梯度分桶之后,在等待同一个桶内的梯度计算完后,就可以进行通信操作。
3)跳过梯度同步:梯度累加,减少梯度通信的频次。
在这里插入图片描述

五、预训练模型并行

当单张GPU无法装载整个模型时,模型并行成为解决之道。

1.流水线并行
层间划分,将不同的层划分到不同的 GPU 上;比如:前 3 层在 0 号卡上,后 3 层在 1 号卡上
在这里插入图片描述

2.张量并行
层内划分,切分一个独立的层划分到不同的 GPU 上;比如:0 号卡和 1 号卡分别计算某个层的不同部分
在这里插入图片描述

六、预训练3D并行

3D并行是一种综合性策略,它结合了数据并行、张量并行和流水线并行的优势,以平衡显存利用率和计算效率。在此框架下,每种并行方法承担着不同的角色:数据并行提供高效的计算利用率,张量并行减少单个层的显存占用,而流水线并行则降低跨层通信的频率。

1. 数据并行:计算效率高、实现简单。
• 显存效率:每张卡上都保存了完整的模型、梯度、优化器状态,因此显存效率不高。
• 计算效率:当增加并行度时,单卡的计算量是保持恒定的,可以实现近乎完美的线性扩展。但规约梯度的通信开销,与模型大小成正相关。

2. 张量并行:因模型结构而异,实现难度大。
• 显存效率:随着并行度增加,成比例地减少显存占用。是减少单层神经网络中间激活的唯一方法。
• 计算效率:频繁的通信,限制了两个通信阶段之间的计算量,影响了计算效率,计算效率很低。

3. 流水线并行:通信成本最低
• 显存效率:减少的显存与流水线并行度成正比。但流水线并行不会减少每层中间激活的显存占用。
• 计算效率:成本更低的点对点(P2P)通信。通信量与流水线各个阶段边界的激活值大小成正比。
在这里插入图片描述

4. 3D并行实例
Bloom-176B模型的预训练实施了这种3D并行策略,在NVIDIA A100 GPU上实现了对数万亿Token的训练工作。
在这里插入图片描述

5. 3D 并行训练框架
同时支持数据并行 、流水线并行、张量并行的3D并行训练框架:Microsoft DeepSpeedNVIDIA Megatron
1)Microsoft DeepSpeed:微软开发的优化库,专门用于简化和提高深度学习分布式训练的效率。它通过结合数据并行和其他并行技术,如流水线并行,实现了一种基于3D并行的训练方法。
2)NVIDIA Megatron:由NVIDIA的研究团队开发的一个专为大型Transformer模型设计的训练框架。

七、预训练代码示例

预训练代码简单示例:


import torch
from transformers import AutoTokenizer, AutoModelForMaskedLM# 加载预训练模型和分词器
model_name = "bert-base-uncased"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForMaskedLM.from_pretrained(model_name)# 准备输入数据
input_text = "This is an example sentence."
inputs = tokenizer(input_text, return_tensors="pt")# 进行前向传播
outputs = model(**inputs)# 提取预测结果
predictions = outputs.logits# 输出预测结果
print(predictions)

总结

预训练大语言模型是一项既富有挑战又极具价值的工作。随着模型规模的不断扩大和数据量的激增,如何高效地进行预训练已经成为了AI研究的核心议题。3D并行作为一种先进的预训练框架,不仅解决了单一GPU资源限制的问题,还通过合理的资源分配和优化手段显著提高了预训练的性能。未来的预训练技术将继续沿着这条道路前进,不断探索新的边界,并将机器学习模型推向前所未有的高度。

👉系列篇章:AI大模型探索之路-训练篇1:大语言模型微调基础认知
🔖更多专栏系列文章:AIGC-AI大模型探索之路

文章若有瑕疵,恳请不吝赐教;若有所触动或助益,还望各位老铁多多关注并给予支持。

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

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

相关文章

Docker基本操作 容器相关命令

docker run:运行镜像; docker pause:暂停容器,会让该容器暂时挂起; docker unpauser:从暂停到运行; docker stop:停止容器,杀死进程; docker start:重新创建进程。 docker ps:查看所有运行的容器及其状态,默认只展…

Angular Subject和BehaviorSubject之间的区别

Subject和BehaviorSubject是RxJS中两种常用的Subject类型。 概念: Subject: Subject是一种特殊的Observable,同时也是Observer。它可以被用来订阅Observable,也可以手动向它推送新的值。Subject是一种热Observable,它…

JavaScript创建和填充数组的更多方法

空数组fill()方法创建并填充数组 ● 我们之前创建数组的方式都是手动去创建去一个数据,例如 console.log([1, 2, 3, 4, 5, 6, 7]);● 当然我们也可以使用Array对象来构造数组 console.log([1, 2, 3, 4, 5, 6, 7]); console.log(new Array(1, 2, 3, 4, 5, 6, 7));…

python生成二维码及进度条源代码

一、进度条 1、利用time模块实现 import time for i in range(0, 101, 2):time.sleep(0.3)num i // 2if i 100:process "\r[%3s%% ]: |%-50s|\n" % (i, # * num)else:process "\r[%3s%% ]: |%-50s|" % (i, # * num)print(process, end, flushTrue)2、使…

tcp服务器端与多个客户端连接

如果希望Tcp服务器端可以与多个客户端连接,可以这样写: tcpServernew QTcpServer(this);connect(tcpServer,SIGNAL(newConnection()),this,SLOT(onNewConnection())); void MainWindow::onNewConnection() {QTcpSocket *tcpSocket;//TCP通讯的Sockettcp…

陪丨玩丨系丨统前后端开发流程,APP小程序H5前后端源码交付支持二开!多人语音,开黑,线上线下两套操作可在一个系统完成!

100%全部源码出售 官网源码APP源码 管理系统源码 终身免费售后 产品免费更新 产品更新频率高 让您时刻立足于行业前沿 软件开发流程步骤及其作用: 软件开发是一个复杂而系统的过程,涉及多个环节,以下是软件开发的主要流程步骤及其作用…

MySQL 服务器权限与对象权限

MySQL服务器权限(全局权限)和对象权限(数据库权限和表权限)是MySQL权限体系中的两个重要组成部分,它们共同构成了MySQL的安全管理机制。 服务器权限(全局权限) 服务器权限,也称为全…

leetCode60. 排列序列

leetCode60. 排列序列 方法一:语法版,面试官不认可的方法:next_permutation函数 // 方法一:使用next_permutation函数,将某容器设置为当前按照字典序 // 的下一个全排列的内容 class Solution { public:string getPermutation(in…

SystemUI KeyButtonView setDarkIntensity 解析

继承自 ImageView KeyButtonDrawable intensity为0时按键颜色为白色。 intensity为1时黑色为的调用堆栈: java.lang.NullPointerException: Attempt to invoke virtual method int java.lang.String.length() on a null object referenceat com.android.systemui.…

PostgreSQL的扩展(extensions)-常用的扩展之pgBackRest

PostgreSQL的扩展(extensions)-常用的扩展之pgBackRest pgBackRest 是一个高度灵活和功能丰富的备份和恢复解决方案,专为 PostgreSQL 数据库设计。pgBackRest 致力于简化备份和恢复流程,同时提供高级功能,如点对点恢复…

LLaMA-Factory参数的解答(命令,单卡,预训练)

前面这个写过,但觉得写的不是很好,这次是参考命令运行脚本,讲解各个参数含义。后续尽可能会更新,可以关注一下专栏!! *这是个人写的参数解读,我并非该领域的人如果那个大佬看到有参数解读不对或…

CARLA (I)--Ubuntu20.04 服务器安装 CARLA_0.9.13服务端和客户端详细步骤

目录 0. 说明0.1 应用场景:0.2 本文动机: 1. 准备工作2. 安装 CARLA 服务端软件【远程服务器】3. 安装 CARLA 客户端【远程服务器】3.1 .egg 文件安装:3.2 .whl 文件安装:3.3 从Pypi下载Python package 4. 运行服务端程序5. 运行客…

生成能够精确匹配原字符串的正则表达式

正则表达式匹配字符串 简介具体方案生成正则表达式的代码实现 简介 需求内容:需要将不同的公司名称归一化 比如namecheap, NAMECHEAP. INC. 等表示同一含义,但是表现形式不同 本文使用java语言实现了由一串字符串自动生成精确匹配的正则表达式的方式&am…

MATLAB初学者入门(14)—— 支持向量机

支持向量机(SVM)是一种强大的分类技术,用于解决分类和回归问题。它工作原理是找到最优的超平面,该超平面能够最大化不同类别数据点之间的边界。MATLAB提供了一个简单易用的工具箱,称为Statistics and Machine Learning…

Unity入门实践小项目

必备知识点 必备知识点——场景切换和游戏退出 必备知识点——鼠标隐藏锁定相关 必备知识点——随机数和Unity自带委托 必备知识点——模型资源的导入 实践项目 需求分析 UML类图 代码和资源导入 开始场景 场景装饰 拖入模型和添加脚本让场景动起来 开始界面 先用自己写的GUI…

Feign负载均衡

Feign负载均衡 概念总结 工程构建Feign通过接口的方法调用Rest服务(之前是Ribbon——RestTemplate) 概念 官网解释: http://projects.spring.io/spring-cloud/spring-cloud.html#spring-cloud-feign Feign是一个声明式WebService客户端。使用Feign能让…

2726641 - Failed to resolve Object Based Navigation target

服务和支持/知识库文章和注释/人事管理/人员发展/目标设置和评估 (PA-PD-PM) 2726641 - 未能解析基于对象的导航目标 SAP Knowledge Base Article, Version: 1, 审批日期: 30.11.2018 组件PA-PD-PM对象状态 优先级正常对象状态 类别问题对象状态 审批状态已发布至客户对象…

Java设计模式 _创建型模式_原型模式(Cloneable)

一、原型模式 1、原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能比较好。一般对付出较大代价获取到的实体对象进行克隆操作,可以提升性能。 2、实现思路: (1)、需要克隆的…

STM32、GD32等驱动AMG8833热成像传感器源码分享

一、AMG8833介绍 1简介 AMG8833是一种红外热像传感器,也被称为热感传感器。它可以用来检测和测量物体的热辐射,并将其转换为数字图像。AMG8833传感器可以感知的热源范围为-20C到100C,并能提供8x8的像素分辨率。它通过I2C接口与微控制器或单…

结构化查询语言(SQL)的作用

结构化查询语言(SQL)的作用 结构化查询语言(SQL)是一种专门用来管理关系型数据库的语言。它具有以下重要作用: 1. 数据库管理 SQL被广泛应用于数据库管理,包括创建数据库、表和视图,定义数据…