MLflow-modellek naplózása, betöltése és regisztrálása
Az MLflow-modell a gépi tanulási modellek csomagolásának szabványos formátuma, amely számos alsóbb rétegbeli eszközben használható– például kötegelt következtetés az Apache Sparkon vagy valós idejű, REST API-n keresztüli kiszolgálás. A formátum egy konvenciót határoz meg, amely lehetővé teszi, hogy a modelleket különböző ízekbe (python-függvény, pytorch, sklearn stb.) mentse, amelyeket a különböző modellkiszolgáló és következtetési platformok is megérthetnek.
A streamelési modellek naplózásáról és pontozásáról a streamelési modellek mentéséről és betöltéséről olvashat.
Modellek naplózása és betöltése
Amikor naplóz egy modellt, az MLflow automatikusan naplózza és requirements.txt
fájlokatconda.yaml
. Ezekkel a fájlokkal újra létrehozhatja a modellfejlesztési környezetet, és újratelepítheti a függőségeket virtualenv
az (ajánlott) vagy conda
a .
Fontos
Az Anaconda Inc. frissítette anaconda.org csatornákra vonatkozó szolgáltatási feltételeit. Az új szolgáltatási feltételek alapján kereskedelmi licencre lehet szükség, ha az Anaconda csomagolására és terjesztésére támaszkodik. További információért tekintse meg az Anaconda Commercial Edition gyakori kérdéseit . Az Anaconda-csatornák használatára a szolgáltatási feltételek vonatkoznak.
Az 1.18-as verzió előtt naplózott MLflow-modellek (Databricks Runtime 8.3 ML vagy korábbi) alapértelmezés szerint függőségként lettek naplózva a conda defaults
csatornával (https://repo.anaconda.com/pkgs/). A licencmódosítás miatt a Databricks leállította a csatorna használatát az defaults
MLflow 1.18-s vagy újabb verziójával naplózott modellekhez. Az alapértelmezett naplózott csatorna most conda-forge
már a felügyelt https://conda-forge.org/közösségre mutat .
Ha az MLflow 1.18-a előtt naplózott egy modellt anélkül, hogy kizárta volna a defaults
csatornát a modell Conda-környezetéből, előfordulhat, hogy a modell függőségben van a defaults
nem kívánt csatornától.
Ha manuálisan szeretné ellenőrizni, hogy egy modell rendelkezik-e ezzel a függőséggel, megvizsgálhatja channel
a conda.yaml
naplózott modellbe csomagolt fájl értékét. Például egy csatornafüggőséggel rendelkező conda.yaml
modell defaults
a következőképpen nézhet ki:
channels:
- defaults
dependencies:
- python=3.8.8
- pip
- pip:
- mlflow
- scikit-learn==0.23.2
- cloudpickle==1.6.0
name: mlflow-env
Mivel a Databricks nem tudja megállapítani, hogy az Anaconda-adattár használata engedélyezett-e a modellek kezeléséhez az Anacondával való kapcsolat alatt, a Databricks nem kényszeríti az ügyfeleket semmilyen módosításra. Ha a Anaconda.com adattár használata a Databricks használatával engedélyezett az Anaconda feltételei szerint, nem kell semmilyen lépést tennie.
Ha módosítani szeretné a modell környezetében használt csatornát, újra regisztrálhatja a modellt a modellregisztrációs adatbázisba egy új conda.yaml
beállításjegyzékben. Ezt úgy teheti meg, hogy megadja a csatornát a conda_env
paraméterben log_model()
.
Az API-val kapcsolatos log_model()
további információkért tekintse meg az MLflow dokumentációját a modell által használt ízről, például a scikit-learn log_model.
A fájlokról conda.yaml
további információt az MLflow dokumentációjában talál.
API-parancsok
A modell MLflow-követő kiszolgálóra való naplózásához használja a következőt mlflow.<model-type>.log_model(model, ...)
: .
Ha egy korábban naplózott modellt szeretne betölteni következtetésre vagy további fejlesztésre, használja a mlflow.<model-type>.load_model(modelpath)
, ahol a modelpath
az alábbiak egyike:
- futtatási relatív elérési út (például
runs:/{run_id}/{model-path}
) - Unity Catalog-kötetek útvonala (például
dbfs:/Volumes/catalog_name/schema_name/volume_name/{path_to_artifact_root}/{model_path}
) - MLflow által felügyelt összetevő tárolási útvonala a
dbfs:/databricks/mlflow-tracking/
- regisztrált modell elérési útja (például
models:/{model_name}/{model_stage}
).
Az MLflow-modellek betöltésére vonatkozó lehetőségek teljes listáját az MLflow dokumentációjában Hivatkozási összetevőkcímű cikkben találja.
Python MLflow-modellek esetén további lehetőség mlflow.pyfunc.load_model()
a modell általános Python-függvényként való betöltésére.
A modell betöltéséhez és az adatpontok pontozásához használhatja az alábbi kódrészletet.
model = mlflow.pyfunc.load_model(model_path)
model.predict(model_input)
Másik lehetőségként exportálhatja a modellt Apache Spark UDF-ként, hogy egy Spark-fürt pontozásához használhassa, akár kötegelt feladatként, akár valós idejű Spark Streaming-feladatként .
# load input data table as a Spark DataFrame
input_data = spark.table(input_table_name)
model_udf = mlflow.pyfunc.spark_udf(spark, model_path)
df = input_data.withColumn("prediction", model_udf())
Naplómodell-függőségek
A modell pontos betöltéséhez győződjön meg arról, hogy a modell függőségei a megfelelő verziókkal vannak betöltve a jegyzetfüzet-környezetbe. A Databricks Runtime 10.5 ML-es vagy újabb verziója esetén az MLflow figyelmezteti, ha a rendszer eltérést észlel az aktuális környezet és a modell függőségei között.
A modellfüggőségek visszaállítását egyszerűsítő további funkciókat a Databricks Runtime 11.0 ML és újabb verziók is tartalmazzák. A Databricks Runtime 11.0 ML-ben és újabb verziókban az ízmodellek esetében pyfunc
meghívhatja mlflow.pyfunc.get_model_dependencies
a modellfüggőségek lekérését és letöltését. Ez a függvény egy elérési utat ad vissza a függőségi fájlhoz, amelyet aztán a használatával %pip install <file-path>
telepíthet. Amikor pySpark UDF-ként tölt be egy modellt, adja meg env_manager="virtualenv"
a mlflow.pyfunc.spark_udf
hívásban. Ez visszaállítja a modellfüggőségeket a PySpark UDF környezetében, és nem befolyásolja a külső környezetet.
Ezt a funkciót a Databricks Runtime 10.5-ös vagy újabb verziójában is használhatja az MLflow 1.25.0-s vagy újabb verziójának manuális telepítésével:
%pip install "mlflow>=1.25.0"
A modellfüggőségek (Python és nem Python) és az összetevők naplózásáról további információt a naplómodell függőségei című témakörben talál.
Megtudhatja, hogyan naplózhatja a modellfüggőségeket és az egyéni összetevőket a modell kiszolgálásához:
Automatikusan létrehozott kódrészletek az MLflow felhasználói felületén
Amikor egy modellt egy Azure Databricks-jegyzetfüzetbe naplóz, az Azure Databricks automatikusan létrehoz kódrészleteket, amelyeket másolhat és használhat a modell betöltéséhez és futtatásához. A kódrészletek megtekintése:
- Lépjen a modellt létrehozó futtatás futtatási képernyőjére. (Lásd: Jegyzetfüzet-kísérlet megtekintése a Futtatások képernyő megjelenítéséhez.)
- Görgessen az Összetevők szakaszhoz.
- Kattintson a naplózott modell nevére. A jobb oldalon megnyílik egy panel, amelyen a naplózott modell betöltéséhez és előrejelzések készítéséhez használható kód látható a Spark vagy a Pandas DataFrame-eken.
Példák
A naplózási modellekre példákat a Gépi tanulás nyomon követése betanítási példákban talál.
Modellek regisztrálása a Modellregisztrációs adatbázisban
A modellek regisztrálhatók az MLflow-modellregisztrációs adatbázisban, egy központosított modelltárolóban, amely felhasználói felületet és API-készletet biztosít az MLflow-modellek teljes életciklusának kezeléséhez. A Modellregisztrációs adatbázis használatával a Databricks Unity Catalog modelljeinek kezelésére vonatkozó útmutatásért tekintse meg A modell életciklusának kezelése a Unity-katalógusban. A munkaterületmodell-beállításjegyzék használatához lásd: Modell életciklusának kezelése a munkaterületmodell-beállításjegyzék használatával (örökölt)
Ha egy modellt az API használatával szeretne regisztrálni, használja a következőt mlflow.register_model("runs:/{run_id}/{model-path}", "{registered-model-name}")
: .
Modellek mentése Unity Catalog-kötetekre
Ha helyileg szeretne menteni egy modellt, használja a következőt mlflow.<model-type>.save_model(model, modelpath)
: .
modelpath
-nak egy Unity Catalog-kötet elérési útvonalának kell lennie. Ha például a Unity Catalog-kötetek helyét dbfs:/Volumes/catalog_name/schema_name/volume_name/my_project_models
a projektmunka tárolásához használja, akkor a modell útvonalat kell használnia /dbfs/Volumes/catalog_name/schema_name/volume_name/my_project_models
.
modelpath = "/dbfs/Volumes/catalog_name/schema_name/volume_name/my_project_models/model-%f-%f" % (alpha, l1_ratio)
mlflow.sklearn.save_model(lr, modelpath)
MLlib-modellek esetében használjon gépi tanulási folyamatokat.
Modellösszetevők letöltése
A naplózott modellösszetevőket (például modellfájlokat, diagramokat és metrikákat) letöltheti egy regisztrált modellhez különböző API-kkal.
from mlflow.store.artifact.models_artifact_repo import ModelsArtifactRepository
model_uri = MlflowClient.get_model_version_download_uri(model_name, model_version)
ModelsArtifactRepository(model_uri).download_artifacts(artifact_path="")
MlflowClient mlflowClient = new MlflowClient();
// Get the model URI for a registered model version.
String modelURI = mlflowClient.getModelVersionDownloadUri(modelName, modelVersion);
// Or download the model artifacts directly.
File modelFile = mlflowClient.downloadModelVersion(modelName, modelVersion);
CLI-parancs példa:
mlflow artifacts download --artifact-uri models:/<name>/<version|stage>
Modellek üzembe helyezése online kiszolgáláshoz
Jegyzet
A modell ü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.
Használja a Mosaic AI modell szolgáltatást a Unity Catalog model regisztrálóban regisztrált gépi tanulási modellek REST-végpontként való üzemeltetéséhez. Ezek a végpontok a modellverziók rendelkezésre állása alapján automatikusan frissülnek.