BERT實戰(zhàn)(源碼分析+踩坑)

最近在內部技術分享會上發(fā)現(xiàn)大家對Bert實踐中的問題比較感興趣瞄崇,疑問點主要集中在,Bert機器資源代價昂貴,如何用較小成本(金錢和時間)把Bert跑起來谣拣?因此,希望這篇文章能幫助你在實踐Bert的過程中少走一些彎路族展。

? ? ? ? 整個文章結構分成四部分森缠。

? ? ? ? ? 第一部分Bert代碼速讀,提示Bert代碼中容易忽略的關鍵點仪缸,目的是讓你快速的熟悉代碼并且跑起來

? ? ? ? ? 第二部分總結下我在服務化部署B(yǎng)ert中趟過的一些坑

? ? ? ? ? 第三部分參考資料(同樣有干貨)

? ? ? ? ? 第四部分總結性能和效果贵涵,給出實踐Bert最低成本路徑。

一、Bert代碼速讀

? ? ? ? 這一部分代碼來源是google research 在github上發(fā)布的官網(wǎng)鏈接:google-research/bert講講代碼中容易忽略但是很重要的點宾茂,幫助你在較短時間內實踐Bert瓷马,所要掌握的必要代碼。解析Google research官方發(fā)布的Bert源碼(給出連接)的主要結構跨晴,重點講run_classifier.py欧聘,run_squad.py,modeling.py中模型構建的核心代碼端盆。

? ? ? 1.Bert代碼結構

? 2.兩個微調模型run_classifier.py和run_squad.py的create _model 部分核心代碼怀骤。

3.預訓練模型層modeling.py 中的attention_layer代碼,包含原理圖和代碼解析焕妙。

attention layer原理圖

? ? ? ? 預訓練階段蒋伦,對機器和數(shù)據(jù)量要求高,所幸焚鹊,作者提供了主要語言英語和中文的預訓練模 型痕届,直接下載即可,中文預訓練模型末患。因此研叫,我們重點關注的是,如何構建和利用微調模型實現(xiàn)我們的目標璧针。重點講下作者在源碼中給出的兩個微調模型蓝撇。看完之后陈莽,你可以會驚呼微調模型竟然這么簡單渤昌。用run_classifier.py,整個50萬樣本量走搁,微調階段訓練時間約為半個小時独柑。

? ? ? ? 從代碼中可以看到,run_squad.py和run_classifier.py微調模型是一層簡單的全鏈接層私植,以此類推忌栅,如果你要實現(xiàn)命名實體識別等其他目標任務,可在預訓練的模型基礎上曲稼,加入少了全鏈接層索绪。

二、我趟過的一些坑

1.tensorflow服務化部署的坑贫悄。

? ? ? Tensorflow服務化部署有好幾套接口瑞驱,有版本歷史原因,導致相互之間不兼容窄坦,對用戶來說可謂非常不友好唤反。我這邊提供一個可用的接口方法供參考凳寺。 TensorFlow 模型如何對外提供服務。 微調模型跑出結果模型是checkpoint的文件格式彤侍,需轉化為.pt格式提供出來肠缨。

2.TPU改成GPU estimator

? ? ? 官網(wǎng)源碼中給出的是TPU estimator接口,改成普通estimator接口方案就能跑起來了盏阶。

https://www.tensorflow.org/guide/estimators?www.tensorflow.org

給個示例晒奕,run_classifier.py中關于TPU estimator的修改,直接上代碼吧

(1)main()函數(shù)中estimator定義部分的修改

源代碼中的定義

修改后的定義

(2) model_fn()部分代碼修改名斟,給個train部分的示例吴汪,eval部分同理可得。? ? ? ? ? ? ? ?

源碼

修改后

3.Out of Memory問題

? ? ? ? 官網(wǎng)源碼中Readme.md中有關于Out of Memory解決的方法蒸眠,如果你遇到類似問題,一定要先看這部分文檔杆融。文中意思大概是調節(jié)兩個參數(shù)max_seq_length和train_batch_size楞卡,觀察你GPU顯存的占用情況? 。我使用的GPU顯存28GB脾歇,如果你想把微調模型跑起來蒋腮,這個顯存基本夠了(train_batch_size=64,--max_seq_length=128 顯存占用22GB)

三、參考資料

1.Bert as Service? hanxiao/bert-as-service

圖優(yōu)化方法

? ? ? Bert預訓練模型較為完整的服務化部署方法藕各,預訓練模型可作為NLP基礎服務池摧。源碼中兩個亮點:一是提供了圖優(yōu)化的方法,提升效率和降低顯存消耗激况。Freezed圖凍結把tf.Variable變?yōu)閠f.Constant作彤,Pruned去掉訓練時多余的節(jié)點,Quantized降低浮點數(shù)維度乌逐,比如把int64改為int32竭讳。二是zeromq實現(xiàn)異步并發(fā)請求,設計了一套Bert服務化部署的軟件架構浙踢。

2.參考我的另一篇博文绢慢,關于Bert的原理章魚小丸子:NLP突破性成果 BERT 模型詳細解讀

四、總結

關于Bert的效果洛波,我未做定量分析胰舆,但從個人評估結果來看,其在公開數(shù)據(jù)集的泛化能力蹬挤,明顯優(yōu)于利用詞向量預訓練的QAnet等問答其他模型缚窿。

? ? ? 關于Bert的性能,對服務進行壓力測試焰扳,根據(jù)應用場景滨攻,我調節(jié)的max length=30够话,耗時均值在400ms左右,能滿足一般應用qps要求光绕。如果對運算速度要求更高的產(chǎn)品女嘲,需改為GPU分布式計算。

? ? ? 較低成本實踐Bert的路徑:

? ? ? 第一步:找一臺滿足GPU顯存要求的機器(一般是28GB左右诞帐,不同情況略有不同)

? ? ? 第二步:設置一個你能拿到數(shù)據(jù)集的微調任務欣尼,如分類、問答停蕉、實體標注等愕鼓。

? ? ? 第三步:修改微調代碼跑起來,驗證效果慧起。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末菇晃,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子蚓挤,更是在濱河造成了極大的恐慌磺送,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,561評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件灿意,死亡現(xiàn)場離奇詭異估灿,居然都是意外死亡,警方通過查閱死者的電腦和手機缤剧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評論 3 385
  • 文/潘曉璐 我一進店門馅袁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人荒辕,你說我怎么就攤上這事汗销。” “怎么了抵窒?”我有些...
    開封第一講書人閱讀 157,162評論 0 348
  • 文/不壞的土叔 我叫張陵大溜,是天一觀的道長。 經(jīng)常有香客問我估脆,道長钦奋,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,470評論 1 283
  • 正文 為了忘掉前任疙赠,我火速辦了婚禮付材,結果婚禮上,老公的妹妹穿的比我還像新娘圃阳。我一直安慰自己厌衔,他們只是感情好,可當我...
    茶點故事閱讀 65,550評論 6 385
  • 文/花漫 我一把揭開白布捍岳。 她就那樣靜靜地躺著富寿,像睡著了一般睬隶。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上页徐,一...
    開封第一講書人閱讀 49,806評論 1 290
  • 那天拭嫁,我揣著相機與錄音斩松,去河邊找鬼鹅搪。 笑死既荚,一個胖子當著我的面吹牛,可吹牛的內容都是我干的搀绣。 我是一名探鬼主播飞袋,決...
    沈念sama閱讀 38,951評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼链患!你這毒婦竟也來了巧鸭?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,712評論 0 266
  • 序言:老撾萬榮一對情侶失蹤麻捻,失蹤者是張志新(化名)和其女友劉穎纲仍,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體芯肤,經(jīng)...
    沈念sama閱讀 44,166評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,510評論 2 327
  • 正文 我和宋清朗相戀三年压鉴,在試婚紗的時候發(fā)現(xiàn)自己被綠了崖咨。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,643評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡油吭,死狀恐怖击蹲,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情婉宰,我是刑警寧澤歌豺,帶...
    沈念sama閱讀 34,306評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站心包,受9級特大地震影響类咧,放射性物質發(fā)生泄漏。R本人自食惡果不足惜蟹腾,卻給世界環(huán)境...
    茶點故事閱讀 39,930評論 3 313
  • 文/蒙蒙 一痕惋、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧娃殖,春花似錦值戳、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽卧晓。三九已至,卻和暖如春赴捞,著一層夾襖步出監(jiān)牢的瞬間逼裆,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評論 1 266
  • 我被黑心中介騙來泰國打工螟炫, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留波附,地道東北人。 一個月前我還...
    沈念sama閱讀 46,351評論 2 360
  • 正文 我出身青樓昼钻,卻偏偏與公主長得像掸屡,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子然评,可洞房花燭夜當晚...
    茶點故事閱讀 43,509評論 2 348

推薦閱讀更多精彩內容