You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Google Cloud Vertex AI部署Docker容器无预测结果求助

在Google Cloud Vertex AI部署Docker容器后无法获取预测结果

我们尝试在Google Cloud Vertex AI上部署Docker容器,但每次向Vertex AI发送请求时,仅收到包含模型规格的响应,无法获取模型生成的预测结果。

以下是当前使用的代码:

app.py 代码

class PredictionHandler(tornado.web.RequestHandler):
  def __init__(
    self,
    application: "Application",
    request: tornado.httputil.HTTPServerRequest,
    **kwargs: Any
  ) -> None:
    super().__init__(application, request, **kwargs)
  def post(self):
    response_body = None
    try:
      response_body = json.dumps({'predictions': 'Prediction ran succsessfully'})
    except Exception as e:
      response_body = json.dumps({'error:':str(e)})
    self.set_header("Content-Type", "application/json")
    self.set_header("Content-Length", len(response_body))
    self.write(response_body)
    self.finish()

def make_app():
  tornado_app = tornado.web.Application([('/health_check', HealthCheckHandler),
                 ('/predict', PredictionHandler)],
               debug=False)
  tornado_app.listen(8080)
  print("Running App...")
  tornado.ioloop.IOLoop.current().start()

Dockerfile 代码

FROM python:3.8
RUN mkdir -p /app/model
WORKDIR /app
COPY requirements.txt /app/requirements.txt
RUN pip3 install --no-cache-dir -r requirements.txt
COPY app /app/
EXPOSE 8080
ENTRYPOINT ["python3", "app.py"]

问题分析与修复方案

Vertex AI预测服务对容器内的Web服务有明确的格式要求,当前代码存在几个关键问题:

  1. 缺失必要的处理器定义:代码中引用了HealthCheckHandler但未实现,会导致服务启动失败
  2. 未处理请求体:Vertex AI会将预测输入数据放在POST请求体中,当前代码完全未读取和处理这部分内容
  3. 响应格式不符合要求:Vertex AI期望predictions字段的值为数组类型,而非字符串
  4. 拼写错误与语法问题:succsessfully拼写错误,error:键名多了冒号,且缺少脚本入口

修复后的app.py代码

import tornado.web
import tornado.ioloop
import json
from typing import Any, Application

class HealthCheckHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("OK")
        self.finish()

class PredictionHandler(tornado.web.RequestHandler):
    def __init__(
        self,
        application: "Application",
        request: tornado.httputil.HTTPServerRequest,
        **kwargs: Any
    ) -> None:
        super().__init__(application, request, **kwargs)

    def post(self):
        response_body = None
        try:
            # 读取Vertex AI发送的请求体数据
            request_data = json.loads(self.request.body)
            # 这里替换为实际的模型预测逻辑,示例仅返回处理后的输入信息
            prediction_result = ["Prediction ran successfully with input: " + str(request_data)]
            response_body = json.dumps({'predictions': prediction_result})
        except Exception as e:
            response_body = json.dumps({'error': str(e)})
        self.set_header("Content-Type", "application/json")
        self.set_header("Content-Length", str(len(response_body)))
        self.write(response_body)
        self.finish()

def make_app():
    tornado_app = tornado.web.Application([
        ('/health_check', HealthCheckHandler),
        ('/predict', PredictionHandler)
    ], debug=False)
    tornado_app.listen(8080)
    print("Running App...")
    tornado.ioloop.IOLoop.current().start()

if __name__ == "__main__":
    make_app()

配套要求

确保requirements.txt包含tornado依赖:

tornado>=6.0

部署验证步骤

  1. 重新构建Docker镜像并推送到Google Artifact Registry(或Container Registry)
  2. 在Vertex AI控制台重新创建模型端点,使用更新后的镜像
  3. 发送测试请求,请求体示例:
    {"instances": [{"input": "test_data"}]}
    
    此时应收到包含预测结果数组的响应。

内容的提问来源于stack exchange,提问作者Jan Janiszewski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 10:35:27