借助自定义推理例程 (CPR),您可以构建包含预处理和后处理代码的自定义容器,而无需处理繁琐的 HTTP 服务器设置,也无需从头开始构建容器。您可以使用预处理来对输入进行归一化和转换,或者调用外部服务以获取其他数据,并使用后处理设置模型推理的格式或运行业务逻辑。
下图展示了使用和不使用自定义推理例程的用户工作流。
主要区别如下:
您无需编写模型服务器或 Dockerfile。系统会为您提供模型服务器,即托管模型的 HTTP 服务器。
您可以在本地部署和调试模型,从而加快开发期间的迭代周期。
构建和部署自定义容器
本部分介绍如何使用 CPR 构建包含预处理和后处理逻辑的自定义容器,并将其部署到本地和在线端点。
设置
您必须在环境中安装 Vertex AI SDK for Python 和 Docker。
编写自定义 Predictor
推理接口
实现 Predictor
接口。
例如,请参阅 Sklearn 的 Predictor
实现。
编写自定义 Handler
(可选)
自定义处理程序可以访问原始请求对象,因此,在您需要自定义网络服务器相关逻辑(例如支持其他请求和响应标头或反序列化非 JSON 格式的推理请求)的极少数情况下,自定义处理程序非常有用。
这是一个同时实现 Predictor 和处理程序的示例笔记本。
虽然并非必需,但为了更好地整理和重复使用代码,我们建议您在处理程序中实现网络服务器逻辑,并在 Predictor 中实现机器学习逻辑(如默认处理程序中所示)。
构建自定义容器
将自定义代码和额外的 requirements.txt
文件(如果需要安装映像中的任何软件包)放在目录中。
使用 Vertex AI SDK for Python 构建自定义容器,如下所示:
from google.cloud.aiplatform.prediction import LocalModel
# {import your predictor and handler}
local_model = LocalModel.build_cpr_model(
{PATH_TO_THE_SOURCE_DIR},
f"{REGION}-docker.pkg.dev/{PROJECT_ID}/{REPOSITORY}/{IMAGE}",
predictor={PREDICTOR_CLASS},
handler={HANDLER_CLASS},
requirements_path={PATH_TO_REQUIREMENTS_TXT},
)
您可以检查容器规范以获取有用的信息,例如映像 URI 和环境变量。
local_model.get_serving_container_spec()
在本地运行容器(可选)
仅当您要在本地运行和测试容器时,才需要执行此步骤,这有助于加快迭代速度。在以下示例中,您将部署到本地端点并发送推理请求(请求正文的格式)。
with local_model.deploy_to_local_endpoint(
artifact_uri={GCS_PATH_TO_MODEL_ARTIFACTS},
credential_path={PATH_TO_CREDENTIALS},
) as local_endpoint:
health_check_response = local_endpoint.run_health_check()
predict_response = local_endpoint.predict(
request_file={PATH_TO_INPUT_FILE},
headers={ANY_NEEDED_HEADERS},
)
输出健康检查和推理响应。
print(health_check_response, health_check_response.content)
print(predict_response, predict_response.content)
输出所有容器日志。
local_endpoint.print_container_logs(show_all=True)
上传到 Vertex AI Model Registry
您的模型需要访问模型工件(训练中的文件),因此请确保将它们上传到 Google Cloud Storage。
将映像推送到 Artifact Registry。
local_model.push_image()
然后,上传到 Model Registry。
from google.cloud import aiplatform
model = aiplatform.Model.upload(
local_model=local_model,
display_name={MODEL_DISPLAY_NAME},
artifact_uri={GCS_PATH_TO_MODEL_ARTIFACTS},
)
将模型上传到 Model Registry 后,该模型可能会用于进行批量推理,或部署到 Vertex AI 端点以获取在线推理。
部署到 Vertex AI 端点
endpoint = model.deploy(machine_type="n1-standard-4")
模型部署后,您可以获取在线推理。
笔记本示例
这些示例展示了使用 Vertex AI Inference 部署包含自定义预处理和后处理的模型的不同方式。
- 包含 Sklearn 的自定义预处理/后处理的自定义 Predictor,使用 Vertex AI SDK for Python 构建您自己的容器。
- 仅在 Predictor 中实现加载序列化预处理器、预处理和后处理方法。从 Vertex AI 分布式
SklearnPredictor
继承默认模型加载和预测行为。
- 仅在 Predictor 中实现加载序列化预处理器、预处理和后处理方法。从 Vertex AI 分布式
- 自定义 Predictor,使用 Vertex AI SDK for Python 构建您自己的容器。
- 整个 Predictor 的自定义实现。
- 自定义 Predictor 和处理程序,使用 Vertex AI SDK for Python 构建您自己的容器。
- Predictor 和处理程序的自定义实现。
- 自定义处理程序允许模型服务器处理 csv 输入。
- 自定义 Predictor,使用 Vertex AI SDK for Python 和 PyTorch 构建您自己的容器。
- Predictor 的自定义实现。
- 现有映像,在本地测试推理并使用 Vertex AI SDK for Python 部署模型。
- 将 NVIDIA Triton 推理服务器用于 PyTorch 模型。