Condividere modelli tra le aree di lavoro
Importante
Databricks raccomanda di utilizzare i modelli in Unity Catalog per condividere i modelli tra aree di lavoro. L'approccio in questo articolo è stato deprecato.
Azure Databricks supporta la condivisione di modelli in più aree di lavoro. Ad esempio, è possibile sviluppare e registrare un modello in un'area di lavoro di sviluppo e quindi accedervi e confrontarlo con i modelli in un'area di lavoro di produzione separata. Ciò è utile quando più team condividono l'accesso ai modelli o quando l'organizzazione ha più aree di lavoro per gestire le diverse fasi di sviluppo. Per lo sviluppo e la distribuzione di modelli tra aree di lavoro, Databricks consiglia l'approccio di distribuzione del codice, in cui il codice di training del modello viene distribuito in più ambienti.
Nelle situazioni in più aree di lavoro è possibile accedere ai modelli nelle aree di lavoro di Azure Databricks usando un registro modelli remoto. Ad esempio, i data scientist possono accedere al registro dei modelli di produzione con accesso in sola lettura per confrontare i modelli in fase di sviluppo con i modelli di produzione correnti. Di seguito è riportato un esempio di configurazione multi-area di lavoro.
L'accesso a un registro remoto è controllato dai token. Ogni utente o script che richiede l'accesso crea un token di accesso personale nel Registro di sistema remoto e copia tale token nel gestore segreto dell'area di lavoro locale. Ogni richiesta API inviata all'area di lavoro del registro remoto deve includere il token di accesso; MLflow fornisce un semplice meccanismo per specificare i segreti da usare quando si eseguono operazioni sul registro del modello.
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.
Tutti i metodi API Client e Fluent per il Registro di sistema dei modelli sono supportati per le aree di lavoro remote.
Requisiti
L'uso di un registro modelli tra aree di lavoro richiede il client Python MLflow, versione 1.11.0 o successiva.
Nota
Questo flusso di lavoro viene implementato dalla logica nel client MLflow. Assicurarsi che l'ambiente che esegue il client abbia accesso per effettuare richieste di rete nell'area di lavoro di Azure Databricks contenente il Registro modelli remoti. Una restrizione comune inserita nell'area di lavoro del Registro di sistema è un elenco di indirizzi IP consentiti, che può impedire le connessioni dai client MLflow in esecuzione in un cluster in un'altra area di lavoro.
Configurare il token API per un registro remoto
- Nell'area di lavoro del Registro di sistema del modello creare un token di accesso.
- Nell'area di lavoro locale, creare segreti per archiviare il token di accesso e le informazioni sull'area di lavoro remota:
- Creare un ambito dei segreti:
databricks secrets create-scope <scope>
. - Selezionare un nome univoco per l'area di lavoro di destinazione, qui presentato come
<prefix>
. Poi creare tre segreti:databricks secrets put-secret <scope> <prefix>-host
: immettere il nome host dell'area di lavoro del Registro di sistema del modello. Ad esempio,https://westus.azuredatabricks.net/
ohttps://adb-5555555555555555.19.azuredatabricks.net/
.databricks secrets put-secret <scope> <prefix>-token
: immettere il token di accesso dall'area di lavoro del Registro di sistema del modello.databricks secrets put-secret <scope> <prefix>-workspace-id
: immettere l'ID dell'area di lavoro per l'area di lavoro del Registro di sistema del modello, disponibile nell'URL di qualsiasi pagina.
- Creare un ambito dei segreti:
Nota
È possibile condividere l'ambito del segreto con altri utenti, perché esiste un limite per il numero di ambiti segreti per area di lavoro.
Specificare un registro remoto
In base all'ambito segreto e al prefisso del nome creato per l'area di lavoro del registro remoto, è possibile creare un URI del registro del tipo:
registry_uri = f'databricks://<scope>:<prefix>'
È possibile usare l'URI per specificare un registro remoto per i metodi dell'API Fluent chiamando prima di tutto:
mlflow.set_registry_uri(registry_uri)
In alternativa, è possibile specificarlo in modo esplicito quando si crea un'istanza di MlflowClient
:
client = MlflowClient(registry_uri=registry_uri)
I flussi di lavoro seguenti mostrano esempi di entrambi gli approcci.
Registrare un modello nel Registro di sistema remoto
Un modo per registrare un modello consiste nell'usare l'API mlflow.register_model
:
mlflow.set_registry_uri(registry_uri)
mlflow.register_model(model_uri=f'runs:/<run-id>/<artifact-path>', name=model_name)
Gli esempi per altri metodi di registrazione del modello sono disponibili nel notebook alla fine di questa pagina.
Nota
La registrazione di un modello in un'area di lavoro remota crea una copia temporanea degli artefatti del modello in DBFS nell'area di lavoro remota. È possibile eliminare questa copia dopo che la versione del modello è in stato READY
. I file temporanei sono disponibili nella cartella /dbfs/databricks/mlflow/tmp-external-source/<run-id>
.
È anche possibile specificare un oggetto tracking_uri
da puntare a un servizio di rilevamento di MLFlow in un'altra area di lavoro in modo simile a registry_uri
. Ciò significa che è possibile eseguire un'esecuzione in un'area di lavoro remota e registrarne il modello nell'area di lavoro corrente o in un'altra area di lavoro remota.
Usare un modello dal Registro di sistema remoto
È possibile caricare e usare una versione del modello in un registro remoto con metodi mlflow.<flavor>.load_model
impostando prima l'URI del Registro di sistema:
mlflow.set_registry_uri(registry_uri)
model = mlflow.pyfunc.load_model(f'models:/<model-name>/Staging')
model.predict(...)
In alternativa, è possibile specificare in modo esplicito il Registro di sistema remoto nell'URI models:/
:
model = mlflow.pyfunc.load_model(f'models://<scope>:<prefix>@databricks/<model-name>/Staging')
model.predict(...)
Sono supportati anche altri metodi helper per accedere ai file del modello, ad esempio:
client.get_latest_versions(model_name)
client.get_model_version_download_uri(model_name, version)
Gestire un modello nel Registro di sistema remoto
È possibile eseguire qualsiasi azione sui modelli nel Registro di sistema remoto purché siano disponibili le autorizzazioni necessarie. Ad esempio, se si dispone di autorizzazioni CAN MANAGE per un modello, è possibile eseguire la transizione di una fase della versione del modello o eliminare il modello usando metodi MlflowClient
:
client = MlflowClient(tracking_uri=None, registry_uri=registry_uri)
client.transition_model_version_stage(model_name, version, 'Archived')
client.delete_registered_model(model_name)
Esempio di notebook: Registro modelli remoti
Il notebook seguente è applicabile per le aree di lavoro non abilitate per il catalogo Unity. Illustra come registrare i modelli nel server di rilevamento MLflow dall'area di lavoro corrente e registrare i modelli in Registro modelli in un'area di lavoro diversa. Databricks raccomanda di utilizzare i modelli in Unity Catalog per condividere i modelli tra aree di lavoro.