Egyéni artefaktumok csomagolása modellek kiszolgálásához

Ez a cikk azt ismerteti, hogyan biztosíthatja, hogy a modell fájl- és összetevőfüggőségei elérhetők legyenek a Modellkiszolgáló végpont használatával történő modellek üzembe helyezése során.

Követelmények

MLflow 1.29 vagy újabb

Artefaktumok csomagolása modellekkel

Ha a modellhez fájlokra vagy összetevőkre van szükség a következtetés során, a modell naplózásakor csomagolhatja őket a modell összetevőjébe.

Ha Azure Databricks-jegyzetfüzetekkel dolgozik, gyakori eljárás, hogy ezek a fájlok Unity Catalog-kötetekbentalálhatók. A modellek néha úgy is konfigurálva vannak, hogy összetevőket töltsenek le az internetről (például HuggingFace Tokenizers). A nagy léptékű valós idejű számítási feladatok akkor teljesítenek a legjobban, ha az üzembe helyezéskor az összes szükséges függőség statikusan rögzítve van. Ezért a modellkiszolgáló megköveteli, hogy a Unity Catalog kötetösszetevői magukba a modellösszetevőbe legyenek csomagolva MLflow-interfészek használatával. A modellbe betöltött hálózati összetevőket a modellel együtt kell csomagolni, amikor csak lehetséges.

A log_model() MLflow paranccsal naplózhatja a modellt és annak függő összetevőit a artifacts paraméterrel.

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

A PyFunc-modellekben ezek az összetevők elérési útjai elérhetők az context objektum alatt context.artifacts, és az adott fájltípushoz szokásos módon tölthetők be.

Például egy egyéni MLflow-modellben:

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"])
    ...

Miután a fájlokat és összetevőket a modellösszetevőbe csomagolta, a modellt egy modellkiszolgáló végpontra is kiszolgálhatja.