以安装用户HwHiAiUser为例,介绍TF Serving集成TF Adapter的操作方法,实际操作时请根据实际路径进行替换。本文中举例路径均需要确保安装用户具有读或读写权限。
TF Serving需与TensorFlow保持版本一致,将源码包上传至服务器任意路径下。
unzip 1.15.0.zip cd serving-1.15.0/
cd third_party/ mkdir tf_adapter cd tf_adapter
cp /usr/local/python3.7.5/lib/libpython3.7m.so.1.0 . ln -s libpython3.7m.so.1.0 libpython3.7m.so
cp /home/HwHiAiUser/Ascend/tfplugin/latest/python/site-packages/npu_bridge/_tf_adapter.so . mv _tf_adapter.so lib_tf_adapter.so
vim CMakeLists.txt
file(TOUCH ${CMAKE_CURRENT_BINARY_DIR}/stub.c) add_library(_pywrap_tensorflow_internal SHARED ${CMAKE_CURRENT_BINARY_DIR}/stub.c) add_library(tensorflow_framework SHARED ${CMAKE_CURRENT_BINARY_DIR}/stub.c)
mkdir temp cd temp cmake .. make mv lib_pywrap_tensorflow_internal.so ../_pywrap_tensorflow_internal.so mv libtensorflow_framework.so ../libtensorflow_framework.so cd .. ln -s libtensorflow_framework.so libtensorflow_framework.so.1
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$(pwd)
vim BUILD
licenses(["notice"]) # BSD/MIT. cc_import( name = "tf_adapter", shared_library = "lib_tf_adapter.so", visibility = ["//visibility:public"] ) cc_import( name = "tf_python", shared_library = "libpython3.7m.so", visibility = ["//visibility:public"] )
cc_binary( name = "tensorflow_model_server", stamp = 1, visibility = [ ":testing", "//tensorflow_serving:internal", ], deps = [ ":tensorflow_model_server_main_lib", "//third_party/tf_adapter:tf_adapter", "//third_party/tf_adapter:tf_python", "@org_tensorflow//tensorflow/compiler/jit:xla_cpu_jit", ], )
在TF Serving安装目录“serving-1.15.0”下执行如下命令,编译TF Serving。
bazel --output_user_root=/opt/tf_serving build -c opt --cxxopt="-D_GLIBCXX_USE_CXX11_ABI=0" tensorflow_serving/model_servers:tensorflow_model_server
其中“–output_user_root”参数指定了TF Serving的安装路径。请根据实际进行指定。
执行如下命令,创建TF Serving软件包的软链接。
ln -s /opt/tf_serving/{tf_serving_ID}/execroot/tf_serving/bazel-out/xxx-opt/bin/tensorflow_serving/model_servers/tensorflow_model_server /usr/local/bin/tensorflow_model_server