使用 Transformers 優(yōu)化文本轉(zhuǎn)語(yǔ)音模型 Bark
Transformers 提供了許多最新最先進(jìn) (state-of-the-art, SoTA) 的模型,這些模型橫跨多個(gè)領(lǐng)域及任務(wù)。為了使這些模型能以最佳性能運(yùn)行,我們需要優(yōu)化其推理速度及內(nèi)存使用。
【資料圖】
Hugging Face 生態(tài)系統(tǒng)為滿足上述需求提供了現(xiàn)成且易于使用的優(yōu)化工具,這些工具可應(yīng)用于庫(kù)中的所有模型。用戶只需添加幾行代碼就可以輕松?減少內(nèi)存占用并?提高推理速度。
在本實(shí)戰(zhàn)教程中,我將演示如何用三個(gè)簡(jiǎn)單的優(yōu)化技巧來(lái)優(yōu)化 Bark 模型。Bark 是 Transformers 支持的一個(gè)文本轉(zhuǎn)語(yǔ)音 (Text-To-Speech, TTS) 模型。所有優(yōu)化僅依賴于 Transformers、Optimum 以及 Accelerate 這三個(gè) 生態(tài)系統(tǒng)庫(kù)。
本教程還演示了如何對(duì)模型及其不同的優(yōu)化方案進(jìn)行性能基準(zhǔn)測(cè)試。
本文對(duì)應(yīng)的 Google Colab 在:/github/ylacombe/notebooks/blob/main/Benchmark_Bark_
本文結(jié)構(gòu)如下:
目錄
Bark 模型簡(jiǎn)介
不同優(yōu)化技巧及其優(yōu)點(diǎn)概述
基準(zhǔn)測(cè)試結(jié)果展示
Bark 模型架構(gòu)
Bark是 Suno AI 提出的基于 transformer 的 TTS 模型,其原始代碼庫(kù)為 suno-ai/bark。該模型能夠生成各種音頻輸出,包括語(yǔ)音、音樂(lè)、背景噪音以及簡(jiǎn)單的音效。此外,它還可以產(chǎn)生非語(yǔ)言語(yǔ)音,如笑聲、嘆息聲和抽泣聲等。
自 起,Bark 已集成入 Transformers!
你可以通過(guò) 這個(gè) notebook 試試 Bark 并探索其功能。
Bark 主要由 4 個(gè)模型組成:
BarkSemanticModel
(也稱為?文本模型): 一個(gè)因果自回歸 transformer 模型,其輸入為分詞后的詞元序列,并輸出能捕獲文義的語(yǔ)義詞元。
BarkCoarseModel
(也稱為?粗聲學(xué)模型): 一個(gè)因果自回歸 transformer 模型,其接收?BarkSemanticModel
模型的輸出,并據(jù)此預(yù)測(cè) EnCodec 所需的前兩個(gè)音頻碼本。
BarkFineModel
(也稱為?細(xì)聲學(xué)模型),這次是個(gè)非因果自編碼器 transformer 模型,它對(duì)?先前碼本的嵌入和?進(jìn)行迭代,從而生成最后一個(gè)碼本。
在?EncodecModel
的編碼器部分預(yù)測(cè)出所有碼本通道后,Bark 繼續(xù)用其解碼器來(lái)解碼并輸出音頻序列。
截至本文撰寫(xiě)時(shí),共有兩個(gè) Bark checkpoint 可用,其中一個(gè)是 小版,一個(gè)是 大版。
加載模型及其處理器
預(yù)訓(xùn)練的 Bark 小 checkpoint 和 大 checkpoint 均可從 Hugging Face Hub 上加載。你可根據(jù)實(shí)際需要加載相應(yīng)的 repo-id。
為了使實(shí)驗(yàn)運(yùn)行起來(lái)快點(diǎn),我們默認(rèn)使用小 checkpoint,即?“suno/bark-small”
。但你可以隨意改成?“suno/bark”
來(lái)嘗試大 checkpoint。
將模型放到加速器上以優(yōu)化其速度:
加載處理器,它主要處理分詞以及說(shuō)話人嵌入 (若有)。
優(yōu)化技巧
本節(jié),我們將探索如何使用 Optimum 和 Accelerate 庫(kù)中的現(xiàn)成功能來(lái)以最少的代碼改動(dòng)達(dá)到優(yōu)化 Bark 模型的目的。
設(shè)置實(shí)驗(yàn)環(huán)境
首先,我們準(zhǔn)備一個(gè)輸入文本并定義一個(gè)函數(shù)來(lái)測(cè)量 Bark 生成過(guò)程的延遲及其 GPU 顯存占用情況。
測(cè)量延遲和 GPU 內(nèi)存占用需要使用特定的 CUDA 函數(shù)。我們實(shí)現(xiàn)了一個(gè)工具函數(shù),用于測(cè)量模型的推理延遲及 GPU 內(nèi)存占用。為了確保結(jié)果的準(zhǔn)確性,每次測(cè)量我們會(huì)運(yùn)行?nb_loops
次求均值:
基線
在優(yōu)化之前,我們先測(cè)量下模型的基線性能并聽(tīng)一下生成的音頻,我們測(cè)量五次并求均值:
輸出:
現(xiàn)在,我們可以播放一下輸出音頻:
重要說(shuō)明
上例中運(yùn)行次數(shù)較少。為了測(cè)量和后續(xù)對(duì)比的準(zhǔn)確性,運(yùn)行次數(shù)需要增加到至少 100。
增加?nb_loops
一個(gè)主要原因是,同一輸入的多次運(yùn)行所生成的語(yǔ)音長(zhǎng)度差異也很大。因此當(dāng)運(yùn)行次數(shù)較少時(shí),有可能通過(guò)?measure_latency_and_memory_use
測(cè)出的延遲并不能反映出優(yōu)化方法的實(shí)際性能!文末的基準(zhǔn)測(cè)試取的是 100 次運(yùn)行的均值,用以逼近模型的真實(shí)性能。
1. Better Transformer
Better Transformer 是 ? Optimum 的一個(gè)功能,它可以幫助在后臺(tái)執(zhí)行算子融合。這意味著模型的某些操作在 GPU 上的性能將會(huì)得到進(jìn)一步優(yōu)化,從而加速模型的最終運(yùn)行速度。
再具體一點(diǎn), Transformers 支持的大多數(shù)模型都依賴于注意力,這使得模型在生成輸出時(shí)可以選擇性地關(guān)注輸入的某些部分,因而能夠有效地處理遠(yuǎn)程依賴關(guān)系并捕獲數(shù)據(jù)中復(fù)雜的上下文關(guān)系。
Dao 等人于 2022 年提出了一項(xiàng)名為 Flash Attention 的技術(shù),極大地優(yōu)化了樸素注意力的性能。
Flash Attention 是一種更快、更高效的注意力算法,它巧妙地結(jié)合了一些傳統(tǒng)方法 (如平鋪和重計(jì)算),以最大限度地減少內(nèi)存使用并提高速度。與之前的算法不同,F(xiàn)lash Attention 將內(nèi)存使用量從與序列長(zhǎng)度呈平方關(guān)系降低到線性關(guān)系,這對(duì)關(guān)注內(nèi)存效率的應(yīng)用尤其重要。
Better Transformer 可以開(kāi)箱即用地支持 Flash Attention!只需一行代碼即可將模型導(dǎo)出到 Better Transformer 并啟用 Flash Attention:
輸出:
利弊
效果不會(huì)下降,這意味著你可以獲得與基線版本完全相同的結(jié)果,同時(shí)提速 20% 到 30%!想要了解更多有關(guān) Better Transformer 的詳細(xì)信息,請(qǐng)參閱此 博文。
2. 半精度
大多數(shù)人工智能模型通常使用稱為單精度浮點(diǎn)的存儲(chǔ)格式,即?fp32
,這在實(shí)踐中意味著每個(gè)數(shù)都用 32 比特來(lái)存儲(chǔ)。
你也可以選擇使用 16 比特對(duì)每個(gè)數(shù)進(jìn)行編碼,即所謂的半精度浮點(diǎn),即?fp16
(譯者注: 或?bf16
),這時(shí)每個(gè)數(shù)占用的存儲(chǔ)空間就變成了原來(lái)的一半!除此以外,你還可以獲得計(jì)算上的加速!
但天下沒(méi)有免費(fèi)的午餐,半精度會(huì)帶來(lái)較小的效果下降,因?yàn)槟P蛢?nèi)部的操作不如?fp32
精確了。
你可以通過(guò)簡(jiǎn)單地在?_pretrained(...)
的入?yún)⒅刑砑?torch_dtype=
來(lái)將 Transformers 模型加載為半精度!
代碼如下:
輸出:
利弊
雖然效果略有下降,但內(nèi)存占用量減少了 50%,速度提高了 5%。
3. CPU 卸載
正如本文第一部分所述,Bark 包含 4 個(gè)子模型,這些子模型在音頻生成過(guò)程中按序調(diào)用。換句話說(shuō),當(dāng)一個(gè)子模型正在使用時(shí),其他子模型處于空閑狀態(tài)。
為什么要討論這個(gè)問(wèn)題呢?因?yàn)?GPU 顯存在 AI 工作負(fù)載中非常寶貴,顯存中的運(yùn)算速度是最快的,而很多情況下顯存不足是推理速度的瓶頸。
一個(gè)簡(jiǎn)單的解決方案是將空閑子模型從 GPU 顯存中卸載至 CPU 內(nèi)存,該操作稱為 CPU 卸載。
好消息: Bark 的 CPU 卸載已集成至 Transformers 中,只需一行代碼即可使能。唯一條件是,僅需確保安裝了 Accelerate 即可!
輸出:
利弊
速度略有下降 (10%),換得內(nèi)存占用的巨大降低 (60% )。
啟用此功能后,?bark-large
占用空間從原先的 5GB 降至 2GB,與?bark-small
的內(nèi)存占用相同!
如果你還想要降更多的話,可以試試啟用?fp16
,內(nèi)存占用甚至可以降至 1GB。具體可以參見(jiàn)下一節(jié)的數(shù)據(jù)。
4. 組合優(yōu)化
我們把上述所有優(yōu)化組合到一起,這意味著你可以合并 CPU 卸載、半精度以及 Better Transformer 帶來(lái)的收益!
輸出:
利弊
最終,你將獲得 23% 的加速并節(jié)約 80% 的內(nèi)存!
批處理
得隴望蜀?
加個(gè)批處理吧,上述 3 種優(yōu)化技巧加上批處理可以進(jìn)一步提升速度。批處理即將多個(gè)樣本組合起來(lái)一起推理,這樣會(huì)使這些樣本的總生成時(shí)間低于逐樣本生成時(shí)的總生成時(shí)間。
下面給出了一個(gè)批處理的簡(jiǎn)單代碼:
基準(zhǔn)測(cè)試結(jié)果
上文我們進(jìn)行的這些小實(shí)驗(yàn)更多是想法驗(yàn)證,我們需要將其擴(kuò)展以更準(zhǔn)確地衡量性能。另外,在每次正式測(cè)量性能之前,還需要先跑幾輪以預(yù)熱 GPU。
以下是擴(kuò)展至 100 個(gè)樣本的基準(zhǔn)測(cè)量的結(jié)果,使用的模型為?大 Bark。
該基準(zhǔn)測(cè)試在 NVIDIA TITAN RTX 24GB 上運(yùn)行,最大詞元數(shù)為 256。
如何解讀結(jié)果?
延遲
該指標(biāo)主要測(cè)量每次調(diào)用生成函數(shù)的平均時(shí)間,無(wú)論 batch size 如何。
換句話說(shuō),它等于?。
延遲越小越好。
最大內(nèi)存占用
它主要測(cè)量生成函數(shù)在每次調(diào)用期間使用的最大內(nèi)存。
內(nèi)存占用越小越好。
吞吐量
它測(cè)量每秒生成的樣本數(shù)。這次,batch size 的因素已被考慮在內(nèi)。
換句話說(shuō),它等于?。
吞吐量越高越好。
單樣本推理
下表為?batch_size=1
的結(jié)果。
不出所料,CPU 卸載極大地減少了內(nèi)存占用,同時(shí)略微增加了延遲。
然而,結(jié)合 bettertransformer 和?fp16
,我們得到了兩全其美的效果,巨大的延遲和內(nèi)存降低!
batch size 為 8
以下是?batch_size=8
時(shí)的吞吐量基準(zhǔn)測(cè)試結(jié)果。
請(qǐng)注意,由于?bettertransformer
是一種免費(fèi)優(yōu)化,它執(zhí)行與非優(yōu)化模型完全相同的操作并具有相同的內(nèi)存占用,同時(shí)速度更快,因此所有的基準(zhǔn)測(cè)試均?默認(rèn)開(kāi)啟此優(yōu)化。
這里,我們看到了組合所有三個(gè)優(yōu)化技巧后的性能潛力!
fp16
對(duì)延遲的影響在?batch_size = 1
時(shí)不太明顯,但在?batch_size = 1
時(shí)的表現(xiàn)非常有趣,它可以將延遲減少近一半,吞吐量幾乎翻倍!
結(jié)束語(yǔ)
本文展示了 生態(tài)系統(tǒng)中的一些現(xiàn)成的、簡(jiǎn)單的優(yōu)化技巧。使用這些技巧中的任何一種或全部三種都可以極大地改善 Bark 的推理速度和內(nèi)存占用。
使用 Better Transformer 和 CPU 卸載,你可以對(duì)大 Bark 模型進(jìn)行推理,而不會(huì)出現(xiàn)任何性能下降,占用空間僅為 2GB (而不是 5GB),同時(shí)速度提高 15%。
如果你鐘情于高吞吐,可以?把 batch size 打到 8,并利用 Better Transformer 和 fp16。
如果你“既要,又要,還要”,試試?fp16、 Better Transformer 加 CPU 卸載組合優(yōu)化吧!
英文原文:?/blog/optimizing-bark
原文作者: Yoach Lacombe
譯者: Matrix Yao (姚偉峰),英特爾深度學(xué)習(xí)工程師,工作方向?yàn)?transformer-family 模型在各模態(tài)數(shù)據(jù)上的應(yīng)用及大規(guī)模模型的訓(xùn)練推理。
審校/排版: zhongdongy (阿東)
關(guān)鍵詞:
您可能也感興趣:
今日熱點(diǎn)
為您推薦
蘇州吳中郭巷街道:“青”風(fēng)勁吹“廉”花開(kāi),良好風(fēng)氣自然來(lái)
電商平臺(tái)發(fā)布秋冬服飾七大趨勢(shì) 甜心芭比風(fēng)高居榜首
誠(chéng)達(dá)藥業(yè)跌4.02% 2022年上市即巔峰超募11億元
更多
- IBM在中國(guó)發(fā)布 watsonx,攜手本地強(qiáng)大生態(tài)推進(jìn)企業(yè)級(jí)可信AI與模型
- 夏威夷野火已致超1100人失蹤
- 南方電網(wǎng)回應(yīng)妻子舉報(bào)丈夫后遭威脅 基本情況講解
- 長(zhǎng)江安徽段諸港:水更清,岸更綠,景更美
- 吉林舒蘭:無(wú)人機(jī)飛越80米寬河道“穿針引線”
- 夫妻有贍養(yǎng)對(duì)方父母的義務(wù)嗎
- 廣西5100多萬(wàn)醫(yī)保人員看病報(bào)銷(xiāo)為啥能更方便?
- 四川、陜西、甘肅開(kāi)展區(qū)域協(xié)同立法——攜手建好大熊貓國(guó)家公園
更多
- 央行:2023年1月債券市場(chǎng)共發(fā)行各類(lèi)債券37683.5億元
- 工信部:2022年我國(guó)鋰離子電池行業(yè)產(chǎn)值突破1.2萬(wàn)億元
- 從六億分紅看金地的安全閾值
- 對(duì)話COSMO成都“操盤(pán)手”:我們唯一的標(biāo)準(zhǔn)就是“反標(biāo)準(zhǔn)”
- 董先生和張小姐(關(guān)于董先生和張小姐簡(jiǎn)述)
- 陳夢(mèng)換主管教練事出有因!國(guó)乒60歲老帥給出答案,相比丁寧好多了
- 泉南高速公路封閉 泉南高速公路
- 獨(dú)家丨海飛絲回應(yīng)洗發(fā)水現(xiàn)蟲(chóng)卵
排行
- 可以加好友的生存游戲推薦 組成小隊(duì)求生末日
- 深圳要求建設(shè)工地落實(shí)“六個(gè)到位” 建設(shè)項(xiàng)目實(shí)施圍合式管理
- 截至3月末,深圳29個(gè)金融科技應(yīng)用試點(diǎn)項(xiàng)目已全部上線運(yùn)行
- 廈企投資建設(shè)的高性能膜材項(xiàng)目開(kāi)工 未來(lái)總產(chǎn)值將達(dá)60億元
- 重慶巴南第二季度重點(diǎn)項(xiàng)目集中簽約,合同投資金額215億元
- 全國(guó)知名民企走進(jìn)重慶萬(wàn)州區(qū),簽約重點(diǎn)合作項(xiàng)目21個(gè)
- 青海海西4000兆瓦風(fēng)光儲(chǔ)氫一體化項(xiàng)目簽約,總投資額214億元
- 深圳寶安區(qū)啟動(dòng)23個(gè)新開(kāi)工項(xiàng)目,年度投資計(jì)劃42.1億元
- 一季度沈陽(yáng)新簽約億元以上項(xiàng)目480個(gè),同比增長(zhǎng)22.1%
- 福州晉安招商大會(huì)簽約項(xiàng)目45項(xiàng),總投資208.43億元
最近更新
- 使用 Transformers 優(yōu)化文本轉(zhuǎn)語(yǔ)音模型 Bark
- 從科學(xué)體系上學(xué)深悟透新時(shí)代黨的創(chuàng)新理論(深入學(xué)習(xí)貫徹習(xí)近...
- 小米應(yīng)用商店發(fā)布《紅包專(zhuān)場(chǎng)停止服務(wù)公告》
- 央行:2023年1月債券市場(chǎng)共發(fā)行各類(lèi)債券37683.5億元
- 轉(zhuǎn)發(fā)提醒!奶茶店遭遇120杯奶茶訂單詐騙
- 中國(guó)駐非盟使團(tuán)團(tuán)長(zhǎng):金磚合作機(jī)制成為新興市場(chǎng)國(guó)家和發(fā)展中...
- 美國(guó)空軍再次測(cè)試高超聲速導(dǎo)彈,但未公布試射結(jié)果
- 南方電網(wǎng)回應(yīng)妻子舉報(bào)丈夫后遭威脅 基本情況講解
- 微視頻|開(kāi)啟新的金色航程
- 欣旺達(dá):董事長(zhǎng)王威提議以1億元-2億元回購(gòu)公司股份 實(shí)控人及...
- 2023年8月23日浙江省成品油價(jià)格按機(jī)制上調(diào)
- 冷門(mén)常態(tài)化?王楚欽、馬龍先后翻車(chē),繼孫穎莎之后王曼昱也輸比賽
- 為何不建議儲(chǔ)戶存3年定期?銀行內(nèi)部員工道出實(shí)情,你存了嗎?
- 易車(chē)上線國(guó)內(nèi)首個(gè)AI虛擬仿真車(chē)評(píng)人 以知名主持人楚少為原型
- 張家港市南豐鎮(zhèn)民樂(lè)村系列活動(dòng)讓“七夕”煥發(fā)新活力
- “美國(guó)幾乎一言不發(fā)”
- 湖南新寧:交通安全“不放假” 學(xué)生安全“警”相隨
- 銀保渠道手續(xù)費(fèi)無(wú)序競(jìng)爭(zhēng),監(jiān)管要求傭金“報(bào)行合一”
- 工信部:2022年我國(guó)鋰離子電池行業(yè)產(chǎn)值突破1.2萬(wàn)億元
- 同宗同源雙城地名故事⑥:水頭
- 對(duì)話COSMO成都“操盤(pán)手”:我們唯一的標(biāo)準(zhǔn)就是“反標(biāo)準(zhǔn)”
- 建設(shè)銀行上半年凈利潤(rùn)同比增3.36% 受提前還款影響按揭貸規(guī)模下降
- 美媒曬勒布朗下賽季將達(dá)成6紀(jì)錄:411俱樂(lè)部前無(wú)古人 小里狂贊GOAT
- 滴滴出行:七夕打車(chē)前往婚姻登記處訂單增長(zhǎng)1.5倍
- 晶華新材董監(jiān)高潘曉嬋2023年08月18日減持151,200股,套現(xiàn)77.72萬(wàn)元
- 國(guó)華網(wǎng)安:2023年半年度凈利潤(rùn)約-2793萬(wàn)元
- 夏威夷野火已致超1100人失蹤
- 夫妻有贍養(yǎng)對(duì)方父母的義務(wù)嗎
- 欣旺達(dá):董事長(zhǎng)提議1億元-2億元回購(gòu)股份
- 國(guó)羽8勝1負(fù)!男單遭重創(chuàng)僅剩2人,陳雨菲2-0橫掃,何冰嬌2-1逆轉(zhuǎn)
今日要聞
- 央行:2023年1月債券市場(chǎng)共發(fā)行各類(lèi)債券37683.5億元
- 工信部:2022年我國(guó)鋰離子電池行業(yè)產(chǎn)值突破1.2萬(wàn)億元
- 建設(shè)銀行上半年凈利潤(rùn)同比增3.36% 受提前還款影響按揭貸規(guī)模下降
- 七夕節(jié)北京領(lǐng)證迎來(lái)小高峰
- IBM在中國(guó)發(fā)布 watsonx,攜手本地強(qiáng)大生態(tài)推進(jìn)企業(yè)級(jí)可信AI與模型
- 從六億分紅看金地的安全閾值
- 夏威夷野火已致超1100人失蹤
- 南方電網(wǎng)回應(yīng)妻子舉報(bào)丈夫后遭威脅 基本情況講解
- 長(zhǎng)江安徽段諸港:水更清,岸更綠,景更美
- 吉林舒蘭:無(wú)人機(jī)飛越80米寬河道“穿針引線”