PAI-Blade提供了C++ SDK幫助您部署優化后的模型推理。本文以TensorFlow模型為例,介紹PAI-Blade的SDK的使用方法。
前提條件
已使用PAI-Blade對TensorFlow模型進行了優化,詳情請參見優化TensorFlow模型。
已安裝SDK并獲取鑒權Token,詳情請參見安裝Blade。因為本文使用GCC 4.8,所以需要使用pre-cxx11 ABI的SDK。本文選用3.7.0版本的RPM包。
說明經過PAI-Blade優化的模型,必須依賴對應的SDK才能正常運行。
準備環境
本文以CentOS 7為例,介紹如何使用PAI-Blade的SDK部署TensorFlow模型推理。
準備服務器。
本文使用如下配置的ECS實例:
實例規格:ecs.gn6i-c4g1.xlarge,T4 GPU
操作系統:CentOS 7.9 64位
設備:CUDA 10.0
顯卡驅動:Driver 440.64.00
GPU計算加速包:CUDNN 7.6.5
安裝GCC。
本文使用CentOS默認的GCC 4.8,安裝命令如下。
yum install -y gcc-c++
安裝Python 3。
# 更新 pip 版本。 python3 -m pip install --upgrade pip # 安裝virtualenv,在虛擬環境中安裝TensorFlow。 pip3 install virtualenv==16.0 python3 -m virtualenv venv # 重要!激活virtualenv。 source venv/bin/activate
安裝TensorFlow,并下載相關庫文件。
使用TensorFlow進行推理通常需要libtensorflow_framework.so和libtensorflow_cc.so兩個動態鏈接庫。實際生產中,必須構建TensorFlow Wheel包(包含libtensorflow_framework.so),并且與libtensorflow_cc.so使用的配置、環境及編譯器版本一致。為演示方便,本文使用社區TensorFlow和已經預編譯的庫文件(請勿直接用于生產環境)。
# 安裝TensorFlow。 pip3 install tensorflow-gpu==1.15.0 # 下載libtensorflow_cc.so。 wget http://pai-blade.oss-cn-zhangjiakou.aliyuncs.com/demo/sdk/tensorflow/libtensorflow_cc.so
部署模型推理
通過PAI-Blade的SDK加載并部署優化后的模型推理,您無需修改原代碼邏輯,只需要在編譯時鏈接上PAI-Blade的SDK中的庫文件。
準備模型。
本文使用已經優化好的示例模型進行演示,通過如下命令即可下載該模型。您也可以使用自己的優化模型,關于如何使用PAI-Blade優化模型,詳情請參見優化TensorFlow模型。
wget http://pai-blade.oss-cn-zhangjiakou.aliyuncs.com/demo/asr_frozen.pb
下載并查看推理代碼。
通過PAI-Blade優化后的模型,其執行過程與常規TensorFlow模型相同,無需編寫額外代碼或配置額外信息。您可以使用如下命令下載本文使用的推理代碼。
wget http://pai-blade.oss-cn-zhangjiakou.aliyuncs.com/demo/sdk/tensorflow/tf_sdk_demo.cc
查看已下載的tf_sdk_demo.cc文件,其內容均為TensorFlow推理的通用邏輯,并沒有PAI-Blade的相關代碼。
編譯代碼。
您只需要額外鏈接SDK下/usr/local/lib子目錄下的SO文件libtf_blade.so,即可正常運行PAI-Blade優化后的模型。編譯命令如下所示。
# 獲取TensorFlow的編譯flag。 TF_COMPILE_FLAGS=$(python3 -c 'import tensorflow as tf; print(" ".join(tf.sysconfig.get_compile_flags()))') # 獲取TensorFlow的鏈接flag。 TF_LD_FLAGS=$(python3 -c 'import tensorflow as tf; print(" ".join(tf.sysconfig.get_link_flags()))') # libtensorflow_cc.so在當前目錄。 TF_CC_PATH='.' g++ -std=c++11 tf_sdk_demo.cc \ ${TF_COMPILE_FLAGS} \ ${TF_LD_FLAGS} \ -L ${TF_CC_PATH} \ -L /usr/local/lib \ -ltensorflow_cc \ -ltf_blade \ -ltao_ops \ -o demo_cpp_sdk.bin
您可以根據實際情況修改如下參數:
tf_sdk_demo.cc:推理代碼的文件名。
/usr/local/lib:SDK的安裝路徑,通常無需修改。
demo_cpp_sdk.bin:編譯生成的可執行程序名。
說明相比常規TensorFlow Serving的編譯,此處需要額外鏈接兩個PAI-Blade提供的包含優化OP的SO文件,即libtf_blade.so和libtao_ops.so。
本地執行模型推理。
您可以參考如下命令,使用編譯好的可執行程序(demo_cpp_sdk.bin)加載并執行PAI-Blade優化好的示例模型(asr_frozen.pb)。
# 必填,請聯系PAI團隊獲取。 export BLADE_REGION=<region> # 必填,請聯系PAI團隊獲取。 export BLADE_TOKEN=<token> TF_LD_FLAGS=$(python3 -c 'import tensorflow as tf; print(" ".join(tf.sysconfig.get_link_flags()))') TF_FRAMEWORK_PATH=`echo $TF_LD_FLAGS | awk '{print $1}' | sed "s/-L//g"` LD_LIBRARY_PATH=${TF_FRAMEWORK_PATH}:${TF_CC_PATH}:/usr/local/lib:${LD_LIBRARY_PATH} ./demo_cpp_sdk.bin asr_frozen.pb
您需要根據實際情況替換以下參數:
<region>:PAI-Blade支持的地域,需要加入PAI-Blade用戶群獲取該信息,用戶群的二維碼詳情請參見獲取Token。
<token>:鑒權Token,需要加入PAI-Blade用戶群獲取該信息,用戶群的二維碼詳情請參見獲取Token。
/usr/local/lib:SDK的安裝目錄,通常無需修改。
demo_cpp_sdk.bin:上一步中編譯好的可執行程序。
asr_frozen.pb:PAI-Blade優化好的TensorFlow模型。本文使用步驟1中下載的示例模型。
系統回顯如下類似結果,表示模型已經順利地開始執行了。
... 2020-11-20 16:41:41.263192: I demo_cpp_sdk.cpp:96] --- Execution uses: 41.995 ms 2020-11-20 16:41:41.305550: I demo_cpp_sdk.cpp:96] --- Execution uses: 42.334 ms 2020-11-20 16:41:41.347772: I demo_cpp_sdk.cpp:96] --- Execution uses: 42.195 ms 2020-11-20 16:41:41.390894: I demo_cpp_sdk.cpp:96] --- Execution uses: 43.09 ms 2020-11-20 16:41:41.434968: I demo_cpp_sdk.cpp:96] --- Execution uses: 44.047 ms ...