日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
NLP訓(xùn)練及推理一體化工具(TurboNLPExp)

作者: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ù)(序列標注、分類、句子關(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 任務(wù)通常是算法研究者自定義模型和數(shù)據(jù)預(yù)處理在機器學(xué)習(xí)框架Pytorch或Tensorflow進行訓(xùn)練,并手動部署到 libtorch 或 tensorflow 上,這一過程存在如下問題:
  • NLP 任務(wù)已有的模型結(jié)構(gòu)和數(shù)據(jù)預(yù)處理重新定義,重復(fù)性高。
  • 手動修改模型結(jié)構(gòu)和數(shù)據(jù)預(yù)處理代碼,不斷調(diào)整訓(xùn)練參數(shù),反復(fù)試驗,造成代碼混亂。
  • 模型復(fù)雜度(多模型多任務(wù))高或需要對現(xiàn)有模型進行優(yōu)化改進時,如不熟悉模型結(jié)構(gòu),就需要重頭梳理 Python 定義的模型和數(shù)據(jù)預(yù)處理代碼。
  • 知識沉淀、模型復(fù)用及共享困難。
  • 上線難、數(shù)據(jù)預(yù)處理 C++化復(fù)雜、推理延遲高。
  • 流程化提升 NLP 任務(wù)的離線訓(xùn)練及效果實驗效率困難,試錯成本高。

為了解決以上存在的痛點,在此背景下,我們打通了 NLP 訓(xùn)練端到推理端、自研了訓(xùn)練框架TurboNLP-exp及推理框架TuboNLP-inference,以下是框架的整體架構(gòu)圖:

簡介

  • 訓(xùn)練框架 TurboNLP-exp
    • TurboNLP-exp 具備模塊化、可配置、多平臺支持、多任務(wù)支持、多模型格式導(dǎo)出、C++數(shù)據(jù)預(yù)處理等特點、既能滿足研究者快速實驗、也能將模型通過配置沉淀到框架上,后續(xù)研究者通過配置來復(fù)用和共享知識。
    • TuboNLP-exp 對模型和數(shù)據(jù)預(yù)處理進行了模塊化設(shè)計,對于數(shù)據(jù)預(yù)處理,針對同一類 NLP 任務(wù)(序列標注、分類、句子關(guān)系判斷、生成式)數(shù)據(jù)預(yù)處理基本一樣,通過復(fù)用配置即可復(fù)用已有的數(shù)據(jù)預(yù)處理;對于模型,TurboNLP-exp 集成了豐富的子模塊:embedder、seq2seq_encoder、seq2vec_encoder、decoder、attention 等,通過配置隨意的構(gòu)建模型,達到快速實驗?zāi)康摹?/li>
    • TuboNLP-exp 對底層機器學(xué)習(xí)平臺(Pytorch 和 Tensorflow)進行了統(tǒng)一的封裝,熟悉不同的機器學(xué)習(xí)平臺絲毫不影響模型的復(fù)用、共享和知識沉淀。
    • TurboNLP-exp 支持 C++和 Python 數(shù)據(jù)預(yù)處理,Python 數(shù)據(jù)預(yù)處理具備快速實驗調(diào)試的特點主要服務(wù)于訓(xùn)練端,C++數(shù)據(jù)預(yù)處理具備性能高的特點主要服務(wù)于推理端,C++數(shù)據(jù)預(yù)處理和 Python 具有相同 API 接口,研究者在訓(xùn)練階段能夠隨意切換 C++和 Python 數(shù)據(jù)預(yù)處理,保證訓(xùn)練端和推理端的數(shù)據(jù)一致性。
  • 推理框架 TurboNLP-inference
    • TurboNLP-inference 能夠直接加載 TuboNLP-exp 導(dǎo)出的模型,根據(jù)配置來實例化數(shù)據(jù)預(yù)處理。
    • TurboNLP-inference 提供統(tǒng)一的 API、完善的文檔和 examples,通過 examples 快速實現(xiàn)模型推理代碼,業(yè)務(wù)代碼通過 API 接口和 so 包調(diào)用推理庫。
    • TurboNLP-inference 推理框架集成了 NLP 常用的模型:lstm、encoder-decoder、crf、esim、BERT,底層支持五種推理庫:BertInference(BERT 推理加速庫)、libtorch、tensorflow、TurboTransformers(WXG 開源的 BERT 推理加速庫)、BertInference-cpu(BERT 在 CPU 上推理加速庫)。

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四個模塊。

  • dataset_reader:負責(zé)讀取訓(xùn)練數(shù)據(jù),使用分詞器進行分詞、索引器來進行 id 轉(zhuǎn)化;集成了多種數(shù)據(jù)格式讀取:文本分類數(shù)據(jù)格式、NER 數(shù)據(jù)格式、BERT 數(shù)據(jù)格式等,支持自定義擴展。
  • token_indexer:負責(zé)對 token 進行索引(根據(jù)詞典轉(zhuǎn)化 id),集成了多種索引器:根據(jù)單字索引、根據(jù)詞索引、根據(jù)詞的屬性索引等,支持自定義擴展。
  • tokenizer:負責(zé)對文本進行分詞,集成了 NLP 任務(wù)常用的分詞器:qqseg、wordpiece、whitespace、character 等,支持自定義擴展。
  • vocabulary:數(shù)據(jù)詞典,支持從訓(xùn)練數(shù)據(jù)中自動生成,并在訓(xùn)練結(jié)束后保存到本地,或從本地已有的詞典文件中生成,vocabulary 會以命名空間的形式同時保存多個詞典(tokens 詞典、labels 詞典等)。

模型模塊化及可配置

模型的模塊化設(shè)計可以分為三大塊:model、trainer、exporter。

  • model:該模塊集成了 NLP 任務(wù)常見的模型:encoder、decoder、embedder 等,每一個子模型又有其他模型構(gòu)成,這種組合式的模塊化設(shè)計,能夠很方便的根據(jù)配置來定義模型,對于同一類 NLP 任務(wù),模型結(jié)構(gòu)基本大同小異,研究者可以通過修改配置快速的調(diào)整模型結(jié)構(gòu),自定義擴展子模型。
  • trainer:TurboNLP-exp 對訓(xùn)練過程中用到的優(yōu)化器、學(xué)習(xí)率、評價指標等都進行了封裝,通過配置來修改訓(xùn)練參數(shù),達到快速實驗的目的。
  • exporter:該模塊集成了導(dǎo)出各種模型格式:caffe、onnx、pt格式,通過配置來定義導(dǎo)出的格式。

多平臺支持

TurboNLP-exp 對底層機器學(xué)習(xí)平臺進行了抽象,實現(xiàn)統(tǒng)一的 framework 接口對底層的 pytorch 和 tensorflow 調(diào)用(如下圖所示),framework 根據(jù)配置來選擇 pytorch 或 tensorflow 來實現(xiàn)接口。目前以 pytorch 的格式為標準。

多任務(wù)訓(xùn)練

多任務(wù)學(xué)習(xí)通過模擬人類認知過程的多任務(wù)特性,將不同類型的任務(wù)如實體識別、緊密度等集成在一個模型中,在共用的預(yù)訓(xùn)練語言模型上,訓(xùn)練各自的 tagger 層,在訓(xùn)練中,通過各個任務(wù)領(lǐng)域知識和目標的相互補充,共同提升任務(wù)模型效果,在上線時,使用同一個底層模型,從而達到節(jié)省存儲及計算資源;目前,多任務(wù)的需求日漸增大,TurboNLP-exp 支持多任務(wù)多種組合方式及訓(xùn)練調(diào)度方式(如下圖所示)

TurboNLP-exp 的多任務(wù)模型具備以下幾個特點:

  • 能通過現(xiàn)有單任務(wù)模型快速組合多任務(wù)模型。
  • 支持多種組合規(guī)則,包括:共享、累加、shotcut。
    • 共享:多個模型共享同一個 encoder 輸出。
    • 累加:每個任務(wù)的 encoder 累加后輸出到每個任務(wù)的 tagger 層上。
    • shotcut:每個任務(wù)的 encoder 輸出將作為下個任務(wù)的 encoder 輸入。
  • 支持多種訓(xùn)練調(diào)度方式,包括:依次調(diào)度、隨機調(diào)度、共同調(diào)度。
    • 依次及隨機調(diào)度屬于交替訓(xùn)練,可以在多任務(wù)的基礎(chǔ)上獲取各自任務(wù)的最優(yōu)解,且不需要構(gòu)造統(tǒng)一輸入,更加簡單。
    • 共同調(diào)度屬于聯(lián)合訓(xùn)練,使用統(tǒng)一的輸入,由于 loss 最后會累加,因此查找的是多任務(wù)綜合最優(yōu)解。
  • 用戶可根據(jù)實際任務(wù)場景自由配置對應(yīng)的組合方式和調(diào)度方式,以此來讓多任務(wù)能達到最優(yōu)的效果。

多模型格式導(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 具備以下特性:

  • 集成了 NLP 任務(wù)常用的模型:lstm、esim、seq2seq_encoder、attention、transformer等,根據(jù)配置構(gòu)造模型結(jié)構(gòu)及模型輸入。
  • 能夠直接加載TurboNLP-exp的 exporter 導(dǎo)出model.weights模型格式。
  • 使用 C++數(shù)據(jù)預(yù)處理——TurboNLP-data,并將數(shù)據(jù)預(yù)處理輸出自動的喂入模型輸入。
  • 推理代碼將會以 C++ so 包和 API 的形式嵌入業(yè)務(wù)代碼中,盡量少的侵入業(yè)務(wù)代碼,修改靈活方便。

業(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ù):

  • 某業(yè)務(wù)的文檔分類 BERT 模型,F(xiàn)P16 精度在 batch_size=64、seq_len=64 的情況下達到了0.290ms/query的性能,機器資源節(jié)省了97%,上線周期縮短了近50%,極大的降低了機器和人力成本。
  • 某業(yè)務(wù)的文本視頻關(guān)系判斷 BERT 模型,響應(yīng)延遲減少為原來的 2/3,設(shè)備資源節(jié)省了92.8%。
  • 某業(yè)務(wù)的 query 改寫 BERT-base 模型,相比于以前,極大的降低了上線周期及人力成本。
  • 某業(yè)務(wù)多任務(wù)(encoder 為 BERT,decoder 為 GRU)模型,在 FP16 精度情況下,達到了2ms/query的性能。
  • 某業(yè)務(wù)的 query 非必留 BERT-base 模型,上線周期極大縮短,在 FP16 精度情況下,達到了1.1ms/query的性能。

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 校準,能夠使用已有的模型直接校準,通過配置調(diào)整校準過程,校準過程簡單,校準后可以直接使用 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 不掉。


本文標題:NLP訓(xùn)練及推理一體化工具(TurboNLPExp)
標題鏈接:http://www.dlmjj.cn/article/djjggic.html