Nasazení kódu Pythonu s využitím služby Model Serving

Tento článek popisuje, jak nasadit přizpůsobený kód Python pomocí Model Serving. Příklad v tomto článku se zaměřuje na poskytování pokynů pro přidání logiky předběžného zpracování a následného zpracování do modelu a jeho nasazení.

Funkce Pythonu pyfuncMLflow poskytuje flexibilitu při nasazování libovolné části kódu Pythonu nebo libovolného modelu Pythonu. Následují ukázkové scénáře, ve kterých můžete chtít průvodce použít.

  • Váš model vyžaduje předzpracování, než mohou být vstupy předány do predikční funkce modelu.
  • MLflow nativně nepodporuje architekturu modelu.
  • Vaše aplikace vyžaduje, aby se nezpracované výstupy modelu po zpracování zpracovály za účelem spotřeby.
  • Samotný model má logiku větvení podle jednotlivých požadavků.
  • Chcete nasadit plně vlastní kód jako model.

Vytvoření vlastního modelu funkcí Pythonu MLflow

MLflow nabízí možnost protokolovat kód Pythonu s vlastním formátem modelů Pythonu.

Při balení libovolného kódu Pythonu pomocí MLflow existují dvě požadované funkce:

  • load_context – v této funkci by mělo být definováno cokoli, co je potřeba načíst jen jednou, aby model fungoval. To je důležité, aby systém minimalizoval počet artefaktů načtených během funkce predict, což urychluje odvozování.
  • predict – tato funkce obsahuje veškerou logiku, která se spouští při každém zadání vstupního požadavku.

Poznámka

Před nasazením vlastního kódu jako modelu je vhodné ověřit, že model je připraven ke spuštění. Podívejte se na dokumentaci MLflow, jak můžete použít mlflow.models.predictk validaci modelů před jejich nasazením.

Zalogujte váš model funkce v Pythonu

Important

Běhová prostředí Databricks Runtime ML standardně obsahují mlflow-skinny namísto úplného balíčku mlflow. Když zaznamenáte model pyfunc v jednom z těchto runtime prostředí, aniž byste zadali pip_requirements, MLflow zachytí mlflow-skinny do conda.yaml modelu. Obsluha modelu vyžaduje mlflow (nikoli mlflow-skinny) v conda.yaml a jinak nemůže sestavit image kontejneru. Vždy zadejte mlflow==<version> v pip_requirements, když voláte mlflow.pyfunc.log_model() v prostředí Databricks Runtime ML:

# 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",
)

I když píšete model s vlastním kódem, je možné použít sdílené moduly kódu z vaší organizace. S parametrem code_path mohou autoři modelů zaznamenávat úplné odkazy na kód, které se načítají do cesty a jsou využitelné z jiných vlastních modelů pyfunc.

Pokud je například model zaprotokolován pomocí:

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

Kód z preprocessing_utils je k dispozici v kontextu načteného modelu. Následuje příklad modelu, který tento kód používá.

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)

Obsluha modelu

Jakmile zapíšete svůj vlastní model , můžete ho zaregistrovat do katalogu Unity nebo registru pracovních prostorů a poté ho nasadit do servisního bodu modelupro model .

Příklad poznámkového bloku

Následující příklad poznámkového bloku ukazuje, jak přizpůsobit výstup modelu, když musí být nezpracovaný výstup dotazovaného modelu po zpracování pro spotřebu.

Přizpůsobení výstupu obsluhy modelu pomocí poznámkového bloku MLflow PyFunc

Získejte poznámkový blok