Empacotar artefatos personalizados para Serviço de Modelo

Este artigo descreve como garantir que as dependências de arquivo e artefato do modelo estejam disponíveis no serviço de modelo com o ponto de extremidade do Azure Databricks .

Requisitos

MLflow 1.29 e superior

Empacotar artefatos com modelos

Quando o modelo requer arquivos ou artefatos durante a inferência, você pode empacotá-los no artefato do modelo ao registrar o modelo em log.

Se você estiver trabalhando com notebooks do Azure Databricks, uma prática comum é fazer com que esses arquivos residam em volumes do Catálogo do Unity. Às vezes, os modelos também são configurados para baixar artefatos da Internet (como HuggingFace Tokenizers). As cargas de trabalho em tempo real em escala têm melhor desempenho quando todas as dependências necessárias são capturadas estaticamente no momento da implantação. Por esse motivo, o Serviço de Modelos exige que os artefatos de volumes do Catálogo do Unity sejam empacotados no próprio artefato do modelo usando interfaces do MLflow. Artefatos de rede carregados com o modelo devem ser empacotados com o modelo sempre que possível.

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

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

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

Por exemplo, em um modelo personalizado do MLflow:

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 empacotados em seu artefato de modelo, você poderá fornecer seu modelo a um ponto de extremidade de Serviço de Modelo.