Rotinas de inferência personalizadas

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.