Implantei código Python com modelo instalado

Este artigo descreve como implantar código Python com modelo prático.

A função Python do MLflow, pyfunc, oferece flexibilidade para implantar qualquer parte do código Python ou qualquer modelo Python. A seguir estão exemplos de cenários em que você pode querer 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 é suportada nativamente pelo MLflow.

  • Seu aplicativo requer que as saídas brutas do modelo sejam pós-processadas para consumo.

  • O próprio modelo possui lógica de ramificação por solicitação.

  • Você está procurando aprimorar o código totalmente personalizado como um modelo.

Construir um modelo de função MLflow Python personalizado

O MLflow oferece a capacidade de logs código Python com o formato de modelos Python personalizado.

Existem duas funções necessárias ao empacotar código Python arbitrário com MLflow:

  • load_context - tudo o que precisa ser carregado apenas uma vez para o modelo operar deve ser definido nesta função. Isso é fundamental para que o sistema minimize a quantidade de artefatos carregados durante a função predict , o que agiliza a inferência.

  • predict - esta função abriga toda a lógica que é executada toda vez que uma requisição de entrada é feita.

logs seu modelo de função Python

Mesmo que você esteja escrevendo seu modelo com código customizado, é possível usar módulos de código compartilhados de sua organização. Com o parâmetro code_path, os autores de modelos podem logs referências de código completas que são carregadas no caminho e podem ser usadas em outros modelos pyfunc personalizados.

Por exemplo, se um modelo for logs com:

mlflow.pyfunc.log_model(CustomModel(), "model", code_path = ["preprocessing_utils/"])

O código do 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)

Sirva seu modelo

Depois de logs seu modelo pyfunc customizado, você poderá registrá-lo no Unity Catalog ou no Registro workspace e fornecer seu modelo a um endpoint de modelo funcional.

exemplo Notebook

O exemplo Notebook a seguir demonstra como customizar a saída do modelo quando a saída bruta do modelo query precisa ser pós-processada para consumo.

Personalize a saída de serviço de modelo com o MLflow PyFunc Notebook

Abra o bloco de anotações em outra guia