Nasazení kódu Pythonu s využitím služby Model Serving
Tento článek popisuje, jak nasadit přizpůsobený kód Pythonu pomocí
Funkce Pythonu MLflow, pyfunc
, 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ž budou 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 funkcepredict
, 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.predict
až k validaci modelů před jejich nasazením.
Zalogujte váš model funkce v 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
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
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