0

我正在使用 Google AiPlatform (Unified) Python 客户端将经过训练的模型导出到 Google Cloud 存储桶。我正在遵循以下示例代码:export_model_sample

该应用程序目前具有“所有者”凭据,因为我想确保它不是权限问题。但是,当我尝试执行示例代码时,出现以下错误:

回溯(最后一次调用):文件“/usr/local/lib/python3.8/site-packages/google/api_core/grpc_helpers.py”,第 57 行,在 error_remapped_callable return callable_(*args, **kwargs) 文件中“/usr/local/lib/python3.8/site-packages/grpc/_channel.py”,第 923 行,在调用中 返回 _end_unary_response_blocking(state, call, False, None) 文件“/usr/local/lib/python3. 8/site-packages/grpc/_channel.py”,第 826 行,在 _end_unary_response_blocking 中引发 _InactiveRpcError(state) grpc._channel._InactiveRpcError:<_InactiveRpcError of RPC 终止于:status = StatusCode.FAILED_PRECONDITION details =“projects/101010101010/locations/us-central1/models/123123123123123正在为模型导出工件is not supported." debug_error_string = "{"created":"@1611864688.554145696","description":"Error received from peer ipv4:172.217.12.202:443","file":"src/core/lib/surface/call.cc","file_line":1067,"grpc_message":"Exporting artifact for model `projects/110101010101/locations/us-central1/models/123123123123123` in format不支持格式。","grpc_status":9}"

上述异常是以下异常的直接原因:

回溯(最后一次调用):文件“/app/main.py”,第 667 行,响应 = aiplatform_model_client.export_model(name=name, output_config=output_config) 文件“/usr/local/lib/python3.8/site -packages/google/cloud/aiplatform_v1beta1/services/model_service/client.py”,第 937 行,在 export_model 响应 = rpc(请求,重试 = 重试,超时 = 超时,元数据 = 元数据,)文件“/usr/local/lib /python3.8/site-packages/google/api_core/gapic_v1/method.py”,第 145 行,在调用中 返回 Wrapped_func(*args, **kwargs) 文件“/usr/local/lib/python3.8/site- packages/google/api_core/grpc_helpers.py",第 59 行,在 error_remapped_callable 中 6.raise_from(exceptions.from_grpc_error(exc), exc) 文件 "",第 3 行,在 raise_from google.api_core.exceptions.FailedPrecondition 中: 400 为模型导出工件projects/111101010101/locations/us-central1/models/123123123123123123 不支持 `` 格式。

(我省略了项目 id 和模型 id。使用 10101 和 123123)

我已经验证了我的输入,但一切似乎都很好:

gcs_destination_output_uri_prefix = "gs://my-bucket-vcm/model-123123123123123/tflite/2021-01-28T16:00:00.000Z/"
gcs_destination = {"output_uri_prefix": gcs_destination_output_uri_prefix}
output_config = {"artifact_destination": gcs_destination,}
name = "projects/10101010101/locations/us-central1/models/123123123123123"
response = aiplatform_model_client.export_model(name=name, output_config=output_config)
print("Long running operation:", response.operation.name)
export_model_response = response.result(timeout=300)
print("export_model_response:", export_model_response)

我也在使用最新版本的 google-cloud-aiplatform==0.4.0 我要导出的模型类型为:MOBILE_TF_LOW_LATENCY_1

我只想将模型导出到云存储桶。不要将其部署为服务。

4

1 回答 1

1

export_model_sample缺少请求字段。你应该包括"export_format_id": stringoutput_config. 您可以在 AI Platform Unified REST API 参考中进一步探索导出端点output_config所需的必填字段。

可接受的值export_format_id如下:

  • tflite用于安卓移动设备。
  • edgetpu-tflite用于 Edge TPU 设备。
  • tf-saved-modelSavedModel 格式的张量流模型。
  • tf-js一个 TensorFlow.js 模型,可以在浏览器和使用 JavaScript 的 Node.js 中使用。
  • core-ml用于 iOS 移动设备。
  • custom-trained由自定义代码上传或训练的模型。

代码应如下所示。在这种情况下,我tflite用于export_format_id.

from google.cloud import aiplatform

def export_model_sample(
    project: str = "your-project-id",
    model_id: str = "your-model-id",
    gcs_destination_output_uri_prefix: str = "your-bucket-destination",
    location: str = "us-central1",
    api_endpoint: str = "us-central1-aiplatform.googleapis.com",
    timeout: int = 300,
):
    # The AI Platform services require regional API endpoints.
    client_options = {"api_endpoint": api_endpoint}
    # Initialize client that will be used to create and send requests.
    # This client only needs to be created once, and can be reused for multiple requests.
    client = aiplatform.gapic.ModelServiceClient(client_options=client_options)
    output_config = {
        "export_format_id": "tflite",
        "artifact_destination": {"output_uri_prefix": gcs_destination_output_uri_prefix}
    }
    name = client.model_path(project=project, location=location, model=model_id)
    response = client.export_model(name=name, output_config=output_config)
    print("Long running operation:", response.operation.name)
    export_model_response = response.result(timeout=timeout)
    print("export_model_response:", export_model_response)

export_model_sample()

操作完成后我得到了一个这样命名的模型:

gs://your-bucket-destination/your-model-id/tflite/2021-01-29T04:15:51.672336Z/model.tflite

于 2021-01-29T04:18:39.047 回答