As rotinas de inferência personalizadas permitem-lhe criar contentores personalizados com código de pré-processamento e pós-processamento, sem ter de lidar com os detalhes da configuração de um servidor HTTP ou da criação de um contentor de raiz. Pode usar o pré-processamento para normalizar e transformar as entradas ou fazer chamadas para serviços externos para obter dados adicionais, e usar o pós-processamento para formatar a inferência do modelo ou executar a lógica empresarial.
O diagrama seguinte representa o fluxo de trabalho do utilizador com e sem rotinas de inferência personalizadas.
As principais diferenças são:
Não precisa de escrever um servidor de modelos nem um Dockerfile. O servidor de modelos, que é o servidor HTTP que aloja o modelo, é fornecido por nós.
Pode implementar e depurar o modelo localmente, o que acelera o ciclo de iteração durante o desenvolvimento.
Crie e implemente um contentor personalizado
Esta secção descreve como usar o CPR para criar um contentor personalizado com lógica de pré-processamento e pós-processamento, e implementá-lo num ponto final local e online.
Configuração
Tem de ter o SDK Vertex AI for Python e o Docker instalados no seu ambiente.
Escreva uma interface de inferência Predictor
personalizada
Implemente a interface Predictor
.
Por exemplo, consulte a implementação da Predictor
do Sklearn.
Escreva um Handler
personalizado (opcional)
Os processadores personalizados têm acesso ao objeto de pedido não processado e, por isso, são úteis em casos raros em que precisa de personalizar a lógica relacionada com o servidor Web, como suportar cabeçalhos de pedidos e respostas adicionais ou desserializar pedidos de inferência formatados não JSON.
Segue-se um exemplo de bloco de notas que implementa o Predictor e o Handler.
Embora não seja obrigatório, para uma melhor organização e reutilização do código, recomendamos que implemente a lógica do servidor Web no controlador e a lógica de ML no preditor, conforme mostrado no controlador predefinido.
Crie um contentor personalizado
Coloque o código personalizado e um ficheiro requirements.txt
adicional, se precisar de instalar pacotes nas suas imagens, num diretório.
Use o SDK Vertex AI para Python para criar contentores personalizados da seguinte forma:
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},
)
Pode inspecionar a especificação do contentor para obter informações úteis, como o URI da imagem e as variáveis de ambiente.
local_model.get_serving_container_spec()
Execute o contentor localmente (opcional)
Este passo só é necessário se quiser executar e testar o contentor localmente, o que é útil para uma iteração mais rápida. No exemplo seguinte, implementa num ponto final local e envia um pedido de inferência (formato para o corpo do pedido).
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},
)
Imprima a verificação de funcionamento e a resposta de inferência.
print(health_check_response, health_check_response.content)
print(predict_response, predict_response.content)
Imprimir todos os registos do contentor.
local_endpoint.print_container_logs(show_all=True)
Carregue para o Registo de modelos do Vertex AI
O seu modelo tem de aceder aos artefactos do modelo (os ficheiros da preparação), por isso, certifique-se de que os carregou para o Google Cloud Storage.
Envie a imagem para o Artifact Registry.
local_model.push_image()
Em seguida, carregue-o para o 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},
)
Depois de carregar o modelo para o Registo de modelos, este pode ser usado para obter inferências em lote ou implementado num ponto final do Vertex AI para obter inferências online.
Implemente no ponto final do Vertex AI
endpoint = model.deploy(machine_type="n1-standard-4")
Depois de implementar o modelo, pode obter inferências online.
Exemplos de blocos de notas
Os exemplos mostram as diferentes formas de implementar um modelo com pré-processamento e pós-processamento personalizados através da Vertex AI Inference.
- Predictor personalizado com pré/pós-processamento personalizado para o Sklearn, crie o seu próprio contentor com o SDK Vertex AI para Python.
- Implemente apenas o carregamento de métodos de pré-processamento, pré-processamento e pós-processamento serializados no Predictor. Herdar o carregamento do modelo predefinido e prever o comportamento do
SklearnPredictor
distribuído pelo Vertex AI.
- Implemente apenas o carregamento de métodos de pré-processamento, pré-processamento e pós-processamento serializados no Predictor. Herdar o carregamento do modelo predefinido e prever o comportamento do
- Custom Predictor, crie o seu próprio contentor com o SDK Vertex AI para Python.
- Implementação personalizada de todo o preditor.
- Preditor e controlador personalizados, crie o seu próprio contentor com o SDK Vertex AI para Python.
- Implementação personalizada do Predictor e do Handler.
- A personalização do controlador permite que o servidor do modelo processe entradas CSV.
- Custom Predictor, crie o seu próprio contentor com o SDK Vertex AI para Python e PyTorch.
- Implementação personalizada do Predictor.
- Use uma imagem existente, teste a previsão localmente e implemente modelos com o SDK Vertex AI para Python.
- Use o servidor de inferência NVIDIA Triton para modelos PyTorch.