大規(guī)模語(yǔ)言模型( LSLMs )如 BERT 、 GPT-2 和 XL-Net 為許多自然語(yǔ)言處理( NLP )任務(wù)帶來(lái)了令人興奮的精度飛躍。自 2018 年 10 月發(fā)布以來(lái), BERT (來(lái)自變形金剛的雙向編碼器表示)及其眾多變體仍然是最流行的語(yǔ)言模型之一, 仍然提供最先進(jìn)的準(zhǔn)確性 。
BERT 為 NLP 任務(wù)提供了準(zhǔn)確度上的飛躍,為許多行業(yè)的公司提供了高質(zhì)量、基于語(yǔ)言的服務(wù)。為了在生產(chǎn)中使用該模型,您必須考慮延遲和準(zhǔn)確性等因素,這些因素影響最終用戶對(duì)服務(wù)的滿意度。 BERT 由于其 12 / 24 層堆疊、多頭注意力網(wǎng)絡(luò),需要在推理過(guò)程中進(jìn)行重要計(jì)算。這對(duì)公司部署 ZVK7]作為實(shí)時(shí)應(yīng)用的一部分提出了挑戰(zhàn)。
今天, NVIDIA 發(fā)布了 TensorRT 的第 8 版,在 NVIDIA A100 GPU 上, BERT-Large 的推理延遲降低到 1. 2 毫秒,并對(duì)基于 transformer 網(wǎng)絡(luò)進(jìn)行了新的優(yōu)化。 TensorRT 中新的廣義優(yōu)化方法可以加速所有這些模型,將推理時(shí)間減少到 TensorRT 7 的一半。
TensorRT
TensorRT 是一個(gè)用于高性能、深入學(xué)習(xí)推理的平臺(tái),它包括一個(gè)優(yōu)化程序和運(yùn)行時(shí),可以最大限度地減少延遲和提高生產(chǎn)中的吞吐量。使用 TensorRT ,您可以優(yōu)化在所有主要框架中訓(xùn)練的模型,以高精度校準(zhǔn)較低的精度,并最終部署到生產(chǎn)中。
在這個(gè) NVIDIA/TensorRT GitHub repo 中,所有用 BERT 實(shí)現(xiàn)這一性能的代碼都將作為開源發(fā)布,它是 BERT 編碼器的一個(gè)基本構(gòu)建塊,因此您可以將這些優(yōu)化應(yīng)用于任何基于 BERT 的 NLP 任務(wù)。 BERT 應(yīng)用于會(huì)話 AI 之外的一組擴(kuò)展的語(yǔ)音和 NLP 應(yīng)用程序,所有這些應(yīng)用程序都可以利用這些優(yōu)化。
問(wèn)答( QA )或閱讀理解是測(cè)試模型理解上下文能力的一種流行方法。團(tuán)隊(duì) leaderboard 為他們提供的數(shù)據(jù)集和測(cè)試集跟蹤此任務(wù)的最佳執(zhí)行者。在過(guò)去的幾年里,隨著學(xué)術(shù)界和企業(yè)的全球性貢獻(xiàn), QA 能力得到了迅速的發(fā)展。
在本文中,我們將演示如何使用 Python 創(chuàng)建一個(gè)簡(jiǎn)單的 QA 應(yīng)用程序,該應(yīng)用程序由今天發(fā)布的 TensorRT 優(yōu)化的 BERT 代碼提供支持。該示例提供了一個(gè) API 來(lái)輸入段落和問(wèn)題,并返回由 BERT 模型生成的響應(yīng)。
下面簡(jiǎn)要回顧一下使用 TensorRT 對(duì) BERT 執(zhí)行訓(xùn)練和推理的步驟。
BERT 訓(xùn)練和推理管道
NLP 研究人員和開發(fā)人員面臨的一個(gè)主要問(wèn)題是缺乏高質(zhì)量的標(biāo)記訓(xùn)練數(shù)據(jù)。為了克服從零開始學(xué)習(xí)任務(wù)模型的問(wèn)題, NLP 的突破使用了大量的未標(biāo)記文本,并將 NLP 任務(wù)分為兩部分:
學(xué)習(xí)表達(dá)單詞的意義,它們之間的關(guān)系,即使用輔助任務(wù)和大量文本建立語(yǔ)言模型
通過(guò)使用一個(gè)相對(duì)較小的、特定于任務(wù)的、以有監(jiān)督的方式訓(xùn)練的網(wǎng)絡(luò)來(lái)擴(kuò)充語(yǔ)言模型,從而將語(yǔ)言模型專門化為實(shí)際任務(wù)。
這兩個(gè)階段通常稱為預(yù)訓(xùn)練和微調(diào)。這種范式允許使用預(yù)先訓(xùn)練的語(yǔ)言模型來(lái)處理廣泛的任務(wù),而不需要對(duì)模型架構(gòu)進(jìn)行任何特定于任務(wù)的更改。在本例中, BERT 提供了一個(gè)高質(zhì)量的語(yǔ)言模型,該模型針對(duì) QA 進(jìn)行了微調(diào),但適用于其他任務(wù),如句子分類和情感分析。
您可以從在線提供的預(yù)訓(xùn)練檢查點(diǎn)開始,也可以從您自己的定制語(yǔ)料庫(kù)上的預(yù)訓(xùn)練 BERT 開始(圖 1 )。您還可以從檢查點(diǎn)初始化預(yù)訓(xùn)練,然后繼續(xù)對(duì)自定義數(shù)據(jù)進(jìn)行訓(xùn)練。
圖 1 從預(yù)先訓(xùn)練的檢查點(diǎn)生成 BERT TensorRT 引擎
使用自定義或特定領(lǐng)域的數(shù)據(jù)進(jìn)行預(yù)訓(xùn)練可能會(huì)產(chǎn)生有趣的結(jié)果,例如 BioBert 。然而,它是計(jì)算密集型的,需要一個(gè)大規(guī)模的并行計(jì)算基礎(chǔ)設(shè)施才能在合理的時(shí)間內(nèi)完成。 GPU – 啟用的多節(jié)點(diǎn)訓(xùn)練是此類場(chǎng)景的理想解決方案。有關(guān) NVIDIA 開發(fā)人員如何在不到一小時(shí)的時(shí)間內(nèi)培訓(xùn) BERT 的更多信息,請(qǐng)參閱 使用 GPU s 培訓(xùn) BERT 。
在微調(diào)步驟中,使用特定任務(wù)訓(xùn)練數(shù)據(jù)訓(xùn)練基于預(yù)訓(xùn)練 BERT 語(yǔ)言模型的特定任務(wù)網(wǎng)絡(luò)。對(duì)于 QA ,這是(段落、問(wèn)題、答案)三倍。與預(yù)訓(xùn)練相比,微調(diào)的計(jì)算要求通常要低得多。
使用 QA 神經(jīng)網(wǎng)絡(luò)進(jìn)行推理:
通過(guò)將微調(diào)的權(quán)重和網(wǎng)絡(luò)定義傳遞給 TensorRT 生成器來(lái)創(chuàng)建 TensorRT 引擎。
使用此引擎啟動(dòng) TensorRT 運(yùn)行時(shí)。
向 TensorRT 運(yùn)行時(shí)提供一篇文章和一個(gè)問(wèn)題,并接收網(wǎng)絡(luò)預(yù)測(cè)的答案作為輸出。
圖 2 顯示了整個(gè)工作流。
圖 2 使用 TensorRT 運(yùn)行時(shí)引擎對(duì) BERT QA 任務(wù)執(zhí)行推斷的工作流
運(yùn)行樣本!
通過(guò)以下步驟設(shè)置環(huán)境以執(zhí)行 BERT 推斷:
創(chuàng)建具有先決條件的 Docker 映像。
從微調(diào)的重量構(gòu)建 TensorRT 引擎。
對(duì)給定的段落和問(wèn)題進(jìn)行推理。
我們使用腳本來(lái)執(zhí)行這些步驟,您可以在 TensorRT BERT 樣本回購(gòu) 中找到這些步驟。雖然我們描述了可以傳遞給每個(gè)腳本的幾個(gè)選項(xiàng),但為了快速入門,您還可以運(yùn)行以下代碼示例:
# Clone the TensorRT repository and navigate to BERT demo directory git clone --recursive https://github.com/NVIDIA/TensorRT && cd TensorRT # Create and launch the Docker image # Here we assume the following: # - the os being ubuntu-18.04 (see below for other supported versions) # - cuda version is 11.3.1 bash docker/build.sh --file docker/ubuntu-18.04.Dockerfile --tag tensorrt-ubuntu18.04-cuda11.3 --cuda 11.3.1 # Run the Docker container just created bash docker/launch.sh --tag tensorrt-ubuntu18.04-cuda11.3 --gpus all # cd into the BERT demo folder cd $TRT_OSSPATH/demo/BERT # Download the BERT model fine-tuned checkpoint bash scripts/download_model.sh # Build the TensorRT runtime engine. # To build an engine, use the builder.py script. mkdir -p engines && python3 builder.py -m models/fine-tuned/bert_tf_ckpt_large_qa_squad2_amp_128_v19.03.1/model.ckpt -o engines/bert_large_128.engine -b 1 -s 128 --fp16 -c models/fine-tuned/bert_tf_ckpt_large_qa_squad2_amp_128_v19.03.1
最后一個(gè)命令使用混合精度(--fp16
)和-s 128
大隊(duì) v2 FP16 序列長(zhǎng)度 128 檢查點(diǎn)(-c models/fine-tuned/bert_tf_ckpt_large_qa_squad2_amp_128_v19.03.1
)構(gòu)建最大批大小為 1 ( BERT )、序列長(zhǎng)度為 128 (-s 128
)的引擎。
現(xiàn)在,給它一段話,通過(guò)問(wèn)幾個(gè)問(wèn)題,看看它能破譯多少信息。
python3 inference.py -e engines/bert_large_128.engine -p "TensorRT is a high performance deep learning inference platform that delivers low latency and high throughput for apps such as recommenders, speech and image/video on NVIDIA GPUs. It includes parsers to import models, and plugins to support novel ops and layers before applying optimizations for inference. Today NVIDIA is open-sourcing parsers and plugins in TensorRT so that the deep learning community can customize and extend these components to take advantage of powerful TensorRT optimizations for your apps." -q "What is TensorRT?" -v models/fine-tuned/bert_tf_ckpt_large_qa_squad2_amp_128_v19.03.1/vocab.txt
此命令的結(jié)果應(yīng)類似于以下內(nèi)容:
Passage: TensorRT is a high performance deep learning inference platform that delivers low latency and high throughput for apps such as recommenders, speech and image/video on NVIDIA GPUs. It includes parsers to import models, and plugins to support novel ops and layers before applying optimizations for inference. Today NVIDIA is open-sourcing parsers and plugins in TensorRT so that the deep learning community can customize and extend these components to take advantage of powerful TensorRT optimizations for your apps.
Question: What is TensorRT? Answer: 'a high performance deep learning inference platform'
對(duì)同一篇文章提出不同的問(wèn)題,你應(yīng)該得到以下結(jié)果:
Question: What is included in TensorRT? Answer: 'parsers to import models, and plugins to support novel ops and layers before applying optimizations for inference'
該模型提供的答案基于所提供的文章的文本是準(zhǔn)確的,樣本使用 FP16 精度與 TensorRT 進(jìn)行推理。這有助于在 NVIDIA GPU s 的張量核上實(shí)現(xiàn)盡可能高的性能。在我們的測(cè)試中,我們測(cè)量了 TensorRT 的精確度,與 FP16 精度的框架內(nèi)推理相當(dāng)。
腳本選項(xiàng)
以下是腳本可用的選項(xiàng), docker/build.sh 腳本使用 docker 文件夾中提供的 docker 文件構(gòu)建 docker 映像。它安裝所有必需的包,具體取決于您選擇作為 docker 文件的操作系統(tǒng)。在本文中,我們使用了 ubuntu-18 。 04 ,但也提供了 ubuntu-16 。 04 和 ubuntu-20 。 04 的 dockerfiles 。
按如下方式運(yùn)行腳本:
bash docker/build.sh --file docker/ubuntu-xx.04.Dockerfile --tag tensorrt-tag --cuda cuda_version
創(chuàng)建并運(yùn)行環(huán)境后,下載 BERT 的微調(diào)權(quán)重。請(qǐng)注意,創(chuàng)建 TensorRT 引擎不需要預(yù)先訓(xùn)練的權(quán)重(只需要微調(diào)的權(quán)重)。在微調(diào)權(quán)重的同時(shí),使用相關(guān)的配置文件,該文件指定了注意頭數(shù)、層數(shù)等參數(shù),以及 vocab 。 txt 文件,該文件包含從訓(xùn)練過(guò)程中學(xué)習(xí)到的詞匯表;使用 download _ model 。 sh 腳本下載它們。作為此腳本的一部分,您可以指定要下載的 BERT 模型的微調(diào)權(quán)重集。命令行參數(shù)控制精確的 BERT 模型,以便稍后用于模型構(gòu)建和推斷:
sh download_model.sh [tf|pyt] [base|large|megatron-large] [128|384] [v2|v1_1] [sparse] [int8-qat] tf | pyt tensorflow or pytorch version base | large | megatron-large - determine whether to download a BERT-base or BERT-large or megatron model to optimize 128 | 384 - determine whether to download a BERT model for sequence length 128 or 384 v2 | v1_1, fine-tuned on squad2 or squad1.1 sparse, download sparse version int8-qat, download int8 weights
Examples:
# Running with default parameters
bash download_model.sh
# Running with custom parameters (BERT-large, FP32 fine-tuned weights, 128 sequence length)
sh download_model.sh large tf fp32 128
默認(rèn)情況下,此腳本下載微調(diào)的 TensorFlow BERT -large ,精度為 FP16 ,序列長(zhǎng)度為 128 。除了微調(diào)的模型外,還可以使用配置文件、枚舉模型參數(shù)和詞匯表文件將 BERT 模型輸出轉(zhuǎn)換為文本答案。
接下來(lái),您可以構(gòu)建 BERT 引擎并將其用于 QA 示例,即推理。腳本 builder.py 基于下載的 TensorRT 微調(diào)模型構(gòu)建用于推理的 TensorRT 引擎。
確保提供給以下腳本的序列長(zhǎng)度與下載的模型的序列長(zhǎng)度匹配。
python3 builder.py [-h] [-m CKPT] [-x ONNX] [-pt PYTORCH] -o OUTPUT [-b BATCH_SIZE] [-s SEQUENCE_LENGTH] -c CONFIG_DIR [-f] [-i] [-t] [-w WORKSPACE_SIZE] [-j SQUAD_JSON] [-v VOCAB_FILE] [-n CALIB_NUM] [-p CALIB_PATH] [-g] [-iln] [-imh] [-sp] [-tcf TIMING_CACHE_FILE]
以下是可選參數(shù):
-h, --help show this help message and exit -m CKPT, --ckpt CKPT The checkpoint file basename, e.g.: basename(model.ckpt-766908.data-00000-of-00001) is model.ckpt-766908 (default: None) -x ONNX, --onnx ONNX The ONNX model file path. (default: None) -pt PYTORCH, --pytorch PYTORCH The PyTorch checkpoint file path. (default: None) -o OUTPUT, --output OUTPUT The bert engine file, ex bert.engine (default: bert_base_384.engine) -b BATCH_SIZE, --batch-size BATCH_SIZE Batch size(s) to optimize for. The engine will be usable with any batch size below this, but may not be optimal for smaller sizes. Can be specified multiple times to optimize for more than one batch size.(default: []) -s SEQUENCE_LENGTH, --sequence-length SEQUENCE_LENGTH Sequence length of the BERT model (default: []) -c CONFIG_DIR, --config-dir CONFIG_DIR The folder containing the bert_config.json, which can be downloaded e.g. from https://github.com/google-research/bert#pre-trained-models (default: None) -f, --fp16 Indicates that inference should be run in FP16 precision (default: False) -i, --int8 Indicates that inference should be run in INT8 precision (default: False) -t, --strict Indicates that inference should be run in strict precision mode (default: False) -w WORKSPACE_SIZE, --workspace-size WORKSPACE_SIZE Workspace size in MiB for building the BERT engine (default: 1000) -j SQUAD_JSON, --squad-json SQUAD_JSON squad json dataset used for int8 calibration (default: squad/dev-v1.1.json) -v VOCAB_FILE, --vocab-file VOCAB_FILE Path to file containing entire understandable vocab (default: ./pre-trained_model/uncased_L-24_H-1024_A-16/vocab.txt) -n CALIB_NUM, --calib-num CALIB_NUM calibration batch numbers (default: 100) -p CALIB_PATH, --calib-path CALIB_PATH calibration cache path (default: None) -g, --force-fc2-gemm Force use gemm to implement FC2 layer (default: False) -iln, --force-int8-skipln Run skip layernorm with INT8 (FP32 or FP16 by default) inputs and output (default: False) -imh, --force-int8-multihead Run multi-head attention with INT8 (FP32 or FP16 by default) input and output (default: False) -sp, --sparse Indicates that model is sparse (default: False) -tcf TIMING_CACHE_FILE, --timing-cache-file TIMING_CACHE_FILE Path to tensorrt build timeing cache file, only available for tensorrt 8.0 and later (default: None)
Example:
python3 builder.py -m models/fine-tuned/bert_tf_ckpt_large_qa_squad2_amp_128_v19.03.1/model.ckpt -o engines/bert_large_128.engine -b 1 -s 128 --fp16 -c models/fine-tuned/bert_tf_ckpt_large_qa_squad2_amp_128_v19.03.1
現(xiàn)在您應(yīng)該有一個(gè) TensorRT 引擎engines/bert_large_128.engine
,用于 QA 的inference.py
腳本。
在本文后面,我們將描述構(gòu)建 TensorRT 引擎的過(guò)程。現(xiàn)在,您可以向 inference.py 提供一篇文章和一個(gè)查詢,并查看模型是否能夠正確回答您的查詢。
與推理腳本交互的方法很少:
段落和問(wèn)題可以使用 –通道 和 –問(wèn)題 標(biāo)志作為命令行參數(shù)提供。
它們可以使用 – U 文件 和 –問(wèn)題文件 標(biāo)志從給定的文件傳入。
如果在執(zhí)行過(guò)程中沒(méi)有給出這兩個(gè)標(biāo)志,則在執(zhí)行開始后,系統(tǒng)會(huì)提示您輸入段落和問(wèn)題。
以下是 inference.py 腳本的參數(shù):
Usage: inference.py [-h] [-e ENGINE] [-b BATCH_SIZE] [-p [PASSAGE [PASSAGE ...]]] [-pf PASSAGE_FILE] [-q [QUESTION [QUESTION ...]]] [-qf QUESTION_FILE] [-sq SQUAD_JSON] [-o OUTPUT_PREDICTION_FILE] [-v VOCAB_FILE] [-s SEQUENCE_LENGTH] [--max-query-length MAX_QUERY_LENGTH] [--max-answer-length MAX_ANSWER_LENGTH] [--n-best-size N_BEST_SIZE] [--doc-stride DOC_STRIDE]
這個(gè)腳本使用一個(gè)預(yù)先構(gòu)建的 TensorRT BERT QA 引擎來(lái)根據(jù)提供的文章回答問(wèn)題。
以下是可選參數(shù):
-h, --help show this help message and exit -e ENGINE, --engine ENGINE Path to BERT TensorRT engine -b BATCH_SIZE, --batch-size BATCH_SIZE Batch size for inference. -p [PASSAGE [PASSAGE ...]], --passage [PASSAGE [PASSAGE ...]] Text for paragraph/passage for BERT QA -pf PASSAGE_FILE, --passage-file PASSAGE_FILE File containing input passage -q [QUESTION [QUESTION ...]], --question [QUESTION [QUESTION ...]] Text for query/question for BERT QA -qf QUESTION_FILE, --question-file QUESTION_FILE File containing input question -sq SQUAD_JSON, --squad-json SQUAD_JSON SQuAD json file -o OUTPUT_PREDICTION_FILE, --output-prediction-file OUTPUT_PREDICTION_FILE Output prediction file for SQuAD evaluation -v VOCAB_FILE, --vocab-file VOCAB_FILE Path to file containing entire understandable vocab -s SEQUENCE_LENGTH, --sequence-length SEQUENCE_LENGTH The sequence length to use. Defaults to 128 --max-query-length MAX_QUERY_LENGTH The maximum length of a query in number of tokens. Queries longer than this will be truncated --max-answer-length MAX_ANSWER_LENGTH The maximum length of an answer that can be generated --n-best-size N_BEST_SIZE Total number of n-best predictions to generate in the nbest_predictions.json output file --doc-stride DOC_STRIDE When splitting up a long document into chunks, what stride to take between chunks
BERT 與 TensorRT 的推理
有關(guān)推理過(guò)程的逐步描述和演練,請(qǐng)參見示例文件夾中的 Python script inference 。 py 和詳細(xì)的 Jupyter notebook inference 。 ipynb 。下面是使用 TensorRT 執(zhí)行推理的幾個(gè)關(guān)鍵參數(shù)和概念。
BERT 或更具體地說(shuō),編碼器層使用以下參數(shù)來(lái)控制其操作:
批量大小
序列長(zhǎng)度
注意頭數(shù)
這些參數(shù)的值取決于所選的 BERT 模型,用于設(shè)置 TensorRT 計(jì)劃文件(執(zhí)行引擎)的配置參數(shù)。
對(duì)于每個(gè)編碼器,還指定隱藏層的數(shù)量和注意頭的大小。您還可以從 TensorFlow 檢查點(diǎn)文件中讀取所有早期參數(shù)。
由于我們正在使用的 BERT 模型已經(jīng)針對(duì) SQuAD 數(shù)據(jù)集上 QA 的下游任務(wù)進(jìn)行了微調(diào),因此網(wǎng)絡(luò)的輸出(即輸出完全連接層)是一段文本,其中答案出現(xiàn)在文章中,在示例中稱為 h ? U 輸出。生成 TensorRT 引擎之后,您可以序列化它,稍后在 TensorRT 運(yùn)行時(shí)使用它。
在推理過(guò)程中,異步執(zhí)行從 CPU 到 GPU 的內(nèi)存復(fù)制和反向操作,分別將張量放入和移出 GPU 內(nèi)存。異步內(nèi)存復(fù)制操作通過(guò)與設(shè)備和主機(jī)之間的內(nèi)存復(fù)制操作重疊計(jì)算來(lái)隱藏內(nèi)存?zhèn)鬏數(shù)难舆t。圖 3 顯示了異步內(nèi)存拷貝和內(nèi)核執(zhí)行。
圖 3 。 TensorRT 運(yùn)行時(shí)流程
BERT 模型(圖 3 )的輸入包括:
input_ids :帶有段落標(biāo)記 ID 的張量與用作推理輸入的問(wèn)題串聯(lián)在一起
segment_ids :區(qū)分段落和問(wèn)題
input_mask :指示序列中哪些元素是標(biāo)記,哪些是填充元素
輸出( start_logits 和 end_logits )表示答案的范圍,網(wǎng)絡(luò)根據(jù)問(wèn)題在文章中預(yù)測(cè)答案的范圍。
基準(zhǔn)測(cè)試 BERT 推理性能
BERT 可以應(yīng)用于在線和離線用例。在線 NLP 應(yīng)用程序,如會(huì)話人工智能,在推理過(guò)程中占用了緊張的延遲預(yù)算。為了響應(yīng)單個(gè)用戶的查詢,需要按順序執(zhí)行多個(gè)模型。當(dāng)用作服務(wù)時(shí),客戶體驗(yàn)的總時(shí)間包括計(jì)算時(shí)間以及輸入和輸出網(wǎng)絡(luò)延遲。時(shí)間越長(zhǎng),性能越差,客戶體驗(yàn)越差。
雖然單個(gè)模型的準(zhǔn)確延遲可能因應(yīng)用程序而異,但一些實(shí)時(shí)應(yīng)用程序需要在 10 毫秒內(nèi)執(zhí)行語(yǔ)言模型。
使用 NVIDIA 安培架構(gòu) A100 GPU , BERT – 用 TensorRT 8 優(yōu)化的大可以在 1 。 2ms 內(nèi)對(duì) QA 任務(wù)執(zhí)行推斷,類似于批大小為 1 、序列長(zhǎng)度為 128 的團(tuán)隊(duì)中可用的任務(wù)。
使用 TensorRT 優(yōu)化樣本,您可以在 10ms 延遲預(yù)算內(nèi)為 BERT -base 或 BERT -large 執(zhí)行不同的批處理大小。例如,在 TensorRT 8 的 A30 上,序列長(zhǎng)度= 384 批大小= 1 的 BERT 大型模型的推斷延遲為 3 。 62ms 。同樣的模型,序列長(zhǎng)度= 384 ,在 CPU 平臺(tái)上高度優(yōu)化代碼(**),批量大小= 1 是 76ms 。
圖 4 。在 NVIDIA A30 GPU 服務(wù)器上執(zhí)行 BERT -large 與僅 CPU 服務(wù)器上執(zhí)行 BERT -large 的計(jì)算延遲(毫秒)
性能度量在將張量作為輸入傳遞和將 logit 作為輸出收集之間,在 QA 任務(wù)上執(zhí)行網(wǎng)絡(luò)的純計(jì)算延遲時(shí)間。您可以在 repo 中的 scripts / inference \ u benchmark 。 sh 腳本中找到用于對(duì)示例進(jìn)行基準(zhǔn)測(cè)試的代碼。
概括
NVIDIA 正在發(fā)布 TensorRT 8 。 0 ,這使得在 A30 GPU s 上以 0 。 74ms 的時(shí)間執(zhí)行 BERT 推斷成為可能。 BERT 上的基準(zhǔn)測(cè)試推斷代碼在 TensorRT 開源 repo 中作為示例提供。
本文概述了如何使用 TensorRT 示例和性能結(jié)果。我們進(jìn)一步描述了如何將 BERT 示例作為簡(jiǎn)單應(yīng)用程序和 Jupyter 筆記本的一部分來(lái)使用的工作流,您可以在其中傳遞一個(gè)段落并提出與之相關(guān)的問(wèn)題。新的優(yōu)化和可實(shí)現(xiàn)的性能使 BERT 在生產(chǎn)中用于延遲預(yù)算緊張的應(yīng)用程序(如會(huì)話人工智能)變得切實(shí)可行。
關(guān)于作者
Purnendu Mukherjee 是一名高級(jí)深度學(xué)習(xí)軟件工程師,在 NVIDIA 的人工智能應(yīng)用小組工作。他的主要工作是將最先進(jìn)的、基于深度學(xué)習(xí)的語(yǔ)音和自然語(yǔ)言處理模型作為開發(fā) Jarvis 平臺(tái)的一部分投入生產(chǎn)。在加入 NVIDIA 之前, PurnNuu 畢業(yè)于佛羅里達(dá)大學(xué),擁有計(jì)算機(jī)科學(xué)碩士學(xué)位,專門從事基于自然語(yǔ)言的深度學(xué)習(xí)。
Eddie Weill 是 NVIDIA 的解決方案架構(gòu)師,專門幫助企業(yè)客戶開發(fā)深度學(xué)習(xí)和加速計(jì)算解決方案。在擔(dān)任當(dāng)前職務(wù)之前,他曾在智能視頻分析集團(tuán) NVIDIA 從事智能城市深度學(xué)習(xí)模型開發(fā)工作。作為博士學(xué)位的一部分,他專注于計(jì)算機(jī)視覺和嵌入式系統(tǒng)應(yīng)用的深度學(xué)習(xí)。在克萊姆森大學(xué)的研究生學(xué)習(xí)期間,他專注于深度學(xué)習(xí)以及一些高性能計(jì)算應(yīng)用。
Rohit Taneja 是 NVIDIA 的解決方案架構(gòu)師,專注于機(jī)器學(xué)習(xí)和推理相關(guān)的部署。在加入 NVIDIA 之前,他曾在 IBM 的系統(tǒng)實(shí)驗(yàn)室擔(dān)任性能架構(gòu)師和工程師,以支持?jǐn)?shù)據(jù)中心環(huán)境中的機(jī)器學(xué)習(xí)工作負(fù)載加速。他獲得了北卡羅來(lái)納州立大學(xué)的碩士學(xué)位,論文的主題是“ ELD CTR ”電路的自動(dòng)軟控制,以提高能效。
Davide Onofrio 是 NVIDIA 的高級(jí)深度學(xué)習(xí)軟件技術(shù)營(yíng)銷工程師。他在 NVIDIA 專注于深度學(xué)習(xí)技術(shù)開發(fā)人員關(guān)注內(nèi)容的開發(fā)和演示。戴維德在生物特征識(shí)別、虛擬現(xiàn)實(shí)和汽車行業(yè)擔(dān)任計(jì)算機(jī)視覺和機(jī)器學(xué)習(xí)工程師已有多年經(jīng)驗(yàn)。他的教育背景包括米蘭理工學(xué)院的信號(hào)處理博士學(xué)位。
About Young-Jun Ko
Young-Jun Ko 是 NVIDIA 的 AI 開發(fā)技術(shù)工程師,目前正在 GPU 上加速 NLP 推理工作負(fù)載。此前,他曾在 HPC 和 AI 領(lǐng)域工作,并為 RAPIDS 開源項(xiàng)目做出了貢獻(xiàn)。在加入 NVIDIA 之前,楊軍獲得了 EPFL 的計(jì)算機(jī)科學(xué)博士學(xué)位,并在一家 adtech 初創(chuàng)公司擔(dān)任機(jī)器學(xué)習(xí)工程師。
About Siddharth Sharma
Siddharth Sharma 是NVIDIA 加速計(jì)算的高級(jí)技術(shù)營(yíng)銷經(jīng)理。在加入NVIDIA 之前, Siddharth 是 Mathworks Simulink 和 Stateflow 的產(chǎn)品營(yíng)銷經(jīng)理,與汽車和航空航天公司密切合作,采用基于模型的設(shè)計(jì)來(lái)創(chuàng)建控制軟件。
審核編輯:郭婷
-
NVIDIA
+關(guān)注
關(guān)注
14文章
4855瀏覽量
102711 -
gpu
+關(guān)注
關(guān)注
28文章
4673瀏覽量
128594
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論