Python-kód üzembe helyezése a Modellkiszolgálóval

Ez a cikk bemutatja, hogyan helyezheti üzembe a testreszabott Python kódot a Model-kiszolgálóval. A cikkben szereplő példa arra összpontosít, hogy útmutatást nyújtson az előfeldolgozási és utófeldolgozási logika modellhez való hozzáadásához és üzembe helyezéséhez.

Az MLflow Python-függvénye pyfuncrugalmasságot biztosít a Python-kódok vagy bármely Python-modell üzembe helyezéséhez. Az alábbiakban példaforgatókönyveket láthat, amelyekben érdemes lehet használni az útmutatót.

  • A modell előfeldolgozást igényel, mielőtt a bemenetek átadhatók a modell előrejelzési függvényének.
  • Az MLflow nem támogatja natív módon a modell keretrendszerét.
  • Az alkalmazás megköveteli, hogy a modell nyers kimeneteit használat után feldolgozzák.
  • Maga a modell kérelemenkénti elágaztatási logikával rendelkezik.
  • Teljesen egyéni kódot szeretne üzembe helyezni modellként.

Egyéni MLflow Python-függvénymodell létrehozása

Az MLflow lehetővé teszi a Python-kód naplózását az egyéni Python-modellek formátumával.

Az MLflow-jal való tetszőleges Python-kód csomagolásához két szükséges függvény szükséges:

  • load_context – ebben a függvényben meg kell határozni minden olyan dolgot, amelyet csak egyszer kell betölteni a modell működéséhez. Ez kritikus fontosságú, hogy a rendszer minimalizálja a predict függvény során betöltött összetevők számát, ami felgyorsítja a következtetést.
  • predict – ez a függvény tartalmazza az összes olyan logikát, amelyet a bemeneti kérések minden alkalommal futtatnak.

Jegyzet

Az egyéni kód modellként való üzembe helyezése előtt érdemes ellenőrizni, hogy a modell kiszolgálható-e. Az MLflow dokumentációjában megtudhatja, hogyan használhatja a mlflow.models.predict a modellek érvényesítésére az üzembe helyezéselőtt.

Python függvény modelljének naplózása

Important

A Databricks Runtime ML-futtatókörnyezetek alapértelmezés szerint a mlflow-skinny elemet tartalmazzák, nem pedig a teljes mlflow csomagot. Ha egy modellt az egyik ilyen futtatókörnyezet valamelyikében naplóz pyfunc anélkül, hogy megadná a(z) pip_requirements értéket, az MLflow a(z) mlflow-skinny értéket a modell conda.yaml elemében rögzíti. A Model Serving szolgáltatáshoz conda.yaml alatt mlflow szükséges (nem mlflow-skinny), különben a tárolókép nem építhető fel. Mindig adja meg a(z) mlflow==<version> értéket a(z) pip_requirements elemben, amikor a(z) mlflow.pyfunc.log_model() függvényt Databricks Runtime ML-futtatókörnyezetben hívja meg:

# DBR ML ships with mlflow-skinny by default, so specify mlflow explicitly
# to ensure Model Serving compatibility.
mlflow.pyfunc.log_model(
    name="model",
    python_model=your_model,
    pip_requirements=["mlflow==3.8.1"],  # use mlflow, not mlflow-skinny
    registered_model_name="catalog.schema.model_name",
)

Annak ellenére, hogy a modellt egyéni kóddal írja, a szervezet megosztott kódmoduljait is használhatja. A code_path paraméterrel a modellek szerzői teljes kódhivatkozásokat naplózhatnak, amelyek betöltődnek az útvonalba, és más egyéni pyfunc modellekből is használhatók.

Ha például egy modell a következővel van naplózva:

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

A preprocessing_utils kód a modell betöltött környezetében érhető el. Az alábbi példamodell ezt a kódot használja.

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)

A modell kiszolgálása

Miután naplózza az egyéni pyfunc modellt, regisztrálhatja azt a Unity Katalógusban vagy a Munkaterület-beállításjegyzékben, és kiszolgálhatja a modellt egy modellkiszolgáló végponton.

Jegyzetfüzet példa

Az alábbi jegyzetfüzet-példa bemutatja, hogyan szabhatja testre a modell kimenetét, ha a lekérdezett modell nyers kimenetét használat után kell feldolgozni.

A kimenetet kiszolgáló modell testreszabása MLflow PyFunc-jegyzetfüzettel

Jegyzetfüzet lekérése