Eventi
Ottieni gratuitamente la certificazione in Microsoft Fabric.
19 nov, 23 - 10 dic, 23
Per un periodo di tempo limitato, il team della community di Microsoft Fabric offre buoni per esami DP-600 gratuiti.
Prepara oraQuesto browser non è più supportato.
Esegui l'aggiornamento a Microsoft Edge per sfruttare i vantaggi di funzionalità più recenti, aggiornamenti della sicurezza e supporto tecnico.
Importante
Questa funzionalità è disponibile in anteprima pubblica.
Importante
MLflow Model Serving legacy consente di ospitare modelli di Machine Learning dal Registro modelli come endpoint REST aggiornati automaticamente in base alla disponibilità delle versioni del modello e alle relative fasi. Usa un cluster a nodo singolo che viene eseguito con il proprio account all'interno di ciò che è ora denominato piano di calcolo classico. Questo piano di calcolo include la rete virtuale e le risorse di calcolo associate, ad esempio cluster per notebook e processi, data warehouse SQL classici e legacy che servono gli endpoint.
Quando si abilita la gestione del modello per un determinato modello registrato, Azure Databricks crea automaticamente un cluster univoco per il modello e distribuisce tutte le versioni non archiviate del modello in tale cluster. Azure Databricks riavvia il cluster se si verifica un errore e termina il cluster quando si disabilita la gestione del modello per il modello. Il modello viene sincronizzato automaticamente con il Registro modelli e distribuisce le nuove versioni del modello registrate. Le versioni del modello distribuite possono essere sottoposte a query con una richiesta API REST standard. Azure Databricks autentica le richieste al modello usando l'autenticazione standard.
Anche se questo servizio è in anteprima, Databricks consiglia di usarlo per applicazioni a bassa velocità effettiva e non critiche. La velocità effettiva di destinazione è di 200 qps e la disponibilità di destinazione è pari al 99,5%, anche se non viene garantita alcuna garanzia. Inoltre, esiste un limite di dimensioni del payload di 16 MB per ogni richiesta.
Ogni versione del modello viene distribuita usando la distribuzione del modello MLflow ed eseguita in un ambiente Conda specificato dalle relative dipendenze.
Nota
Importante
Anaconda Inc. ha aggiornato le condizioni per anaconda.org canali. In base alle nuove condizioni di servizio, potrebbe essere necessaria una licenza commerciale se ci si affida alla distribuzione e alla creazione di pacchetti di Anaconda. Per altre informazioni, vedere Domande frequenti su Anaconda Commercial Edition. L'uso di qualsiasi canale Anaconda è disciplinato dalle condizioni per il servizio.
I modelli MLflow registrati prima della versione 1.18 (Databricks Runtime 8.3 ML o versioni precedenti) sono stati registrati per impostazione predefinita con il canale conda defaults
(https://repo.anaconda.com/pkgs/) come dipendenza. A causa di questa modifica della licenza, Databricks ha interrotto l'uso del canale per i defaults
modelli registrati usando MLflow v1.18 e versioni successive. Il canale predefinito registrato è ora conda-forge
, che punta alla community gestita https://conda-forge.org/.
Se è stato registrato un modello prima di MLflow v1.18 senza escludere il defaults
canale dall'ambiente conda per il modello, tale modello potrebbe avere una dipendenza dal defaults
canale che potrebbe non essere previsto.
Per verificare manualmente se un modello ha questa dipendenza, è possibile esaminare channel
il conda.yaml
valore nel file incluso nel pacchetto con il modello registrato. Ad esempio, un conda.yaml
modello con una defaults
dipendenza del canale può essere simile al seguente:
channels:
- defaults
dependencies:
- python=3.8.8
- pip
- pip:
- mlflow
- scikit-learn==0.23.2
- cloudpickle==1.6.0
name: mlflow-env
Poiché Databricks non è in grado di determinare se l'uso del repository Anaconda per interagire con i modelli è consentito nella relazione con Anaconda, Databricks non impone ai clienti di apportare modifiche. Se l'uso del repository Anaconda.com tramite l'uso di Databricks è consentito in base ai termini di Anaconda, non è necessario eseguire alcuna azione.
Se si vuole modificare il canale usato nell'ambiente di un modello, è possibile registrare nuovamente il modello nel registro dei modelli con un nuovo conda.yaml
oggetto . A tale scopo, è possibile specificare il canale nel conda_env
parametro di log_model()
.
Per altre informazioni sull'API log_model()
, vedere la documentazione di MLflow relativa al modello con cui si sta lavorando, ad esempio log_model per scikit-learn.
Per altre informazioni sui conda.yaml
file, vedere la documentazione di MLflow.
La gestione dei modelli è disponibile in Azure Databricks dal Registro modelli.
Si abilita un modello per la gestione dalla pagina del modello registrato.
Fare clic sulla scheda Serve . Se il modello non è già abilitato per la gestione, viene visualizzato il pulsante Abilita servizio .
Fare clic su Abilita servizio. La scheda Serve viene visualizzata con Stato visualizzato come In sospeso. Dopo alcuni minuti, lo stato diventa Pronto.
Per disabilitare un modello per la gestione, fare clic su Arresta.
Dalla scheda Serve è possibile inviare una richiesta al modello servito e visualizzare la risposta.
A ogni versione del modello distribuito viene assegnato uno o più URI univoci. Come minimo, a ogni versione del modello viene assegnato un URI costruito come segue:
<databricks-instance>/model/<registered-model-name>/<model-version>/invocations
Ad esempio, per chiamare la versione 1 di un modello registrato come iris-classifier
, usare questo URI:
https://<databricks-instance>/model/iris-classifier/1/invocations
È anche possibile chiamare una versione del modello in base alla relativa fase. Ad esempio, se la versione 1 si trova nella fase Production , può anche essere ottenuto il punteggio usando questo URI:
https://<databricks-instance>/model/iris-classifier/Production/invocations
L'elenco degli URI del modello disponibili viene visualizzato nella parte superiore della scheda Versioni del modello nella pagina di gestione.
Tutte le versioni del modello attive (non archiviate) vengono distribuite ed è possibile eseguire query usando gli URI. Azure Databricks distribuisce automaticamente nuove versioni del modello quando vengono registrate e rimuove automaticamente le versioni precedenti quando vengono archiviate.
Nota
Tutte le versioni distribuite di un modello registrato condividono lo stesso cluster.
I diritti di accesso ai modelli vengono ereditati dal Registro modelli. Per abilitare o disabilitare la funzionalità di gestione è necessaria l'autorizzazione "manage" per il modello registrato. Chiunque abbia diritti di lettura può assegnare un punteggio a una qualsiasi delle versioni distribuite.
Per assegnare un punteggio a un modello distribuito, è possibile usare l'interfaccia utente o inviare una richiesta API REST all'URI del modello.
Questo è il modo più semplice e rapido per testare il modello. È possibile inserire i dati di input del modello in formato JSON e fare clic su Invia richiesta. Se il modello è stato registrato con un esempio di input (come illustrato nell'immagine precedente), fare clic su Carica esempio per caricare l'esempio di input.
È possibile inviare una richiesta di assegnazione dei punteggi tramite l'API REST usando l'autenticazione standard di Databricks. Gli esempi seguenti illustrano l'autenticazione usando un token di accesso personale con MLflow 1.x.
Nota
Come procedura consigliata per la sicurezza, quando si esegue l'autenticazione con strumenti automatizzati, sistemi, script e app, Databricks consiglia di usare token di accesso personali appartenenti alle entità servizio anziché agli utenti dell'area di lavoro. Per creare token per le entità servizio, vedere Gestire i token per un'entità servizio.
Dato un MODEL_VERSION_URI
like https://<databricks-instance>/model/iris-classifier/Production/invocations
(dove <databricks-instance>
è il nome dell'istanza di Databricks) e un token dell'API REST di Databricks denominato DATABRICKS_API_TOKEN
, gli esempi seguenti illustrano come eseguire query su un modello servito:
Gli esempi seguenti riflettono il formato di assegnazione dei punteggi per i modelli creati con MLflow 1.x. Se si preferisce usare MLflow 2.0, è necessario aggiornare il formato di payload della richiesta.
Frammento di codice per eseguire query su un modello che accetta gli input del dataframe.
curl -X POST -u token:$DATABRICKS_API_TOKEN $MODEL_VERSION_URI \
-H 'Content-Type: application/json' \
-d '[
{
"sepal_length": 5.1,
"sepal_width": 3.5,
"petal_length": 1.4,
"petal_width": 0.2
}
]'
Frammento di codice per eseguire query su un modello che accetta input tensor. Gli input tensor devono essere formattati come descritto nella documentazione api di TensorFlow Serving.
curl -X POST -u token:$DATABRICKS_API_TOKEN $MODEL_VERSION_URI \
-H 'Content-Type: application/json' \
-d '{"inputs": [[5.1, 3.5, 1.4, 0.2]]}'
import numpy as np
import pandas as pd
import requests
def create_tf_serving_json(data):
return {'inputs': {name: data[name].tolist() for name in data.keys()} if isinstance(data, dict) else data.tolist()}
def score_model(model_uri, databricks_token, data):
headers = {
"Authorization": f"Bearer {databricks_token}",
"Content-Type": "application/json",
}
data_json = data.to_dict(orient='records') if isinstance(data, pd.DataFrame) else create_tf_serving_json(data)
response = requests.request(method='POST', headers=headers, url=model_uri, json=data_json)
if response.status_code != 200:
raise Exception(f"Request failed with status {response.status_code}, {response.text}")
return response.json()
# Scoring a model that accepts pandas DataFrames
data = pd.DataFrame([{
"sepal_length": 5.1,
"sepal_width": 3.5,
"petal_length": 1.4,
"petal_width": 0.2
}])
score_model(MODEL_VERSION_URI, DATABRICKS_API_TOKEN, data)
# Scoring a model that accepts tensors
data = np.asarray([[5.1, 3.5, 1.4, 0.2]])
score_model(MODEL_VERSION_URI, DATABRICKS_API_TOKEN, data)
È possibile assegnare un punteggio a un set di dati in Power BI Desktop seguendo questa procedura:
Aprire il set di dati da assegnare un punteggio.
Passare a Trasforma dati.
Fare clic con il pulsante destro del mouse nel pannello sinistro e selezionare Crea nuova query.
Passare a Visualizza > Editor avanzato.
Sostituire il corpo della query con il frammento di codice seguente, dopo aver compilato un oggetto appropriato DATABRICKS_API_TOKEN
e MODEL_VERSION_URI
.
(dataset as table ) as table =>
let
call_predict = (dataset as table ) as list =>
let
apiToken = DATABRICKS_API_TOKEN,
modelUri = MODEL_VERSION_URI,
responseList = Json.Document(Web.Contents(modelUri,
[
Headers = [
#"Content-Type" = "application/json",
#"Authorization" = Text.Format("Bearer #{0}", {apiToken})
],
Content = Json.FromValue(dataset)
]
))
in
responseList,
predictionList = List.Combine(List.Transform(Table.Split(dataset, 256), (x) => call_predict(x))),
predictionsTable = Table.FromList(predictionList, (x) => {x}, {"Prediction"}),
datasetWithPrediction = Table.Join(
Table.AddIndexColumn(predictionsTable, "index"), "index",
Table.AddIndexColumn(dataset, "index"), "index")
in
datasetWithPrediction
Assegnare alla query il nome del modello desiderato.
Aprire l'editor di query avanzato per il set di dati e applicare la funzione del modello.
Nella pagina di gestione vengono visualizzati gli indicatori di stato per il cluster di gestione e le singole versioni del modello.
Per personalizzare il cluster di gestione, usare la scheda Impostazioni cluster nella scheda Serve .
La gestione dei modelli legacy può cercare automaticamente i valori delle funzionalità dagli archivi online pubblicati.
.. aws:
Databricks Legacy MLflow Model Serving supports automatic feature lookup from these online stores:
- Amazon DynamoDB (v0.3.8 and above)
- Amazon Aurora (MySQL-compatible)
- Amazon RDS MySQL
.. azure::
Databricks Legacy MLflow Model Serving supports automatic feature lookup from these online stores:
- Azure Cosmos DB (v0.5.0 and above)
- Azure Database for MySQL
ResolvePackageNotFound: pyspark=3.1.0
Questo errore può verificarsi se un modello dipende da pyspark
e viene registrato usando Databricks Runtime 8.x.
Se viene visualizzato questo errore, specificare la pyspark
versione in modo esplicito durante la registrazione del modello usando il conda_env
parametro .
Unrecognized content type parameters: format
Questo errore può verificarsi in seguito al nuovo formato del protocollo di punteggio MLflow 2.0. Se viene visualizzato questo errore, è probabile che si usi un formato di richiesta di assegnazione dei punteggi obsoleto. Per risolvere l'errore, è possibile:
Aggiornare il formato della richiesta di assegnazione dei punteggi al protocollo più recente.
Nota
Gli esempi seguenti riflettono il formato di punteggio introdotto in MLflow 2.0. Se si preferisce usare MLflow 1.x, è possibile modificare le log_model()
chiamate API per includere la dipendenza della versione di MLflow desiderata nel extra_pip_requirements
parametro . In questo modo si garantisce che venga usato il formato di punteggio appropriato.
mlflow.<flavor>.log_model(..., extra_pip_requirements=["mlflow==1.*"])
Eseguire query su un modello che accetta input del dataframe pandas.
curl -X POST -u token:$DATABRICKS_API_TOKEN $MODEL_VERSION_URI \
-H 'Content-Type: application/json' \
-d '{
"dataframe_records": [{"sepal_length (cm)": 5.1, "sepal_width (cm)": 3.5, "petal_length (cm)": 1.4, "petal_width": 0.2},
{"sepal_length (cm)": 4.2, "sepal_width (cm)": 5.0, "petal_length (cm)": 0.8, "petal_width": 0.5}]
}'
Eseguire una query su un modello che accetta input tensor. Gli input tensor devono essere formattati come descritto nella documentazione api di TensorFlow Serving.
curl -X POST -u token:$DATABRICKS_API_TOKEN $MODEL_VERSION_URI \
-H 'Content-Type: application/json' \
-d '{"inputs": [[5.1, 3.5, 1.4, 0.2]]}'
import numpy as np
import pandas as pd
import requests
def create_tf_serving_json(data):
return {'inputs': {name: data[name].tolist() for name in data.keys()} if isinstance(data, dict) else data.tolist()}
def score_model(model_uri, databricks_token, data):
headers = {
"Authorization": f"Bearer {databricks_token}",
"Content-Type": "application/json",
}
data_dict = {'dataframe_split': data.to_dict(orient='split')} if isinstance(data, pd.DataFrame) else create_tf_serving_json(data)
data_json = json.dumps(data_dict)
response = requests.request(method='POST', headers=headers, url=model_uri, json=data_json)
if response.status_code != 200:
raise Exception(f"Request failed with status {response.status_code}, {response.text}")
return response.json()
# Scoring a model that accepts pandas DataFrames
data = pd.DataFrame([{
"sepal_length": 5.1,
"sepal_width": 3.5,
"petal_length": 1.4,
"petal_width": 0.2
}])
score_model(MODEL_VERSION_URI, DATABRICKS_API_TOKEN, data)
# Scoring a model that accepts tensors
data = np.asarray([[5.1, 3.5, 1.4, 0.2]])
score_model(MODEL_VERSION_URI, DATABRICKS_API_TOKEN, data)
È possibile assegnare un punteggio a un set di dati in Power BI Desktop seguendo questa procedura:
Aprire il set di dati da assegnare un punteggio.
Passare a Trasforma dati.
Fare clic con il pulsante destro del mouse nel pannello sinistro e selezionare Crea nuova query.
Passare a Visualizza > Editor avanzato.
Sostituire il corpo della query con il frammento di codice seguente, dopo aver compilato un oggetto appropriato DATABRICKS_API_TOKEN
e MODEL_VERSION_URI
.
(dataset as table ) as table =>
let
call_predict = (dataset as table ) as list =>
let
apiToken = DATABRICKS_API_TOKEN,
modelUri = MODEL_VERSION_URI,
responseList = Json.Document(Web.Contents(modelUri,
[
Headers = [
#"Content-Type" = "application/json",
#"Authorization" = Text.Format("Bearer #{0}", {apiToken})
],
Content = Json.FromValue(dataset)
]
))
in
responseList,
predictionList = List.Combine(List.Transform(Table.Split(dataset, 256), (x) => call_predict(x))),
predictionsTable = Table.FromList(predictionList, (x) => {x}, {"Prediction"}),
datasetWithPrediction = Table.Join(
Table.AddIndexColumn(predictionsTable, "index"), "index",
Table.AddIndexColumn(dataset, "index"), "index")
in
datasetWithPrediction
Assegnare alla query il nome del modello desiderato.
Aprire l'editor di query avanzato per il set di dati e applicare la funzione del modello.
Se la richiesta di assegnazione dei punteggi usa il client MLflow, ad esempio mlflow.pyfunc.spark_udf()
, aggiornare il client MLflow alla versione 2.0 o successiva per usare il formato più recente. Altre informazioni sul protocollo di punteggio del modello MLflow aggiornato in MLflow 2.0.
Per altre informazioni sui formati di dati di input accettati dal server (ad esempio, il formato diviso pandas), vedere la documentazione di MLflow.
Eventi
Ottieni gratuitamente la certificazione in Microsoft Fabric.
19 nov, 23 - 10 dic, 23
Per un periodo di tempo limitato, il team della community di Microsoft Fabric offre buoni per esami DP-600 gratuiti.
Prepara ora