주요 컨텐츠로 이동

1부: Databricks Notebook과 Azure DevOps를 사용한 Databricks에서의 CI/CD 구현

Part 1: Implementing CI/CD on Databricks Using Databricks Notebooks and Azure DevOps

발행일: 2021년 9월 20일

제품2 min read
논의된 코드는 여기에서 찾을 수 있습니다.

이것은 Databricks에서 노트북과 Repos API를 사용하여 엔드투엔드 MLOps 솔루션을 구성하고 구축하는 방법을 보여주는 2부작 블로그 게시물 시리즈의 첫 번째 부분입니다. 이 게시물은 노트북을 기반으로 하는 Databricks의 CI/CD 프레임워크를 소개합니다. 파이프라인은 지속적 통합(CI) 부분을 위해 Microsoft Azure DevOps 생태계와 지속적 배포(CD)를 위해 Repos API를 통합합니다. 두 번째 게시물에서는 Repos API 기능을 활용하여 Databricks에서 완전한 CI/CD 수명 주기를 구현하고 이를 완전한 MLOps 솔루션으로 확장하는 방법을 보여드리겠습니다.

Databricks Repos를 사용한 CI/CD

Databricks ReposRepos API에서 제공하는 새로운 기능을 통해 이제 MLOps 접근 방식을 지원하는 버전 관리, 테스트 및 파이프라인의 모든 핵심 측면을 다룰 수 있게 되었습니다. Databricks Repos를 사용하면 Databricks에서 전체 git 리포지토리를 복제할 수 있으며, Repos API를 통해 먼저 git 리포지토리를 복제한 다음 관심 있는 브랜치를 체크아웃하여 이 프로세스를 자동화할 수 있습니다. ML 엔지니어는 이제 IDE에서 익숙한 리포지토리 구조를 사용하여 프로젝트를 구성하고, 노트북 또는 .py 파일을 사용하여 모듈을 구현할 수 있습니다(향후 로드맵에는 임의 파일 형식 지원이 계획되어 있습니다). 따라서 전체 프로젝트는 선택한 도구(Github, Gitlab, Azure Repos 등)로 버전 관리되며 일반적인 CI/CD 파이프라인과 잘 통합됩니다. Databricks Repos API를 사용하면 특정 git 브랜치의 최신 버전으로 리포(Databricks에서 리포로 체크아웃된 Git 프로젝트)를 업데이트할 수 있습니다.

팀은 개발 중에 고전적인 Git flow 또는 GitHub flow 주기를 따를 수 있습니다. 전체 Git 리포지토리는 Databricks Repos를 사용하여 체크아웃할 수 있습니다. 사용자는 노트북뿐만 아니라 일반 Python 파일 또는 다른 텍스트 파일 형식(임의 파일 지원 포함)을 사용하여 편집할 수 있습니다. 이를 통해 Python 파일에서 모듈을 가져오고 노트북과 결합하여 고전적인 프로젝트 구조를 사용할 수 있습니다.

  1. 기능 브랜치에서 개별 기능을 개발하고 단위 테스트(예: 구현된 노트북)를 사용하여 테스트합니다.
  2. 기능 브랜치에 변경 사항을 푸시하면 CI/CD 파이프라인에서 통합 테스트를 실행합니다.
  3. Azure DevOps의 CI/CD 파이프라인은 Databricks Repos API를 트리거하여 이 테스트 프로젝트를 최신 버전으로 업데이트할 수 있습니다.
  4. CI/CD 파이프라인은 Jobs API를 통해 통합 테스트 작업을 트리거합니다. 통합 테스트는 처음에 테스트하려는 파이프라인을 테스트 구성으로 실행하는 간단한 노트북으로 구현할 수 있습니다. 이는 적절한 노트북을 실행하여 해당 모듈을 실행하거나 jobs API를 사용하여 실제 작업을 트리거함으로써 수행할 수 있습니다.
  5. 결과를 검토하여 전체 테스트 실행을 성공 또는 실패로 표시합니다.

이제 위에서 설명한 접근 방식을 구현하는 방법을 살펴보겠습니다. 예시 워크플로로 Kaggle Lending Club 경쟁의 데이터를 사용하겠습니다. 많은 금융 기관과 마찬가지로, 예를 들어 신용 점수를 평가하기 위해 개별 소득 데이터를 이해하고 예측하고자 합니다. 이를 위해 현재 직업, 주택 소유 여부, 학력부터 지역 데이터, 결혼 여부 및 나이에 이르기까지 다양한 신청자 특성과 속성을 분석합니다. 이 정보는 은행이 수집한 정보이며(예: 과거 신용 신청에서), 이제 회귀 모델을 훈련하는 데 사용됩니다.

또한 비즈니스는 동적으로 변화하며 매일 대량의 새로운 관측치가 발생한다는 것을 알고 있습니다. 새로운 데이터가 정기적으로 유입됨에 따라 모델 재훈련이 중요합니다. 따라서 재훈련 작업과 전체 지속적 배포 파이프라인의 완전한 자동화에 중점을 둡니다. 고품질 결과와 새로 훈련된 모델의 높은 예측력을 보장하기 위해 각 훈련 작업 후에 평가 단계를 추가합니다. 여기서 ML 모델은 큐레이션된 데이터 세트에서 평가되고 현재 배포된 프로덕션 버전과 비교됩니다. 따라서 새 반복이 높은 예측력을 가질 경우에만 모델 승격이 이루어질 수 있습니다.

프로젝트가 활발하게 개발되고 작업됨에 따라 새 코드의 완전 자동화된 테스트 및 수명 주기의 다음 단계로의 승격은 푸시/풀 요청 시 단위/통합 평가를 위해 Azure DevOps 프레임워크를 활용합니다. 테스트는 Azure DevOps 프레임워크를 통해 조정되고 Databricks 플랫폼에서 실행됩니다. 이는 프로세스의 CI 부분을 다루며 코드베이스의 높은 테스트 커버리지를 보장하고 인간의 감독을 최소화합니다.

지속적 배포 부분은 Repos API에만 의존하며, 프로그래밍 인터페이스를 사용하여 Git 브랜치의 최신 버전 코드를 체크아웃하고 최신 스크립트를 배포하여 워크로드를 실행합니다. 이를 통해 아티팩트 배포 프로세스를 단순화하고 테스트된 코드 버전을 dev에서 staging을 거쳐 prod 환경으로 쉽게 승격할 수 있습니다. 이러한 아키텍처는 다양한 환경의 완전한 격리를 보장하며 일반적으로 보안이 강화된 환경에서 선호됩니다. dev, staging, prod의 다른 단계는 버전 관리 시스템만 공유하여 매우 중요한 프로덕션 워크로드와의 잠재적 간섭을 최소화합니다. 동시에 dev 환경은 액세스 제어가 더 완화될 수 있으므로 탐색적 작업과 혁신은 분리됩니다.

Azure DevOps 및 Databricks를 사용하여 CI/CD 파이프라인 구현

다음 코드 리포지토리에서는 Azure DevOps로 구동되는 CI/CD 파이프라인을 사용하여 ML 프로젝트를 구현했습니다. 이 프로젝트에서는 데이터 준비 및 모델 훈련을 위해 노트북을 사용합니다.

Databricks에서 이러한 노트북을 테스트하는 방법을 살펴보겠습니다. Azure DevOps는 Azure에서 사용할 수 있는 완전한 CI/CD 워크플로를 위한 매우 인기 있는 프레임워크입니다. 자세한 내용은 제공되는 기능 개요Databricks와의 지속적 통합을 참조하십시오.

Azure DevOps 파이프라인을 YAML 파일로 사용하고 있습니다. 파이프라인은 Databricks 노트북을 일반 Python 파일처럼 취급하므로 CI/CD 파이프라인 내에서 실행할 수 있습니다. azure-pipelines.yml 파일 안에 Azure CI/CD 파이프라인용 YAML 파일을 배치했습니다. 이 파일에서 가장 흥미로운 부분은 Databricks Repos API를 호출하여 Databricks의 CI/CD 프로젝트 상태를 업데이트하고 Databricks Jobs API를 호출하여 통합 테스트 작업 실행을 트리거하는 것입니다. 이 두 가지 항목은 deploy.py 스크립트/노트북에서 개발했습니다. Azure DevOps 파이프라인 내에서 다음과 같이 호출할 수 있습니다.

DATABRICKS_HOSTDATABRICKS_TOKEN 환경 변수는 사용 중인 Databricks 작업 공간에 대해 인증하기 위해 databricks_cli 패키지에 필요합니다. 이러한 변수는 Azure DevOps 변수 그룹을 통해 관리할 수 있습니다.

이제 deploy.py 스크립트를 살펴보겠습니다. 스크립트 내에서 databricks_cli API를 사용하여 Databricks Jobs API와 작업합니다. 먼저 API 클라이언트를 생성해야 합니다.

그 후, 프로젝트를 위한 Databricks에 새 임시 Repo를 생성하고 새로 생성된 Repo에서 최신 리비전을 가져올 수 있습니다.

다음으로 Databricks에서 통합 테스트 작업 실행을 시작할 수 있습니다.

마지막으로 작업이 완료될 때까지 기다리고 결과를 검토합니다.

5X 리더

Gartner®: Databricks 클라우드 데이터베이스 리더

여러 워크스페이스 작업

CD를 위해 Databricks Repos API를 사용하는 것은 개발/스테이징 환경과 프로덕션 환경 간의 완전한 격리를 추구하는 팀에게 특히 유용할 수 있습니다. 이 새로운 기능을 통해 데이터 팀은 Databricks의 소스 코드를 통해 간단한 명령 인터페이스로 여러 환경에 걸쳐 워크로드의 업데이트된 코드베이스와 아티팩트를 배포할 수 있습니다. 버전 관리 시스템에서 최신 코드베이스를 프로그래밍 방식으로 체크아웃할 수 있으면 시기적절하고 간단한 릴리스 프로세스를 보장할 수 있습니다.

MLOps 사례의 경우 다양한 환경 간의 올바른 아키텍처 설정에 대해 수많은 중요한 고려 사항이 있습니다. 이 연구에서는 개발/스테이징/프로덕션과 관련된 여러 MLflow 인스턴스를 포함하는 완전한 격리 패러다임에만 초점을 맞춥니다. 이를 고려할 때 개발 환경에서 학습된 모델은 직렬화된 객체가 단일 공통 모델 레지스트리를 통해 로드되기 때문에 다음 단계로 푸시되지 않습니다. 배포되는 유일한 아티팩트는 STAGING 환경에서 릴리스되고 실행되어 MLflow로 새 모델이 학습 및 등록되는 새로운 학습 파이프라인 코드베이스입니다.

이 공유-무언칙(shared-nothing principle)은 프로덕션/스테이징 환경에 대한 엄격한 권한 관리와 함께 개발 환경에서의 완화된 액세스 패턴을 통해 강력하고 고품질의 소프트웨어 개발을 가능하게 합니다. 동시에 개발 인스턴스에서 더 높은 수준의 자유를 제공하여 데이터 팀 전반의 혁신과 실험을 가속화합니다.

Databricks CI/CD 솔루션 환경 설정 (개발, 스테이징, 프로덕션) 및 공유 버전 관리 시스템, PROD에서 다른 환경으로의 데이터 동기화
공유 버전 관리 시스템 및 PROD에서 다른 환경으로의 데이터 동기화를 갖춘 개발, 스테이징, 프로덕션 환경 설정.

요약

이 블로그 게시물에서는 노트북 기반 프로젝트를 사용하여 Databricks에서 CI/CD 파이프라인을 위한 엔드투엔드 접근 방식을 제시했습니다. 이 워크플로는 Repos API 기능을 기반으로 하며, 이는 데이터 팀이 프로젝트를 더 실용적인 방식으로 구조화하고 버전 관리할 수 있을 뿐만 아니라 CI/CD 도구의 구현 및 실행을 크게 단순화합니다. 우리는 모든 운영 환경이 완전히 격리되어 ML 기반 프로덕션 워크로드에 대한 높은 수준의 보안을 보장하는 아키텍처를 보여주었습니다.

CI/CD 파이프라인은 선택한 프레임워크에 의해 지원되며 Databricks 통합 분석 플랫폼과 원활하게 통합되어 코드 실행 및 인프라 프로비저닝을 엔드투엔드로 트리거합니다. Repos API는 프로젝트 수명 주기의 버전 관리, 코드 구조화 및 개발 부분을 단순화할 뿐만 아니라 지속적인 전달을 단순화하여 환경 간에 프로덕션 아티팩트와 코드를 배포할 수 있습니다. 이는 Databricks의 전반적인 효율성과 확장성에 기여하고 소프트웨어 개발자 경험을 크게 향상시키는 중요한 개선 사항입니다.

논의된 코드는 여기에서 찾을 수 있습니다.

참고 자료:

(이 글은 AI의 도움을 받아 번역되었습니다. 원문이 궁금하시다면 여기를 클릭해 주세요)

게시물을 놓치지 마세요

관심 있는 카테고리를 구독하고 최신 게시물을 받은편지함으로 받아보세요