Compartilhar via


Implantar código Python utilizando o Serviço de Modelos

Este artigo descreve como implantar seu código Python personalizado com o Modelo de Serviço do Mosaic AI. O exemplo neste artigo se concentra em fornecer diretrizes para adicionar lógica de pré-processamento e pós-processamento ao seu modelo e implantá-lo.

A função Python do MLflow, 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 Python personalizado

O MLflow oferece a capacidade de registrar o código python com o formato de modelos python personalizados .

Há duas funções necessárias ao empacotar código python arbitrário com o MLflow:

  • load_context – tudo o que precisa ser carregado apenas uma vez para que o modelo opere deve ser definido nessa função. Isso é fundamental para que o sistema minimize o número de artefatos carregados durante a função predict, 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

Mesmo que 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 completas que são carregadas no caminho e são utilizáveis por outros modelos personalizados de pyfunc.

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 logar seu modelo personalizado pyfunc, você pode registrá-lo no Catálogo do Unity ou no Registro do Workspace e disponibilizar seu modelo para um Ponto de Extremidade do Serviço de Modelo.

Exemplo de caderno

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.

Personalizar a saída de serviço de modelo com o notebook PyFunc do MLflow

Obter notebook