0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何使用TensorRT 8.0進(jìn)行實(shí)時(shí)自然語(yǔ)言處理

星星科技指導(dǎo)員 ? 來(lái)源:NVIDIA ? 作者:NVIDIA ? 2022-04-02 10:31 ? 次閱讀

大規(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)練。

BERT TensorRT engine generation chart. A pretrained checkpoint or a checkpoint pretrained on custom data can be used as input to the TensorRT Builder, which creates the optimized engine as output.

圖 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è)工作流。

Workflow diagram on how to perform inference with TensorRT runtime engine for BERT QA task. A passage and question are fed to the preprocessing module, which is connected to the TensorRT Engine Execution that runs inference on the loaded TensorRT BERT engine. The output is post-processed obtaining the resulting text answer.

圖 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í)行。

Diagram of the TensorRT Runtime execution process. Inputs are asynchronously loaded from host to device. The engine inference is executed asynchronously. The result, again asynchronously, is copied from the device to the host.

圖 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 。

Bar chart of the compute latency in milliseconds for executing BERT-large on an NVIDIA A30 GPU with 3.6ms vs. a CPU-only server with 76ms, the GPU bar is clearly under the 10ms threshold budget for conversational AI applications.


圖 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)建控制軟件。

審核編輯:郭婷

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • NVIDIA
    +關(guān)注

    關(guān)注

    14

    文章

    4855

    瀏覽量

    102711
  • gpu
    gpu
    +關(guān)注

    關(guān)注

    28

    文章

    4673

    瀏覽量

    128594
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    自然語(yǔ)言處理與機(jī)器學(xué)習(xí)的區(qū)別

    在人工智能的快速發(fā)展中,自然語(yǔ)言處理(NLP)和機(jī)器學(xué)習(xí)(ML)成為了兩個(gè)核心的研究領(lǐng)域。它們都致力于解決復(fù)雜的問(wèn)題,但側(cè)重點(diǎn)和應(yīng)用場(chǎng)景有所不同。 1. 自然語(yǔ)言處理(NLP) 定義:
    的頭像 發(fā)表于 11-11 10:35 ?20次閱讀

    使用LLM進(jìn)行自然語(yǔ)言處理的優(yōu)缺點(diǎn)

    自然語(yǔ)言處理(NLP)是人工智能和語(yǔ)言學(xué)領(lǐng)域的一個(gè)分支,它致力于使計(jì)算機(jī)能夠理解、解釋和生成人類語(yǔ)言。大型語(yǔ)言模型(LLM)是NLP領(lǐng)域的一
    的頭像 發(fā)表于 11-08 09:27 ?198次閱讀

    圖像識(shí)別技術(shù)包括自然語(yǔ)言處理

    計(jì)算機(jī)視覺技術(shù)對(duì)圖像進(jìn)行處理、分析和理解,從而實(shí)現(xiàn)對(duì)圖像中的目標(biāo)、場(chǎng)景、行為等信息的識(shí)別和理解。圖像識(shí)別技術(shù)包括圖像預(yù)處理、特征提取、分類器設(shè)計(jì)、模型訓(xùn)練等多個(gè)環(huán)節(jié)。 1.2 自然語(yǔ)言
    的頭像 發(fā)表于 07-16 10:54 ?579次閱讀

    Transformer架構(gòu)在自然語(yǔ)言處理中的應(yīng)用

    隨著人工智能技術(shù)的飛速發(fā)展,自然語(yǔ)言處理(NLP)領(lǐng)域取得了顯著的進(jìn)步。其中,Transformer架構(gòu)的提出,為NLP領(lǐng)域帶來(lái)了革命性的變革。本文將深入探討Transformer架構(gòu)的核心思想、組成部分以及在自然語(yǔ)言
    的頭像 發(fā)表于 07-09 11:42 ?667次閱讀

    nlp自然語(yǔ)言處理的應(yīng)用有哪些

    自然語(yǔ)言處理(Natural Language Processing,簡(jiǎn)稱NLP)是人工智能領(lǐng)域的一個(gè)分支,它致力于使計(jì)算機(jī)能夠理解和生成自然語(yǔ)言。隨著技術(shù)的發(fā)展,NLP已經(jīng)在許多領(lǐng)域得到了廣泛
    的頭像 發(fā)表于 07-05 09:55 ?2377次閱讀

    使用Python進(jìn)行自然語(yǔ)言處理

    在探討使用Python進(jìn)行自然語(yǔ)言處理(NLP)的廣闊領(lǐng)域時(shí),我們首先需要理解NLP的基本概念、其重要性、Python在NLP中的優(yōu)勢(shì),以及如何通過(guò)Python實(shí)現(xiàn)一些基礎(chǔ)的NLP任務(wù)。本文將從這些方面展開,并深入介紹幾個(gè)關(guān)鍵的
    的頭像 發(fā)表于 07-04 14:40 ?375次閱讀

    自然語(yǔ)言處理技術(shù)有哪些

    自然語(yǔ)言處理(Natural Language Processing,簡(jiǎn)稱NLP)是人工智能領(lǐng)域的一個(gè)分支,它致力于使計(jì)算機(jī)能夠理解、解釋和生成人類語(yǔ)言自然語(yǔ)言
    的頭像 發(fā)表于 07-03 14:30 ?896次閱讀

    自然語(yǔ)言處理模式的優(yōu)點(diǎn)

    自然語(yǔ)言處理(Natural Language Processing,簡(jiǎn)稱NLP)是人工智能領(lǐng)域的一個(gè)重要分支,它致力于使計(jì)算機(jī)能夠理解、生成和處理人類語(yǔ)言。隨著技術(shù)的發(fā)展,
    的頭像 發(fā)表于 07-03 14:24 ?625次閱讀

    自然語(yǔ)言處理技術(shù)的核心是什么

    自然語(yǔ)言處理(Natural Language Processing,簡(jiǎn)稱NLP)是人工智能領(lǐng)域的一個(gè)重要分支,其核心目標(biāo)是使計(jì)算機(jī)能夠理解、生成和處理人類語(yǔ)言。NLP技術(shù)的發(fā)展已經(jīng)取
    的頭像 發(fā)表于 07-03 14:20 ?494次閱讀

    自然語(yǔ)言處理是什么技術(shù)的一種應(yīng)用

    自然語(yǔ)言處理(Natural Language Processing,簡(jiǎn)稱NLP)是人工智能和語(yǔ)言學(xué)領(lǐng)域的一個(gè)分支,它涉及到使用計(jì)算機(jī)技術(shù)來(lái)處理、分析和生成
    的頭像 發(fā)表于 07-03 14:18 ?557次閱讀

    自然語(yǔ)言處理包括哪些內(nèi)容

    自然語(yǔ)言處理(Natural Language Processing,簡(jiǎn)稱NLP)是人工智能領(lǐng)域的一個(gè)重要分支,它涉及到計(jì)算機(jī)與人類語(yǔ)言之間的交互。NLP的目標(biāo)是讓計(jì)算機(jī)能夠理解、生成和處理
    的頭像 發(fā)表于 07-03 14:15 ?678次閱讀

    自然語(yǔ)言處理屬于人工智能的哪個(gè)領(lǐng)域

    自然語(yǔ)言處理(Natural Language Processing,簡(jiǎn)稱NLP)是人工智能(Artificial Intelligence,簡(jiǎn)稱AI)領(lǐng)域的一個(gè)重要分支。它涉及到計(jì)算機(jī)與人類語(yǔ)言
    的頭像 發(fā)表于 07-03 14:09 ?1033次閱讀

    什么是自然語(yǔ)言處理 (NLP)

    自然語(yǔ)言處理(Natural Language Processing, NLP)是人工智能領(lǐng)域中的一個(gè)重要分支,它專注于構(gòu)建能夠理解和生成人類語(yǔ)言的計(jì)算機(jī)系統(tǒng)。NLP的目標(biāo)是使計(jì)算機(jī)能夠像人類一樣
    的頭像 發(fā)表于 07-02 18:16 ?835次閱讀

    自然語(yǔ)言處理技術(shù)的原理的應(yīng)用

    自然語(yǔ)言處理(Natural Language Processing, NLP)作為人工智能(AI)領(lǐng)域的一個(gè)重要分支,旨在使計(jì)算機(jī)能夠理解和處理人類自然語(yǔ)言。隨著互聯(lián)網(wǎng)的普及和大數(shù)據(jù)
    的頭像 發(fā)表于 07-02 12:50 ?405次閱讀

    神經(jīng)網(wǎng)絡(luò)在自然語(yǔ)言處理中的應(yīng)用

    自然語(yǔ)言處理(NLP)是人工智能領(lǐng)域中的一個(gè)重要分支,它研究的是如何使計(jì)算機(jī)能夠理解和生成人類自然語(yǔ)言。隨著人工智能技術(shù)的飛速發(fā)展,神經(jīng)網(wǎng)絡(luò)在自然語(yǔ)言
    的頭像 發(fā)表于 07-01 14:09 ?415次閱讀