Empacote artefatos personalizados para serviço de modelos

Este artigo descreve como garantir que as dependências de arquivos e artefatos do seu modelo estejam disponíveis no endpoint Implantar modelos usando o Model Serving.

Requisitos

MLflow 1.29 e superior

Empacotar artefatos com modelos

Quando seu modelo precisar de arquivos ou artefatos durante a inferência, você poderá empacotá-los no artefato do modelo ao registrar o modelo.

Se você estiver trabalhando com notebooks do Azure Databricks, uma prática comum é fazer com que esses arquivos fiquem armazenados em volumes do Unity Catalog. À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 Model Serving exige que os artefatos dos volumes do Unity Catalog sejam incluídos no próprio artefato do modelo por meio das 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 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 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 estiverem empacotados no artefato do modelo, você poderá disponibilizar seu modelo em um endpoint do Model Serving.