Egyéni modellek üzembe helyezése

Ez a cikk az egyéni modellek Databricks-modellkiszolgálóval történő üzembe helyezésének támogatását ismerteti. Emellett részletes információkat nyújt a támogatott modellnaplózási lehetőségekről és számítási típusokról, a modellfüggőségek szolgáltatáshoz való csomagolásáról, valamint a végpontok létrehozásáról és skálázásáról.

Mik azok az egyéni modellek?

A modellkiszolgáló bármilyen Python-modellt üzembe helyezhet éles szintű API-ként. A Databricks olyan modellekre hivatkozik, mint az egyéni modellek. Ezek az ML-modellek szabványos ML-kódtárak, például scikit-learn, XGBoost, PyTorch és HuggingFace transzformátorok használatával taníthatók be, és bármilyen Python-kódot tartalmazhatnak.

Egyéni modell üzembe helyezéséhez

  1. Naplózza a modellt vagy a kódot MLflow formátumban, natív MLflow beépített ízek vagy pyfunc használatával.
  2. A modell naplózása után regisztrálja a Unity Katalógusban (ajánlott) vagy a munkaterület-beállításjegyzékben.
  3. Innen létrehozhat egy végpontot kiszolgáló modellt a modell üzembe helyezéséhez és lekérdezéséhez.
    1. Lásd: Végpontokat kiszolgáló egyéni modell létrehozása
    2. Lásd: Az egyéni modellek végpontjait kiszolgáló lekérdezés.

Az egyéni modellek Databricksen való kiszolgálásáról szóló teljes oktatóanyagért tekintse meg a Modellkiszolgáló oktatóanyagot.

A Databricks támogatja a generatív AI-alkalmazások alapmodelljeinek kiszolgálását is, lásd : Foundation Model API-k és külső modellek támogatott modellekhez és számítási ajánlatokhoz.

Fontos

Ha az Anacondára támaszkodik, további információkért tekintse át a szolgáltatási feltételekről szóló közleményt.

Log ML-modellek

Az ML-modell naplózására különböző módszerek állnak rendelkezésre a modell kiszolgálásához. Az alábbi lista a támogatott módszereket és példákat foglalja össze.

  • Ez a módszer automatikusan engedélyezve van a Databricks Runtime for ML használatakor.

    import mlflow
    from sklearn.ensemble import RandomForestRegressor
    from sklearn.datasets import load_iris
    
    iris = load_iris()
    model = RandomForestRegressor()
    model.fit(iris.data, iris.target)
    
  • Naplózza az MLflow beépített ízeit. Ezt a módszert akkor használhatja, ha manuálisan szeretné naplózni a modellt a részletesebb vezérlés érdekében.

    import mlflow
    from sklearn.ensemble import RandomForestClassifier
    from sklearn.datasets import load_iris
    
    iris = load_iris()
    model = RandomForestClassifier()
    model.fit(iris.data, iris.target)
    
    with mlflow.start_run():
        mlflow.sklearn.log_model(model, "random_forest_classifier")
    
  • Egyéni naplózás a .pyfunc Ezzel a módszerrel tetszőleges Python-kódmodelleket helyezhet üzembe, vagy további kódot helyezhet üzembe a modell mellett.

      import mlflow
      import mlflow.pyfunc
    
      class Model(mlflow.pyfunc.PythonModel):
          def predict(self, context, model_input):
              return model_input * 2
    
      with mlflow.start_run():
          mlflow.pyfunc.log_model("custom_model", python_model=Model())
    

Aláírási és bemeneti példák

Ajánlott aláírási és bemeneti példát hozzáadni az MLflow-hoz. A modellek Unity-katalógusba való naplózásához aláírásokra van szükség.

Az alábbiakban egy aláírási példa látható:

from mlflow.models.signature import infer_signature

signature = infer_signature(training_data, model.predict(training_data))
mlflow.sklearn.log_model(model, "model", signature=signature)

Az alábbi példa egy bemeneti példa:


input_example = {"feature1": 0.5, "feature2": 3}
mlflow.sklearn.log_model(model, "model", input_example=input_example)

Számítási típus

Feljegyzés

A GPU-modell szolgáltatása nyilvános előzetes verzióban érhető el.

A Databricks Model Serving számos cpu- és GPU-lehetőséget kínál a modell üzembe helyezéséhez. GPU-val történő üzembe helyezéskor elengedhetetlen, hogy a kód be legyen állítva, hogy az előrejelzések a GPU-n fussanak a keretrendszer által biztosított módszerekkel. Az MLflow ezt automatikusan elvégzi a PyTorch- vagy Transformers-ízekkel naplózott modellek esetében.

számítási feladat típusa GPU-példány memória
CPU Egyidejűségenként 4 GB
GPU_SMALL 1xT4 16 GB
GPU_LARGE 1xA100 80 GB
GPU_LARGE_2 2xA100 160 GB

Üzembehelyezési tároló és függőségek

Az üzembe helyezés során egy éles szintű tárolót építünk ki és helyezünk üzembe végpontként. Ez a tároló tartalmazza az MLflow-modellben automatikusan rögzített vagy megadott kódtárakat.

A tárolót kiszolgáló modell nem tartalmaz előre telepített függőségeket, ami függőségi hibákhoz vezethet, ha nem minden szükséges függőség szerepel a modellben. Amikor modelltelepítési problémákba ütközik, a Databricks azt javasolja, hogy helyileg tesztelje a modellt.

Csomag- és kódfüggőségek

Egyéni vagy privát kódtárak is hozzáadhatók az üzemelő példányhoz. Lásd: Egyéni Python-kódtárak használata modellkiszolgálóval.

Natív MLflow-modellek esetén a rendszer automatikusan rögzíti a szükséges csomagfüggőségeket.

Egyéni pyfunc modellek esetén a függőségek explicit módon hozzáadhatók.

Csomagfüggőségeket a következő módon vehet fel:

  • A pip_requirements paraméter:

    mlflow.sklearn.log_model(model, "sklearn-model", pip_requirements = ["scikit-learn", "numpy"])
    
  • A conda_env paraméter:

    
    conda_env = {
        'channels': ['defaults'],
        'dependencies': [
            'python=3.7.0',
            'scikit-learn=0.21.3'
        ],
        'name': 'mlflow-env'
    }
    
    mlflow.sklearn.log_model(model, "sklearn-model", conda_env = conda_env)
    
  • Ha további követelményeket szeretne belefoglalni az automatikusan rögzített elemeken kívülre, használja a következőt extra_pip_requirements: .

    mlflow.sklearn.log_model(model, "sklearn-model", extra_pip_requirements = ["sklearn_req"])
    

Ha kódfüggőségekkel rendelkezik, ezek a következővel code_pathadhatók meg: .

  mlflow.sklearn.log_model(model, "sklearn-model", code_path=["path/to/helper_functions.py"],)

Függőség érvényesítése

Az egyéni MLflow-modell üzembe helyezése előtt érdemes ellenőrizni, hogy a modell kiszolgálható-e. Az MLflow egy API-t biztosít, amely lehetővé teszi a modellösszetevő ellenőrzését, amely mindkettő az üzembe helyezési környezetet szimulálja, és lehetővé teszi a módosított függőségek tesztelését.

Az üzembe helyezés előtti érvényesítési API-k az MLflow Python API és az MLflow CLI.

Ezen API-k bármelyikével megadhatja az alábbiakat.

  • A model_uri modell kiszolgálására üzembe helyezett modell.
  • Az alábbiak egyike:
    • A input_data modell hívásának mlflow.pyfunc.PyFuncModel.predict() várt formátuma.
    • A input_path betöltődő és a híváshoz predicthasznált bemeneti adatokat tartalmazó fájlt definiáló fájl.
  • A content_type formátum vagy json a formátumcsv.
  • Nem kötelező output_path az előrejelzések fájlba írása. Ha kihagyja ezt a paramétert, az előrejelzések a következőre lesznek nyomtatva stdout: .
  • Egy környezetkezelő, env_manageramely a környezet kiszolgálására szolgál:
    • Az alapértelmezett érték virtualenv. Ajánlott az ellenőrzés kiszolgálásához.
    • local elérhető, de valószínűleg hibalehetőséget jelent az ellenőrzés kiszolgálása során. Általában csak gyors hibakereséshez használják.
  • Az MLflow jelenlegi verziójának telepítése a környezetben a virtuális környezettel a használatával install_mlflow. Ez a beállítás alapértelmezés szerint a értékre van állítva False.
  • A csomagfüggőségek különböző verzióinak frissítése és tesztelése hibaelhárítás vagy hibakeresés céljából. Ezt a sztringfüggőség-felülbírálások vagy kiegészítések listájaként adhatja meg a felülbírálás argumentum használatával. pip_requirements_override

Példa:

import mlflow

run_id = "..."
model_uri = f"runs:/{run_id}/model"

mlflow.models.predict(
  model_uri=model_uri,
  input_data={"col1": 34.2, "col2": 11.2, "col3": "green"},
  content_type="json",
  env_manager="virtualenv",
  install_mlflow=False,
  pip_requirements_override=["pillow==10.3.0", "scipy==1.13.0"],
)

Függőségi frissítések

Ha bármilyen probléma merül fel a naplózott modellhez megadott függőségekkel kapcsolatban, az MLflow parancssori felületével vagy mlflow.models.model.update_model_requirements() az MLflow Python API-val frissítheti a követelményeket anélkül, hogy másik modellt kellene naplóznia.

Az alábbi példa bemutatja, hogyan frissítheti a pip_requirements.txt naplózott modell helyszíni frissítését.

Frissítheti a meglévő definíciókat a megadott csomagverziókkal, vagy hozzáadhat nem létező követelményeket a pip_requirements.txt fájlhoz. Ez a fájl a megadott model_uri helyen található MLflow-modell összetevőjén belül található.

from mlflow.models.model import update_model_requirements

update_model_requirements(
  model_uri=model_uri,
  operation="add",
  requirement_list=["pillow==10.2.0", "scipy==1.12.0"],
)

Elvárások és korlátozások

A következő szakaszok ismert elvárásokat és korlátozásokat írnak le az egyéni modellek modellkiszolgálóval való kiszolgálására vonatkozóan.

Végpontlétrehozás és -frissítési elvárások

Feljegyzés

Az ebben a szakaszban szereplő információk nem vonatkoznak az alapmodelleket kiszolgáló végpontokra.

Az újonnan regisztrált modellverzió üzembe helyezése magában foglalja a modell és a modellkörnyezet csomagolását, valamint magát a modellvégpont kiépítését. Ez a folyamat körülbelül 10 percet vehet igénybe.

Az Azure Databricks a végpontok leállási idő nélküli frissítését hajtja végre úgy, hogy a meglévő végpontkonfigurációt addig tartja, amíg az új készen nem áll. Ez csökkenti a használatban lévő végpontok megszakításának kockázatát.

Ha a modell számítása 120 másodpercnél hosszabb időt vesz igénybe, a kérések időtúllépést érnek el. Ha úgy véli, hogy a modell számítása 120 másodpercnél tovább fog tartani, forduljon az Azure Databricks-fiók csapatához.

A Databricks időnként nulla állásidős rendszerfrissítéseket és karbantartást végez a meglévő Modellszolgáltatás-végpontokon. A karbantartás során a Databricks újra betölti a modelleket, és sikertelenként jelöli meg a végpontot, ha egy modell nem töltődik be újra. Győződjön meg arról, hogy a testreszabott modellek robusztusak, és bármikor újra betölthetnek.

Végpontok skálázási elvárásai

Feljegyzés

Az ebben a szakaszban szereplő információk nem vonatkoznak az alapmodelleket kiszolgáló végpontokra.

A végpontok kiszolgálása automatikusan méretezhető a forgalom és a kiépített egyidejűségi egységek kapacitása alapján.

  • Kiosztott egyidejűség: A rendszer által kezelhető párhuzamos kérelmek maximális száma. Becsülje meg a szükséges egyidejűséget a következő képlet használatával: kiosztott egyidejűség = lekérdezések másodpercenként (QPS) * modell végrehajtási ideje (s).
  • Skálázási viselkedés: A végpontok szinte azonnal felskálázhatók a megnövekedett forgalommal, és öt percenként leskálázhatók a csökkentett forgalomnak megfelelően.
  • Skálázás nullára: A végpontok 30 perc inaktivitás után nullára skálázhatók. A nullára történő skálázás utáni első kérés "hidegindítást" tapasztal, ami nagyobb késést eredményez. A késésre érzékeny alkalmazások esetében fontolja meg a funkció hatékony kezelését célzó stratégiákat.

GPU-számítási feladatok korlátozásai

A végpontok GPU-számítási feladatokkal való kiszolgálásának korlátozásai a következők:

  • A GPU-kiszolgáló tárolólemezképének létrehozása hosszabb időt vesz igénybe, mint a rendszerkép létrehozása a cpu-kiszolgáláshoz a modell mérete és a GPU-n kiszolgált modellek megnövekedett telepítési követelményei miatt.
  • Nagyon nagy modellek üzembe helyezésekor az üzembe helyezési folyamat időtúllépést eredményezhet, ha a tároló összeállítása és a modell üzembe helyezése meghaladja a 60 perces időtartamot. Ha ez történik, a folyamat újrapróbálkozásának elindításának sikeresen üzembe kell helyeznie a modellt.
  • A GPU-kiszolgálás automatikus skálázása hosszabb időt vesz igénybe, mint a CPU-kiszolgáláshoz.
  • A GPU-kapacitás nem garantált nullára való skálázáskor. A GPU-végpontok további nagy késésre számíthatnak az első kérésnél a nullára való skálázás után.
  • Ez a funkció nem érhető el a következőben northcentralus: .

Az Anaconda licencfrissítése

Az alábbi értesítés az Anacondára támaszkodó ügyfelek számára készült.

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-forgemá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ő defaults modell conda.yaml 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.yamlbeá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.

További erőforrások