自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

NLP 訓(xùn)練及推理一體化工具(TurboNLPExp)

開發(fā) 開發(fā)工具
TurboNLP-exp 的可配置程度高,源于其合理的模塊設(shè)計(jì),通過模塊化封裝,TurboNLP-exp 支持隨意組合模型、擴(kuò)展子模塊等,對(duì)于剛接觸的研究者 TurboNLP-exp 提供了界面化配置,通過可視化界面生成數(shù)據(jù)預(yù)處理和模型配置,大大降低了上手難度。

 [[379429]]

作者:TurboNLP,騰訊 TEG 后臺(tái)工程師

導(dǎo)語(yǔ)

NLP 任務(wù)(序列標(biāo)注、分類、句子關(guān)系判斷、生成式)訓(xùn)練時(shí),通常使用機(jī)器學(xué)習(xí)框架 Pytorch 或 Tensorflow,在其之上定義模型以及自定義模型的數(shù)據(jù)預(yù)處理,這種方式很難做到模型沉淀、復(fù)用和共享,而對(duì)于模型上線同樣也面臨:上線難、延遲高、成本高等問題,TEG-AI 平臺(tái)部-搜索業(yè)務(wù)中心從 2019 年底開始,前期經(jīng)過大量調(diào)研,在 AllenNLP 基礎(chǔ)上自研了推理及訓(xùn)練一體化工具 TurboNLP, 涵蓋了訓(xùn)練框架 TurboNLP-exp 和推理框架 TuboNLP-inference,TurboNLP-exp 訓(xùn)練框架具備可配置、簡(jiǎn)單、多框架、多任務(wù)、可復(fù)用等特點(diǎn),在其之上能夠快速、高效的進(jìn)行 NLP 實(shí)驗(yàn).

TurboNLP-inference 推理框架底層支持高效的模型推理庫(kù) BertInference,集成了常用的 NLP 模型, 具備無縫兼容 TurboNLP-exp、推理性能高(在 BERT-base 文檔分類業(yè)務(wù)模型上實(shí)測(cè),F(xiàn)P6 精度在 batch_size=64、seq_len=64 的情況下達(dá)到了 0.275ms/query,INT8 精度在 batch_size=64、seq_len=64 的情況下達(dá)到了 0.126ms/query 性能)等特點(diǎn),NLP 訓(xùn)練和推理一體化工具極大的簡(jiǎn)化了訓(xùn)練到推理的流程,降低了任務(wù)訓(xùn)練、模型上線等人力成本,本文將主要介紹 NLP 訓(xùn)練和推理一體化工具。

背景

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

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

 

簡(jiǎn)介

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

TurboNLP-exp 訓(xùn)練框架

TurboNLP-exp 訓(xùn)練框架是基于 AllenNLP 研發(fā),為了滿足算法研究者和推理的業(yè)務(wù)需求,TurboNLP-exp 不斷優(yōu)化,具備了業(yè)界框架不具備的特性,下表是 TurboNLP-exp 于業(yè)界其他框架的對(duì)比:

框架 難度 模塊化 可配置 Pytorch Tensorflow 多任務(wù)訓(xùn)練 多模型格式導(dǎo)出 數(shù)據(jù)預(yù)處理 推理
PyText T T T F F F Python Caffe2 執(zhí)行引擎
AllenNLP 簡(jiǎn)單 T T T F F F Python 簡(jiǎn)單的 Python 服務(wù)
TurboNLP-exp 簡(jiǎn)單 T T T T T T Python、C++ 高效的 TurboNLP-inference

以下會(huì)詳細(xì)介紹我們對(duì) TurboNLP-exp 上所做的優(yōu)化。

模塊化及可配置

TurboNLP-exp 的可配置程度高,源于其合理的模塊設(shè)計(jì),通過模塊化封裝,TurboNLP-exp 支持隨意組合模型、擴(kuò)展子模塊等,對(duì)于剛接觸的研究者 TurboNLP-exp 提供了界面化配置,通過可視化界面生成數(shù)據(jù)預(yù)處理和模型配置,大大降低了上手難度。

數(shù)據(jù)預(yù)處理模塊化及可配置

 

數(shù)據(jù)預(yù)處理粗略可分為dataset_reader、token_indexer、tokenizer、vocabulary四個(gè)模塊。

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

模型模塊化及可配置

 

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

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

多平臺(tái)支持

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

 

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

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

 

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

  • 能通過現(xiàn)有單任務(wù)模型快速組合多任務(wù)模型。
  • 支持多種組合規(guī)則,包括:共享、累加、shotcut。
    • 共享:多個(gè)模型共享同一個(gè) encoder 輸出。
    • 累加:每個(gè)任務(wù)的 encoder 累加后輸出到每個(gè)任務(wù)的 tagger 層上。
    • shotcut:每個(gè)任務(wù)的 encoder 輸出將作為下個(gè)任務(wù)的 encoder 輸入。
  • 支持多種訓(xùn)練調(diào)度方式,包括:依次調(diào)度、隨機(jī)調(diào)度、共同調(diào)度。
    • 依次及隨機(jī)調(diào)度屬于交替訓(xùn)練,可以在多任務(wù)的基礎(chǔ)上獲取各自任務(wù)的最優(yōu)解,且不需要構(gòu)造統(tǒng)一輸入,更加簡(jiǎn)單。
    • 共同調(diào)度屬于聯(lián)合訓(xùn)練,使用統(tǒng)一的輸入,由于 loss 最后會(huì)累加,因此查找的是多任務(wù)綜合最優(yōu)解。
  • 用戶可根據(jù)實(shí)際任務(wù)場(chǎng)景自由配置對(duì)應(yīng)的組合方式和調(diào)度方式,以此來讓多任務(wù)能達(dá)到最優(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ù)處理能夠同時(shí)支持 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)試時(shí),使用 Python 數(shù)據(jù)預(yù)處理能夠快速實(shí)驗(yàn),當(dāng) Python 數(shù)據(jù)預(yù)處理固定后,通過配置切換為 C++數(shù)據(jù)預(yù)處理來驗(yàn)證數(shù)據(jù)預(yù)處理結(jié)果,從而保證訓(xùn)練端和推理端數(shù)據(jù)一致性。

在推理端,使用與訓(xùn)練端相同的配置,C++數(shù)據(jù)預(yù)處理輸出將作為模型輸入,C++數(shù)據(jù)預(yù)處理——TurboNLP-data采用多線程、預(yù)處理隊(duì)列來保證數(shù)據(jù)預(yù)處理的低延遲,在 BERT-base 五分類模型上實(shí)測(cè),在 batch_size=64、seq_len=64 的情況下達(dá)到了0.05ms/query的性能。

TurboNLP-inference 推理框架

TurboNLP-inference 推理框架能夠無縫兼容TurboNLP-exp、具備低延遲、可配置等特點(diǎn),TurboNLP-inference 底層支持五種推理庫(kù):BertInference(BERT 推理加速庫(kù))、libtorch、tensorflow、TurboTransformers(WXG 開源的 BERT 推理加速庫(kù))、BertInference-cpu(BERT 在 CPU 上推理加速庫(kù)),其中,BertInference是我們基于TensorRT研發(fā)的一款高效能 BERT 推理庫(kù),BertInference-cpu是和 intel 合作開發(fā)的一款在 CPU 上進(jìn)行 BERT 推理加速庫(kù)。

以下是推理框架 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ù)處理輸出自動(dòng)的喂入模型輸入。
  • 推理代碼將會(huì)以 C++ so 包和 API 的形式嵌入業(yè)務(wù)代碼中,盡量少的侵入業(yè)務(wù)代碼,修改靈活方便。

業(yè)務(wù)應(yīng)用

NLP 一體化工具(TurboNLP-exp 訓(xùn)練框架和 TurboNLP-inference 推理框架)極大的簡(jiǎn)化了模型從訓(xùn)練到上線的流程(如下圖所示),依據(jù)業(yè)務(wù)模型的實(shí)際上線流程,手工訓(xùn)練和部署需要 14.5/人天,而使用 NLP 一體化工具僅需 4/人天,整體節(jié)省了**72.4%**人力成本。

 

TurboNLP-inference 目前已成功支持了 TEG-AI 平臺(tái)部-搜索業(yè)務(wù)中心的 5 個(gè)業(yè)務(wù):

  • 某業(yè)務(wù)的文檔分類 BERT 模型,F(xiàn)P16 精度在 batch_size=64、seq_len=64 的情況下達(dá)到了0.290ms/query的性能,機(jī)器資源節(jié)省了97%,上線周期縮短了近50%,極大的降低了機(jī)器和人力成本。
  • 某業(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 精度情況下,達(dá)到了2ms/query的性能。
  • 某業(yè)務(wù)的 query 非必留 BERT-base 模型,上線周期極大縮短,在 FP16 精度情況下,達(dá)到了1.1ms/query的性能。

TurboNLP-inference 在業(yè)務(wù)上的表現(xiàn),離不開對(duì)訓(xùn)練框架的無縫支持以及底層高效推理庫(kù)的支持。

最新進(jìn)展

TurboNLP-inference 的底層高效推理庫(kù)之一——BertInference 目前已具備支持 INT8 推理,優(yōu)化了 Attention 計(jì)算,我們使用 BERT-base 文本分類業(yè)務(wù)模型和真實(shí)的線上數(shù)據(jù)進(jìn)行了性能測(cè)試,效果如下:

 

在 batch_size=64,、seq_len=64 的情況下,性能達(dá)到了0.126ms/query,INT8 相比于 FP16 提升了**54.2%**左右。

TurboNLP-inference 支持 INT8 校準(zhǔn),能夠使用已有的模型直接校準(zhǔn),通過配置調(diào)整校準(zhǔn)過程,校準(zhǔn)過程簡(jiǎn)單,校準(zhǔn)后可以直接使用 INT8 精度進(jìn)行模型推理。

總結(jié)和展望

NLP 一體化工具(TurboNLP-exp 訓(xùn)練框架和 TurboNLP-inference 推理框架)目前已經(jīng)在 TEG AI 工作組內(nèi)部演進(jìn),在預(yù)訓(xùn)練模型方面也有一些合作應(yīng)用,同時(shí)我們也正在積極與 AI 工作組的算力和太極機(jī)器學(xué)習(xí)平臺(tái)團(tuán)隊(duì)積極合作,把訓(xùn)練端能力在平臺(tái)上更好的開放出來。接下來訓(xùn)練及推理框架也會(huì)在 TencentNLP 的公司統(tǒng)一協(xié)同 oteam 里面去演進(jìn),也期待在公司內(nèi)更多團(tuán)隊(duì)的合作。

TurboNLP-inference 的 BERT 推理加速在 INT8 精度模型效果上仍有進(jìn)一步的提升空間,目前著力于 QAT 以及知識(shí)蒸餾、QAT 目前在五分類 BERT-base 模型上實(shí)測(cè),Accuracy 僅降低了0.8%,加入知識(shí)蒸餾有望達(dá)到 Accuracy 不掉。

責(zé)任編輯:武曉燕 來源: 51CTO專欄
相關(guān)推薦

2012-08-02 11:11:32

室外一體化UPS

2009-09-07 23:09:17

2018-04-03 13:20:40

UCloud AI T訓(xùn)練平臺(tái)

2009-07-02 09:32:00

2024-03-25 08:15:02

數(shù)據(jù)分析AI 一體化大數(shù)據(jù)

2009-12-03 15:34:41

Suse Linux

2011-05-24 09:26:02

有線無線3G

2009-08-17 22:32:25

IT運(yùn)維管理監(jiān)控運(yùn)維一體化摩卡

2017-05-16 10:46:06

博陽(yáng)咨詢流程管理

2012-03-27 22:31:29

2014-12-25 11:25:31

2014-07-30 10:08:26

collectlLinux性能監(jiān)測(cè)

2020-03-12 18:09:28

工業(yè)信息安全勒索病毒

2020-03-11 22:47:36

信息安全病毒工控安全

2023-11-16 13:24:39

OceanBase數(shù)據(jù)庫(kù)

2023-07-19 22:13:25

一體化推送平臺(tái)

2009-03-19 09:50:00

華為機(jī)房一體化

2014-10-14 10:45:18

用友
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)