精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

NVIDIA TensorRT與Apache Beam SDK的集成

jf_pJlTbmA9 ? 來源:NVIDIA ? 作者:NVIDIA ? 2023-07-05 16:30 ? 次閱讀

為大規模運行機器學習模型而加載和預處理數據通常需要將數據處理框架和推理機無縫拼接在一起。

在這篇文章中,我們將介紹 NVIDIA TensorRT 與 Apache Beam SDK 的集成,并展示如何將復雜的推理場景完全封裝在數據處理管道中。我們還演示了如何通過幾行代碼處理來自批處理和流傳輸源的 TB 數據,以實現高吞吐量和低延遲模型推斷。

NVIDIA TensorRT 是一個促進高性能機器學習推理的 SDK 。它設計用于 TensorFlow 、 PyTorch 和 MXNet 等深度學習框架。它專門致力于優化和運行一個經過訓練的神經網絡,以便在 NVIDIA 上高效地進行推理 GPU 。 TensorRT 可以通過多種優化最大化推理吞吐量,同時保持模型精度,包括模型量化、層和張量融合、內核自動調整、多流執行和有效的張量內存使用。

Dataflow 是一個無操作、無服務器的數據處理平臺,經過 15 年以上的生產實踐證明,可以批量或實時處理數據,用于分析、 ML 和應用程序用例。這些通常包括將預訓練的模型合并到數據管道中。無論使用情況如何, Apache Beam 作為其 SDK 的使用使 DataFlow 能夠利用強大的社區,簡化您的數據架構,并通過 ML 提供見解。

構建 TensorRT 推理引擎

要將 TensorRT 與 Apache Beam 一起使用,在此階段,您需要 converted TensorRT engine file from a trained model. 以下是如何將 TensorFlow 對象檢測 SSD MobileNet v2 320 × 320 模型轉換為 ONNX ,從 ONNX 構建 TensorRT 引擎,并在本地運行引擎。

TF 模型轉換為 ONNX

要將 TensorFlow 對象檢測 SSD MobileNet v2 320 × 320 轉換為 ONNX ,請使用 one of the TensorRT example converters 。如果系統具有將在數據流中用于推斷的相同 GPU ,則可以在本地系統上執行此操作。

要準備環境,請按照 Setup 中的說明進行操作。本文遵循本指南,直到 Create ONNX Graph 。使用– batch _ size 1 作為示例,我們將介紹僅使用批處理大小 1 的進一步工作。您可以將最終– onnx 文件命名為 ssd _ mobilenet _ v2 _ 320×320 _ coco17 _ tpu-8.onnx 。構建和運行在 GCP 中處理。

確保您設置的 GCP 項目具有正確的憑據和對 Dataflow 、 Google 云存儲( GCS )和 Google 計算引擎( GCE )的 API 訪問權限。有關詳細信息,請參見 Create a Dataflow pipeline using Python

啟動 GCE VM

您需要一臺包含以下已安裝資源的計算機:

NVIDIA T4 Tensor 核心 GPU

GPU 驅動器

Docker 公司

NVIDIA 容器工具包

您可以通過 creating a new GCE VM 執行此操作。按照說明操作,但使用以下設置:

Name: tensorrt-demo

GPU type: 環境 T4

Number of GPUs: 1

Machine type: n1-standard-2

如果你知道你使用的是大型模型,你可能需要一臺更強大的機器。

Boot disk 部分,選擇 CHANGE ,然后轉到 PUBLIC IMAGES 選項卡。對于 Operating system ,選擇 Linux 上的深度學習 。有很多版本,但請確保選擇 CUDA 版本。版本 基于 Debian 10 的深度學習 VM 與 M98 適用于此示例。

其他設置可以保留為默認值。

接下來, connect to the VM using SSH 。如果系統提示您安裝 NVIDIA 驅動程序,請安裝。

在 VM 內部,運行以下命令以創建一些稍后使用的目錄:

mkdir models
mkdir tensorrt_engines

有關詳細信息,請參見 Create a VM with attached GPUs 。

建立形象

您需要一個自定義容器,其中包含執行 TensorRT 代碼所需的依賴項: CUDA 、 cuDNN 和 TensorRT 。

您可以將以下示例 Dockerfile 復制到新文件中,并將其命名為tensor_rt.dockerfile .

ARG BUILD_IMAGE=nvcr.io/nvidia/tensorrt:22.09-py3

FROM ${BUILD_IMAGE} 

ENV PATH="/usr/src/tensorrt/bin:${PATH}"

WORKDIR /workspace

RUN pip install --no-cache-dir apache-beam[gcp]==2.42.0
COPY --from=apache/beam_python3.8_sdk:2.42.0 /opt/apache/beam /opt/apache/beam

RUN pip install --upgrade pip 
    && pip install torch>=1.7.1 
    && pip install torchvision>=0.8.2 
    && pip install pillow>=8.0.0 
    && pip install transformers>=4.18.0 
    && pip install cuda-python

ENTRYPOINT [ "/opt/apache/beam/boot" ]

查看 Docker file used for testing in the Apache Beam repo 。請記住,可能會有比本文所用版本更高版本的 Beam 可用。

通過在本地或在 GCE VM 中運行以下命令來構建映像:

docker build -f tensor_rt.dockerfile -t tensor_rt .

如果在本地執行此操作,請執行以下步驟。否則,您可以跳到下一節。

只有當您在不同于您打算構建 TensorRT 引擎的機器上創建圖像時,才需要以下命令。對于這篇文章,請使用 Google Container Registry 。將圖像標記為用于項目的 URI ,然后推送到注冊表。確保用適當的值替換GCP_PROJECT和MY_DIR。

docker tag tensor_rt us.gcr.io/{GCP_PROJECT}/{MY_DIR}/tensor_rt
docker push us.gcr.io/{GCP_PROJECT}/{MY_DIR}/tensor_rt

創建 TensorRT 引擎

只有當您在不同于要構建 TensorRT 引擎的機器上創建圖像時,才需要以下命令。從注冊表中提取 TensorRT 圖像:

docker pull us.gcr.io/{GCP_PROJECT}/{MY_DIR}/tensor_rt
docker tag us.gcr.io/{GCP_PROJECT}/{MY_DIR}/tensor_rt tensor_rt

如果 ONNX 模型不在 GCE VM 中,您可以將其從本地計算機復制到/models 目錄:

gcloud compute scp ~/Downloads/ssd_mobilenet_v2_320x320_coco17_tpu-8.onnx tensorrt-demo:~/models --zone=us-central1-a

現在,您應該在 VM 中擁有 ONNX 模型和構建的 Docker 映像。現在是時候同時使用它們了。

以交互方式啟動 Docker 容器:

docker run --rm -it --gpus all -v /home/{username}/:/mnt tensor_rt bash

從 ONNX 文件創建 TensorRT 引擎:

trtexec --onnx=/mnt/models/ssd_mobilenet_v2_320x320_coco17_tpu-8.onnx --saveEngine=/mnt/tensorrt_engines/ssd_mobilenet_v2_320x320_coco17_tpu-8.trt --useCudaGraph --verbose

現在,您應該可以在 VM 的/tensorrt_engines目錄中看到ssd_mobilenet_v2_320x320_coco17_tpu-8.trt文件。

將 TensorRT 引擎上傳至 GCS

將文件復制到 GCP 。如果您在將文件直接從 GCE 上傳到 GCS 時遇到gsutil 問題,您可能必須首先將其復制到本地計算機。

gcloud compute scp tensorrt-demo:~/tensorrt_engines/ssd_mobilenet_v2_320x320_coco17_tpu-8.trt ~/Downloads/ --zone=us-central1-a

在 GCP 控制臺中,將 TensorRT 引擎文件上傳到您選擇的 GCS 存儲桶:

gs://{GCS_BUCKET}/ssd_mobilenet_v2_320x320_coco17_tpu-8.trt

本地測試 TensorRT 引擎

確保您擁有使用 TensorRT RunInference 的 Beam 管道。一個示例是 tensorrt_object_detection.py ,您可以通過在 GCE VM 中運行以下命令來遵循該示例。首先鍵入 Ctrl + D 退出 Docker 容器。

git clone https://github.com/apache/beam.git
cd beam/sdks/python
pip install --upgrade pip setuptools
pip install -r build-requirements.txt
pip install --user -e ."[gcp,test]"

您還創建了一個名為image_file_names.txt的文件,其中 包含圖像的路徑。圖像可以在 GCS 之類的對象存儲中,也可以在 GCE VM 中。

gs://{GCS_BUCKET}/000000289594.jpg
gs://{GCS_BUCKET}/000000000139.jpg

然后,運行以下命令:

docker run --rm -it --gpus all -v /home/{username}/:/mnt -w /mnt/beam/sdks/python tensor_rt python -m apache_beam.examples.inference.tensorrt_object_detection --input gs://{GCS_BUCKET}/tensorrt_image_file_names.txt --output /mnt/tensorrt_predictions.csv --engine_path gs://{GCS_BUCKET}/ssd_mobilenet_v2_320x320_coco17_tpu-8.trt

現在您應該看到一個名為tensorrt_predictions.csv . 的文件。每行都有用分號分隔的數據。

第一項是文件名。

第二項是字典列表,其中每個字典對應一個檢測。

檢測包含框坐標( ymin 、 xmin 、 ymax 、 xmax )、分數和類別。

有關如何在本地設置和運行 TensorRT RunInference 的更多信息,請遵循 Object Detection 部分中的說明。

TensorRT Support Guide 概述了 GitHub 和產品包中所有支持的 NVIDIA TensorRT 8.5.1 示例。這些示例旨在展示如何在眾多用例中使用 TensorRT ,同時突出顯示界面的不同功能。這些示例在推薦器、機器理解、字符識別、圖像分類和對象檢測等用例中特別有用。

使用 DataFlow RunInference 運行 TensorRT 引擎

現在您有了 TensorRT 引擎,就可以在 Dataflow 上運行管道了。

下面的代碼示例是管道的一部分,您可以使用TensorRTEngineHandlerNumPy加載 TensorRT 引擎并設置其他推斷參數。然后讀取圖像,進行預處理以將關鍵點附加到圖像,進行預測,然后寫入 GCS 中的文件。

有關完整代碼示例的更多信息,請參見 tensorrt_object_detection.py 。

  engine_handler = KeyedModelHandler(
      TensorRTEngineHandlerNumPy(
          min_batch_size=1,
          max_batch_size=1,
          engine_path=known_args.engine_path))

  with beam.Pipeline(options=pipeline_options) as p:
    filename_value_pair = (
        p
        | 'ReadImageNames' >> beam.io.ReadFromText(known_args.input)
        | 'ReadImageData' >> beam.Map(
            lambda image_name: read_image(
                image_file_name=image_name, path_to_dir=known_args.images_dir))
        | 'AttachImageSizeToKey' >> beam.Map(attach_im_size_to_key)
        | 'PreprocessImages' >> beam.MapTuple(
            lambda file_name, data: (file_name, preprocess_image(data))))
    predictions = (
        filename_value_pair
        | 'TensorRTRunInference' >> RunInference(engine_handler)
        | 'ProcessOutput' >> beam.ParDo(PostProcessor()))

    _ = (
        predictions | "WriteOutputToGCS" >> beam.io.WriteToText(
            known_args.output,
            shard_name_template='',
            append_trailing_newlines=True))

確保您已完成上一節中提到的 Google Cloud 設置。您還必須具有 Beam SDK installed 。

要在 Dataflow 上運行此作業,請在本地運行以下命令:

python -m apache_beam.examples.inference.tensorrt_object_detection 
--input gs://{GCP_PROJECT}/image_file_names.txt 
--output gs://{GCP_PROJECT}/predictions.txt 
--engine_path gs://{GCP_PROJECT}/ssd_mobilenet_v2_320x320_coco17_tpu-8.trt 
--runner DataflowRunner 
--experiment=use_runner_v2 
--machine_type=n1-standard-4 
--experiment="worker_accelerator=type:nvidia-tesla-t4;count:1;install-nvidia-driver" 
--disk_size_gb=75 
--project {GCP_PROJECT} 
--region us-central1 
--temp_location gs://{GCP_PROJECT}/tmp/ 
--job_name tensorrt-object-detection 
--sdk_container_image="us.gcr.io/{GCP_PROJECT}/{MY_DIR}/tensor_rt tensor_rt"

根據模型的大小限制,您可能需要調整 machine _ type 、 GPU 的類型和計數或 disk _ size _ gb 。有關梁管道選項的詳細信息,請參見 Set Dataflow pipeline options 。

TensorRT 和 TensorFlow 目標檢測基準

為了進行基準測試,我們決定在前面提到的 SSD MobileNet v2 320 × 320 模型的 TensorRT 和 TensorFlow 對象檢測版本之間進行比較。

在 TensorRT 和 TensorFlow 對象檢測版本中,每個推理調用都是定時的。我們計算了平均 5000 個推斷調用,由于延遲增加,沒有考慮前 10 個圖像。我們使用的 SSD 型號是小型型號。當您的模型可以充分利用 GPU 時,您將觀察到更好的加速。

首先,我們將 TensorFlow 和 TensorRT 之間的直接性能加速與本地基準進行了比較。我們旨在證明 TensorRT 上降低精度模式的額外優勢。

Framework and precision Inference latency (ms)
TensorFlow Object Detection FP32 (end-to-end) 29.47 ms
TensorRT FP32 (end-to-end) 3.72 ms
TensorRT FP32 (GPU compute) 2.39 ms
TensorRT FP16 (GPU compute) 1.48 ms
TensorRT INT8 (GPU compute) 1.34 ms

表 1 。 TensorRT 上的直接性能加速

TensorRT FP32 的總體加速為 7.9x 。端到端包括數據副本,而 GPU 計算僅包括實際推斷時間。我們這樣做是因為示例模型很小。在這種情況下,端到端 TensorRT 延遲主要是數據拷貝。在更大的模型中使用不同的精度可以看到更顯著的端到端性能改進,尤其是在推理計算是瓶頸而不是數據拷貝的情況下。

FP16 比 FP32 快 1.6 倍,沒有精度損失。 INT8 比 FP32 快 1.8 倍,但有時精度會降低,需要校準過程。精度下降是特定于模型的,因此嘗試您的精度并查看產生的精度總是很好的。

使用 NVIDIA QAT 工具包的量化網絡也可以緩解此問題。有關詳細信息,請參見 Accelerating Quantized Networks with the NVIDIA QAT Toolkit for TensorFlow and NVIDIA TensorRT 和 NVIDIA TensorRT Developer Guide .

數據流基準測試

在 Dataflow 中,使用早期實驗中生成的 TensorRT 引擎,我們使用以下配置運行:n1-standard-4 machine、disk_size_gb=75和 10 個工作人員。

為了模擬通過PubSub進入 Dataflow 的數據流,我們將批大小設置為 1 。這是通過將ModelHandlers設置為最小和最大批量大小為 1 來實現的。

Stage with RunInference Mean inference_batch_latency_micro_secs
TensorFlow with T4 GPU 12 min 43 sec 99,242
TensorRT with T4 GPU 7 min 20 sec 10,836

表 2 。數據流基準

Dataflow runner 將管道分解為多個階段。通過查看包含推理調用的階段,而不是讀取和寫入數據的其他階段,可以更好地了解RunInference的性能。這在 Stage with RunInference 列中。

對于這個度量, TensorRT 只花費 TensorFlow 運行時間的 57% 。如果你適應一個完全使用 GPU 處理能力的更大模型,你預計加速度會增長。

度量推理_ batch _ latency _ micro _ secs 是對一批示例執行推理所需的時間(以微秒為單位),即調用model_handler.run_inference的時間。這隨著時間的推移而變化,這取決于BatchElements的動態批處理決策以及元素的特定值或dtype值。對于這個度量,您可以看到 TensorRT 比 TensorFlow 快 9.2 倍。

結論

在這篇文章中,我們演示了如何通過無縫拼接數據處理框架( Apache Beam )和推理引擎( TensorRT )來大規模運行機器學習模型。我們提供了一個端到端的示例,說明如何將推理工作負載完全集成到數據處理管道中。

這種集成實現了一種新的推理流水線,該流水線有助于通過更好的 NVIDIA GPU 利用率和大大提高的推理延遲和吞吐量來降低生產推理成本。使用許多現成的 TensorRT 樣本,相同的方法可以應用于許多其他推斷工作負載。未來,我們計劃進一步自動化 TensorRT 引擎構建,并致力于 TensorRT 與 Apache Beam 的深度集成。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • NVIDIA
    +關注

    關注

    14

    文章

    4940

    瀏覽量

    102818
  • AI
    AI
    +關注

    關注

    87

    文章

    30171

    瀏覽量

    268428
  • 機器學習
    +關注

    關注

    66

    文章

    8378

    瀏覽量

    132415
收藏 人收藏

    評論

    相關推薦

    NVIDIA JETSON載板設計開發教程 NVIDIA SDK Manager對載板進行自定義

    NVIDIA SDK Manager 是在 NVIDIA Jetson 開發者套件 上安裝 NVIDIA JetPack SDK 的必備工具
    的頭像 發表于 07-28 17:10 ?1812次閱讀
    <b class='flag-5'>NVIDIA</b> JETSON載板設計開發教程 <b class='flag-5'>NVIDIA</b> <b class='flag-5'>SDK</b> Manager對載板進行自定義

    MathWorks 宣布 MATLAB 與 NVIDIA TensorRT 集成來加快人工智能應用

    MathWorks 今日宣布 ,MATLAB 現在可通過 GPU Coder 實現與 NVIDIA TensorRT 集成。這可以幫助工程師和科學家們在 MATLAB 中開發新的人工智能和深度學習模型,且可確保性能和效率滿足數據
    的頭像 發表于 04-11 16:26 ?1.1w次閱讀

    Grid SDK是否與Nvidia Quadro K1200兼容?

    嗨,我想知道網格sdk是否與Nvidia Quadro K1200兼容?我一直在嘗試使用NvFBC,但我一直在“這個硬件不支持NvFBC”是一個錯誤,所以我決定在Nvidia論壇上提問。先謝謝你
    發表于 09-14 10:31

    NVIDIA DRIVE OS 5.2.6 Linux SDK發布 為加速計算和AI而設計

    DRIVE SDK的基礎,NVIDIA DRIVE OS專為加速計算和AI而設計。它包括用于高效并行計算的NVIDIA CUDA、用于實時AI推理的NVIDIA
    的頭像 發表于 09-03 15:03 ?7288次閱讀

    NVIDIA TensorRT 8 BERT在1.2毫秒內進行推斷

      TensorRT 是一個用于高性能深度學習推理的 SDK ,包括推理優化器和運行時,提供低延遲和高吞吐量。 TensorRT 用于醫療、汽車、制造、互聯網/電信服務、金融服務、能源等行業,下載量近 250 萬次。
    的頭像 發表于 03-31 17:05 ?1681次閱讀

    使用NVIDIA TensorRT部署實時深度學習應用程序

    深度神經網絡 (DNN) 是實現強大的計算機視覺和人工智能應用程序的強大方法。今天發布的NVIDIA Jetpack 2.3使用 NVIDIA TensorRT (以前稱為 GPU 推理引擎或 GIE)將嵌入式應用程序中 DN
    的頭像 發表于 04-18 14:28 ?2145次閱讀
    使用<b class='flag-5'>NVIDIA</b> <b class='flag-5'>TensorRT</b>部署實時深度學習應用程序

    NVIDIA SDK 3.0新硬件功能介紹

    NVIDIA 圖靈架構引入了一種新的硬件功能,用于以非常高的性能計算一對圖像之間的光流。 NVIDIA 光流 SDK 公開了使用這種光流硬件(也稱為 NVOFA )加速應用程序的 API 。我們很高興地宣布光流
    的頭像 發表于 04-20 16:31 ?2752次閱讀

    NVIDIA TensorRT支持矩陣中的流控制結構層部分

      NVIDIA TensorRT 支持循環結構,這對于循環網絡很有用。 TensorRT 循環支持掃描輸入張量、張量的循環定義以及“掃描輸出”和“最后一個值”輸出。
    的頭像 發表于 05-13 16:57 ?916次閱讀

    NVIDIA TensorRT和DLA分析

      位于 GitHub 存儲庫中的sampleMNIST演示了如何導入經過訓練的模型、構建 TensorRT 引擎、序列化和反序列化引擎,最后使用引擎執行推理。
    的頭像 發表于 05-18 10:06 ?3003次閱讀

    NVIDIA TensorRT網絡層詳解

    TensorRT 中,層代表了不同風格的數學或編程操作。以下部分描述了 TensorRT 支持的每一層。 TensorRT 所需的最小工作空間取決于網絡使用的算子。
    的頭像 發表于 05-20 14:38 ?2552次閱讀

    NVIDIA TensorRT插件的全自動生成工具

    NVIDIA TensorRT 是性能最優、應用最廣的 GPU 推理框架,但用戶常常因為不支持的算子而面臨手寫插件的痛點。為此,騰訊 TEG 與 NVIDIA 聯合開發了一款能自動生成插件的工具
    的頭像 發表于 07-18 10:13 ?1115次閱讀

    NVIDIA MDL SDK可為各種渲染器提供出色的 MDL 支持

    NVIDIA MDL SDK 是一系列工具,支持快速將基于物理性質的材質集成到渲染應用。
    的頭像 發表于 08-30 09:20 ?1194次閱讀

    即刻報名第三屆 NVIDIA TensorRT Hackathon 生成式 AI 模型優化賽

    近日,由阿里云及 NVIDIA 聯合舉辦的?“NVIDIA TensorRT Hackathon 2023 生成式 AI 模型優化賽”已正式啟動。此大賽是由阿里云天池組織運營,TensorRT
    的頭像 發表于 07-17 19:45 ?544次閱讀
    即刻報名第三屆 <b class='flag-5'>NVIDIA</b> <b class='flag-5'>TensorRT</b> Hackathon 生成式 AI 模型優化賽

    學習資源 | NVIDIA TensorRT 全新教程上線

    NVIDIA TensorRT ? 是一個用于高效實現已訓練好的深度學習模型推理過程的軟件開發工具包,內含推理優化器和運行環境兩部分,其目的在于讓深度學習模型能夠在 GPU 上以更高吞吐量和更低
    的頭像 發表于 08-04 17:45 ?804次閱讀
    學習資源 | <b class='flag-5'>NVIDIA</b> <b class='flag-5'>TensorRT</b> 全新教程上線

    現已公開發布!歡迎使用 NVIDIA TensorRT-LLM 優化大語言模型推理

    NVIDIA 于 2023 年 10 月 19 日公開發布 TensorRT-LLM ,可在 NVIDIA GPU 上加速和優化最新的大語言模型(Large Language Models)的推理性
    的頭像 發表于 10-27 20:05 ?936次閱讀
    現已公開發布!歡迎使用 <b class='flag-5'>NVIDIA</b> <b class='flag-5'>TensorRT</b>-LLM 優化大語言模型推理