Egyéni Python-kódtárak használata a Modellkiszolgálóval

Ebből a cikkből megtudhatja, hogyan vehet fel egyéni könyvtárakat vagy egy privát tükörkiszolgálóról származó könyvtárakat a modell naplózásakor, hogy azokat a Model Serving modelltelepítésekkel használhassa. Az ebben az útmutatóban ismertetett lépéseket akkor kell elvégeznie, ha már rendelkezik üzembe helyezésre kész betanított ml-modellel, de mielőtt létrehoz egy Azure Databricks-modellkiszolgáló végpontot.

A modellfejlesztéshez gyakran szükség van olyan egyéni Python-kódtárak használatára, amelyek függvényeket tartalmaznak az előzetes vagy utólagos feldolgozáshoz, az egyéni modelldefiníciókhoz és más megosztott segédprogramokhoz. Emellett számos nagyvállalati biztonsági csapat támogatja a privát PyPi-tükrözések, például a Nexus vagy az Artifactory használatát az ellátási lánc támadásainak kockázatának csökkentése érdekében. Az Azure Databricks natív támogatást nyújt az egyéni kódtárak és tárak privát tükörből való telepítéséhez az Azure Databricks-munkaterületen.

Követelmények

  • MLflow 1.29 vagy újabb

1. lehetőség: Privát csomagtárház használata

Használja az 1. lehetőséget, ha a szervezet privát PyPI-tükrözőt használ (például Nexust vagy Artifactoryt). A munkaterület rendszergazdái a munkaterület alapértelmezett csomagadattáraként konfigurálhatják. A modellkiszolgáló automatikusan ezt a munkaterületszintű konfigurációt használja a modellkörnyezet létrehozásakor.

Privát csomagtárház beállításához tekintse meg az alapértelmezett csomagtárházak konfigurálását ismertető témakört.

Az adattár konfigurálása után lépjen tovább a A modell kiszolgálása részhez.

2. lehetőség: Egyéni könyvtárak csomagolása wheel fájlokként

Használja a 2. lehetőséget, ha egy privát PyPI-tükör nem érhető el, vagy ha olyan egyéni kódtárakat használ, amelyek nem érhetők el egyetlen csomagtárban sem. Python-kerékfájlokként csomagolhatja őket, és belefoglalhatja őket a modell naplózása során.

1. lépés: A függőségi fájl feltöltése

A Databricks azt javasolja, hogy töltse fel a függőségi fájlt a Unity Catalogba kötetek. Másik lehetőségként feltöltheti a Databricks fájlrendszerbe (DBFS) az Azure Databricks felhasználói felületével.

Annak érdekében, hogy a könyvtár elérhető legyen a jegyzetfüzet számára, telepítenie kell azt %pip használatával. %pip telepíti a könyvtárat az aktuális jegyzetfüzetben, és a fürtre tölti le a függőséget.

2. lépés: A modell naplózása egyéni kódtár használatával

Miután telepítette a kódtárat, és feltöltötte a Python-kerékfájlt Unity Catalog-kötetekre vagy DBFS-ekre, adja meg a következő kódot a szkriptben. Adja meg a extra_pip_requirements függőségi fájl elérési útját.

mlflow.sklearn.log_model(model, "sklearn-model", extra_pip_requirements=["/volumes/path/to/dependency.whl"])

Ha egyéni kódtárral rendelkezik, a naplózás konfigurálásakor meg kell adnia a modellhez társított összes egyéni Python-kódtárat. Ezt a extra_pip_requirementsconda_env vagy paramétereivel teheti meg.

from mlflow.utils.environment import _mlflow_conda_env

mlflow.pyfunc.log_model(
    name="model",
    python_model=MyModel(),
    extra_pip_requirements=["/volumes/path/to/dependency.whl"],
)

Ha az egyéni könyvtár köteten vagy DBFS-en kívül máshol van tárolva, a code_paths paraméterrel megadhatja a helyét, és az "code/<wheel-file-name>.whl" paraméterben adhatja meg extra_pip_requirements.

mlflow.pyfunc.log_model(
    name="model",
    python_model=MyModel(),
    code_paths=["/path/to/dependency.whl"], # This will be logged as `code/dependency.whl`
    extra_pip_requirements=["code/dependency.whl"],
)

3. lépés: MLflow-modell frissítése Python-kerékfájlokkal

Az MLflow biztosítja az add_libraries_to_model() segédprogramot, amellyel a modellt az összes függőséggel együtt, előre Python wheel fájlként naplózhatja. Ez az egyéni kódtárakat a modell mellett a modell függőségeiként megadott összes többi kódtár mellett csomagolja. Ez garantálja, hogy a modell által használt kódtárak pontosan azok, amelyek elérhetők a betanítási környezetből.

Az alábbi példában model_uri a Unity Catalog modellregisztrációs adatbázisára hivatkozik a models:/<uc-model>/<model-version>szintaxis használatával. A munkaterület-modell nyilvántartásának (régi) használatára való hivatkozáshoz, models:/<model-name>/<model-version>.

A modellregisztrációs adatbázis URI-ja használatakor ez a segédprogram létrehoz egy új verziót a meglévő regisztrált modell alatt.

import mlflow.models.utils
mlflow.models.utils.add_libraries_to_model(<model-uri>)

A modell kiszolgálása

Ha a modellregisztrációs adatbázisban elérhető a csomagokat tartalmazó új modellverzió, ezt a modellverziót hozzáadhatja egy végponthoz a Modellkiszolgálóval.

Csomagtelepítés hibaelhárítása

Ha a modell üzembe helyezése a buildelési fázis során meghiúsul, a csomagtelepítési problémák azonosításához tekintse át a buildnaplókat.

  1. Nyissa meg az Azure Databricks-munkaterület Kiszolgálás lapját.
  2. Kattintson a végpont nevére a végpont részleteinek megnyitásához.
  3. Kattintson a Naplók fülre.
  4. Válassza ki a sikertelen verziót a legördülő menüből.
  5. Kattintson a Buildnaplók elemre.

Tekintse át a hibaüzeneteket a probléma azonosításához.

A probléma megoldása után hozzon létre egy új üzembe helyezést, vagy frissítse a végpontot egy új build aktiválásához.

Privát csomagtárház hibaelhárítása

Ha privát csomagtárházat használ, a gyakori problémák a következők:

  • Hiányzó csomagok: A csomag nem érhető el a konfigurált adattárban. Adja hozzá a szükséges csomagot a privát adattárhoz.
  • Csatlakozási problémák: A modellkiszolgáló nem tudja elérni a csomagtárat. Ellenőrizze a hálózati kapcsolatot és a tűzfalszabályokat.
  • Hitelesítési hibák: Az adattárhoz konfigurált hitelesítő adatok érvénytelenek vagy lejártak. Frissítse a munkaterület konfigurációjának titkait.

A kiszolgáló nélküli jegyzetfüzetek ugyanazt az alapértelmezett csomagtárházat használják, amelyet a munkaterülethez konfiguráltak. Egy jegyzetfüzettel tesztelheti a kapcsolatot, a hitelesítést és a csomagok rendelkezésre állását, ha telepíti a követelményeket a modell requirements.txt fájljából, mielőtt a Modellkiszolgálóba helyezné.

import mlflow
import subprocess
import sys

# Step 1: Set your model details
catalog = "<your_catalog>"
schema = "<your_schema>"
model_name = "<your_model>"
version = <your_version>

# Step 2: Download the model's requirements.txt
full_model_name = f"{catalog}.{schema}.{model_name}"
requirements_uri = f"models:/{full_model_name}/{version}/requirements.txt"

print(f"Downloading artifacts from: {requirements_uri}")
local_path = mlflow.artifacts.download_artifacts(requirements_uri)

# Step 3: Print the requirements
with open(local_path, "r") as f:
    print(f.read())

# Step 4: Install the requirements using the workspace's default package repository
print(f"Installing requirements from {local_path}...")
subprocess.check_call([sys.executable, "-m", "pip", "install", "-r", local_path])
print("Installation complete!")