TransformerEngine

news2024/11/24 23:10:00

文章目录

    • 一、关于 TransformerEngine ?
      • 亮点
    • 二、使用示例
      • PyTorch
      • JAX
        • Flax
    • 三、安装
      • 先决条件
      • Docker
      • pip
      • 从源码
      • 使用 FlashAttention-2 编译
    • 四、突破性的变化
      • v1.7: Padding mask definition for PyTorch
    • 五、FP8 收敛
    • 六、集成
    • 七、其它
      • 贡献
      • 论文
      • 视频
      • 最新消息


一、关于 TransformerEngine ?

  • github : https://github.com/NVIDIA/TransformerEngine
  • 官方文档:https://docs.nvidia.com/deeplearning/transformer-engine/user-guide/index.html
  • 示例:https://github.com/NVIDIA/TransformerEngine/tree/main/examples
  • 版本发行说明:https://docs.nvidia.com/deeplearning/transformer-engine/release-notes/index.html

TransformerEngine (TE)是一个库,用于在NVIDIA GPU上加速 Transformer models ,包括在Hopper GPU上使用8位浮点(FP8)精度,以在训练和推理中以较低的记忆利用率提供更好的性能。
TE为流行的 Transformer 架构提供了一组高度优化的构建块,以及一个自动混合精度类API,可以与您的框架特定代码无缝使用。
TE还包括一个与框架无关的C++API,可以与其他深度学习库集成,以启用FP8对 Transformer 的支持。

随着 Transformer models 中参数数量的不断增长,BERT、GPT和T5等架构的训练和推理变得非常记忆和计算密集型。
大多数深度学习框架默认使用FP32进行训练。
然而,要实现许多深度学习模型的全精度,这并不是必不可少的。
在训练模型时,使用混合精度训练(将单精度(FP32)与较低精度(例如FP16)格式相结合),与FP32训练相比,在精度差异最小的情况下,可以显著提高速度。
通过Hopper GPU架构,引入了FP8精度,它提供了优于FP16的性能,而精度没有下降。
尽管所有主要的深度学习框架都支持FP16,但FP8支持在当今的框架中并不存在。

TE通过提供与流行的大型语言模型(LLM)库集成的API来解决FP8支持问题。
它提供了一个由模块组成的Python应用编程接口,可以轻松构建转换器层,以及一个与框架无关的库,C++包括FP8支持所需的结构和内核。
TE内部提供的模块维护了FP8训练所需的缩放因子和其他值,极大地简化了用户的混合精度训练。


亮点

  • 易于使用的模块,用于构建支持FP8的 Transformer 层
  • Transformer models 的优化(例如融合内核)
  • 在 NVIDIA Hopper 和 NVIDIA Ada GPU 上支持FP8
  • 支持 NVIDIA Ampere GPU 架构代及更高版本上所有精度(FP16、BF16)的优化

二、使用示例


PyTorch

import torch
import transformer_engine.pytorch as te
from transformer_engine.common import recipe

# Set dimensions.
in_features = 768
out_features = 3072
hidden_size = 2048

# Initialize model and inputs.
model = te.Linear(in_features, out_features, bias=True)
inp = torch.randn(hidden_size, in_features, device="cuda")

# Create an FP8 recipe. Note: All input args are optional.
fp8_recipe = recipe.DelayedScaling(margin=0, fp8_format=recipe.Format.E4M3)

# Enable autocasting for the forward pass
with te.fp8_autocast(enabled=True, fp8_recipe=fp8_recipe):
    out = model(inp)

loss = out.sum()
loss.backward()

JAX


Flax
import flax
import jax
import jax.numpy as jnp
import transformer_engine.jax as te
import transformer_engine.jax.flax as te_flax
from transformer_engine.common import recipe

BATCH = 32
SEQLEN = 128
HIDDEN = 1024

# Initialize RNG and inputs.
rng = jax.random.PRNGKey(0)
init_rng, data_rng = jax.random.split(rng)
inp = jax.random.normal(data_rng, [BATCH, SEQLEN, HIDDEN], jnp.float32)

# Create an FP8 recipe. Note: All input args are optional.
fp8_recipe = recipe.DelayedScaling(margin=0, fp8_format=recipe.Format.HYBRID)

# Enable autocasting for the forward pass
with te.fp8_autocast(enabled=True, fp8_recipe=fp8_recipe):
    model = te_flax.DenseGeneral(features=HIDDEN)

    def loss_fn(params, other_vars, inp):
      out = model.apply({'params':params, **other_vars}, inp)
      return jnp.mean(out)

    # Initialize models.
    variables = model.init(init_rng, inp)
    other_variables, params = flax.core.pop(variables, 'params')

    # Construct the forward and backward function
    fwd_bwd_fn = jax.value_and_grad(loss_fn, argnums=(0, 1))

    for _ in range(10):
      loss, (param_grads, other_grads) = fwd_bwd_fn(params, other_variables, inp)

三、安装


先决条件

  • Linuxx86_64
  • 用于 Hopper 的 CUDA 11.8+ 和用于 Ada的CUDA 12.1+
  • 支持 CUDA 11.8 或更高版本的NVIDIA驱动程序
  • cuDNN 8.1或更高版本
  • 对于融合注意力,CUDA 12.1 或更高版本,NVIDIA驱动程序支持 CUDA 12.1 或更高版本,以及 cuDNN 8.9 或更高版本。

Docker

开始使用 TransformerEngine 的最快方法是使用Docker图像 NVIDIA GPU云(NGC)目录。
例如要交互使用NGC PyTorch容器,

docker run --gpus all -it --rm nvcr.io/nvidia/pytorch:23.10-py3

其中23.10是容器版本。例如,2023年10月发布的23.10。


pip

要安装最新稳定版本的Transform Engine,

pip install git+https://github.com/NVIDIA/TransformerEngine.git@stable

这将自动检测是否安装了任何受支持的深度学习框架,并为它们构建 TransformerEngine 支持。
要显式指定框架,请将环境变量NVTE_FRAMEWORK设置为逗号分隔的列表(例如 NVTE_FRAMEWORK=jax,pytorch)。


从源码

请参阅 安装指南。


使用 FlashAttention-2 编译

Transform Engine 版本 v0.11.0 在PyTorch中增加了对 FlashAttention-2 的支持,以提高性能。

已知问题是 FlashAttention-2 编译是资源密集型的,并且需要大量RAM(参见bug),这可能会导致Transform Engine安装过程中出现内存溢出错误。
请尝试在环境中设置 **MAX_JOBS=1**以规避该问题。

请注意,NGC PyTorch 23.08+ 容器包括 FlashAttention-2。


四、突破性的变化


v1.7: Padding mask definition for PyTorch

为了统一Transform Engine中所有三个框架中注意力掩码的定义和使用,填充掩码已从True含义包含注意力中的相应位置更改为在我们的PyTorch实现中排除该位置。
从v1.7开始,所有注意力掩码类型都遵循相同的定义,其中True表示屏蔽相应位置,False表示在注意力计算中包括该位置。

这种变化的一个例子是,

# for a batch of 3 sequences where `a`s, `b`s and `c`s are the useful tokens
# and `0`s are the padding tokens,
[a, a, a, 0, 0,
 b, b, 0, 0, 0,
 c, c, c, c, 0]
# the padding mask for this batch before v1.7 is,
[ True,  True,  True, False, False,
  True,  True, False, False, False,
  True,  True,  True,  True, False]
# and for v1.7 onwards it should be,
[False, False, False,  True,  True,
 False, False,  True,  True,  True,
 False, False, False, False,  True]

五、FP8 收敛

FP8 已经在不同的模型架构和配置中进行了广泛的测试,我们发现FP8和BF16训练损失曲线之间没有显著差异。
FP8 还在目标端LLM任务(例如LAMBADA和WikiText)上进行了精度验证。
以下是在不同框架中测试模型收敛的示例。

模型框架来源
T5-770MJAX/T5xhttps://github.com/NVIDIA/JAX-Toolbox/tree/main/rosetta/rosetta/projects/t5x#convergence-and-performance
MPT-1.3BMosaic Composerhttps://www.mosaicml.com/blog/coreweave-nvidia-h100-part-1
GPT-5BJAX/Paxmlhttps://github.com/NVIDIA/JAX-Toolbox/tree/main/rosetta/rosetta/projects/pax#h100-results
GPT-5BNeMo框架可应要求提供
LLama2-7BAlibaba Paihttps://mp.weixin.qq.com/s/NQT0uKXLbXyh5031zBdeBQ
T5-11BJAX/T5x可应要求提供
MPT-13BMosaic Composerhttps://www.databricks.com/blog/turbocharged-training-optimizing-databricks-mosaic-ai-stack-fp8
GPT-22BNeMo框架可应要求提供
LLama2-70BAlibaba Paihttps://mp.weixin.qq.com/s/NQT0uKXLbXyh5031zBdeBQ
GPT-175BJAX/Paxmlhttps://github.com/NVIDIA/JAX-Toolbox/tree/main/rosetta/rosetta/projects/pax#h100-results

六、集成

Transform Engine已与流行的LLM框架集成,例如:

  • DeepSpeed
  • Hugging Face Accelerate
  • Lightning
  • MosaicML Composer
  • NVIDIA JAX Toolbox
  • NVIDIA Megatron-LM
  • NVIDIA NeMo Framework
  • Amazon SageMaker Model Parallel Library
  • Levanter
  • Hugging Face Nanotron - Coming soon!
  • Colossal-AI - Coming soon!
  • PeriFlow - Coming soon!
  • GPT-NeoX - Coming soon!

七、其它

贡献

我们欢迎对 TransformerEngine 的贡献!要为 TransformerEngine 做出贡献并提出拉取请求, 遵循CONTRIBUTING. rst指南中概述的指南。


论文

  • Attention original paper
  • Megatron-LM tensor parallel
  • Megatron-LM sequence parallel
  • FP8 Formats for Deep Learning

视频

  • TransformerEngine 和FP8 训练的新功能 | GTC 2024
  • 使用 TransformerEngine 进行FP8训练 | GTC 2023
  • 用于深度学习的FP8 | GTC 2023
  • Hopper 架构内部


最新消息

  • [03/2024]涡轮增压训练:使用FP8优化Database ricks Mosaic AI堆栈
  • [03/2024]SageMaker模型并行库中的FP8训练支持
  • [12/2023]新的NVIDIA NeMo框架功能和NVIDIA H200

H200

  • [11/2023]拐点2:下一步
  • [11/2023]利用NVIDIA TransformerEngine 释放 Transformer 的力量
  • [11/2023]使用FP8加速PyTorch训练工作负载
  • [09/2023] TransformerEngine 添加到AWS DL容器中用于PyTorch培训
  • [06/2023]使用NVIDIA H100 GPU打破MLPerf训练记录
  • [04/2023]使用CoreWeave在NVIDIA H100 GPU上对大型语言模型进行基准测试(第1部分)

2024-07-26(五)

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

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

相关文章

美团大众点评字符验证码

声明(lianxi a15018601872) 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 前言(…

为什么优秀员工往往最先离职?

在企业管理中有很多误区,令企业流失优秀员工和人才,根据优思学院过往的经验,大致可以分为以下几个情况。 1. 忽视帕累托法则(80/20法则) 帕累托法则(80/20法则)是六西格玛管理的基本原则&…

好的STEM编程语言有哪些?

STEM是科学(Science),技术(Technology),工程(Engineering),数学(Mathematics)四门学科英文首字母的缩写,STEM教育简单来说就是在通过在…

django_创建菜单(实现整个项目的框架,调包)

文章目录 前言代码仓库地址在线演示网址启动网站的时候出现错误渲染路径的一些说明文件结构网页显示一条错误路由顺序js打包出现问题的代码函数没有起作用关于进度开发细节显示不了图片梳理一下函数调用的流程修改一些宽度参数classjs 里面的一些细节让三个按钮可以点击设置按钮…

前端JS特效第56集:基于canvas的粒子文字动画特效

基于canvas的粒子文字动画特效&#xff0c;先来看看效果&#xff1a; 部分核心的代码如下(全部代码在文章末尾)&#xff1a; <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compat…

GPT-4O 的实时语音对话功能在处理多语言客户时有哪些优势?

最强AI视频生成&#xff1a;小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频百万播放量 我瞄了一眼OpenAI春季发布会&#xff0c;这个发布会只有26分钟&#xff0c;你可以说它是一部科幻短片&#xff0c;也可以说它过于“夸夸其谈”&#xff01;关于…

5个工具帮助你轻松将PDF转换成WORD

有时候编辑PDF文件确实不如编辑word文档方便&#xff0c;很多人便会选择先转换再编辑。但是如果还有人不知道要怎么将PDF文件转换成word文档的话&#xff0c;可以看一下这5款工具&#xff0c;各种类型的都有&#xff0c;总有一款可以帮助到你。 &#xff11;、福昕PDF转换软件 …

socket实现全双工通信,多个客户端接入服务器端

socket实现全双工通信 客户端&#xff1a; #define IP "192.168.127.80" //服务器IP地址 #define PORT 7266 // 服务器端口号int main(int argc, const char *argv[]) {//1.创建套接字&#xff1a;用于接收客户端链接请求int sockf…

MSQP Mysql数据库权限提升工具,UDF自动检测+快速反向SHELL

项目地址:https://github.com/MartinxMax/MSQP MSQP 这是一个关于Mysql的权限提升工具 安装依赖 $ python3 -m pip install mysql-connector-python 使用方法 $ python3 msqp.py -h 权限提升:建立反向Shell 在建立反向连接前,该工具会自动检测是否具有提权条件&#xff0…

4-4 数值稳定性 + 模型初始化和激活函数

数值稳定性 这里的 t t t表示层&#xff0c;假设 h t − 1 h^{t-1} ht−1是第 t − 1 t-1 t−1层隐藏层的输出&#xff0c;经过一个 f t f_{t} ft​得到第 t t t层隐藏层的输出 h t h^{t} ht。 y y y表示 x x x进来&#xff0c;第一层一直到第 d d d层&#xff0c;最后到一个损…

2024最新网络安全自学路线,内容涵盖3-5年技能提升

01 什么是网络安全 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域&#xff0c;都有攻与防两面…

NC 二叉树的最大深度

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 描述 求给定二叉树…

图像数据增强方法概述

图像数据增强方法概述 1. 什么是图像数据增强技术?2. 图像数据增强技术分类2.1 几何变换Python 示例代码 2.2 颜色变换2.3 噪声添加 3. 参考文献 1. 什么是图像数据增强技术? 基础概念&#xff1a;图像增强技术是计算机视觉和图像处理领域中的一个关键技术&#xff0c;主要用…

数据库安全综合治理方案(可编辑54页PPT)

引言&#xff1a;数据库安全综合治理方案是一个系统性的工作&#xff0c;需要从多个方面入手&#xff0c;综合运用各种技术和管理手段&#xff0c;确保数据库系统的安全稳定运行。 方案介绍&#xff1a; 数据库安全综合治理方案是一个综合性的策略&#xff0c;旨在确保数据库系…

C++文件系统操作6 - 跨平台实现查找指定文件夹下的特定文件

1. 关键词 C 文件系统操作 查找指定文件夹下的特定文件 跨平台 2. fileutil.h #pragma once#include <string> #include <cstdio> #include <cstdint> #include "filetype.h" #include "filepath.h"namespace cutl {/*** brief The fi…

前端练习<HtmlCSS>——照片墙(附完整代码及实现效果)

这个小练习也来源于b站up小K师兄&#xff0c;大家可以通过下面的链接学习哦~up讲的非常详细。 纯CSS写一个简单酷炫的照片墙效果&#xff5e; 先看一下这个照片墙的效果&#xff1a; 1.鼠标没有放到图片上时&#xff0c;照片同比例&#xff0c;每张照片都有倒影的效果。 2.然…

linux怎么创建python

第一步&#xff0c;创建一个test文件夹。 第二步&#xff0c;打开终端进入该文件。 第三步&#xff0c;vim test.py。 第四步&#xff0c;编写代码。 第五步&#xff0c;编辑好之后&#xff0c;按Esc键切换到命令模式&#xff0c;然后输入:wq&#xff0c;再按回车键即可自动保存…

聊一聊知识图谱结合RAG

因为最近在做一些关于提高公司内部使用的聊天机器人的回答准确率&#xff0c;并且最近微软官方也是开源了一下graphrag的源码&#xff0c;所以想聊一聊这个知识图谱结合rag。 rag在利用私有数据增强大模型回答的领域是一种比较典型的技术&#xff0c;也就是我们提出问题的时候&…

MATLAB基础:数组及其数学运算

今天我们继续学习MATLAB中的数组 我们在学习MATLAB时了解到&#xff0c;MATLAB作者秉持着“万物皆可矩阵”的思想企图将数学甚至世间万物使用矩阵表示出来&#xff0c;而矩阵的处理&#xff0c;自然成了这门语言的重中之重。 数组基础 在MATLAB中&#xff0c;数组是一个基本…

LCD 横屏切换为竖屏-I.MX6U嵌入式Linux C应用编程学习笔记基于正点原子阿尔法开发板

LCD 横屏切换为竖屏 横屏显示如何切换为竖屏显示 LCD 屏默认横屏显示 开发板配套的 LCD 屏默认都是横屏显示&#xff0c;如 4.3 寸、7 寸和 10.1 寸的不同分辨率的 RGB LCD 屏 固定坐标体系 &#xff08;以 800*480 分辨率为例&#xff09;横屏模式下的固定坐标&#xff1a;…