다음을 통해 공유


Databricks Container Service를 사용하여 컨테이너 사용자 지정

Databricks Container Services를 사용하면 컴퓨팅을 만들 때 Docker 이미지를 지정할 수 있습니다. 예제 사용 사례:

  • 라이브러리 사용자 지정: 설치하려는 시스템 라이브러리를 완전히 제어할 수 있습니다.
  • 골든 컨테이너 환경: Docker 이미지는 잠긴 환경으로 절대 변경되지 않습니다.
  • Docker CI/CD 통합: Azure Databricks를 Docker CI/CD 파이프라인과 통합할 수 있습니다.

Docker 이미지를 사용하여 GPU 디바이스를 사용하여 컴퓨팅에서 사용자 지정 딥 러닝 환경을 만들 수도 있습니다. Databricks Container Services에서 GPU 컴퓨팅을 사용하는 방법에 대한 자세한 내용은 GPU 컴퓨팅의 Databricks Container Services를 참조 하세요.

컨테이너가 시작될 때마다 작업을 실행하려면 init 스크립트를 사용합니다.

요구 사항

  • Azure Databricks 작업 영역에 Databricks Container Services를 사용하도록 설정해야 합니다.
  • 컴퓨터에서 최신 Docker 디먼(클라이언트/서버 버전 18.03.0-ce에서 테스트되고 작동하는 디먼)을 실행하고 있어야 하며 PATH에 대해 docker 명령을 사용할 수 있어야 합니다.

제한 사항

  • Databricks Container Services는 공유 액세스 모드를 사용하는 컴퓨팅에서 지원되지 않습니다.
  • Machine Learning용 Databricks Runtime은 Databricks Container Services를 지원하지 않습니다.
  • Databricks Container Services의 볼륨에 액세스하려면 컴퓨팅의 Spark 구성 필드에 spark.databricks.unityCatalog.volumes.enabled true다음 구성을 추가합니다.

1단계: 기본 빌드

Databricks는 Databricks가 빌드하고 테스트한 베이스에서 Docker 베이스를 빌드하는 것을 권장합니다. Docker 베이스를 처음부터 빌드할 수도 있습니다. 이 섹션에서는 두 가지 옵션에 대해 설명합니다.

옵션 1. Databricks에서 빌드한 베이스 사용

이 예제에서는 런타임 버전 Databricks Runtime 9.1 LTS 이상의 컴퓨팅을 대상으로 하는 이미지에 태그를 사용합니다 9.x .

FROM databricksruntime/standard:9.x
...

최신 버전의 pandas 및 urllib와 같은 추가 Python 라이브러리를 지정하려면 pip의 컨테이너별 버전을 사용합니다. databricksruntime/standard:9.x 컨테이너의 경우 다음을 포함합니다.

RUN /databricks/python3/bin/pip install pandas
RUN /databricks/python3/bin/pip install urllib3

databricksruntime/standard:8.x 컨테이너 이하의 경우 다음을 포함합니다.

RUN /databricks/conda/envs/dcs-minimal/bin/pip install pandas
RUN /databricks/conda/envs/dcs-minimal/bin/pip install urllib3

기본 이미지는 https://hub.docker.com/u/databricksruntime의 Docker Hub에서 호스트됩니다. https://github.com/databricks/containers에서 베이스를 생성하는 데 Dockerfiles이 사용됩니다.

참고 항목

"-LTS" 접미사가 있는 태그가 있는 Docker Hub 호스트된 이미지가 패치됩니다. 다른 모든 이미지는 예이며 정기적으로 패치되지 않습니다.

참고 항목

기본 이미지 databricksruntime/standarddatabricksruntime/minimal은 더 이상 사용할 수 없는 Databricks Runtime과 Conda(베타)에 포함된 관련 없는 databricks-standarddatabricks-minimal 환경과 혼동하지 않습니다.

옵션 2. 사용자 고유의 Docker 베이스 빌드

또한 처음부터 Docker 베이스를 빌드할 수도 있습니다. Docker 이미지는 다음 요구 사항을 충족해야 합니다.

처음부터 나만의 이미지를 빌드하려면 가상 환경을 만들어야 합니다. 또한 Python 및 R과 같은 Databricks 컴퓨팅에 기본 제공되는 패키지를 포함해야 합니다. 시작하려면 적절한 기본 이미지를 사용할 수 있습니다.

  • R의 경우: databricksruntime/rbase
  • Python의 경우: databricksruntime/python
  • Databricks에서 빌드한 최소 이미지의 경우: databricksruntime/minimal

GitHub의 Dockerfile 예를 참조할 수도 있습니다.

참고 항목

Databricks는 Ubuntu Linux를 사용하는 것을 권장하지만 Alpine Linux를 사용할 수도 있습니다. Alpine Linux를 사용하려면 다음 파일을 포함해야 합니다.

또한 이 예제 Dockerfile과 같이 Python을 설정해야 합니다.

Warning

Azure Databricks 컴퓨팅에서 사용자 지정 컨테이너 이미지를 철저히 테스트합니다. 컨테이너는 로컬 또는 빌드 머신에서 작동할 수 있지만, Azure Databricks에서 컨테이너가 시작되면 컴퓨팅 시작이 실패하거나 특정 기능이 비활성화되거나 컨테이너가 자동으로 작동을 중지할 수 있습니다. 최악의 경우 데이터가 손상되거나 실수로 외부 당사자에게 데이터가 노출될 수 있습니다.

2단계: 기본 이미지 푸시

Docker 레지스트리에 사용자 지정 기본 이미지를 푸시합니다. 이 프로세스는 다음 레지스트리에서 지원됩니다.

인증 또는 기본 인증을 지원하지 않는 다른 Docker 레지스트리도 작동할 것으로 예상됩니다.

참고 항목

Docker 레지스트리에 Docker Hub를 사용하는 경우 6시간 동안 시작할 것으로 예상되는 컴퓨팅 양을 수용하는 속도 제한을 확인해야 합니다. 이러한 속도 제한은 익명 사용자, 유료 구독이 없는 인증된 사용자 및 유료 구독마다 다릅니다. 자세한 내용은 Docker 설명서를 참조하세요. 이 제한을 초과하면 "429 요청이 너무 많음" 응답이 표시됩니다.

3단계: 컴퓨팅 시작

UI 또는 API를 사용하여 컴퓨팅을 시작할 수 있습니다.

UI를 사용하여 컴퓨팅 시작

  1. 컴퓨팅 만들기 페이지에서 Databricks Container Services를 지원하는 Databricks 런타임 버전을 지정합니다.

  2. 고급 옵션에서 Docker 탭을 선택합니다.

  3. 자체 Docker 컨테이너 사용을 선택합니다.

  4. Docker 이미지 URL 필드에 사용자 지정 Docker 이미지를 입력합니다.

    Docker 이미지 URL 예제:

    Registry 태그 형식
    Docker Hub <organization>/<repository>:<tag>(예: databricksruntime/standard:latest)
    Azure Container Registry <your-registry-name>.azurecr.io/<repository-name>:<tag>
  5. 인증 유형을 선택합니다. 비밀을 사용하여 사용자 이름 및 암호 인증 값을 저장할 수 있습니다. 인증에 비밀 사용을 참조하세요.

API를 사용하여 컴퓨팅 시작

  1. API 토큰을 생성합니다.

  2. Databricks CLI를 사용하여 사용자 지정 Docker 베이스를 사용하여 컴퓨팅을 시작합니다.

    databricks clusters create \
    --cluster-name <cluster-name> \
    --node-type-id Standard_DS3_v2 \
    --json '{
      "num_workers": 0,
      "docker_image": {
        "url": "databricksruntime/standard:latest",
        "basic_auth": {
          "username": "<docker-registry-username>",
          "password": "<docker-registry-password>"
        }
      },
      "spark_version": "14.3.x-scala2.12"
    }'
    

    basic_auth 요구 사항은 Docker 이미지 유형에 따라 달라집니다.

    • 공용 Docker 이미지의 경우 basic_auth 필드를 포함하지 마세요.
    • 프라이빗 Docker 이미지의 경우 서비스 주체 ID와 암호를 사용자 이름 및 암호로 사용하여 basic_auth 필드를 포함해야 합니다.
    • Azure Container Registry의 경우 서비스 주체에 대해 ID 및 암호로 basic_auth 필드를 설정해야 합니다. 서비스 주체를 만드는 방법에 대한 자세한 내용은 Azure Container Registry 서비스 주체 인증 설명서를 참조하세요.
    • 비밀을 사용하여 인증 정보를 저장할 수도 있습니다. 인증에 비밀 사용을 참조하세요.

Init 스크립트 사용

Databricks Container Services를 사용하면 고객이 Docker 컨테이너에 init 스크립트를 포함할 수 있습니다. 대부분의 경우 init 스크립트를 피하고 Docker를 통해 직접 사용자 지정해야 합니다(Dockerfile 사용). 그러나 컨테이너를 빌드할 때가 아니라 컨테이너가 시작될 때 특정 작업을 실행해야 합니다. 이러한 작업에서 init 스크립트를 사용합니다.

예를 들어 사용자 지정 컨테이너 내에서 보안 디먼을 실행하려는 경우를 가정해 보겠습니다. 이미지 빌드 파이프라인을 통해 Docker 이미지에 디먼을 설치하고 빌드합니다. 그런 다음 디먼을 시작하는 init 스크립트를 추가합니다. 이 예제에서 init 스크립트는 systemctl start my-daemon과 같은 줄을 포함합니다.

API에서 다음과 같이 컴퓨팅 사양의 일부로 init 스크립트를 지정할 수 있습니다. 자세한 내용은 클러스터 API참조하세요.

"init_scripts": [
    {
        "file": {
            "destination": "file:/my/local/file.sh"
        }
    }
]

Databricks Container Services 이미지의 경우 init 스크립트를 클라우드 스토리지에 저장할 수도 있습니다.

Databricks Container Services를 사용하는 컴퓨팅을 시작할 때 다음 단계가 수행됩니다.

  1. 클라우드 공급자로부터 VM이 획득됩니다.
  2. 사용자 지정 Docker 이미지는 리포지토리에서 다운로드됩니다.
  3. Azure Databricks는 이미지에서 Docker 컨테이너를 만듭니다.
  4. Databricks Runtime 코드는 Docker 컨테이너에 복사됩니다.
  5. init 스크립트가 실행됩니다. init 스크립트란?을 참조하세요.

Azure Databricks는 Docker CMDENTRYPOINT 기본 형식을 무시합니다.

인증에 비밀 사용

Databricks Container Service는 인증에 비밀 사용을 지원합니다. 컴퓨팅 리소스를 만들 때 일반 텍스트 사용자 이름 또는 암호를 입력하는 대신 형식을 사용하여 {{secrets/<scope-name>/<dcs-secret>}} 비밀을 입력합니다. 비밀을 만드는 방법에 대한 자세한 내용은 비밀 관리를 참조 하세요.

Container Services 사용

컴퓨팅에서 사용자 지정 컨테이너를 사용하려면 작업 영역 관리자가 Databricks Container Services를 사용하도록 설정해야 합니다.

작업 영역 관리자는 Databricks CLI를 사용하여 Databricks Container Service를 사용하도록 설정할 수 있습니다. JSON 요청 본문 enableDcs 에서 다음 예제와 같이 지정합니다 true.

databricks workspace-conf set-status \
--json '{"enableDcs": "true"}'