TensorRT8.0.1.6之安裝與測試

      網(wǎng)友投稿 2785 2025-04-01

      最近,TensorRT8.0.1悄然發(fā)布,并稱在bert及大模型方面取得了性能突破。于是,我便對trt8的情況進(jìn)行了摸底。

      一、TensorRT8.0.1的安裝

      1、查看TensorRT Release 8的官方文檔https://docs.nvidia.com/deeplearning/tensorrt/release-notes/tensorrt-8.html#rel_8-0-1,可得TensorRT8.0的依賴包及版本(TensorRT官方測試所用的版本):

      cuDNN 8.2.1

      Tensorflow 1.15.5

      PyTorch 1.8.1

      ONNX 1.8.0

      CUDA 10.2 or 11.0 update 1 or 11.1 update 1 or 11.2 update 2 or 11.3 update 1

      2、有兩種搭建環(huán)境的方法有兩種

      方法一:使用官方鏡像

      直接拉取tensorrt發(fā)布的官方鏡像,鏡像網(wǎng)址在https://ngc.nvidia.com/catalog/containers/nvidia:tensorrt,鏡像的具體信息在https://docs.nvidia.com/deeplearning/tensorrt/container-release-notes/rel_21-07.html#rel_21-07

      docker pull nvcr.io/nvidia/tensorrt:21.07-py3

      運(yùn)行docker container

      docker run -v /mnt/:/mnt/ -it --cap-add SYS_PTRACE --runtime=nvidia --shm-size=4gb -e NVIDIA_VISIBLE_DEVICES=7 --net=host nvcr.io/nvidia/tensorrt:xx.xx-py3 bash

      在鏡像中編譯、運(yùn)行TensorRT C++ samples

      cd /workspace/tensorrt/samples make -j4

      方法二:本地配置環(huán)境

      本地已安裝CUDA 10.2

      nvidia官方網(wǎng)站下載cuDNN 8.2.1壓縮包,解壓到目錄/usr/local/cudnn_v8.2.1中

      nvidia官方網(wǎng)站下載TensorRT8.0.1,解壓到目錄/usr/local/TensorRT-8.0.1.6中(注:TensorRT8分為GA和EA版本,EA是提前發(fā)布的不穩(wěn)定版本,GA是經(jīng)過完備測試的穩(wěn)定版本)

      設(shè)置環(huán)境變量

      export LD_LIBRARY_PATH=/usr/local/cuda-10.2/lib64/:/usr/local/cuda-10.2/extras/CUPTI/lib64:$LD_LIBRARY_PATH export LD_LIBRARY_PATH=/usr/local/cudnn_v8.2.1/lib64/:$LD_LIBRARY_PATH export CPLUS_INCLUDE_PATH=/usr/local/cuda-10.2/include/:$CPLUS_INCLUDE_PATH export CPLUS_INCLUDE_PATH=/usr/local/cudnn_v8.2.1/include/:$CPLUS_INCLUDE_PATH export PATH=/usr/local/cuda-10.2/bin/:$PATH

      編譯TensorRT C++ samples

      安裝TensorRT的python包,pip install tensorrt-8.0.1.6-cp37-none-linux_x86_64.whl(根據(jù)情況安裝uff、onnx-graphsurgeon的whl包)

      二、測試模型

      1、設(shè)置TensorRT8的環(huán)境變量

      export TRT_TOOLKIT_ROOT_DIR=/usr/local/TensorRT-8.0.1.6/ export LD_LIBRARY_PATH=/usr/local/TensorRT-8.0.1.6/targets/x86_64-linux-gnu/lib/:/usr/local/TensorRT-8.0.1.6/targets/x86_64-linux-gnu/lib/stubs/:$LD_LIBRARY_PATH

      2、使用的工具版本信息

      ONNX: 1.9.0

      ONNX IR version:0.0.6

      ONNX opset version: 11

      tf2onnx: 1.8.5

      3、測試

      使用TensorRT命令行工具trtexec進(jìn)行測試

      ./trtexec --onnx=***.onnx --workspace=2048 --warmUp=2000 --iterations=500 --device=4 --avgRuns=500 --explicitBatch --tacticSources=-cublasLt,+cublas

      遇到問題

      問題一:“a known issue with cuBLAS LT 10.2 ” ,解決方法為 --tacticSources=-cublasLt,+cublas問題二:[TRT] ../builder/cudnnBuilderUtils.cpp (360) - Cuda Error in findFastestTactic: 10 (invalid device ordinal)

      這個(gè)問題的原因是,當(dāng)環(huán)境變量設(shè)置export CUDA_VISIBLE_DEVICES="4"時(shí), ./trtexec同時(shí)添加了參數(shù)--device=4。只設(shè)置其中一個(gè)就OK。

      三、復(fù)現(xiàn)TensorRT8的benchmark之bert

      注:參考網(wǎng)頁https://developer.nvidia.com/blog/real-time-nlp-with-bert-using-tensorrt-updated/,

      也可參考網(wǎng)頁https://github.com/NVIDIA/TensorRT/tree/release/8.0/demo/BERT/。

      該網(wǎng)頁通過Dockerfile構(gòu)建鏡像,然后在鏡像環(huán)境中使用ngc命令下載bert模型,使用腳本構(gòu)建tensorRT引擎,進(jìn)行推理;

      而我在復(fù)現(xiàn)過程中,利用Dockerfile構(gòu)建鏡像時(shí)不斷遇到因網(wǎng)絡(luò)導(dǎo)致的下載失敗問題,于是,不再創(chuàng)建鏡像,直接下載模型在本機(jī)環(huán)境中復(fù)現(xiàn)benchmark。

      1、TensorRT推理的具體步驟:

      將TensorRT代碼倉和bert demo的相關(guān)腳本下載到本機(jī),git clone --recursive https://github.com/NVIDIA/TensorRT && cd TensorRT

      NVIDIA NGC網(wǎng)站https://ngc.nvidia.com/catalog/models/nvidia:bert_tf_v2_large_fp16_128/files提供了一些模型可供測試。如圖所示,點(diǎn)擊左側(cè)catalog欄點(diǎn)擊Models,可在其中搜索所需模型關(guān)鍵詞。例如,搜索"bert large",從中選取自己想要的模型,復(fù)制wget命令將模型下載至本機(jī)。

      可得模型文件目錄,存儲(chǔ)到TensorRT/demo/BERT/models/fine-tuned/bert_tf_v2_large_fp16_128_2目錄下:

      使用TensorRT/demo/BERT中提供的builder.py構(gòu)建TensorRT runtime engine(可根據(jù)需求對腳本進(jìn)行更改,例如本機(jī)創(chuàng)建的conda虛擬環(huán)境中未安裝pytorch,便將腳本builder.py中的load_pytorch_weights_and_quant,及builder_utils.py中pytorch相關(guān)部分注釋掉了)

      mkdir -p engines && python3 builder.py -m models/fine-tuned/bert_tf_v2_large_fp16_128_2/model.ckpt-8144 -o engines/bert_large_1_128.engine -b 1 -s 128 --fp16 -c models/fine-tuned/bert_tf_v2_large_fp16_128_2

      其中,-m:checkpoint of the model,-o:path_to_engine, -b:batch, -s:sequence_length, -c:dir_of_the_checkpoint

      創(chuàng)建engine完成后,可用兩種方法推理:

      命令行推理:

      trtexec --load_model=path_to_engine --workspace=2048 --warmUp=2000 --iterations=500 --avgRuns=500 --explicitBatch --tacticSources=-cublasLt,+cublas

      使用TensorRT/demo/BERT目錄下的perf.py進(jìn)行推理:

      python perf.py -e engines/bert_large_128_${batch}.engine -b ${batch} -s 128 -i 500 -w 2000 -r 0

      至此,可得TensorRT對bert模型的推理時(shí)間

      2、Tensorflow的推理步驟

      首先,將model的checkpoint模型轉(zhuǎn)化為pb文件。參考https://github.com/NVIDIA/DeepLearningExamples/blob/master/TensorFlow/LanguageModeling/BERT/run_squad.py的get_frozen_tftrt_model函數(shù),可將cpkt文件轉(zhuǎn)換為pb文件

      然后,通過導(dǎo)入pb文件,用tensorflow及xla分別推理

      為了保證輸入數(shù)據(jù)的統(tǒng)一,查看perf.py構(gòu)造輸入的方法為:

      TensorRT8.0.1.6之安裝與測試

      # Prepare random input pseudo_vocab_size = 30522 pseudo_type_vocab_size = 2 np.random.seed(args.random_seed) test_word_ids = np.random.randint(0, pseudo_vocab_size, (max(args.batch_size), args.sequence_length), dtype=np.int32) test_segment_ids = np.random.randint(0, pseudo_type_vocab_size, (max(args.batch_size), args.sequence_length), dtype=np.int32) test_input_mask = np.ones((max(args.batch_size), args.sequence_length), dtype=np.int32)

      3、將TensorRT8的推理結(jié)果與TensorFLow及XLA的推理結(jié)果進(jìn)行比較

      延伸:為什么Bert不用TensorRT-7與TensorRT8進(jìn)行比較?

      查看TensorRT7.0與8.0的plugin_creator,代碼如下:

      trt.init_libnvinfer_plugins(TRT_LOGGER, "") plg_registry = trt.get_plugin_registry() PLUGIN_CREATORS = plg_registry.plugin_creator_list for plugin_creator in PLUGIN_CREATORS: print(plugin_creator.name)

      可得到二者支持的plugin_creator,如下表,其中,bert所需的自定義算子類型CustomEmbLayerNormPluginDynamic、CustomSkipLayerNormPluginDynamic等在7中不支持,所以無法用tensorrt-7直接對bert模型處理

      四、結(jié)論

      TensorRT-8.0確實(shí)比TensorRT7.0性能有所提升,一般CV模型在fp32精度模式下,大概提升10%左右,fp16精度模式下,則提升較大。尤其是在處理bert-fp16模型時(shí),性能有幾倍提升。

      AI 深度學(xué)習(xí)

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:如何生成表格下拉菜單?(制作表格下拉菜單)
      下一篇:excel2007設(shè)置只讀的教程(excel2016怎么設(shè)置只讀)
      相關(guān)文章
      中文字幕精品亚洲无线码一区 | 亚洲国产成人五月综合网 | 亚洲v高清理论电影| 亚洲日韩AV无码一区二区三区人| 亚洲VA成无码人在线观看天堂| 亚洲国产精品自在自线观看| 亚洲美女精品视频| 亚洲另类激情综合偷自拍图| 亚洲精品色在线网站| 色偷偷女男人的天堂亚洲网| 亚洲高清在线视频| 国产成人麻豆亚洲综合无码精品| 亚洲天堂在线视频| 在线视频亚洲一区| 亚洲色成人WWW永久在线观看| 国产成人亚洲综合网站不卡| 亚洲毛片一级带毛片基地| 亚洲国产成人片在线观看无码| 亚洲精品无码99在线观看| 亚洲精品自偷自拍无码| 亚洲AV综合永久无码精品天堂| 亚洲国产精品人久久电影| 亚洲人成在线电影| 亚洲狠狠狠一区二区三区| 亚洲av无码一区二区三区天堂古代| 一区二区三区亚洲| 亚洲ⅴ国产v天堂a无码二区| 亚洲一区二区中文| 亚洲国产精品无码久久久| 亚洲成AV人片久久| 亚洲午夜无码久久久久软件| 亚洲va在线va天堂成人| 亚洲国产精品成人AV在线| 亚洲av无码专区在线观看素人| 国产亚洲av片在线观看18女人 | 亚洲一区二区中文| 亚洲AV色吊丝无码| 亚洲av日韩综合一区二区三区| 亚洲va中文字幕无码| 亚洲精品国产精品乱码不卡√ | 久久国产亚洲精品麻豆|