Empacote artefatos personalizados para Model Serving

Este artigo descreve como garantir que o arquivo do seu modelo e as dependências do artefato estejam disponíveis em seuendpoint Model Serving .

Requisitos

MLflow 1.29e acima

Artefatos de pacote com modelos

Quando seu modelo requer arquivos ou artefatos durante a inferência, você pode empacotá-los no artefato de modelo ao logs o modelo.

Se você estiver trabalhando com Databricks Notebooks, uma prática comum é ter esses arquivos residindo em DBFS. Às vezes, os modelos também são configurados para downloads artefatos da Internet (como HuggingFace Tokenizers). As cargas de trabalho em escala em tempo real têm melhor desempenho quando todas as dependências necessárias são capturadas estaticamente no momento da implantação. Por esse motivo, Model Serving exige que os artefatos DBFS sejam incluídos no próprio artefato do modelo e usa interfaces MLflow para fazer isso. Artefatos de rede carregados com o modelo devem ser empacotados com o modelo sempre que possível.

Com o comando MLflow logs s(), você pode logs um modelo e seus artefatos dependentes com o parâmetro artifacts.

mlflow.pyfunc.log_model(
    ...
    artifacts={'model-weights': "/dbfs/path/to/file", "tokenizer_cache": "./tokenizer_cache"},
    ...
)

Nos modelos PyFunc, os caminhos desses artefatos são acessíveis a partir do objeto context em context.artifacts e podem ser carregados da maneira padrão para esse tipo de arquivo.

Por exemplo, em um modelo MLflow personalizado:

class ModelPyfunc(mlflow.pyfunc.PythonModel):
    def load_context(self, context):
        self.model = torch.load(context.artifacts["model-weights"])
        self.tokenizer = transformers.BertweetTokenizer.from_pretrained("model-base", local_files_only=True, cache_dir=context.artifacts["tokenizer_cache"])
    ...

Depois que seus arquivos e artefatos forem incluídos em seu artefato de modelo, você poderá servir seu modelo para um terminalModel Serving .