欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

詳解NVIDIA H100 TransformerEngine

jf_pmFSk4VX ? 來(lái)源:GiantPandaCV ? 作者:zzk ? 2022-10-24 15:26 ? 次閱讀

在H100發(fā)布之際,英偉達(dá)還帶來(lái)一個(gè)“重磅產(chǎn)品”——Transformer Engine。在Transformer大火之際推出這么一個(gè)產(chǎn)品,無(wú)疑是煉丹師福音。

當(dāng)時(shí)我還在猜測(cè)它會(huì)以怎么樣的一種形式呈現(xiàn)給用戶,直到最近公開了倉(cāng)庫(kù) NVIDIA/TransformerEngine

這其實(shí)就是PyTorch的一個(gè)拓展,為了利用FP8的特性,針對(duì)Transformer里面的Kernel進(jìn)行了重寫,包含了一系列LayerNorm, GeLU, ScaledSoftmax等。

使用方式也是比較簡(jiǎn)單,使用該拓展額外包的一層Module來(lái)搭建網(wǎng)絡(luò),即可,最后再包一層混合精度訓(xùn)練作用域:

importtorch
importtransformer_engine.pytorchaste
fromtransformer_engine.commonimportrecipe

#Setdimensions.
in_features=768
out_features=3072
hidden_size=2048

#Initializemodelandinputs.
model=te.Linear(in_features,out_features,use_bias=True)
inp=torch.randn(hidden_size,in_features,device="cuda")

#創(chuàng)建FP8訓(xùn)練的配置
fp8_recipe=recipe.DelayedScaling(margin=0,interval=1,fp8_format=recipe.Format.E4M3)

#FP8的autocast
withte.fp8_autocast(enabled=True,fp8_recipe=fp8_recipe):
out=model(inp)

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

本篇博客就簡(jiǎn)單介紹下Transformer Engine及其對(duì)應(yīng)實(shí)現(xiàn)原理

官方文檔:https://docs.nvidia.com/deeplearning/transformer-engine/user-guide/index.html

Transfromer Engine 是干啥的?

在各種以Transformer為基礎(chǔ)的語(yǔ)言模型如GPT3大火后,語(yǔ)言模型的參數(shù)量還在以指數(shù)形式增長(zhǎng):

278b1910-51a7-11ed-a3b6-dac502259ad0.png

那么優(yōu)化Transformer性能就顯得格外重要了,其中混合精度訓(xùn)練是一個(gè)很實(shí)用的技巧

在FP16下,其數(shù)據(jù)范圍還是足夠大的,因此在AMP下,我們只在最后的Loss做了一個(gè)scaling,這個(gè)步驟足以保證在整個(gè)模型運(yùn)算過(guò)程中不會(huì)產(chǎn)生溢出

而FP8相比FP16減少了更多有效位,因此不能簡(jiǎn)單地復(fù)用FP16下的策略,需要給每個(gè)FP8 Tensor單獨(dú)設(shè)置一個(gè)合適的scale factor。Transformer Engine 需要?jiǎng)討B(tài)地對(duì)輸入范圍進(jìn)行調(diào)整,如圖所示:

27a042e0-51a7-11ed-a3b6-dac502259ad0.png

上圖來(lái)自H100白皮書內(nèi)(當(dāng)時(shí)我還天真的以為有一個(gè)專門的硬件做這個(gè)處理。。。)

下面我們簡(jiǎn)單看下其代碼和實(shí)現(xiàn)原理

Kernel實(shí)現(xiàn)

27c18cfc-51a7-11ed-a3b6-dac502259ad0.png

具體到每一個(gè)算子實(shí)現(xiàn)動(dòng)態(tài)范圍調(diào)整的原理其實(shí)很簡(jiǎn)單,通過(guò)記錄歷史的abs max值,來(lái)去調(diào)整最終縮放的范圍。

其主要的Kernel實(shí)現(xiàn)都放在了 common 目錄下,我們以gelu這個(gè)kernel為例,最終它會(huì)調(diào)用到 vectorized_pointwise.h這個(gè)文件,我們主要看 unary_kernel

unary_kernel

這個(gè)核函數(shù)模板跟常規(guī)的elementwise向量化模板是類似的。

首先會(huì)讓每個(gè)線程獲取到scale值

ComputeTypes=0;
ifconstexpr(is_fp8::value){
//獲取scale值
if(scale!=nullptr)s=*scale;
//將scale取倒數(shù)寫回scale_inv
if(blockIdx.x==0&&threadIdx.x==0&&scale_inv!=nullptr){
reciprocal(scale_inv,s);
}
}

其中在循環(huán)里,線程會(huì)不斷更新他運(yùn)算結(jié)果的最大值,并且最終運(yùn)算結(jié)果要乘上scale值:

//實(shí)際運(yùn)算發(fā)生
ComputeTypetemp=OP(val,p);
ifconstexpr(is_fp8::value){
__builtin_assume(max>=0);
max=fmaxf(fabsf(temp),max);

//縮放
temp=temp*s;
}

當(dāng)Kernel主體運(yùn)算完畢后,再也warp為單位做一個(gè)reduce_max,獲取到線程束內(nèi)的最大值,再通過(guò)atomicMax原子操作,不斷更新全局最大值:

ifconstexpr(is_fp8::value){
/*warptileamaxreduce*/
max=reduce_max(max,warp_id);

if(threadIdx.x==0&&amax!=nullptr){
static_assert(std::is_same::value);
//更新全局最大值
atomicMaxFloat(amax,max);
}
}

其他layernorm等Kernel也是諸如類似的邏輯,這里就不再展開了

Python API

(1) DelayedScaling

從前面的示例代碼我們可以看到一個(gè)比較重要的API是DelayedScaling,我們可以根據(jù)官方文檔查看各個(gè)參數(shù)含義:

margin 計(jì)算scale的偏移量

interval 控制計(jì)算scale factor的頻率

fp8_format 使用FP8的格式,F(xiàn)P8有E4M3和E5M2,但是現(xiàn)在不支持純E5M2的格式訓(xùn)練

amax_history_len 記錄abs maxval的歷史窗口大小

amax_compute_algo 在窗口里選擇absmax的算法,'max'則是選擇歷史窗口里最大值,'most_recent'則是選擇近期的值,當(dāng)然你也可以傳一個(gè)自定義的函數(shù)

相關(guān)代碼為:

@torch.jit.script
def_default_get_amax(
amax_history:torch.Tensor,
amax_compute_algo:str,
)->Tuple[torch.Tensor,torch.Tensor]:
"""Defaultfunctiontoobtainamaxfromhistory."""
ifamax_compute_algo=="max":
amax=torch.max(amax_history,dim=0).values
else:#amax_compute_algo=="most_recent"
amax=amax_history[0]

amax_history=update_amax_history(amax_history)
returnamax_history,amax

scaling_factor_compute_algo 計(jì)算scale factor的算法

@torch.jit.script
def_default_sf_compute(
amax:torch.Tensor,
scale:torch.Tensor,
fp8_max:float,
margin:int,
)->torch.Tensor:
"""Defaultfunctiontoconvertamaxtoscalingfactor."""
exp=torch.floor(torch.log2(fp8_max/amax))-margin
sf=torch.round(torch.pow(2,torch.abs(exp)))
sf=torch.where(amax>0.0,sf,scale)
sf=torch.where(torch.isfinite(amax),sf,scale)
sf=torch.where(exp

override_linear_precision 由3個(gè)bool值,分別控制fprop前向,dgrad,wgrad三個(gè)矩陣乘是否用更高的精度來(lái)計(jì)算,默認(rèn)都為False

(2) TransformerEngineBaseModule

相關(guān)的Kernel除了要完成自己的計(jì)算任務(wù),也得實(shí)時(shí)維護(hù)amax這些值,因此也需要對(duì)應(yīng)修改nn.Module,這里TransformerEngine繼承了nn.Module,并且增加了一些buffer維護(hù)的機(jī)制,這些buffer用于存儲(chǔ)動(dòng)態(tài)scale的信息

classTransformerEngineBaseModule(torch.nn.Module,ABC):
def__init__(self)->None:
...
self.fp8=False
self.fp8_meta={}
self.fp8_meta["fp8_group"]=None
self.fp8_meta["recipe"]=get_default_fp8_recipe()
deffp8_init(self,num_gemms:int=1)->None:
"""Initializefp8relatedmetadataandtensorsduringfprop."""
#Iffp8isn'tenabled,turnoffandreturn.
ifnotis_fp8_enabled():
self.fp8=False
return

#FP8isalreadyenabledandrecipeisthesame,don'tdoanything.
ifself.fp8andget_fp8_recipe()==self.fp8_meta["recipe"]:
return

#SetFP8,recipe,andotherFP8metadata
self.fp8=True
self.fp8_meta["recipe"]=get_fp8_recipe()
self.fp8_meta["num_gemms"]=num_gemms
self.fp8_meta["fp8_group"]=get_fp8_group()

#SetFP8_MAXpertensoraccordingtorecipe
self.fp8_meta["fp8_max_fwd"]=self.fp8_meta["recipe"].fp8_format.value.max_fwd
self.fp8_meta["fp8_max_bwd"]=self.fp8_meta["recipe"].fp8_format.value.max_bwd

#Allocatescalesandamaxes
self.init_fp8_meta_tensors()

而相關(guān)Module如LayerNormMLP繼承該Module,并且傳入fp8_meta信息更新:

classLayerNormMLP(TransformerEngineBaseModule):

defforward(...):
out=_LayerNormMLP.apply(
...,
self.fp8,
self.fp8_meta,
)

總結(jié)

大致瀏覽完其實(shí)思路不復(fù)雜,但感覺還是FP8技術(shù)的不穩(wěn)定,整個(gè)項(xiàng)目還是加入了很多限制。得益于PyTorch靈活的外部擴(kuò)展形式,只要不去觸碰框架底層運(yùn)行機(jī)制,僅僅在算子層面上的修改還是相當(dāng)簡(jiǎn)單。雖然不具備通用性,但是運(yùn)算主體就這幾個(gè)算子,為了性能也是可以接受的

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • NVIDIA
    +關(guān)注

    關(guān)注

    14

    文章

    5080

    瀏覽量

    103826
  • 英偉達(dá)
    +關(guān)注

    關(guān)注

    22

    文章

    3854

    瀏覽量

    92076
  • Transformer
    +關(guān)注

    關(guān)注

    0

    文章

    146

    瀏覽量

    6056
  • pytorch
    +關(guān)注

    關(guān)注

    2

    文章

    808

    瀏覽量

    13378
  • H100
    +關(guān)注

    關(guān)注

    0

    文章

    32

    瀏覽量

    311

原文標(biāo)題:詳解 NVIDIA H100 TransformerEngine

文章出處:【微信號(hào):GiantPandaCV,微信公眾號(hào):GiantPandaCV】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    英偉達(dá)a100h100哪個(gè)強(qiáng)?英偉達(dá)A100H100的區(qū)別

    英偉達(dá)a100h100哪個(gè)強(qiáng)? 就A100H100這兩個(gè)產(chǎn)品來(lái)說(shuō),它們雖然都是英偉達(dá)公司的高性能計(jì)算產(chǎn)品,但是面向的市場(chǎng)和應(yīng)用場(chǎng)景不同,所以不能簡(jiǎn)單地說(shuō)哪個(gè)更強(qiáng)。
    的頭像 發(fā)表于 08-09 17:31 ?4.8w次閱讀

    NVIDIA發(fā)布新一代產(chǎn)品—NVIDIA H100

    NVIDIA發(fā)布新一代產(chǎn)品—NVIDIA H100H100是一款超大的芯片,采用TSMC 4N工藝,具有800億個(gè)晶體管,也是首款采用HBM3標(biāo)準(zhǔn)的GPU。
    的頭像 發(fā)表于 03-23 17:21 ?2943次閱讀
    <b class='flag-5'>NVIDIA</b>發(fā)布新一代產(chǎn)品—<b class='flag-5'>NVIDIA</b> <b class='flag-5'>H100</b>

    GTC2022大會(huì)黃仁勛:NVIDIA H100的5項(xiàng)突破性創(chuàng)新

    GTC2022大會(huì)黃仁勛:NVIDIA H100的5項(xiàng)突破性創(chuàng)新,擁有強(qiáng)大的性能,新的Tensor處理格式:FP8等,是首個(gè)實(shí)現(xiàn)性能擴(kuò)展至700瓦的GPU。
    的頭像 發(fā)表于 03-23 17:37 ?2372次閱讀
    GTC2022大會(huì)黃仁勛:<b class='flag-5'>NVIDIA</b> <b class='flag-5'>H100</b>的5項(xiàng)突破性創(chuàng)新

    GTC2022大會(huì)亮點(diǎn):NVIDIA發(fā)布全新AI計(jì)算系統(tǒng)—DGX H100

    GTC2022大會(huì)亮點(diǎn):NVIDIA發(fā)布全新AI計(jì)算系統(tǒng)—DGX H100,借助NVLink連接,DGX使八塊H100成為了一個(gè)巨型GPU。
    的頭像 發(fā)表于 03-24 15:06 ?1969次閱讀
    GTC2022大會(huì)亮點(diǎn):<b class='flag-5'>NVIDIA</b>發(fā)布全新AI計(jì)算系統(tǒng)—DGX <b class='flag-5'>H100</b>

    NVIDIA發(fā)布DGX H100系統(tǒng) 羅德與施瓦茨提供O-RAN無(wú)線電單元方案

    NVIDIA 近日宣布推出第四代 NVIDIA? DGX? 系統(tǒng),這是世界上第一個(gè)使用全新NVIDIA H100 Tensor Core GPU 構(gòu)建的 AI 平臺(tái)。
    的頭像 發(fā)表于 03-25 11:44 ?4992次閱讀

    NVIDIA發(fā)布最新Hopper架構(gòu)的H100系列GPU和Grace CPU超級(jí)芯片

    今日凌晨,NVIDIA(英偉達(dá))發(fā)布了基于最新Hopper架構(gòu)的H100系列GPU和Grace CPU超級(jí)芯片!
    的頭像 發(fā)表于 03-26 09:07 ?2967次閱讀

    藍(lán)海大腦服務(wù)器全力支持NVIDIA H100 GPU

    藍(lán)海大腦宣布服務(wù)器產(chǎn)品線全力支持最新的 NVIDIA H100 GPU。藍(lán)海大腦服務(wù)器產(chǎn)品在單機(jī)上最多可支持4、8甚至9個(gè)H100 GPU,可為多種人工智能場(chǎng)景提供超強(qiáng)算力、靈活的資源調(diào)度和成熟的生態(tài)支持。
    的頭像 發(fā)表于 03-31 11:47 ?1392次閱讀

    NVIDIA H100 CNX構(gòu)建人工智能系統(tǒng)

      NVIDIA H100 CNX 預(yù)計(jì)可在今年下半年購(gòu)買。如果你有一個(gè)用例可以從這個(gè)獨(dú)特而創(chuàng)新的產(chǎn)品中受益,請(qǐng)聯(lián)系你最喜歡的系統(tǒng)供應(yīng)商,詢問(wèn)他們計(jì)劃何時(shí)將其與服務(wù)器一起提供。
    的頭像 發(fā)表于 03-31 14:49 ?2093次閱讀
    用<b class='flag-5'>NVIDIA</b> <b class='flag-5'>H100</b> CNX構(gòu)建人工智能系統(tǒng)

    利用NVIDIA HGX H100加速計(jì)算數(shù)據(jù)中心平臺(tái)應(yīng)用

    HGX H100 8- GPU 是新一代 Hopper GPU 服務(wù)器的關(guān)鍵組成部分。它擁有八個(gè) H100 張量核 GPU 和四個(gè)第三代 NV 交換機(jī)。每個(gè) H100 GPU 都有多個(gè)第四代
    的頭像 發(fā)表于 04-20 10:54 ?2922次閱讀
    利用<b class='flag-5'>NVIDIA</b> HGX <b class='flag-5'>H100</b>加速計(jì)算數(shù)據(jù)中心平臺(tái)應(yīng)用

    關(guān)于NVIDIA H100 GPU的問(wèn)題解答

    今年的 GTC22 上 NVIDIA 發(fā)布其首款基于 Hopper 架構(gòu)的 GPU —NVIDIA H100。
    的頭像 發(fā)表于 07-18 10:35 ?1924次閱讀

    英偉達(dá)a100h100哪個(gè)強(qiáng)?

    英偉達(dá)a100h100哪個(gè)強(qiáng)? 英偉達(dá)A100H100更強(qiáng)。英偉達(dá)A100在處理大型模型和數(shù)據(jù)集時(shí)可能比V
    的頭像 發(fā)表于 08-07 17:32 ?1.6w次閱讀

    英偉達(dá)A100H100的區(qū)別

    英偉達(dá)A100H100的區(qū)別 英偉達(dá)A100H100是兩種不同的產(chǎn)品。A100是英偉達(dá)在2020年推出的一款基于Ampere架構(gòu)的數(shù)據(jù)中
    的頭像 發(fā)表于 08-07 18:06 ?3w次閱讀

    英偉達(dá)h800和h100的區(qū)別

    不足,反而更貴。 NVIDIA H100 的中國(guó)版本就是:NVIDIA H800。 ? ? ? ?H800的的帶寬僅為
    的頭像 發(fā)表于 08-08 16:06 ?4.9w次閱讀
    英偉達(dá)<b class='flag-5'>h</b>800和<b class='flag-5'>h100</b>的區(qū)別

    傳英偉達(dá)新AI芯片H20綜合算力比H100降80%

    但據(jù)悉,三種新型AI芯片不是“改良型”,而是“縮小型”。用于ai模型教育的hgx h20的帶寬和計(jì)算速度是有限的。整體計(jì)算能力理論上比nvidiah100 gpu芯片低80%左右。h
    的頭像 發(fā)表于 11-13 09:41 ?1965次閱讀

    揭秘:英偉達(dá)H100最強(qiáng)替代者

    目前,用于高端推理的 GPU 主要有三種:NVIDIA A100、NVIDIA H100 和新的 NVIDIA L40S。我們將跳過(guò)
    的頭像 發(fā)表于 11-13 16:13 ?1930次閱讀
    揭秘:英偉達(dá)<b class='flag-5'>H100</b>最強(qiáng)替代者