當前位置:
首頁 > 新聞 > TensorFlow 攜手 NVIDIA,使用 TensorRT 優化 TensorFlow Serving 性能

TensorFlow 攜手 NVIDIA,使用 TensorRT 優化 TensorFlow Serving 性能

雷鋒網 AI 科技評論按:日前,TensorFlow 團隊與 NVIDIA 攜手合作,將 NVIDIA 用來實現高性能深度學習推理的平台——TensorRT 與 TensorFlow Serving 打通結合,使用戶可以輕鬆地實現最佳性能的 GPU 推理。目前,TensorFlow Serving 1.13 已實現對 TF-TRT 的支持,而不久後 TensorFlow 2.0 也將支持 TF-TRT 的實現。 TensorFlow 在官方博客中對這項成果進行了發布,雷鋒網 AI 科技評論編譯如下。


  • TensorFlow Serving 項目地址:https://tensorflow.org/serving/

  • NVIDIA TensorRT 項目地址:https://developer.nvidia.com/tensorrt

TensorFlow Serving 是應用於機器學習模型的靈活的高性能服務系統,而 NVIDIA TensorRT 則是一個用以實現高性能深度學習推理的平台,將二者相結合後,用戶可以輕鬆地實現最佳性能的 GPU 推理。TensorFlow 團隊與 NVIDIA 攜手合作,在 TensorFlow v1.7 中添加了對 TensorRT 的首度支持,此後,他們更是保持密切的合作,共同致力於對 TensorFlow-TensorRT 集成(被稱作 TF-TRT)進行改進。。目前,TensorFlow Serving 1.13 已實現對 TF-TRT 的支持,而不久後 TensorFlow 2.0 也將支持 TF-TRT 的實現。

TensorFlow 攜手 NVIDIA,使用 TensorRT 優化 TensorFlow Serving 性能

在此前的一篇博客中,我們向大家介紹了怎樣如何藉助 Docker 來使用 TensorFlow Serving。而在本文中,我們要展示的是:以同樣的方法來運行經 TF-TRT 轉換的模型到底有多簡單。一如既往地,我們嘗試將 ResNet 模型部署到生產環境中。下文的所有案例都在配備 Titan-V GPU 的工作站上運行。

在 GPU 上使用 TensorFlow Serving 創建 ResNet

在本次練習中,我們簡單地下載一個經過預訓練的 ResNetSavedModel:


$ mkdir /tmp/resnet$ curl -s

https://storage.googleapis.com/download.tensorflow.org/models/official/20181001_resnet/savedmodels/resnet_v2_fp32_savedmodel_NHWC_jpg.tar.gz | tar --strip-components=2 -C /tmp/resnet -xvz

$ ls /tmp/resnet

1538687457

在此前的博客中,我們演示了如何使用 TensorFlow Serving CPU Docker 圖像來創建模型。在這裡,我們運行 GPU Docker 圖像(查看相關說明),從而藉助 GPU 創建並測試此模型:


$ docker pull tensorflow/serving:latest-gpu$ docker run --rm --runtime=nvidia -p 8501:8501 --name tfserving_resnet


-v /tmp/resnet:/models/resnet -e MODEL_NAME=resnet -t tensorflow/serving:latest-gpu &

… server.cc:313] Running gRPC ModelServer at 0.0.0.0:8500 …

… server.cc:333] Exporting HTTP/REST API at:localhost:8501 …


$ curl -o /tmp/resnet/resnet_client.py

https://raw.githubusercontent.com/tensorflow/serving/master/tensorflow_serving/example/resnet_client.py

$ python /tmp/resnet/resnet_client.py

Prediction class: 286, avg latency: 18.0469 ms

docker run 命令會啟動 TensorFlow Serving 伺服器,以提供 /tmp/resnet 中已下載的 SavedModel,並在主機中顯示 REST API埠 8501。resnet_client.py 會給伺服器發送一些圖像,並返回伺服器所作的預測。現在讓我們停止運行 TensorFlow Serving 容器,來釋放其所佔用的 GPU 資源:


$ docker kill tfserving_resnet

利用 TF-TRT 轉換和提供模型

現在,我們有了可以運行的模型。為了能從 TensorRT 受益,我們需要在 TensorFlow Serving Docker 容器內運行轉換命令,從而將現有模型轉換為使用 TensorRT 運行運算的模型:

$ docker pull tensorflow/tensorflow:latest-gpu

$ docker run --rm --runtime=nvidia -it

-v /tmp:/tmp tensorflow/tensorflow:latest-gpu

/usr/local/bin/saved_model_cli convert

--dir /tmp/resnet/1538687457

--output_dir /tmp/resnet_trt/1538687457

--tag_set serve

tensorrt --precision_mode FP32 --max_batch_size 1 --

is_dynamic_op True

在這裡,我們運行了 saved_model_cli 命令行工具,其中內置了對 TF-TRT 轉換的支持。--dir 和 --output_dir 參數會告知它在哪裡找到 SavedModel 以及輸出轉換後的 SavedModel,而 --tag_set 則讓它知道該轉換 SavedModel 中的哪張圖表。隨後,我們通過在命令行中傳遞 tensorrt 並指定配置,明確指示其運行 TF-TRT 轉換器:

  • --precision_mode 參數讓轉換器知道所需用到的精度,目前它僅支持 FP32 和 FP16

  • --max_batch_size 參數確定輸入的批次大小的上限。此轉換器要求由 TensorRT 處理的所有張量將它們的首個維度作為批次維度,而該參數則讓它知道推理過程中會產生的最大值。如果已知推理過程中的實際批次大小上限,同時該值還能夠與之匹配,那麼轉換後的模型就是最優模型。要注意的是,轉換後的模型無法處理批次規模大於這裡指定了大小的輸入,但對於批次規模更小的輸入,它還是能夠處理的。

  • --is_dynamic_op 參數讓它知道在模型運行時進行實際轉換。這是因為在轉換期間,TensorRT 需要知道所有的形狀。對於該案例中所使用的 ResNet 模型,它的張量沒有固定的形狀,這也是我們需要用到該參數的原因。

如此前一樣簡單,我們現在只需為模型指定正確的目錄,便能利用 Docker 提供經 TF-TRT 轉換的模型:


$ docker run --rm --runtime=nvidia -p 8501:8501

--name tfserving_resnet

-v /tmp/resnet_trt:/models/resnet

-e MODEL_NAME=resnet

-t tensorflow/serving:latest-gpu &

… server.cc:313] Running gRPC ModelServer at 0.0.0.0:8500 …

… server.cc:333] Exporting HTTP/REST API at:localhost:8501 …

之後向它發送請求:


$ python /tmp/resnet/resnet_client.pyPrediction class: 286, avg latency: 15.0287 ms

最後,停止運行容器:


$ docker kill tfserving_resnet

我們可以看到,使用 TensorFlow Serving 和 Docker 生成經 TF-TRT 轉換的模型與創建一個普通的模型一樣簡單。此外,作為一次演示,上文中的性能數值僅適用於我們所使用的模型和運行該案例的設備,不過它的確體現出使用 TF-TRT 所帶來的性能優勢。

接下來就輪到 TensorFlow 2.0 來實現 TF-TRT 了,而 TensorFlow 團隊和 NVIDIA 也正在合作以確保 TF-TRT 能在 2.0 中流暢運行。大家可前往 TF-TRT 的 Github 開源項目(https://github.com/tensorflow/tensorrt),查看更全面的信息。雷鋒網

via:https://medium.com/tensorflow/optimizing-tensorflow-serving-performance-with-nvidia-tensorrt-6d8a2347869a

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 雷鋒網 的精彩文章:

華為發布首款5G摺疊屏手機,貴出新高度;微軟HoloLens 2重磅發布;胡瑋煒68萬入學高山大學
這些代表了未來出行的交通工具,你注意到了嗎?

TAG:雷鋒網 |