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:查看所有运行的容器及其状态,默认只展…

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源码 管理系统源码 终身免费售后 产品免费更新 产品更新频率高 让您时刻立足于行业前沿 软件开发流程步骤及其作用: 软件开发是一个复杂而系统的过程,涉及多个环节,以下是软件开发的主要流程步骤及其作用…

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.…

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. 运行客…

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接口与微控制器或单…

Linux多进程(五) 进程池 C++实现

一、进程池的概念 1.1、什么是进程池 进程池是一种并发编程模式,用于管理和重用多个处理任务的进程。它通常用于需要频繁创建和销毁进程的情况,以避免因此产生的开销。 进程池的优点包括: 减少进程创建销毁的开销:避免频繁创建和…

vue与Spring boot数据交互例子【简单版】

文章目录 什么是Vue?快速体验Vueaxios是什么?向Springboot后端发送数据接收Springboot后端数据小结 什么是Vue? 官网解释:Vue 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上…

(超全)python图像处理详细解析(3)

图像处理 23.保存视频每一帧图像24.把png图像转换成jpg并保存25.改变图像尺寸26.改变图像比例27.旋转图像28.亮度调整29.log对数调整30.判断图像对比度31.调整强度(1)强度调节(2)uint8转float 32.绘制直方图和均衡化33.彩色图片三…

FR-E840-0120-4-60 三菱变频器5.5KW型

FR-E840-0120-4-60 三菱变频器替换FR-E740-5.5K FR-E840用户手册,FR-E840-0120-4-60价格,FR-E840-5.5K价格,FR-E840-0120-4-60外部连接图,FR-E740-5.5K替换产品。 FR-E740-5.5K-CHT逐渐开始停产,现在用新型号FR-E840-0120-4-60替换。 FR-E840-0120-4-60参数说明&…

Grafana系列 | Grafana监控TDengine库数据 |Grafana自定义Dashboard

开始前可以去grafana官网看看dashboard文档 https://grafana.com/docs/grafana/latest/dashboards 本文主要是监控TDengine库数据 目录 一、TDengine介绍二、Grafana监控TDengine数据三、Grafana自定义Dashboard 监控TDengine库数据1、grafana 变量2、添加变量3、配置panel 一…

牛客NC406 最长山脉【中等 穷举,动态规划 C++/Java/Go/PHP】

题目 题目链接: https://www.nowcoder.com/practice/f4e974a50eda429fbf36515a4197b148 思路 参考答案C class Solution {public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*** param nums int整型vect…