중요
Databricks는 Unity 카탈로그의
Azure Databricks는 여러 작업 영역에서 모델 공유를 지원합니다. 예를 들어 개발 작업 영역에서 모델을 개발하고 로그한 다음, 별도의 프로덕션 작업 영역에 있는 모델과 액세스하여 모델과 비교할 수 있습니다. 이는 여러 팀이 모델에 대한 액세스를 공유하는 상황이나 조직에 다양한 개발 단계를 처리하기 위한 여러 작업 영역이 있는 경우에 유용합니다. 작업 영역 간 모델 개발 및 배포의 경우 Databricks는 모델 학습 코드가 여러 환경에 배포되는 배포 코드 방법을 권장합니다.
다수의 작업 영역이 있는 상황에서는 원격 모델 레지스트리를 사용하여 Azure Databricks 작업 영역에서 모델에 액세스할 수 있습니다. 예를 들어 데이터 과학자는 읽기 전용 액세스 권한으로 프로덕션 모델 레지스트리에 액세스하여 개발 중인 모델을 현재 프로덕션 모델과 비교할 수 있습니다. 다중 작업 영역 설정의 예는 다음과 같습니다.
원격 레지스트리에 대한 액세스는 토큰으로 제어됩니다. 액세스가 필요한 각 사용자 또는 스크립트는 원격 레지스트리에 개인 액세스 토큰을 만들고 해당 토큰을 로컬 작업 영역의 비밀 관리자에 복사 합니다. 원격 레지스트리 작업 영역으로 전송된 각 API 요청에는 액세스 토큰이 포함되어야 합니다. MLflow는 모델 레지스트리 작업을 수행할 때 사용할 비밀을 지정하는 간단한 메커니즘을 제공합니다.
참고
보안 모범 사례로, 자동화된 도구, 시스템, 스크립트 및 앱을 사용하여 인증하는 경우 Databricks는 작업 영역 사용자 대신 서비스 주체 에 속한 개인용 액세스 토큰을 사용하는 것이 좋습니다. 서비스 주체에 대한 토큰을 만들려면 서비스 주체에 대한 토큰 관리를 참조하세요.
모델 레지스트리에 대한 모든 클라이언트 및 흐름 API 메서드는 원격 작업 영역에서 지원됩니다.
요구 사항
작업 영역에서 모델 레지스트리를 사용하려면 MLflow Python 클라이언트 릴리스 1.11.0 이상이 필요합니다.
참고
이 워크플로는 MLflow 클라이언트의 논리에서 구현됩니다. 클라이언트를 실행하는 환경에 원격 모델 레지스트리가 포함된 Azure Databricks 작업 영역에 대해 네트워크 요청을 수행할 수 있는 액세스 권한이 있는지 확인합니다. 레지스트리 작업 영역에 적용되는 일반적인 제한 사항은 다른 작업 영역의 클러스터에서 실행되는 MLflow 클라이언트의 연결을 허용하지 않는 IP 허용 목록입니다.
원격 레지스트리에 대한 API 토큰 설정
- 모델 레지스트리 작업 영역에서 액세스 토큰을 만듭니다.
- 로컬 작업 영역에서 액세스 토큰과 원격 작업 영역 정보를 저장할 비밀을 만듭니다.
- 비밀 범위를 만듭니다(
databricks secrets create-scope <scope>). - 여기에
<prefix>로 표시된 대상 작업 영역의 고유한 이름을 선택합니다. 그런 다음 세 가지 보안 비밀을 만듭니다.-
databricks secrets put-secret <scope> <prefix>-host: 모델 레지스트리 작업 영역의 호스트 이름을 입력합니다. 예를 들어https://westus.azuredatabricks.net/또는https://adb-5555555555555555.19.azuredatabricks.net/입니다. -
databricks secrets put-secret <scope> <prefix>-token: 모델 레지스트리 작업 영역에서 액세스 토큰을 입력합니다. -
databricks secrets put-secret <scope> <prefix>-workspace-id: 모든 페이지의 URL에서 찾을 수 있는 모델 레지스트리 작업 영역의 작업 영역 ID를 입력합니다.
-
- 비밀 범위를 만듭니다(
참고
작업 영역별 비밀 범위 수에
원격 레지스트리 지정
원격 레지스트리 작업 영역에 대해 만든 비밀 범위 및 이름 접두사를 기반으로 다음 형식의 레지스트리 URI를 구성할 수 있습니다.
registry_uri = f'databricks://<scope>:<prefix>'
URI를 사용하여 먼저 호출하여 Fluent API 메서드 에 대한 원격 레지스트리를 지정할 수 있습니다.
mlflow.set_registry_uri(registry_uri)
또는 MlflowClient를 인스턴스화할 때 명시적으로 지정할 수 있습니다.
client = MlflowClient(registry_uri=registry_uri)
다음 워크플로는 두 방법의 예를 보여 줍니다.
원격 레지스트리에 모델 등록
모델을 등록하는 한 가지 방법은 mlflow.register_model API를 사용하는 것입니다.
mlflow.set_registry_uri(registry_uri)
mlflow.register_model(model_uri=f'runs:/<run-id>/<artifact-path>', name=model_name)
다른 모델 등록 메서드에 대한 예제는 이 페이지 끝에 있는 Notebook에서 찾을 수 있습니다.
참고
원격 작업 영역에 모델을 등록하면 원격 작업 영역의 DBFS에 모델 아티팩트의 임시 복사본이 만들어집니다. 모델 버전이 READY 상태가 되면 이 사본을 삭제할 수 있습니다. 임시 파일은 /dbfs/databricks/mlflow/tmp-external-source/<run-id> 폴더에서 찾을 수 있습니다.
tracking_uri와 유사한 방식으로 다른 작업 영역의 MLflow 추적 서비스를 가리키도록 registry_uri를 지정할 수도 있습니다. 즉, 원격 작업 영역에서 실행하고 현재 또는 다른 원격 작업 영역에서 해당 모델을 등록할 수 있습니다.
원격 레지스트리의 모델 사용
먼저 레지스트리 URI를 설정하여 mlflow.<flavor>.load_model 메서드를 사용하여 원격 레지스트리에서 모델 버전을 로드하고 사용할 수 있습니다.
mlflow.set_registry_uri(registry_uri)
model = mlflow.pyfunc.load_model(f'models:/<model-name>/Staging')
model.predict(...)
또는 models:/ URI에 원격 레지스트리를 명시적으로 지정할 수 있습니다.
model = mlflow.pyfunc.load_model(f'models://<scope>:<prefix>@databricks/<model-name>/Staging')
model.predict(...)
모델 파일에 액세스하기 위한 다음과 같은 다른 도우미 메서드도 지원됩니다.
client.get_latest_versions(model_name)
client.get_model_version_download_uri(model_name, version)
원격 레지스트리에서 모델 관리
필요한 권한이 있는 한 원격 레지스트리의 모델에 대해 모든 작업을 수행할 수 있습니다. 예를 들어 모델에 대한 관리 가능 권한이 있는 경우 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)
Notebook 예제: 원격 모델 레지스트리
다음 노트북은 Unity 카탈로그가 설정되지 않은 작업 공간에 사용할 수 있습니다. 현재 작업 영역에서 MLflow 추적 서버에 모델을 기록하고 다른 작업 영역의 모델 레지스트리에 모델을 등록하는 방법을 보여 줍니다. Databricks는 Unity 카탈로그의