如何配置 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_serversBUILD下,在cc_testget_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 slim配置流程

使用tensorflow-serving部署tensorflow模型

使用 ScaNN 进行高效检索以进行检索 7使用 TensorFlow 构建推荐系统 Efficient serving with ScaNN for retrieval

Tensorflow Serving 初探