日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

基于OpenSeq2Seq的NLP与语音识别混合精度训练

發(fā)布時(shí)間:2023/11/28 生活经验 62 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于OpenSeq2Seq的NLP与语音识别混合精度训练 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

基于OpenSeq2Seq的NLP與語音識別混合精度訓(xùn)練

Mixed Precision Training for NLP and Speech Recognition with
OpenSeq2Seq

迄今為止,神經(jīng)網(wǎng)絡(luò)的成功建立在更大的數(shù)據(jù)集、更好的理論模型和縮短的訓(xùn)練時(shí)間上。特別是順序模型,可以從中受益更多。為此,我們創(chuàng)建了OpenSeq2Seq——一個(gè)開源的、基于TensorFlow的工具包。OpenSeq2Seq支持一系列現(xiàn)成的模型,其特點(diǎn)是多GPU和混合精度訓(xùn)練,與其他開源框架相比,大大縮短了訓(xùn)練時(shí)間。機(jī)器翻譯和語音識別任務(wù)的基準(zhǔn)測試表明,根據(jù)模型和訓(xùn)練超參數(shù),使用OpenSeq2Seq構(gòu)建的模型在1.5-3倍更快的訓(xùn)練時(shí)間下提供最新的性能。

OpenSeq2Seq包含了大量的對話式人工智能示例,這些示例都經(jīng)過了混合FP16/FP32精度的訓(xùn)練:

·
Natural Language Translation: GNMT, Transformer, ConvS2S

·
Speech Recognition: Wave2Letter, DeepSpeech2

·
Speech Synthesis: Tacotron 2

·
Language Modeling and transfer learning for NLP tasks

Overview of OpenSeq2Seq

自2014年引入序列到序列范式(Cho等人,2014[1])以來,其受歡迎程度持續(xù)增長。序列到序列模型通常由編碼器和解碼器組成,可用于各種任務(wù)。規(guī)范的序列到序列模型對于編碼器和解碼器都有RNN,并且適用于機(jī)器翻譯、文本摘要和對話框系統(tǒng)等任務(wù),如圖1所示。然而,序列模型也可以用于其他任務(wù)。例如,用于解決情感分析任務(wù)的神經(jīng)網(wǎng)絡(luò)可以由RNN編碼器和softmax線性解碼器組成。圖像分類任務(wù)可能需要卷積編碼器和softmax線性解碼器。甚至編碼器和解碼器的數(shù)量也可以改變。例如,將英語翻譯為多種語言的模型可能有一個(gè)編碼器和多個(gè)解碼器。

Figure 1: Sequence-to-sequence model for a dialog system

已經(jīng)有許多工具包使用序列到序列范式來構(gòu)造和訓(xùn)練模型來解決各種任務(wù)。一些最流行的包括Tensor2Tensor[2]、seq2seq[3]、OpenNMT[4]和fairseq[5]。前兩個(gè)基于TensorFlow,后兩個(gè)基于PyTorch。這些框架采用模塊化設(shè)計(jì),許多現(xiàn)成的模塊可以組裝成理想的模型,降低了想要使用順序到順序模型來解決問題的人的進(jìn)入壁壘,并有助于推動(dòng)人工智能研究和生產(chǎn)的進(jìn)展。

OpenSeq2Seq建立在這些現(xiàn)有框架的基礎(chǔ)上,具有額外的特性,以減少訓(xùn)練時(shí)間,使API更易于使用。我們之所以選擇使用TensorFlow,是因?yàn)門ensorFlow已經(jīng)成為應(yīng)用最廣泛的機(jī)器學(xué)習(xí)框架,并為機(jī)器學(xué)習(xí)模型的生產(chǎn)提供了一條巨大的管道。我們創(chuàng)建OpenSeq2Seq的目的如下:

模塊化架構(gòu),允許從可用組件輕松組裝新模型

支持混合精度訓(xùn)練[6],使用NVIDIA Volta GPUs中引入的張量核

快速,簡單易用,基于Horovod的分布式訓(xùn)練和數(shù)據(jù)并行,支持多GPU和多節(jié)點(diǎn)

Modular architecture

OpenSeq2Seq模型由Python配置文件描述,該文件定義要使用的數(shù)據(jù)讀取器、編碼器、解碼器、優(yōu)化器、損失函數(shù)、正則化、超參數(shù)的類型。例如,為機(jī)器翻譯創(chuàng)建GNMT[7]模型的配置文件可能如下所示:

base_params = {

“batch_size_per_gpu”: 32,

“optimizer”: “Adam”,

“l(fā)r_policy”: exp_decay,

“l(fā)r_policy_params”: {

"learning_rate": 0.0008,...

},

“encoder”: GNMTLikeEncoderWithEmbedding,

“encoder_params”: {

"core_cell": tf.nn.rnn_cell.LSTMCell,..."encoder_layers": 7,"src_emb_size": 1024,

},

“decoder”: RNNDecoderWithAttention,

“decoder_params”: {

"core_cell": tf.nn.rnn_cell.LSTMCell,

},

“l(fā)oss”: BasicSequenceLoss,

}

目前,OpenSeq2Seq使用配置文件為機(jī)器翻譯(GNMT、ConvS2S、Transformer)、語音識別(Deep speech 2、Wav2Letter)、語音合成(Tacotron 2)、圖像分類(ResNets、AlexNet)、語言建模和情感分析傳輸學(xué)習(xí)創(chuàng)建模型。它們存儲(chǔ)在example_configs文件夾中。您可以使用工具箱中提供的模塊創(chuàng)建一個(gè)新的模型配置,其中包含TensorFlow中的基本知識。編寫新模塊或修改現(xiàn)有模塊以滿足您的特定需求也很簡單。

OpenSeq2Seq還提供了各種可以處理流行數(shù)據(jù)集的數(shù)據(jù)層,包括用于機(jī)器翻譯的WMT、用于語言建模的WikiText-103、用于語音識別的LibriSpeech、用于情緒分析的SST和IMDB、用于語音合成的LJ語音數(shù)據(jù)集等等。

Mixed-precision training

神經(jīng)網(wǎng)絡(luò)訓(xùn)練的速度取決于三個(gè)主要硬件因素:計(jì)算吞吐量、帶寬和GPU-DRAM大小。如今,大型神經(jīng)網(wǎng)絡(luò)擁有數(shù)千萬甚至數(shù)億個(gè)參數(shù)。它們需要大量的算術(shù)和內(nèi)存資源才能在合理的時(shí)間范圍內(nèi)進(jìn)行訓(xùn)練。加速訓(xùn)練需要現(xiàn)代的深度學(xué)習(xí)硬件來滿足這些不斷增長的資源需求。
Volta和Turing GPU上提供的張量核提供了訓(xùn)練大型神經(jīng)網(wǎng)絡(luò)所需的性能。它允許在單精度浮點(diǎn)(FP32)和半精度浮點(diǎn)(FP16)中進(jìn)行矩陣乘法,即神經(jīng)網(wǎng)絡(luò)訓(xùn)練和推理的核心操作,如圖2所示。為了訓(xùn)練,張量核心提供高達(dá)12倍的峰值TFLOPS相比,在P100的標(biāo)準(zhǔn)FP32操作。為了便于推斷,張量核提供了高達(dá)6倍的峰值TFLOPS,相比于P100上的標(biāo)準(zhǔn)FP16操作[8]。

Figure 2: Arithmetic is done in FP16 and accumulated in FP32

利用張量核的計(jì)算能力,需要使用混合精度算法訓(xùn)練模型。OpenSeq2Seq提供了一個(gè)簡單的接口。當(dāng)啟用混合精度訓(xùn)練時(shí),數(shù)學(xué)運(yùn)算在FP16中完成,但結(jié)果在FP32中累積,如圖3所示。結(jié)果在存儲(chǔ)到內(nèi)存之前被轉(zhuǎn)換成FP16。FP16提高了計(jì)算吞吐量,因?yàn)楫?dāng)前一代gpu為降低精度的數(shù)學(xué)運(yùn)算提供了更高的吞吐量。除了提高速度外,混合精度還減少了訓(xùn)練所需的內(nèi)存量。這允許用戶增加批次或模型的大小,進(jìn)而增加模型的學(xué)習(xí)能力并減少訓(xùn)練時(shí)間。

Figure 3: Mixed-precision training iteration for a layer

為了防止由于精度降低而造成的精度損失,使用了兩種技術(shù):

自動(dòng)縮放損失功能,防止梯度在反向傳播期間下溢和溢出。

維護(hù)一份FP32權(quán)重副本,以便在每個(gè)優(yōu)化器步驟之后累積梯度。

利用這些技術(shù),混合精度訓(xùn)練可以在不損失模型精度或修改超參數(shù)的情況下顯著加快訓(xùn)練時(shí)間。與僅使用FP32相比,在Volta GPU上使用混合精度時(shí),OpenSeq2Seq型號(如Transformer、ConvS2S和Wave2Letter)的端到端加速比為1.5-3倍。

要在OpenSeq2Seq中啟用混合精度訓(xùn)練,只需在配置文件中將model_params的dtype參數(shù)更改為“mixed”。您可能需要通過將model_params中的loss_scale參數(shù)設(shè)置為所需的數(shù)字,或者通過將loss_scaling參數(shù)設(shè)置為“Backoff”或“LogMax”來動(dòng)態(tài)啟用損耗縮放。您可能需要注意輸入和輸出的類型,以避免某些計(jì)算類型的不匹配類型。不需要修改體系結(jié)構(gòu)或超級參數(shù)。

base_params = { … “dtype”: “mixed”, # enabling static or dynamic loss scaling might improve model convergence # “l(fā)oss_scale”: 10.0, # “l(fā)oss_scaling”: “Backoff”, …}

Distributed training with Horovod

OpenSeq2Seq利用了兩種主要的分布式訓(xùn)練方法:

·
Parameter server-based approach (used in native TensorFlow towers)

o
§ Builds a separate graph for each GPU

§ Sometimes faster for 2 to 4 GPUs

MPI-based approach[9] (used
in Uber’s Horovod)

o Uses MPI and NVIDIA’s NCCL library to utilize NVLINK
between GPUs

o Significantly faster for 8 to 16 GPUs

o Fast multi-node training

要使用第一種方法,只需將配置參數(shù)num_gpus更新為要使用的gpu數(shù)量。

您需要安裝Horovod for GPU、MPI和NCCL才能使用Horovod(可以找到Horovod for GPU安裝的詳細(xì)說明)。之后,只需在配置文件中將參數(shù)“use_horovod”設(shè)置為True并執(zhí)行run.py使用mpirun或mpiexec編寫腳本。例如:

mpiexec --allow-run-as-root -np <num_gpus> python run.py --config_file=… --mode=train_eval --use_horovod=True --enable_logs

Horovod還允許您啟用多節(jié)點(diǎn)執(zhí)行。用戶唯一需要做的是定義數(shù)據(jù)“分割”,僅用于評估和推斷。否則,用戶為多個(gè)/單個(gè)GPU或Horovod/塔式機(jī)箱編寫完全相同的代碼。
與Tensorflow原生塔式方法相比,Horovod為多GPU訓(xùn)練提供了更好的縮放效果。具體的縮放取決于許多因素,如數(shù)據(jù)類型、模型大小、計(jì)算量。例如,Transformer模型的比例因子為0.7,而ConvS2S的比例因子接近0.875,如圖4所示。

Figure 4: Multi-GPU speed-up for ConvS2S

在下一部分中,我們將介紹神經(jīng)機(jī)器翻譯、語音識別和語音合成等任務(wù)的一些流行模型的混合精度訓(xùn)練結(jié)果。

Models

Machine Translation

目前OpenSeq2Seq有三種機(jī)器翻譯模型:

·
Google NMT

·
Facebook ConvS2S

·
Google Transformer

所有模型均在WMT英德數(shù)據(jù)集上接受過訓(xùn)練:

這些模型的混合精度訓(xùn)練比FP32快1.5-2.7倍[10]。

Speech Recognition

OpenSeq2Seq有兩個(gè)用于語音識別任務(wù)的模型:

·
Wave2Letter+ (fully convolutional model based on Facebook Wav2Letter)

DeepSpeech2 (recurrent model originally proposed by Baidu)

這些模型僅在LibriSpeech數(shù)據(jù)集上訓(xùn)練(約1k小時(shí)):

WER(單詞錯(cuò)誤率)是在LibriSpeech數(shù)據(jù)集的dev clean部分使用貪婪解碼器(即在每個(gè)時(shí)間步取最可能的字符,而不需要任何額外的語言模型重新評分)來測量的。

與FP32相比,OpenSeq2Seq中的語音識別模型在混合精度模式下的訓(xùn)練速度提高了3.6倍。

Speech Synthesis

OpenSeq2Seq支持Tacotron 2和Griffin Lim進(jìn)行語音合成。該模型當(dāng)前支持LJSpeech數(shù)據(jù)集。我們計(jì)劃另外支持MAILABS數(shù)據(jù)集。兩個(gè)數(shù)據(jù)集上的音頻示例可以在此處找到。
與FP32相比,Tacotron 2在混合精度模式下的訓(xùn)練速度快1.6倍。

Conclusion

OpenSeq2Seq是一個(gè)基于TensorFlow的工具包,它建立在當(dāng)前可用的序列到序列工具包的優(yōu)勢之上,具有額外的功能,可以加速3倍的大型神經(jīng)網(wǎng)絡(luò)訓(xùn)練。它允許用戶切換到混合精度訓(xùn)練,利用Tensor核中可用的計(jì)算能力單標(biāo)簽。它結(jié)合了Horovod庫以減少多GPU和多節(jié)點(diǎn)系統(tǒng)的訓(xùn)練時(shí)間。

目前在語音識別、機(jī)器翻譯、語音合成、語言建模、情感分析等方面擁有一整套最先進(jìn)的模型。它的模塊化架構(gòu)允許快速開發(fā)出現(xiàn)有模塊之外的新模型。代碼庫是開源的

總結(jié)

以上是生活随笔為你收集整理的基于OpenSeq2Seq的NLP与语音识别混合精度训练的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。