掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
作者:TurboNLP,騰訊 TEG 后臺工程師

創(chuàng)新互聯(lián)建站是專業(yè)的仁化網(wǎng)站建設(shè)公司,仁化接單;提供做網(wǎng)站、網(wǎng)站設(shè)計,網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進行仁化網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!
導(dǎo)語
NLP 任務(wù)(序列標(biāo)注、分類、句子關(guān)系判斷、生成式)訓(xùn)練時,通常使用機器學(xué)習(xí)框架 Pytorch 或 Tensorflow,在其之上定義模型以及自定義模型的數(shù)據(jù)預(yù)處理,這種方式很難做到模型沉淀、復(fù)用和共享,而對于模型上線同樣也面臨:上線難、延遲高、成本高等問題,TEG-AI 平臺部-搜索業(yè)務(wù)中心從 2019 年底開始,前期經(jīng)過大量調(diào)研,在 AllenNLP 基礎(chǔ)上自研了推理及訓(xùn)練一體化工具 TurboNLP, 涵蓋了訓(xùn)練框架 TurboNLP-exp 和推理框架 TuboNLP-inference,TurboNLP-exp 訓(xùn)練框架具備可配置、簡單、多框架、多任務(wù)、可復(fù)用等特點,在其之上能夠快速、高效的進行 NLP 實驗.
TurboNLP-inference 推理框架底層支持高效的模型推理庫 BertInference,集成了常用的 NLP 模型, 具備無縫兼容 TurboNLP-exp、推理性能高(在 BERT-base 文檔分類業(yè)務(wù)模型上實測,F(xiàn)P6 精度在 batch_size=64、seq_len=64 的情況下達到了 0.275ms/query,INT8 精度在 batch_size=64、seq_len=64 的情況下達到了 0.126ms/query 性能)等特點,NLP 訓(xùn)練和推理一體化工具極大的簡化了訓(xùn)練到推理的流程,降低了任務(wù)訓(xùn)練、模型上線等人力成本,本文將主要介紹 NLP 訓(xùn)練和推理一體化工具。
背景
為了解決以上存在的痛點,在此背景下,我們打通了 NLP 訓(xùn)練端到推理端、自研了訓(xùn)練框架TurboNLP-exp及推理框架TuboNLP-inference,以下是框架的整體架構(gòu)圖:
簡介
TurboNLP-exp 訓(xùn)練框架
TurboNLP-exp 訓(xùn)練框架是基于 AllenNLP 研發(fā),為了滿足算法研究者和推理的業(yè)務(wù)需求,TurboNLP-exp 不斷優(yōu)化,具備了業(yè)界框架不具備的特性,下表是 TurboNLP-exp 于業(yè)界其他框架的對比:
| 框架 | 難度 | 模塊化 | 可配置 | Pytorch | Tensorflow | 多任務(wù)訓(xùn)練 | 多模型格式導(dǎo)出 | 數(shù)據(jù)預(yù)處理 | 推理 |
|---|---|---|---|---|---|---|---|---|---|
| PyText | 難 | T | T | T | F | F | F | Python | Caffe2 執(zhí)行引擎 |
| AllenNLP | 簡單 | T | T | T | F | F | F | Python | 簡單的 Python 服務(wù) |
| TurboNLP-exp | 簡單 | T | T | T | T | T | T | Python、C++ | 高效的 TurboNLP-inference |
以下會詳細介紹我們對 TurboNLP-exp 上所做的優(yōu)化。
模塊化及可配置
TurboNLP-exp 的可配置程度高,源于其合理的模塊設(shè)計,通過模塊化封裝,TurboNLP-exp 支持隨意組合模型、擴展子模塊等,對于剛接觸的研究者 TurboNLP-exp 提供了界面化配置,通過可視化界面生成數(shù)據(jù)預(yù)處理和模型配置,大大降低了上手難度。
數(shù)據(jù)預(yù)處理模塊化及可配置
數(shù)據(jù)預(yù)處理粗略可分為dataset_reader、token_indexer、tokenizer、vocabulary四個模塊。
模型模塊化及可配置
模型的模塊化設(shè)計可以分為三大塊:model、trainer、exporter。
多平臺支持
TurboNLP-exp 對底層機器學(xué)習(xí)平臺進行了抽象,實現(xiàn)統(tǒng)一的 framework 接口對底層的 pytorch 和 tensorflow 調(diào)用(如下圖所示),framework 根據(jù)配置來選擇 pytorch 或 tensorflow 來實現(xiàn)接口。目前以 pytorch 的格式為標(biāo)準(zhǔn)。
多任務(wù)訓(xùn)練
多任務(wù)學(xué)習(xí)通過模擬人類認知過程的多任務(wù)特性,將不同類型的任務(wù)如實體識別、緊密度等集成在一個模型中,在共用的預(yù)訓(xùn)練語言模型上,訓(xùn)練各自的 tagger 層,在訓(xùn)練中,通過各個任務(wù)領(lǐng)域知識和目標(biāo)的相互補充,共同提升任務(wù)模型效果,在上線時,使用同一個底層模型,從而達到節(jié)省存儲及計算資源;目前,多任務(wù)的需求日漸增大,TurboNLP-exp 支持多任務(wù)多種組合方式及訓(xùn)練調(diào)度方式(如下圖所示)
TurboNLP-exp 的多任務(wù)模型具備以下幾個特點:
多模型格式導(dǎo)出
TurboNLP-exp 能夠?qū)С龈袷剑篶affe、onnx、pt,支持直接導(dǎo)出 TurboNLP-inference 推理框架支持的格式,直接推理端加載,無需再經(jīng)過復(fù)雜的模型轉(zhuǎn)換。
數(shù)據(jù)預(yù)處理
TurboNLP-exp 的數(shù)據(jù)預(yù)處理能夠同時支持 Python、C++,Python 數(shù)據(jù)預(yù)處理主要服務(wù)于訓(xùn)練端,C++數(shù)據(jù)預(yù)處理主要服務(wù)于推理端,也能服務(wù)于訓(xùn)練端(如下圖所示)
在訓(xùn)練端,當(dāng)數(shù)據(jù)預(yù)處理還處在修改、調(diào)試時,使用 Python 數(shù)據(jù)預(yù)處理能夠快速實驗,當(dāng) Python 數(shù)據(jù)預(yù)處理固定后,通過配置切換為 C++數(shù)據(jù)預(yù)處理來驗證數(shù)據(jù)預(yù)處理結(jié)果,從而保證訓(xùn)練端和推理端數(shù)據(jù)一致性。
在推理端,使用與訓(xùn)練端相同的配置,C++數(shù)據(jù)預(yù)處理輸出將作為模型輸入,C++數(shù)據(jù)預(yù)處理——TurboNLP-data采用多線程、預(yù)處理隊列來保證數(shù)據(jù)預(yù)處理的低延遲,在 BERT-base 五分類模型上實測,在 batch_size=64、seq_len=64 的情況下達到了0.05ms/query的性能。
TurboNLP-inference 推理框架
TurboNLP-inference 推理框架能夠無縫兼容TurboNLP-exp、具備低延遲、可配置等特點,TurboNLP-inference 底層支持五種推理庫:BertInference(BERT 推理加速庫)、libtorch、tensorflow、TurboTransformers(WXG 開源的 BERT 推理加速庫)、BertInference-cpu(BERT 在 CPU 上推理加速庫),其中,BertInference是我們基于TensorRT研發(fā)的一款高效能 BERT 推理庫,BertInference-cpu是和 intel 合作開發(fā)的一款在 CPU 上進行 BERT 推理加速庫。
以下是推理框架 TurboNLP-inference 和訓(xùn)練框架 TurboNLP-exp 一體化架構(gòu)圖:
TurboNLP-inference 具備以下特性:
業(yè)務(wù)應(yīng)用
NLP 一體化工具(TurboNLP-exp 訓(xùn)練框架和 TurboNLP-inference 推理框架)極大的簡化了模型從訓(xùn)練到上線的流程(如下圖所示),依據(jù)業(yè)務(wù)模型的實際上線流程,手工訓(xùn)練和部署需要 14.5/人天,而使用 NLP 一體化工具僅需 4/人天,整體節(jié)省了**72.4%**人力成本。
TurboNLP-inference 目前已成功支持了 TEG-AI 平臺部-搜索業(yè)務(wù)中心的 5 個業(yè)務(wù):
TurboNLP-inference 在業(yè)務(wù)上的表現(xiàn),離不開對訓(xùn)練框架的無縫支持以及底層高效推理庫的支持。
最新進展
TurboNLP-inference 的底層高效推理庫之一——BertInference 目前已具備支持 INT8 推理,優(yōu)化了 Attention 計算,我們使用 BERT-base 文本分類業(yè)務(wù)模型和真實的線上數(shù)據(jù)進行了性能測試,效果如下:
在 batch_size=64,、seq_len=64 的情況下,性能達到了0.126ms/query,INT8 相比于 FP16 提升了**54.2%**左右。
TurboNLP-inference 支持 INT8 校準(zhǔn),能夠使用已有的模型直接校準(zhǔn),通過配置調(diào)整校準(zhǔn)過程,校準(zhǔn)過程簡單,校準(zhǔn)后可以直接使用 INT8 精度進行模型推理。
總結(jié)和展望
NLP 一體化工具(TurboNLP-exp 訓(xùn)練框架和 TurboNLP-inference 推理框架)目前已經(jīng)在 TEG AI 工作組內(nèi)部演進,在預(yù)訓(xùn)練模型方面也有一些合作應(yīng)用,同時我們也正在積極與 AI 工作組的算力和太極機器學(xué)習(xí)平臺團隊積極合作,把訓(xùn)練端能力在平臺上更好的開放出來。接下來訓(xùn)練及推理框架也會在 TencentNLP 的公司統(tǒng)一協(xié)同 oteam 里面去演進,也期待在公司內(nèi)更多團隊的合作。
TurboNLP-inference 的 BERT 推理加速在 INT8 精度模型效果上仍有進一步的提升空間,目前著力于 QAT 以及知識蒸餾、QAT 目前在五分類 BERT-base 模型上實測,Accuracy 僅降低了0.8%,加入知識蒸餾有望達到 Accuracy 不掉。

我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流