Modellen delen in werkruimten
Belangrijk
Databricks raadt het gebruik van modellen in Unity Catalog aan om modellen te delen in werkruimten. De aanpak in dit artikel is afgeschaft.
Azure Databricks biedt ondersteuning voor het delen van modellen in meerdere werkruimten. U kunt bijvoorbeeld een model ontwikkelen en registreren in een ontwikkelwerkruimte en deze vervolgens openen en vergelijken met modellen in een afzonderlijke productiewerkruimte. Dit is handig wanneer meerdere teams toegang hebben tot modellen of wanneer uw organisatie meerdere werkruimten heeft om de verschillende fasen van ontwikkeling af te handelen. Voor het ontwikkelen en implementeren van modellen in meerdere werkruimten raadt Databricks de implementatiecodebenadering aan, waarbij de modeltrainingscode wordt geïmplementeerd in meerdere omgevingen.
In situaties met meerdere werkruimten hebt u toegang tot modellen in Azure Databricks-werkruimten met behulp van een extern modelregister. Gegevenswetenschappers hebben bijvoorbeeld toegang tot het productiemodelregister met alleen-lezentoegang om hun modellen in ontwikkeling te vergelijken met de huidige productiemodellen. Hieronder ziet u een voorbeeld van een set-up met meerdere werkruimten.
Toegang tot een extern register wordt beheerd door tokens. Elke gebruiker of elk script dat toegang nodig heeft, maakt een persoonlijk toegangstoken in het externe register en kopieert dat token naar de geheime manager van hun lokale werkruimte. Elke API-aanvraag die naar de externe registerwerkruimte wordt verzonden, moet het toegangstoken bevatten. MLflow biedt een eenvoudig mechanisme om de geheimen op te geven die moeten worden gebruikt bij het uitvoeren van modelregisterbewerkingen.
Notitie
Als best practice voor beveiliging, wanneer u zich verifieert met geautomatiseerde hulpprogramma's, systemen, scripts en apps, raadt Databricks u aan om persoonlijke toegangstokens te gebruiken die behoren tot service-principals in plaats van werkruimtegebruikers. Zie Tokens voor een service-principal beheren om tokens voor service-principals te maken.
Alle client- en fluent-API-methoden voor modelregisters worden ondersteund voor externe werkruimten.
Vereisten
Voor het gebruik van een modelregister in werkruimten is de MLflow Python-client vereist, release 1.11.0 of hoger.
Notitie
Deze werkstroom wordt geïmplementeerd vanuit logica in de MLflow-client. Zorg ervoor dat de omgeving waarop de client wordt uitgevoerd, toegang heeft om netwerkaanvragen uit te voeren voor de Azure Databricks-werkruimte die het externe modelregister bevat. Een veelvoorkomende beperking die in de registerwerkruimte wordt geplaatst, is een lijst met toegestane IP-adressen, waardoor verbindingen van MLflow-clients die in een cluster in een andere werkruimte worden uitgevoerd, niet kunnen worden toegestaan.
Het API-token instellen voor een extern register
- Maak in de werkruimte voor het modelregister een toegangstoken.
- Maak in de lokale werkruimte geheimen om het toegangstoken en de externe werkruimtegegevens op te slaan:
- Maak een geheim bereik:
databricks secrets create-scope <scope>
. - Kies een unieke naam voor de doelwerkruimte, die hier wordt weergegeven als
<prefix>
. Maak vervolgens drie geheimen:databricks secrets put-secret <scope> <prefix>-host
: Voer de hostnaam van de werkruimte van het modelregister in. Bijvoorbeeldhttps://westus.azuredatabricks.net/
ofhttps://adb-5555555555555555.19.azuredatabricks.net/
.databricks secrets put-secret <scope> <prefix>-token
: Voer het toegangstoken in vanuit de werkruimte van het modelregister.databricks secrets put-secret <scope> <prefix>-workspace-id
: Voer de werkruimte-id in voor de werkruimte van het modelregister die u kunt vinden in de URL van elke pagina.
- Maak een geheim bereik:
Notitie
Mogelijk wilt u het geheime bereik delen met andere gebruikers, omdat er een limiet is voor het aantal geheime bereiken per werkruimte.
Een extern register opgeven
Op basis van het geheime bereik en het naamvoorvoegsel dat u hebt gemaakt voor de externe registerwerkruimte, kunt u een register-URI van het formulier maken:
registry_uri = f'databricks://<scope>:<prefix>'
U kunt de URI gebruiken om een extern register op te geven voor fluent API-methoden door eerst het volgende aan te roepen:
mlflow.set_registry_uri(registry_uri)
U kunt deze ook expliciet opgeven wanneer u een instantie van een MlflowClient
:
client = MlflowClient(registry_uri=registry_uri)
In de volgende werkstromen ziet u voorbeelden van beide benaderingen.
Een model registreren in het externe register
Een manier om een model te registreren, is door de mlflow.register_model
API te gebruiken:
mlflow.set_registry_uri(registry_uri)
mlflow.register_model(model_uri=f'runs:/<run-id>/<artifact-path>', name=model_name)
Voorbeelden voor andere modelregistratiemethoden vindt u in het notebook aan het einde van deze pagina.
Notitie
Als u een model registreert in een externe werkruimte, maakt u een tijdelijke kopie van de modelartefacten in DBFS in de externe werkruimte. U kunt deze kopie verwijderen zodra de modelversie de READY
status heeft. De tijdelijke bestanden vindt u onder de /dbfs/databricks/mlflow/tmp-external-source/<run-id>
map.
U kunt ook een tracking_uri
te verwijzen naar een MLflow-traceringsservice in een andere werkruimte opgeven op een vergelijkbare manier als registry_uri
. Dit betekent dat u een uitvoering kunt uitvoeren op een externe werkruimte en het model ervan kunt registreren in de huidige of een andere externe werkruimte.
Een model uit het externe register gebruiken
U kunt een modelversie in een extern register laden en gebruiken met mlflow.<flavor>.load_model
methoden door eerst de register-URI in te stellen:
mlflow.set_registry_uri(registry_uri)
model = mlflow.pyfunc.load_model(f'models:/<model-name>/Staging')
model.predict(...)
U kunt ook expliciet het externe register opgeven in de models:/
URI:
model = mlflow.pyfunc.load_model(f'models://<scope>:<prefix>@databricks/<model-name>/Staging')
model.predict(...)
Andere helpermethoden voor toegang tot de modelbestanden worden ook ondersteund, zoals:
client.get_latest_versions(model_name)
client.get_model_version_download_uri(model_name, version)
Een model beheren in het externe register
U kunt elke actie uitvoeren op modellen in het externe register, zolang u over de vereiste machtigingen beschikt. Als u bijvoorbeeld CAN MANAGE-machtigingen voor een model hebt, kunt u een fase van een modelversie overzetten of het model verwijderen met behulp van MlflowClient
methoden:
client = MlflowClient(tracking_uri=None, registry_uri=registry_uri)
client.transition_model_version_stage(model_name, version, 'Archived')
client.delete_registered_model(model_name)
Notebook-voorbeeld: extern modelregister
Het volgende notebook is van toepassing op werkruimten die niet zijn ingeschakeld voor Unity Catalog. U ziet hoe u modellen registreert bij de MLflow-traceringsserver vanuit de huidige werkruimte en hoe u de modellen registreert in modelregister in een andere werkruimte. Databricks raadt het gebruik van modellen in Unity Catalog aan om modellen te delen in werkruimten.