Machine Learning Platform for AI (PAI)-Bladeは、推論用に最適化されたモデルをデプロイするために使用できるC ++ 用のSDKを提供します。 このトピックでは、PAI-Bladeが提供するSDKの使用方法について説明します。 このトピックでは、TensorFlowモデルを使用します。
前提条件
TensorFlowモデルは、PAI − Bladeを用いて最適化される。 詳細については、「TensorFlowモデルの最適化」をご参照ください。
SDKがインストールされ、認証トークンが取得されます。 詳細については、「PAI-Bladeのインストール」をご参照ください。 この例では、GNUコンパイラコレクション (GCC) 4.8が使用されます。 したがって、Pre-CXX11アプリケーションバイナリインターフェイス (ABI) を使用するSDKが必要です。 この要件を満たすために、V3.7.0のRPMパッケージが使用されます。
説明PAI-Bladeを使用して最適化されたモデルは、対応するSDKがインストールされている場合にのみ正しく実行できます。
環境の配置
このトピックでは、PAI-Blade SDKを使用して推論用のTensorFlowモデルをデプロイする方法について説明します。 この例では、CentOS 7がインストールされています。
サーバーを準備します。
次の仕様で設定されたElastic Compute Service (ECS) インスタンスを準備します。
インスタンスタイプ: ecs.gn6i-c4g1.xlarge、NVIDIA Tesla T4 GPU
オペレーティングシステム: CentOS 7.9 64ビット
デバイス: CUDA 10.0
GPU: ドライバ440.64.00
GPUコンピューティング加速パッケージ: cuDNN 7.6.5
GCCをインストールします。
この例では、CentOSではデフォルトでGCC 4.8が使用されます。 GCC 4.8をインストールするには、次のコマンドを実行します。
yum install -y gcc-c ++
Python 3をインストールします。
# Update pip. python3 -m pip install --upgrade pip # Install virtualenv as a virtual environment in which you can install TensorFlow. pip3 install virtualenv==16.0 python3 -m virtualenv venv # This step is important. Activate virtualenv. source venv/bin/activate
TensorFlowをインストールし、関連するライブラリをダウンロードします。
推論にTensorFlowモデルを使用する場合、2つの動的リンクライブラリlibtensorflow_framework.soとlibtensorflow_cc.soが必要です。 実際の運用シナリオでは、libtensorflow_framework.soライブラリを含むTensorFlowホイールをインストールする必要があります。 TensorFlowホイールとlibtensorflow_cc.soライブラリは、同じ構成、環境、およびコンパイラバージョンを使用する必要があります。 デモンストレーションの目的で、この例ではTensorFlow Community Editionとプリコンパイル済みライブラリを使用します。 プリコンパイルされたライブラリは運用環境では使用しないでください。
# Install TensorFlow. pip3 install tensorflow-gpu==1.15.0 # Download libtensorflow_cc.so. wget http://pai-blade.oss-cn-zhangjiakou.aliyuncs.com/demo/sdk/tensorflow/libtensorflow_cc.so
推論用のモデルのデプロイ
PAI-Blade SDKを使用して推論用に最適化されたモデルをロードおよびデプロイするには、元のコードロジックを変更する必要なく、推論コードをコンパイルするときにSDK内のライブラリをリンクできます。
モデルを準備します。
この例では、最適化されたサンプルモデルがデモンストレーションの目的で使用されます。 次のコマンドを実行して、サンプルモデルをダウンロードします。 独自の最適化モデルを使用することもできます。 PAI-Bladeを使用してモデルを最適化する方法の詳細については、「TensorFlowモデルの最適化」をご参照ください。
wget http://pai-blade.oss-cn-zhangjiakou.aliyuncs.com/demo/asr_frozen.pb
推論コードをダウンロードして表示します。
通常のTensorFlowモデルと同じ方法で、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に関連するコードは含まれていません。
推論コードをコンパイルします。
PAI-Bladeを使用して最適化されたモデルを実行する前に、/usr/local/libディレクトリにあるlibtf_blade.soファイルを推論コードにリンクするだけで済みます。 次のコマンドを実行してコードをコンパイルします。
# Obtain the compiler flags of TensorFlow. TF_COMPILE_FLAGS=$(python3 -c 'import tensorflow as tf; print(" ".join(tf.sysconfig.get_compile_flags()))') # Obtain the linker flags of TensorFlow. TF_LD_FLAGS=$(python3 -c 'import tensorflow as tf; print(" ".join(tf.sysconfig.get_link_flags()))') # The libtensorflow_cc.so file is in the current directory. 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モデルと比較して、libtf_blade.soおよびlibtao_ops.soファイルは、この例の推論コードにさらにリンクされています。 libtao_ops.soファイルには最適化演算子が含まれています。
推論のモデルをローカルデバイスで実行します。
コンパイルされた実行可能プログラムdemo_cpp_sdk.binを使用して、asr_frozen.pbという名前のサンプルモデルを読み込んで実行できます。 サンプルモデルはPAI-Bladeを使用して最適化されています。
# Required. Contact the PAI service team to obtain the value. export BLADE_REGION=<region> # Required. Contact the PAI service team to obtain the value. 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ユーザーのDingTalkグループに参加して、PAI-Bladeを使用できるリージョンを取得できます。 DingTalkグループのQRコードの詳細については、「アクセストークンの取得」をご参照ください。
<token>: PAI-Bladeを使用するために必要な認証トークン。 PAI-BladeユーザーのDingTalkグループに参加して、認証トークンを取得できます。 DingTalkグループのQRコードの詳細については、「アクセストークンの取得」をご参照ください。
/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 ...