Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Den här artikeln beskriver stöd för anpassade modeller med hjälp av Mosaic AI Model Serving. Den innehåller information om alternativ för modellloggning som stöds och beräkningstyper, hur du paketerar modellberoenden för servering och förväntningar på skapande och skalning av slutpunkter.
Vad är anpassade modeller?
Modellservern kan distribuera valfri Python-modell eller anpassad kod som ett API i produktionsklass med cpu- eller GPU-beräkningsresurser. Databricks refererar till sådana modeller som anpassade modeller. Dessa ML-modeller kan tränas med ml-standardbibliotek som scikit-learn, XGBoost, PyTorch och HuggingFace-transformatorer och kan innehålla valfri Python-kod.
Om du vill distribuera en anpassad modell
- Logga modellen eller koden i MLflow-formatet med antingen inbyggda MLflow-flavors eller pyfunc.
- När modellen har loggats registrerar du den i Unity-katalogen (rekommenderas) eller arbetsytans register.
- Härifrån kan du skapa en modell som betjänar slutpunkten för att distribuera och fråga din modell.
En fullständig självstudie om hur du hanterar anpassade modeller på Databricks finns i Självstudie om modellhantering.
Databricks har också stöd för att hantera grundmodeller för generativa AI-program, se Foundation Model API:er och externa modeller för modeller och beräkningserbjudanden som stöds.
Log ML-modeller
Det finns olika metoder för att logga ML-modellen för modellservering. I följande lista sammanfattas de metoder och exempel som stöds.
Automatisk loggning Den här metoden aktiveras automatiskt när du använder Databricks Runtime för ML.
import mlflow from sklearn.ensemble import RandomForestRegressor from sklearn.datasets import load_iris iris = load_iris() model = RandomForestRegressor() model.fit(iris.data, iris.target)Logga med MLflows inbyggda varianter. Du kan använda den här metoden om du vill logga modellen manuellt för mer detaljerad kontroll.
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")Anpassad loggning med
pyfunc. Du kan använda den här metoden för att distribuera godtyckliga python-kodmodeller eller distribuera ytterligare kod tillsammans med din modell.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())
- Ladda ned från HuggingFace. Du kan ladda ned en modell direkt från Hugging Face och logga modellen för servering. Exempel finns i Notebook-exempel.
Exempel på signatur och indata
Vi rekommenderar att du lägger till ett signatur- och indataexempel i MLflow. Signaturer krävs för loggning av modeller till Unity-katalogen.
Följande är ett signaturexempel:
from mlflow.models.signature import infer_signature
signature = infer_signature(training_data, model.predict(training_data))
mlflow.sklearn.log_model(model, "model", signature=signature)
Följande är ett indataexempel:
input_example = {"feature1": 0.5, "feature2": 3}
mlflow.sklearn.log_model(model, "model", input_example=input_example)
Typ av beräkning
Mosaic AI Model Serving innehåller en mängd olika cpu- och GPU-alternativ för att distribuera din modell. När du distribuerar med en GPU måste du se till att koden har konfigurerats så att förutsägelser körs på GPU:n med hjälp av de metoder som tillhandahålls av ramverket. MLflow gör detta automatiskt för modeller som loggas med PyTorch- eller Transformers-smakerna.
| Typ av arbetsbelastning | GPU-instans | Memory |
|---|---|---|
CPU |
4 GB per samtidighet | |
GPU_SMALL |
1xT4 | 16 GB |
GPU_LARGE |
1xA100 | 80 GB |
GPU_LARGE_2 |
2xA100 | 160 GB |
GPU_LARGE_4 |
4xA100 | 320 GB |
Distributionscontainer och beroenden
Under distributionen skapas och distribueras en container i produktionsklass som slutpunkt. Den här containern innehåller bibliotek som registreras eller anges automatiskt i MLflow-modellen. Basavbildningen kan innehålla vissa beroenden på systemnivå, men beroenden på programnivå måste uttryckligen anges i MLflow-modellen.
Om inte alla nödvändiga beroenden ingår i modellen kan det uppstå beroendefel under distributionen. När du stöter på problem med modelldistribution rekommenderar Databricks att du testar modellen lokalt.
Paket- och kodberoenden
Anpassade eller privata bibliotek kan läggas till i distributionen. Se Använda anpassade Python-bibliotek med modellservering.
För MLflow-inbyggda smakmodeller registreras de nödvändiga paketberoendena automatiskt.
För anpassade pyfunc modeller kan beroenden uttryckligen läggas till. Detaljerad information om loggningskrav och metodtips finns i MLflow Models-dokumentationen och MLflow Python API-referensen.
Du kan lägga till paketberoenden med hjälp av:
Parametern
pip_requirements:mlflow.sklearn.log_model(model, "sklearn-model", pip_requirements = ["scikit-learn", "numpy"])Parametern
conda_env: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)Om du vill inkludera ytterligare krav utöver vad som samlas in automatiskt använder du
extra_pip_requirements.mlflow.sklearn.log_model(model, "sklearn-model", extra_pip_requirements = ["sklearn_req"])
Om du har kodberoenden kan dessa anges med hjälp av code_path.
mlflow.sklearn.log_model(model, "sklearn-model", code_path=["path/to/helper_functions.py"],)
Information om hur du verifierar och uppdaterar beroenden före distributionen finns i Verifieringskontroller av före modelldistribution.
Förväntningar och begränsningar
Kommentar
Informationen i det här avsnittet gäller inte för slutpunkter som hanterar grundmodeller eller externa modeller.
I följande avsnitt beskrivs kända förväntningar och begränsningar för att hantera anpassade modeller med hjälp av modellservering.
Förväntningar avseende skapande och uppdatering av slutpunkter
- Distributionstid: När du distribuerar en nyligen registrerad modellversion måste du paketera modellen och dess modellmiljö och etablera själva modellslutpunkten. Den här processen kan ta cirka 10 minuter, men kan ta längre tid beroende på modellens komplexitet, storlek och beroenden.
- Uppdateringar av noll stilleståndstid: Azure Databricks utför en uppdatering med noll stilleståndstid för slutpunkter genom att hålla den befintliga slutpunktskonfigurationen uppe tills den nya blir klar. Detta minskar risken för avbrott för slutpunkter som används. Under den här uppdateringsprocessen debiteras du för både de gamla och nya slutpunktskonfigurationerna tills övergången är klar.
- Tidsgräns för begäran: Om modellberäkningen tar längre tid än 297 sekunder kommer begäranden att avslutas på grund av tidsgräns.
Viktigt!
Databricks utför enstaka systemuppdateringar och underhåll utan avbrott på befintliga modellserverslutpunkter. Under underhållet läser Databricks in modeller igen. Om en modell inte kan läsas in igen markeras slutpunktsuppdateringen som misslyckad och den befintliga slutpunktskonfigurationen fortsätter att hantera begäranden. Kontrollera att dina anpassade modeller är robusta och kan läsas in igen när som helst.
Förväntningar på slutpunktsskalning
Serverdelsslutpunkter skalas automatiskt baserat på trafik och kapaciteten för etablerade samtidighetsenheter.
- Etablerad samtidighet: Det maximala antalet parallella begäranden som systemet kan hantera. Beräkna den nödvändiga samtidigheten med hjälp av formeln: etablerad samtidighet = frågor per sekund (QPS) * modellkörningstid (s). Information om hur du verifierar samtidighetskonfigurationen finns i Lasta tester för att betjäna slutpunkter.
- Skalningsbeteende: Slutpunkter skalas upp nästan omedelbart med ökad trafik och skalas ned var femte minut för att matcha minskad trafik.
- Skala till noll: Skala till noll är en valfri funktion för slutpunkter som gör att de kan skala ned till noll efter 30 minuters inaktivitet. Den första begäran efter skalning till noll upplever en "kall start", vilket leder till högre svarstid. Det tar vanligtvis 10–20 sekunder att skala upp från noll, men det kan ibland ta några minuter. Det finns inget serviceavtal på skala från noll svarstid.
- Routningsoptimering: För användningsfall med hög QPS och låg latens är routningsoptimering det optimala och rekommenderade alternativet för att förbättra prestanda.
Varning
Skala till noll ska inte användas för produktionsarbetsbelastningar som kräver konsekvent drifttid eller garanterade svarstider. Inaktivera skalning till noll för svarstidskänsliga program eller slutpunkter som kräver kontinuerlig tillgänglighet.
Begränsningar för GPU-arbetsbelastning
Följande är begränsningar för att betjäna slutpunkter med GPU-arbetsbelastningar:
- Skapande av containeravbildningar för GPU-servering tar längre tid än att skapa avbildningar för CPU-servering på grund av modellstorlek och ökade installationskrav för modeller som hanteras på GPU.
- När du distribuerar mycket stora modeller kan distributionsprocessen överskrida tidsgränsen om containerversionen och modelldistributionen överskrider en varaktighet på 60 minuter.
- Automatisk skalning för GPU-servering tar längre tid än för CPU-servering.
- GPU-kapacitet garanteras inte vid skalning till noll. GPU-slutpunkter kan förvänta sig extra hög svarstid för den första begäran efter skalning till noll.
Anaconda-licensieringsmeddelande för äldre modeller
Kommentar
Det här avsnittet gäller endast modeller som loggats med MLflow v1.17 eller tidigare (Databricks Runtime 8.3 ML eller tidigare). Om du använder en nyare version kan du hoppa över det här avsnittet.
Följande meddelande gäller för kunder som förlitar sig på Anaconda med äldre modeller.
Viktigt!
Anaconda Inc. uppdaterade sina tjänstvillkor för anaconda.org kanaler. Baserat på de nya tjänstvillkoren kan du kräva en kommersiell licens om du förlitar dig på Anacondas paketering och distribution. Mer information finns i Vanliga frågor och svar om Anaconda Commercial Edition . Din användning av Anaconda-kanaler styrs av deras användarvillkor.
MLflow-modeller som loggades före v1.18 (Databricks Runtime 8.3 ML eller tidigare) loggades som standard med conda-kanalen defaults (https://repo.anaconda.com/pkgs/) som ett beroende. På grund av den här licensändringen defaults har Databricks stoppat användningen av kanalen för modeller som loggats med MLflow v1.18 och senare. Standardkanalen som loggas är nu conda-forge, som pekar på den communityhanterade https://conda-forge.org/.
Om du loggade en modell före MLflow v1.18 utan att utesluta defaults kanalen från conda-miljön för modellen, kan den modellen ha ett beroende av den defaults kanal som du kanske inte har tänkt dig.
För att manuellt bekräfta om en modell har det här beroendet kan du undersöka channel värdet i conda.yaml filen som är paketerad med den loggade modellen. En modells conda.yaml med ett defaults kanalberoende kan till exempel se ut så här:
channels:
- defaults
dependencies:
- python=3.8.8
- pip
- pip:
- mlflow
- scikit-learn==0.23.2
- cloudpickle==1.6.0
name: mlflow-env
Eftersom Databricks inte kan avgöra om din användning av Anaconda-lagringsplatsen för att interagera med dina modeller är tillåten under din relation med Anaconda, tvingar Databricks inte sina kunder att göra några ändringar. Om din användning av Anaconda.com lagringsplats genom användning av Databricks är tillåten enligt Anacondas villkor behöver du inte vidta några åtgärder.
Om du vill ändra den kanal som används i en modells miljö kan du registrera om modellen till modellregistret med en ny conda.yaml. Du kan göra detta genom att ange kanalen i parametern conda_envlog_model()för .
Mer information om API:et log_model() finns i MLflow-dokumentationen för modellsmaken som du arbetar med, till exempel log_model för scikit-learn.
Mer information om conda.yaml filer finns i MLflow-dokumentationen.
Ytterligare resurser
- Skapa anpassade modellserverslutpunkter
- Frågeserverslutpunkter för anpassade modeller
- Felsökningsguide för modellservering
- Använda anpassade Python-bibliotek med modellservering
- Paketera anpassade artefakter för modellhantering
- Distribuera Python-kod med modellservering
- Routningsoptimering för tjänstslutpunkter
- Konfigurera åtkomst till resurser från modelltjänsteslutpunkter