如何配置 Tensorflow Serving 以服务来自 HDFS 的模型?
Posted
技术标签:
【中文标题】如何配置 Tensorflow Serving 以服务来自 HDFS 的模型?【英文标题】:How do I configure Tensorflow Serving to serve models from HDFS? 【发布时间】:2019-02-02 22:18:38 【问题描述】:我正在尝试使用 Tensorflow Serving 项目从 HDFS 中提供 Tensorflow 模型。
我正在运行 tensorflow 服务 docker 容器标签 1.10.1 https://hub.docker.com/r/tensorflow/serving
我可以在以下位置看到引用 Hadoop 的 tensorflow/serving repo https://github.com/tensorflow/serving/blob/628702e1de1fa3d679369e9546e7d74fa91154d3/tensorflow_serving/model_servers/BUILD#L341
"@org_tensorflow//tensorflow/core/platform/hadoop:hadoop_file_system"
这是参考
https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/platform/hadoop/hadoop_file_system.cc
我设置了以下环境变量:
HADOOP_HDFS_HOME 指向我的 HDFS 主目录(在我的例子中是 /etc/hadoop)。 MODEL_BASE_PATH 设置为“hdfs://tensorflow/models” MODEL_NAME 设置为我要加载的模型名称我将 Hadoop home 挂载到 docker 容器中,并且可以使用 docker exec 对其进行验证。
当我运行 docker 容器时,我会在日志中看到以下内容:
tensorflow_serving/sources/storage_path/file_system_storage_path_source.cc:369] FileSystemStoragePathSource encountered a file-system access error: Could not find base path hdfs://tensorflow/models/my_model for servable my_model
我发现了 Tensorflow 使用 HDFS 进行训练的示例,但没有使用 Tensorflow Serving 从 HDFS 提供模型。
Tensorflow Serving 能否为来自 HDFS 的模型提供服务? 如果是这样,你是怎么做到的?
【问题讨论】:
这可能会有所帮助:github.com/tensorflow/serving/issues/359 【参考方案1】:在model_servers
的BUILD
下,在cc_test
为get_model_status_impl_test
下,添加这行@org_tensorflow//tensorflow/core/platform/hadoop:hadoop_file_system
,如下图:
cc_test(
name = "get_model_status_impl_test",
size = "medium",
srcs = ["get_model_status_impl_test.cc"],
data = [
"//tensorflow_serving/servables/tensorflow/testdata:saved_model_half_plus_two_2_versions",
],
deps = [
":get_model_status_impl",
":model_platform_types",
":platform_config_util",
":server_core",
"//tensorflow_serving/apis:model_proto",
"//tensorflow_serving/core:availability_preserving_policy",
"//tensorflow_serving/core/test_util:test_main",
"//tensorflow_serving/servables/tensorflow:saved_model_bundle_source_adapter_proto",
"//tensorflow_serving/servables/tensorflow:session_bundle_config_proto",
"//tensorflow_serving/servables/tensorflow:session_bundle_source_adapter_proto",
"//tensorflow_serving/test_util",
"@org_tensorflow//tensorflow/cc/saved_model:loader",
"@org_tensorflow//tensorflow/cc/saved_model:signature_constants",
"@org_tensorflow//tensorflow/contrib/session_bundle",
"@org_tensorflow//tensorflow/core:test",
"@org_tensorflow//tensorflow/core/platform/hadoop:hadoop_file_system",
],
)
我认为这会解决您的问题。
参考:Fail to load the models from HDFS
【讨论】:
以上是关于如何配置 Tensorflow Serving 以服务来自 HDFS 的模型?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 tensorflow-serving 发布自定义(非 tensorflow)模型?
81TensorFlow 2 模型部署方法实践--TensorFlow Serving 部署模型
使用tensorflow-serving部署tensorflow模型
使用 ScaNN 进行高效检索以进行检索 7使用 TensorFlow 构建推荐系统 Efficient serving with ScaNN for retrieval