TensorFlow Serving gRPC健康检查端点调用失败求助
解决TensorFlow Serving添加gRPC健康检查端点后调用失败的问题
针对你遇到的问题——已添加gRPC健康检查代码且能通过grpcurl list看到服务,但调用Check方法时报服务不存在,可尝试以下解决方案:
1. 确认代码插入位置是否正确
必须将健康检查和反射初始化代码放在创建gRPC ServerBuilder之后、调用BuildAndStart()之前。在tensorflow_serving/model_servers/server.cc中找到ServerBuilder的创建逻辑,调整代码顺序如下:
// 创建ServerBuilder实例 grpc::ServerBuilder builder; // 插入健康检查与反射初始化代码 ::grpc::EnableDefaultHealthCheckService(true); ::grpc::reflection::InitProtoReflectionServerBuilderPlugin(); // 后续添加TensorFlow Serving自身服务、配置端口等逻辑 builder.AddListeningPort(server_address, server_credentials); builder.RegisterService(&prediction_service_); // ...其他配置 // 最后启动服务器 std::unique_ptr<grpc::Server> server(builder.BuildAndStart());
如果代码插在BuildAndStart()之后,服务不会被注册到服务器中。
2. 手动显式注册健康检查服务
若默认启用方式不生效,可手动创建健康服务实例并注册,避免TF Serving的ServerBuilder配置覆盖默认服务:
// 先引入头文件 #include "grpcpp/ext/health_check_service_server.h" #include "grpcpp/ext/reflection_server_plugin.h" // 在ServerBuilder创建后执行 auto health_service = grpc::CreateHealthCheckService(true); builder.RegisterService(health_service.get()); grpc::reflection::InitProtoReflectionServerBuilderPlugin();
3. 检查编译依赖是否完整
确保编译TensorFlow Serving时,链接了gRPC的健康检查和反射模块:
- 在对应的BUILD文件中,添加依赖:
deps = [ # ...其他依赖 "@com_github_grpc_grpc//:grpcpp_ext", "@com_github_grpc_grpc//:grpcpp_reflection", ] - 重新执行完整编译流程,避免增量编译导致依赖未生效。
4. 带请求体调用健康检查接口
grpc.health.v1.Health/Check方法需要传入指定服务名的请求体,尝试用以下命令测试:
# 检查TensorFlow预测服务的健康状态 grpcurl -plaintext -d '{"service": "tensorflow.serving.PredictionService"}' localhost:8500 grpc.health.v1.Health/Check # 检查健康检查服务自身状态 grpcurl -plaintext -d '{"service": "grpc.health.v1.Health"}' localhost:8500 grpc.health.v1.Health/Check
内容的提问来源于stack exchange,提问作者Chang Liu
相关产品推荐
相关产品推荐

