Implantar código Python com o Serviço de Modelo
Este artigo descreve como implantar o código Python com o Mosaic AI Model Serving.
A função MLflow do Python pyfunc
fornece flexibilidade para implantar qualquer parte do código Python ou qualquer modelo do Python. Veja a seguir cenários de exemplo em que talvez você queira usar o guia.
- Seu modelo requer pré-processamento antes que as entradas possam ser passadas para a função de previsão do modelo.
- Sua estrutura de modelo não tem suporte nativo do MLflow.
- Seu aplicativo exige que as saídas brutas do modelo sejam pós-processadas para consumo.
- O próprio modelo tem lógica de ramificação por solicitação.
- Você deseja implantar um código totalmente personalizado como um modelo.
Construir um modelo de função do MLflow do Python personalizado
O MLflow oferece a capacidade de registrar o código Python com o formato de modelos personalizados do Python.
Há duas funções necessárias ao empacotar código Python arbitrário com o MLflow:
load_context
– qualquer coisa que precise ser carregada apenas uma vez para que o modelo opere deve ser definida nessa função. Isso é fundamental para que o sistema minimize o número de artefatos carregados durante a funçãopredict
, o que acelera a inferência.predict
– essa função abriga toda a lógica que é executada sempre que uma solicitação de entrada é feita.
Registrar seu modelo de função do Python em log
Embora você esteja escrevendo seu modelo com código personalizado, é possível usar módulos compartilhados de código de sua organização. Com o parâmetro code_path
, os autores de modelos podem registrar referências de código completo que são carregadas no caminho e utilizáveis de outros modelos pyfunc
personalizados.
Por exemplo, se um modelo for registrado com:
mlflow.pyfunc.log_model(CustomModel(), "model", code_path = ["preprocessing_utils/"])
O código de preprocessing_utils
está disponível no contexto carregado do modelo. Veja a seguir um modelo de exemplo que usa esse código.
class CustomModel(mlflow.pyfunc.PythonModel):
def load_context(self, context):
self.model = torch.load(context.artifacts["model-weights"])
from preprocessing_utils.my_custom_tokenizer import CustomTokenizer
self.tokenizer = CustomTokenizer(context.artifacts["tokenizer_cache"])
def format_inputs(self, model_input):
# insert some code that formats your inputs
pass
def format_outputs(self, outputs):
predictions = (torch.sigmoid(outputs)).data.numpy()
return predictions
def predict(self, context, model_input):
model_input = self.format_inputs(model_input)
outputs = self.model.predict(model_input)
return self.format_outputs(outputs)
Fornecer o modelo
Depois de registrar seu modelo personalizado pyfunc
, você pode registrá-lo no Catálogo do Unity ou no Registro do Workspace e fornecer seu modelo a um ponto de extremidade de Serviço de Modelo.
Exemplo de notebook
O exemplo de notebook a seguir demonstra como personalizar a saída do modelo quando a saída bruta do modelo consultado precisa ser pós-processada para consumo.