사용자 지정 Docker 이미지 사용

Important

이 기능은 베타 버전으로 제공됩니다. 서버리스 이그레스 제어(SEG)를 사용하는 작업 공간과는 호환되지 않습니다.

DCS(Docker Container Services)를 사용하면 사용자 고유의 Docker 컨테이너 이미지를 워크로드로 가져올 air 수 있습니다. 필요한 경우 사용자 지정 이미지를 사용합니다.

  • 특정 시스템 라이브러리 버전.
  • environment.dependencies에 깔끔하게 맞지 않는 복잡한 종속성입니다.
  • 연구 결과를 재현하는 정확한 환경입니다.
  • 조직의 플랫폼 또는 보안 팀에서 빌드한 표준 이미지입니다.

사전 요구 사항

이미지 등록

사용자 지정 이미지를 사용하여 워크로드를 실행하기 전에 air register image에 등록합니다. 등록은 Databricks 플랫폼에서 이미지를 끌어오고 캐시합니다. 각 사용자는 이미지 태그당 한 번 이미지를 등록해야 합니다. 새 태그를 푸시하거나 자격 증명을 회전하는 경우에만 다시 등록합니다. 등록하는 데 2~6분이 걸리고 이미지가 준비될 때까지 차단됩니다.

공용 이미지

Docker 이미지 URL 및 Databricks 프로필을 제공하여 공용 이미지를 등록합니다.

air register image docker.io/nvidia/cuda:12.9.0-devel-ubuntu24.04 -p my-databricks-profile

짧은 양식 이미지 참조도 작동합니다. library/ubuntu:latest을 예로 들 수 있습니다.

비공개 Docker Hub 이미지

프라이빗 Docker Hub 이미지를 등록하려면 먼저 개인 액세스 토큰을 생성합니다. Docker Hub 계정 설정에서 개인 액세스 토큰을 → 새 토큰 생성을 클릭합니다. 읽기 전용 액세스로 충분합니다.

다음 인증 방법 중 하나를 선택합니다.

터미널에서 Docker Hub 로그인합니다. Docker Hub 사용자 이름 및 개인 액세스 토큰에 대한 메시지가 표시됩니다.

docker login

자격 증명이 ~/.docker/config.json에 저장됩니다. 그런 다음, 이미지를 air 등록합니다. 자격 증명을 자동으로 읽습니다.

air register image myorg/myrepo:mytag -p my-databricks-profile

대화형 인증 사용

한 단계에서 Databricks 비밀 범위에 자격 증명을 인증하고 저장합니다.

air register image myorg/myrepo:mytag --interactive-authenticate -p my-databricks-profile

Docker Hub 사용자 이름 및 개인용 액세스 토큰을 입력하라는 메시지가 표시됩니다. 자격 증명은 향후 등록을 위해 작업 영역 비밀 범위에 저장됩니다.

자격 증명을 Databricks 시크릿에 저장하고 이를 직접 참조합니다.

air register image myorg/myrepo:mytag --scope my-secret-scope --key my-docker-key -p my-databricks-profile

워크로드에서 Docker 이미지 사용

아래의 워크로드 YAML environment.docker_image.url에서 Docker 이미지를 지정합니다.

experiment_name: my-dcs-training
environment:
  docker_image:
    url: myorg/myrepo:mytag
compute:
  num_accelerators: 1
  accelerator_type: GPU_1xA10
command: python /app/train.py

사용자 고유의 Docker 이미지를 environment.dependenciesenvironment.version 가져오는 경우 지원되지 않습니다. 두 필드 중 하나를 사용하여 지정하면 environment.docker_image.url 오류가 트리거됩니다. 추가 종속성이 있는 경우 대신 Dockerfile에 패키지를 설치합니다.

워크로드를 제출합니다.

air run --file workload.yaml -p my-databricks-profile

컨테이너에 삽입된 환경 변수

AI 런타임은 런타임 시 모든 컨테이너에 다음 환경 변수를 삽입합니다.

  • NUM_NODES — 총 노드 수입니다.
  • LOCAL_WORLD_SIZE — 노드당 GPU입니다.
  • WORLD_SIZE — 총 프로세스 수입니다.
  • POD_RANK — 현재 노드 순위(0-인덱싱됨)입니다. 또한 NODE_RANK로 삽입됩니다.
  • LOCAL_ADDR — 로컬 노드 IP(다중 노드에만 해당).
  • MASTER_ADDR - 순위-0 조정 주소(다중 노드에만 해당).
  • MASTER_PORT - rank-0 조정 포트(다중 노드에만 해당).

예제

단일 노드 A10

experiment_name: my-dcs-single-node
environment:
  docker_image:
    url: myorg/myrepo:mytag
compute:
  num_accelerators: 1
  accelerator_type: GPU_1xA10
command: python3 /app/train.py

RDMA 지원 다중 노드 H100

AWS p5 인스턴스에서 전체 네트워크 대역폭이 필요한 다중 노드 H100 작업의 경우 NCCL 및 EFA가 미리 구성된 Databricks 기본 이미지 중 하나에 이미지를 기반으로 합니다.

experiment_name: my-dcs-distributed
environment:
  docker_image:
    url: myorg/myrepo:mytag
compute:
  num_accelerators: 16 # 2 nodes × 8 H100
  accelerator_type: GPU_8xH100
command: |-
  torchrun \
    --nnodes="${NUM_NODES}" \
    --nproc_per_node="${LOCAL_WORLD_SIZE}" \
    --node_rank="${POD_RANK}" \
    --rdzv_endpoint="${MASTER_ADDR}:${MASTER_PORT}" \
    /app/train.py

사용자 고유의 이미지 빌드

자체 이미지를 빌드할 경우 Databricks는 코딩 에이전트와 함께 databricks-ai-runtime skill을 사용하거나 Databricks 기본 이미지에서 시작할 것을 권장합니다.

코딩 에이전트 사용

처음부터 빌드, CUDA/NCCL/EFA 호환성, 일반적인 문제 및 빌드 전 검사 목록을 포함하여 단계별 Dockerfile 지침에 대한 databricks-ai-runtime Claude Code 기술을 설치합니다. 이 기술을 사용하려면 Databricks CLI 버전 1.0.0 이상이 필요합니다.

databricks aitools install --skills databricks-ai-runtime --experimental

Databricks 기본 이미지

Databricks는 CUDA, NCCL 및 클라우드별 네트워킹(AWS EFA 또는 Azure databricksruntime/air InfiniBand)이 미리 구성된 상태에서 Docker Hub 기본 이미지를 게시합니다.

태그 Variant CUDA 사용 시기
dcs-base-azure-runtime Runtime 12 미리 빌드된 휠만 설치
dcs-base-azure-devel Devel 12 CUDA 확장 기능 컴파일(nvcc 필요)

Databricks 기본 이미지에 PyTorch를 추가하는 Dockerfile 예제입니다. 기본 이미지는 /opt/venv에서 관리되는 uv의 Python을 제공합니다. uv pip install 는 기본적으로 해당 환경을 대상으로 합니다. 다른 환경을 사용하려면 실행 uv pip install하기 전에 venv를 만들고 활성화합니다.

FROM databricksruntime/air:dcs-base-aws-runtime

RUN uv pip install --no-cache \
    torch==2.6.0 torchvision==0.21.0 torchaudio==2.6.0

RUN uv pip install --no-cache \
    transformers==4.45.0 \
    accelerate==0.34.0 \
    'mlflow>=3.6'

COPY ./train /app/train

빌드, 푸시 및 등록:

docker build -t myorg/myrepo:mytag .
docker push myorg/myrepo:mytag
air register image myorg/myrepo:mytag --interactive-authenticate -p my-databricks-profile

요구 사항

  • 이미지는 Docker Hub 호스트되어야 합니다. Amazon ECR, Google GCR 및 GitHub GHCR은 지원되지 않습니다.
  • 이미지 크기는 20GB 미만이어야 합니다.
  • WORKDIR 는 런타임에 적용되지 않습니다. 이미지에 포함된 파일에는 절대 경로를 사용하세요. 예를 들어 python /app/train.py아니라 python train.py사용합니다.
  • environment.dependencies와 함께 environment.version 또는 environment.docker_image.url을 사용할 수 없습니다. 이미지에 있는 것 이상으로 추가 패키지가 필요한 경우 Dockerfile에 추가해야 합니다.

Troubleshooting

ssl.SSLError: 의존성을 로드할 때 [CRYPTO] 알 수 없는 오류 (_ssl.c)

예를 들어 라이브러리에서 SSL 컨텍스트를 만들려고 할 때 OpenSSL 오류로 런타임에 사용자 지정 이미지가 실패할 수 있습니다.

ssl.SSLError: [CRYPTO] unknown error (_ssl.c:3076)

huggingface_hub와 같이 네트워크 연결을 여는 라이브러리를 가져오는 동안 오류가 발생하여 해당 라이브러리가 로드되지 못합니다.

이는 워크로드가 FIPS 사용 호스트에서 실행되기 때문에 air 발생합니다. 이미지의 암호화 라이브러리가 FIPS 규격이 아닌 경우 OpenSSL이 FIPS 모드에서 초기화되지 않으므로 SSL 컨텍스트를 만드는 데 실패합니다.

권장 솔루션:

엔터프라이즈, 정부, 의료 및 재무 워크로드는 종종 FedRAMP, CMMC 또는 HIPAA 감사에 대한 FIPS 140-2 또는 140-3 규정 준수에 의존합니다. 워크로드가 FIPS 규격으로 유지되어야 하는 경우 FIPS 규격 암호화 라이브러리를 사용하여 이미지를 빌드합니다.

워크로드에 FIPS 규정 준수가 필요하지 않은 경우 환경 변수OPENSSL_FORCE_FIPS_MODE를 .로 설정하여 FIPS 모드를 0 사용하지 않도록 설정할 수 있습니다. 이렇게 하면 규정 준수 요구 사항을 자동으로 위반할 수 있습니다.

FIPS 모드를 비활성화하려면 워크로드 YAML의 env_variables 아래에서 설정하세요:

env_variables:
  OPENSSL_FORCE_FIPS_MODE: '0'

또는 이미지를 사용하는 모든 워크로드에 적용되도록 Dockerfile에서 변수를 설정합니다.

ENV OPENSSL_FORCE_FIPS_MODE=0

종속성이 로드되면 워크로드를 다시 제출하고 SSL 오류가 더 이상 나타나지 않는지 확인합니다.

참고하십시오