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 .

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ásként vagy Python-kerekekké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.
  • Í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-kerekekkel is működik, amelyek a fájlokhoz code_pathhasonlóan .py a modellben is megtalálhatók.

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 az artifacts 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 MLmodeldatabricks_runtime mező metaadatfájljában, például databricks_runtime: 10.2.x-cpu-ml-scala2.12.

Online szolgáltatás: Databricks-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-kerekeket 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:

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-kerekeket 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.

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:

  1. 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 a MLmodel 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.
  2. 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.
  3. 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.
  4. Az MLflow kezeli a paraméterben szereplő egyéni Python-kódotlog_model.code_path A rendszer hozzáadja ezt a kódot a Python-elérési úthoz a modell metódusának meghívásakor predict() . Ezt manuálisan is megteheti:

    Feljegyzés

    Ha fájlokat vagy Python-kerekeket 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.