python-3.x - 'Channel' 对象在调用 prediction_service_pb2_grpc.PredictionServiceStub(channel) 时没有属性 'unary_unary' 错误
问题描述
我正在尝试为我的模型(语言分类)创建一个推理应用程序,但我收到一个错误Channel
object has no attribute unary_unary
。我在任何地方都找不到关于这个问题的任何信息,因此这篇文章。我对 python 和 tensorflow 领域很陌生,我还在学习。
错误日志如下所示(最后几行)
2019-07-30T12:34:12.24+0200 [APP/PROC/WEB/0] ERR File "app.py", line 189, in do_inference
2019-07-30T12:34:12.24+0200 [APP/PROC/WEB/0] ERR stub = prediction_service_pb2_grpc.PredictionServiceStub(channel)
2019-07-30T12:34:12.24+0200 [APP/PROC/WEB/0] ERR File "/home/vcap/deps/0/python/lib/python3.6/site-packages/tensorflow_serving/apis/prediction_service_pb2_grpc.py", line 40, in __init__
2019-07-30T12:34:12.24+0200 [APP/PROC/WEB/0] ERR self.Classify = channel.unary_unary(
2019-07-30T12:34:12.24+0200 [APP/PROC/WEB/0] ERR AttributeError: 'Channel' object has no attribute 'unary_unary'
我正在使用烧瓶创建使用模型的 Web 服务。
@app.route('/LangDet', methods=['POST'])
def do_inference():
# get deployed model details
token = get_access_token()
model_name = request.path[1:]
query_string = {"modelName": model_name}
headers = {
'Authorization': token
}
res = requests.get(deployment_url, headers=headers, params=query_string)
model_info = json.loads(res.text)
if int(model_info["count"]) < 1:
return Response('404 Not Found: Model ' + model_name + ' is unavailable.', status=404)
else:
latest_version = [0, 0]
for index, model in enumerate(model_info["modelServers"]):
if int(model["specs"]["models"][0]["modelVersion"]) > latest_version[0]:
latest_version = [int(model["specs"]["models"][0]["modelVersion"]), index]
model_host = model_info["modelServers"][latest_version[1]]["endpoints"][0]
credentials = implementations.ssl_channel_credentials(root_certificates=bytes(model_host["caCrt"], 'ascii'))
channel = implementations.secure_channel(str(model_host["host"]), int(model_host["port"]), credentials)
stub = prediction_service_pb2_grpc.PredictionServiceStub(channel)
声明存根后,应用程序抛出异常。这里似乎有什么问题,我能做些什么来解决它?
解决方案
虽然原始海报似乎已经解决了这个问题,但对于遇到此问题的其他人来说,这里是解决方案。
代替:
channel = grpc.beta.implementations.insecure_channel(host, int(port))
利用:
channel = grpc.insecure_channel(server)
请注意,虽然 beta 实现分别接受主机和端口,但第二种方法将它们作为单个参数一起接受。例如,
insecure_channel(0.0.0.0, 9999)
变成
insecure_channel(0.0.0.0:9999)
推荐阅读
- angular - 如何使用 Angular 或 Flutter 中的 Firebase 存储下载具有客户提供/管理的加密密钥的文件?
- python - 如何在 paho-mqtt 中拥有数百个订阅者?
- angular - PrimeNgConfig 不能从 primeng/api 获得
- r - 使用 R 中指定的 X 变量进行 Logit 预测
- javascript - 在 Javascript 中使用模板文字
- tensorflow - 如何将张量值用于循环迭代器?
- c++ - 通过二叉树选择所需的路径
- java - 登录系统设计 - CRM项目
- r - Dplyr 间接/管道在闭包内不起作用
- mysql - 1193 - 未知的系统变量 'sql_require_primary_key'