Naplómodell-függőségek
Ebben a cikkben megtudhatja, hogyan naplózhat egy modellt és annak függőségeit modellösszetevőkként, így azok elérhetők a környezetben az éles feladatokhoz, például a modellkiszolgálókhoz.
Python-csomagmodell függőségeinek naplózása
Az MLflow natív támogatást nyújt egyes Python ML-kódtárakhoz, ahol az MLflow megbízhatóan naplózza az ezeket a kódtárakat használó modellek függőségeit. Tekintse meg a beépített modellízeket.
Az MLflow például támogatja a scikit-learn használatát az mlflow.sklearn modulban, és a mlflow.sklearn.log_model parancs naplózza a sklearn-verziót. Ugyanez vonatkozik az ilyen ML-kódtárak automatikus kitöltésére is. További példákért tekintse meg az MLflow GitHub-adattárat .
Feljegyzés
A generatív AI-számítási feladatok nyomkövetési naplózásának engedélyezéséhez az MLflow támogatja az OpenAI automatikus naplózását.
Az olyan ML-kódtárak esetében, amelyek telepíthetők pip install PACKAGE_NAME==VERSION
, de nem rendelkeznek beépített MLflow-modell-ízekkel, ezeket a csomagokat a mlflow.pyfunc.log_model metódussal naplózhatja. Ügyeljen arra, hogy a követelményeket a kódtár pontos verziójával naplózza, például ahelyett, f"nltk=={nltk.__version__}"
hogy csak nltk
.
mlflow.pyfunc.log_model
támogatja a naplózást a következő célokra:
- Python-tojás- vagy Python-kerékfájlokként csomagolt nyilvános és egyéni kódtárak.
- Nyilvános csomagok a PyPI-n és privátan üzemeltetett csomagok a saját PyPI-kiszolgálón.
A mlflow.pyfunc.log_modell esetében az MLflow automatikusan megpróbálja kikövetkeztetni a függőségeket. Az MLflow a mlflow.models.infer_pip_requirements használatával következtet a függőségekre, és modellösszetevőként naplózza őket egy requirements.txt
fájlba.
A régebbi verziókban az MLflow néha nem azonosítja automatikusan az összes Python-követelményt, különösen akkor, ha a kódtár nem egy beépített modellverzió. Ezekben az esetekben további függőségeket is megadhat a extra_pip_requirements
paraméterrel a log_model
parancsban. Tekintse meg a extra_pip_requirements paraméter használatát szemléltető példát.
Fontos
A követelmények teljes készletét felülírhatja a paraméterekkel és pip_requirements
a conda_env
paraméterekkel is, de ez általában nem ajánlott, mert ez felülírja azokat a függőségeket, amelyeket az MLflow automatikusan felvesz. Lásd egy példát arra, hogyan írhatja felül a követelményeket a pip_requirements
paraméter használatával.
Testreszabott modellnaplózás
Az olyan forgatókönyvek esetében, ahol testre szabottabb modellnaplózásra van szükség, a következőkre van lehetőség:
- Egyéni Python-modell írása. Ezzel lehetővé teszi az inicializálás és az előrejelzés testreszabását az alosztályba
mlflow.pyfunc.PythonModel
. Ez a megközelítés jól működik a csak Python-modellek testreszabásához.- Egy egyszerű példát az N modell hozzáadása című példában talál.
- Összetettebb példaként tekintse meg az egyéni XGBoost-modell példáját.
- Írjon egyéni ízt. Ebben a forgatókönyvben az általánosnál
pyfunc
jobban testre szabhatja a naplózást, de ehhez több munka szükséges a megvalósításhoz.
Egyéni Python-kód
Előfordulhat, hogy Olyan Python-kódfüggőségekkel rendelkezik, amelyek nem telepíthetők a %pip install
parancs használatával, például egy vagy több .py
fájllal.
Modell naplózásakor az MLflow-nak megadhatja, hogy a modell a mlflow.pyfunc.log_model paraméterével megtalálja ezeket a függőségeket egy code_path
megadott útvonalon. Az MLflow minden olyan fájlt vagy könyvtárat tárol, amely összetevőként lett átadva code_path
a modellel együtt egy kódkönyvtárban. A modell betöltésekor az MLflow hozzáadja ezeket a fájlokat vagy könyvtárakat a Python-elérési úthoz. Ez az útvonal egyéni Python-kerekes fájlokkal is működik, amelyek ugyanúgy használhatók a modellben code_path
, mint .py
a fájlok.
mlflow.pyfunc.log_model( artifact_path=artifact_path,
code_path=[filename.py],
data_path=data_path,
conda_env=conda_env,
)
Nem Python-csomagmodell függőségeinek naplózása
Az MLflow nem veszi fel automatikusan a Nem Python-függőségeket, például a Java-csomagokat, az R-csomagokat és a natív csomagokat (például Linux-csomagokat). Ezekhez a csomagokhoz további adatokat kell naplóznia.
- Függőségek listája: A Databricks azt javasolja, hogy naplózz egy összetevőt a nem Python-függőségeket meghatározó modellel. Ez lehet egyszerű
.txt
vagy.json
fájl. A mlflow.pyfunc.log_model lehetővé teszi, hogy ezt a további összetevőt azartifacts
argumentum használatával adja meg. - Egyéni csomagok: A fenti egyéni Python-függőségekhez hasonlóan gondoskodnia kell arról, hogy a csomagok elérhetők legyenek az üzembe helyezési környezetben. Egy központi helyen, például a Maven Centralon vagy a saját adattárában található csomagok esetében győződjön meg arról, hogy a hely pontozáskor vagy a kézbesítéskor elérhető. A máshol nem üzemeltetett privát csomagok esetében a modellel együtt a csomagokat is naplózhatja összetevőkként.
Modellek üzembe helyezése függőségekkel
Amikor egy modellt az MLflow-követő kiszolgálóról vagy a modellregisztrációs adatbázisból helyez üzembe, gondoskodnia kell arról, hogy az üzembe helyezési környezet a megfelelő függőségekkel rendelkezzen. A legegyszerűbb elérési út az üzembe helyezési módtól függhet: kötegelt/streamelési vagy online kiszolgálás, valamint a függőségek típusaitól.
Minden üzembe helyezési mód esetében a Databricks azt javasolja, hogy a betanítás során használt futtatókörnyezeti verzión futtassa a következtetést, mivel a databricks-futtatókörnyezet, amelyben létrehozta a modellt, különböző kódtárak már telepítve vannak. A Databricks MLflow automatikusan menti ezt a futtatókörnyezeti verziót egy MLmodel
databricks_runtime
mező metaadatfájljában, például databricks_runtime: 10.2.x-cpu-ml-scala2.12
.
Online szolgáltatás: Mozaik AI-modell kiszolgálása
A Databricks modellkiszolgálót kínál, ahol az MLflow gépi tanulási modelljei méretezhető REST API-végpontokként vannak közzétéve.
A fájlban lévő Python-függőségek esetében a Databricks és az requirements.txt
MLflow mindent kezel a nyilvános PyPI-függőségekhez. Hasonlóképpen, ha fájlokat vagy Python-kerekfájlokat adott meg .py
a modell argumentum használatával történő naplózásakor, az code_path
MLflow automatikusan betölti ezeket a függőségeket.
A modell kiszolgálási forgatókönyveihez tekintse meg a következőket:
- Egyéni Python-kódtárak használata a Modellkiszolgálóval
- Egyéni összetevők és fájlok csomagolása a modellkiszolgálóhoz
A fájlban lévő Python-függőségek esetében a Databricks és az requirements.txt
MLflow mindent kezel a nyilvános PyPI-függőségekhez. Hasonlóképpen, ha fájlokat vagy Python-kerekfájlokat adott meg .py
a modell argumentum használatával történő naplózásakor, az code_path
MLflow automatikusan betölti ezeket a függőségeket.
Online kiszolgálás: külső rendszerek vagy Docker-tárolók
Ha a forgatókönyvhez külső kiszolgálómegoldások vagy saját Docker-alapú megoldás is szükséges, exportálhatja a modellt Docker-tárolóként.
A Databricks az alábbiakat javasolja a Python-függőségeket automatikusan kezelő külső kiszolgálóhoz. A nem Python-függőségek esetében azonban módosítani kell a tárolót, hogy belefoglalja őket.
Az MLflow Docker-integrációja Docker-alapú kiszolgálómegoldáshoz: MLflow-modellek build-docker
Az Azure Machine Learning MLflow-integrációja:
Kötegelt és streamelési feladatok
A kötegelt és streamelési pontozást Databricks-feladatokként kell futtatni. A jegyzetfüzetfeladatok gyakran elegendőek, és a kód előkészítésének legegyszerűbb módja a Databricks-modellregisztrációs adatbázis használata egy pontozó jegyzetfüzet létrehozásához.
Az alábbiakban a függőségek telepítése és alkalmazása érdekében követendő folyamatokat és lépéseket ismertetjük:
Indítsa el a pontozófürtöt ugyanazzal a Databricks Runtime-verzióval, amelyet a betanítás során használ. Olvassa el a
databricks_runtime
mezőt aMLmodel
metaadatfájlból, és indítsa el a fürtöt ezzel a futtatókörnyezeti verzióval.- Ez manuálisan is elvégezhető a fürtkonfigurációban, vagy automatizálható egyéni logikával. Automatizálás esetén a Futtatókörnyezet verzióformátuma, amelyet a Jobs API és a Clusters API metaadatfájljából olvas be.
Ezután telepítse a nem Python-függőségeket. Annak érdekében, hogy a nem Python-függőségek elérhetők legyenek az üzembe helyezési környezet számára, a következőket teheti:
- Az inferencia futtatása előtt manuálisan telepítse a modell nem Python-függőségeit a Databricks-fürtre a fürtkonfiguráció részeként.
- Másik lehetőségként egyéni logikát is írhat a pontozási feladat üzembe helyezésében a függőségek fürtre való telepítésének automatizálásához. Feltéve, hogy a Nem Python-függőségeket összetevőként mentette a Napló nem Python-csomagmodell függőségeiben leírtak szerint, ez az automatizálás kódtárakat telepíthet a Libraries API használatával. Vagy megírhat egy adott kódot egy fürt hatókörű inicializálási szkript létrehozásához a függőségek telepítéséhez.
A pontozási feladat telepíti a Python-függőségeket a feladatvégrehajtási környezetben. A Databricksben a Modellregisztrációs adatbázis lehetővé teszi, hogy következtetési célú jegyzetfüzetet hozzon létre, amely ezt teszi Az Ön számára.
- Amikor a Databricks-modellregisztrációs adatbázis használatával hoz létre egy pontozó jegyzetfüzetet, a jegyzetfüzet kódot tartalmaz a Python-függőségek a modell fájljába
requirements.txt
való telepítéséhez. A köteg- vagy streamelési pontozás jegyzetfüzet-feladatához ez a kód inicializálja a jegyzetfüzet-környezetet, hogy a modell függőségei telepítve legyenek, és készen állnak a modellre.
- Amikor a Databricks-modellregisztrációs adatbázis használatával hoz létre egy pontozó jegyzetfüzetet, a jegyzetfüzet kódot tartalmaz a Python-függőségek a modell fájljába
Az MLflow kezeli a paraméterben szereplő egyéni Python-kódot
log_model
.code_path
A rendszer hozzáadja ezt a kódot a Python-elérési úthoz a modell metódusának meghívásakorpredict()
. Ezt manuálisan is megteheti:- Az argumentummal mlflow.pyfunc.spark_udf hívása.
env_manager=['virtualenv'/'conda']
- A követelmények kinyerése mlflow.pyfunc.get_model_dependencies használatával, és telepítésük a következő használatával: %pip install.
Feljegyzés
Ha
.py
a modell argumentum használatával történő naplózásakor megadott fájlokat vagy Python-kerekfájlokat, azcode_path
MLflow automatikusan betölti ezeket a függőségeket.- Az argumentummal mlflow.pyfunc.spark_udf hívása.