Egyéni modellek üzembe helyezése
Ez a cikk az egyéni modellek Mozaik AI-modell-szolgáltatással 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
- Naplózza a modellt vagy a kódot MLflow formátumban, natív MLflow beépített ízek vagy pyfunc használatával.
- A modell naplózása után regisztrálja a Unity Katalógusban (ajánlott) vagy a munkaterület-beállításjegyzékben.
- Innen létrehozhat egy végpontot kiszolgáló modellt a modell üzembe helyezéséhez és lekérdezéséhez.
- Lásd: Végpontokat kiszolgáló egyéni modell létrehozása
- 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-modellek generatív AI-alkalmazásokhoz való 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())
Letöltés a HuggingFace-ből. A modellt közvetlenül a Face öleléséből töltheti le, és naplózhatja a modellt a kiszolgáláshoz. Példaként lásd a jegyzetfüzetek példáit.
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 Mozaik AI-modellkiszolgáló 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_path
adható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ánakmlflow.pyfunc.PyFuncModel.predict()
várt formátuma. - A
input_path
betöltődő és a híváshozpredict
használt bemeneti adatokat tartalmazó fájlt definiáló fájl.
- A
- A
content_type
formátum vagyjson
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 nyomtatvastdout
: . - Egy környezetkezelő,
env_manager
amely 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 alapértelmezett érté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ítvaFalse
. - 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 vagy külső modelleket 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 vagy külső modelleket 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-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ő 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.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.
További erőforrások
- Végpontokat kiszolgáló egyéni modell létrehozása
- Végpontok lekérdezése egyéni modellekhez
- Egyéni Python-kódtárak használata a Modellkiszolgálóval
- Egyéni összetevők csomagolása a modellkiszolgálóhoz
- Python-kód üzembe helyezése a Modellkiszolgálóval
- Több modell kiszolgálása modellkiszolgáló végpontra
- Erőforrásokhoz való hozzáférés konfigurálása végpontokat kiszolgáló modellből
- Útvonaloptimalizálás konfigurálása végpontok kiszolgálására