首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >顶点AI -部署失败

顶点AI -部署失败
EN

Stack Overflow用户
提问于 2022-07-05 14:34:45
回答 2查看 502关注 0票数 3

我正在尝试使用自定义容器部署经过自定义培训的模型,即从我创建的模型创建端点。我在AI平台上做同样的事情(相同的模型和容器),它在那里工作得很好。

在第一次尝试中,我成功地部署了模型,但是自从我尝试创建端点时,它就说“部署”了1+小时,然后失败了,出现了以下错误:

代码语言:javascript
运行
复制
google.api_core.exceptions.FailedPrecondition: 400 Error: model server never became ready. Please validate that your model file or container configuration are valid. Model server logs can be found at (link)

日志显示了以下内容:

代码语言:javascript
运行
复制
* Running on all addresses (0.0.0.0)
 WARNING: This is a development server. Do not use it in a production deployment.
* Running on http://127.0.0.1:8080
[05/Jul/2022 12:00:37] "[33mGET /v1/endpoints/1/deployedModels/2025850174177280000 HTTP/1.1[0m" 404 -
[05/Jul/2022 12:00:38] "[33mGET /v1/endpoints/1/deployedModels/2025850174177280000 HTTP/1.1[0m" 404 -

最后一行被垃圾处理,直到最终失败。

我的烧瓶应用程序如下:

代码语言:javascript
运行
复制
import base64
import os.path
import pickle
from typing import Dict, Any
from flask import Flask, request, jsonify
from streamliner.models.general_model import GeneralModel

class Predictor:
    def __init__(self, model: GeneralModel):
        self._model = model

    def predict(self, instance: str) -> Dict[str, Any]:
        decoded_pickle = base64.b64decode(instance)
        features_df = pickle.loads(decoded_pickle)
        prediction = self._model.predict(features_df).tolist()
        return {"prediction": prediction}

app = Flask(__name__)
with open('./model.pkl', 'rb') as model_file:
    model = pickle.load(model_file)
    predictor = Predictor(model=model)


@app.route("/predict", methods=['POST'])
def predict() -> Any:
    if request.method == "POST":
        instance = request.get_json()
        instance = instance['instances'][0]
        predictions = predictor.predict(instance)
        return jsonify(predictions)


@app.route("/health")
def health() -> str:
    return "ok"


if __name__ == '__main__':
    port = int(os.environ.get("PORT", 8080))
    app.run(host='0.0.0.0', port=port)

我通过Python执行的部署代码与此无关,因为当我通过GCP的UI进行部署时,问题仍然存在。

模型创建代码如下:

代码语言:javascript
运行
复制
def upload_model(self):
    model = {
        "name": self.model_name_on_platform,
        "display_name": self.model_name_on_platform,
        "version_aliases": ["default", self.run_id],
        "container_spec": {
            "image_uri": f'{REGION}-docker.pkg.dev/{GCP_PROJECT_ID}/{self.repository_name}/{self.run_id}',
            "predict_route": "/predict",
            "health_route": "/health",
        },
    }
    parent = self.model_service_client.common_location_path(project=GCP_PROJECT_ID, location=REGION)
    model_path = self.model_service_client.model_path(project=GCP_PROJECT_ID,
                                                      location=REGION,
                                                      model=self.model_name_on_platform)
    upload_model_request_specifications = {'parent': parent, 'model': model,
                                           'model_id': self.model_name_on_platform}
    try:
        print("trying to get model")
        self.get_model(model_path=model_path)
    except NotFound:
        print("didn't find model, creating a new one")
    else:
        print("found an existing model, creating a new version under it")
        upload_model_request_specifications['parent_model'] = model_path
    upload_model_request = model_service.UploadModelRequest(upload_model_request_specifications)
    response = self.model_service_client.upload_model(request=upload_model_request, timeout=1800)
    print("Long running operation:", response.operation.name)
    upload_model_response = response.result(timeout=1800)
    print("upload_model_response:", upload_model_response)

我的问题与这一个非常接近,因为我做了健康检查。

为什么它会在第一次部署中工作,从那以后就失败了?为什么它会在AI平台上工作,而在顶点AI上失败呢?

EN

回答 2

Stack Overflow用户

发布于 2022-07-07 20:59:52

这个问题可能是由不同的原因造成的:

  1. 验证容器配置端口,它应该使用端口8080。这种配置很重要,因为顶点AI向容器上的这个端口发送活性检查、健康检查和预测请求。您可以看到这个关于容器的文档,还有这个关于自定义集装箱的文档。
  2. 另一个可能的原因是配额限额,它可能需要增加。您将能够使用本文件进行验证。
  3. 在健康和预测路线中,使用您正在使用的MODEL_NAME。就像这个例子
代码语言:javascript
运行
复制
"predict_route": "/v1/models/MODEL_NAME:predict",
 "health_route": "/v1/models/MODEL_NAME",
  1. 验证您所使用的帐户是否有足够的权限来读取项目的GCS桶。
  2. 验证模型的位置,应该是正确的路径。

如果上述任何建议有效,则需要通过创建一个支撑箱来修复它,从而与GCP支持联系。如果不使用内部GCP资源,社区就不可能排除它

票数 0
EN

Stack Overflow用户

发布于 2022-10-28 13:23:47

如果您还没有找到解决方案,您可以尝试自定义预测例程。它们确实很有帮助,因为它们消除了编写代码的服务器部分的必要性,并允许我们只关注ml模型的逻辑和任何类型的预处理或后置处理。下面是帮助您解决https://codelabs.developers.google.com/vertex-cpr-sklearn#0的链接。希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72871214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档