TF Serving集成TF Adapter
以安装用户HwHiAiUser为例,介绍TF Serving集成TF Adapter的操作方法,实际操作时请根据实际路径进行替换。本文中举例路径均需要确保安装用户具有读或读写权限。
- 下载TF Serving源码。
TF Serving需与TensorFlow保持版本一致,将源码包上传至服务器任意路径下。
- 进入源码包所在路径,执行如下命令解压并进入TF Serving源码包。
unzip 1.15.0.zip cd serving-1.15.0/
- 添加TF Serving第三方依赖。
- 执行如下命令,在“serving-1.15.0/third_party”目录下创建“tf_adapter”文件夹并进入。
cd third_party/ mkdir tf_adapter cd tf_adapter
- 执行如下命令,在“tf_adapter”文件夹下拷贝存放“libpython3.7m.so.1.0”文件,并创建软链接。
cp /usr/local/python3.7.5/lib/libpython3.7m.so.1.0 . ln -s libpython3.7m.so.1.0 libpython3.7m.so
- 执行如下命令,在“tf_adapter”文件夹下拷贝存放“_tf_adapter.so”文件,并将“_tf_adapter.so”文件名修改为“lib_tf_adapter.so”。
cp /home/HwHiAiUser/Ascend/tfplugin/latest/python/site-packages/npu_bridge/_tf_adapter.so . mv _tf_adapter.so lib_tf_adapter.so
- 执行如下命令,在“serving-1.15.0/third_party”目录下创建“tf_adapter”文件夹并进入。
- 编译空的libtensorflow_framework.so、_pywrap_tensorflow_internal.so文件。
- 在“tf_adapter”文件夹下,执行如下命令。
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)
- 执行:wq!命令保存文件并退出。
- 执行如下命令,编译出空的.so文件。
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)
- 在“tf_adapter”文件夹下,执行如下命令。
- 创建BUILD文件并添加内容。
- 执行以下命令,在“tf_adapter”文件夹下创建BUILD文件。
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"] )
- 执行:wq!命令保存文件并退出。
- 执行以下命令,在“tf_adapter”文件夹下创建BUILD文件。
- 修改“serving-1.15.0/tensorflow_serving/model_servers/”路径下的BUILD文件,在“cc_binary”中添加如下加粗内容。
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。
在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编译依赖包。
- 如果在TF Serving编译过程中出现“builtins”依赖模块查询失败问题,参考TF Serving编译时提示缺少builtins解决。
- 建立软链接。
执行如下命令,创建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
- {tf_serving_ID}为一串如“063944eceea3e72745362a0b6eb12a3c”的无规则字符。请根据实际进行填写。
- xxx-opt为工具自动生成文件夹,具体显示请以实际为准。
父主题: 基于TF-Serving部署在线推理业务