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

Tento článek popisuje, jak nasadit kód Pythonu pomocí služby Model Serving.

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.

  • Před předáním vstupů do předpovídané funkce modelu vyžaduje předzpracování 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í 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 pomocí vlastního formátu modelů Pythonu.

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

  • load_context – v této funkci by se mělo definovat 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 predict funkce, 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.

Protokolování modelu funkcí Pythonu

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 můžou autoři modelů protokolovat úplné odkazy na kód, které se načítají do cesty, a jsou použitelné z jiných vlastních pyfunc modelů.

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

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

Kód z modelu preprocessing_utils je k dispozici v načteném kontextu 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 vlastní pyfunc model zapíšete, můžete ho zaregistrovat do katalogu Unity nebo registru pracovního prostoru a použít ho ke koncovému bodu obsluhy modelu.

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ískat poznámkový blok