본문 바로가기
Data Engineer

[Databricks] 개념 및 사용 방법

by IT손흥민 2024. 7. 15.

    Databricks

    • 스파크를 만든 엔지니어들이 설립한회사
    • 아파치 스파크 실행환경 제공해주는 클라우드 기반 플랫폼
    • 스파크 소스를 테스트 할 수 있는 웹 UI 환경 제공. 설치작업 없이 테스트 가능
    • Spark, Dleta Lake, MLFlow, Koalas까지 데이터 환경 오픈소스 만듦
    • Lakehouse Platform 서비스 제공

     

    주요기능

    • 데이터 처리 예약 및 관리, 특히 ETL
    • 대시보드 및 시각화 생성
    • 보안, 거버넌스, 고가용성 및 재해 복구 관리
    • 데이터 검색, 주석 및 탐색
    • ML(기계 학습) 모델링, 추적 및 모델 서비스
    • 생성 AI 솔루션

    요금

    • Databricks Unit(DBU): 사용되는 처리 능력의 정규 단위 (시간당 처리 단위. 초당 사용량 증가분에 따라 청구됨)
    • 전기요금 지불처럼 소비한 에너지 양에 대한 비용 지불

    Service

    • 클라우드-런타임-워크스페이스 레이어를 중점으로 바라보면 아래와 같은 구조를 가짐 

    • AWS, Azure, Google Cloud와 연동 가능
    • 단 하나의 플랫폼에서 데이터 분석가, 엔지니어 ,사이언티스트, 플랫폼 운영자 각각의 목적에 맞게 빠르게 데이터 환경 구축하고 원하는 작업 수행할 수 있도록 단순화

     

    Databricks Architecture

    • control과 data plane으로 나뉨
    • Control plane:데이터 브릭스가 관리하는 백엔드 서비스들 포함. 노트북 커맨드와 다른 워크스페이스 설정은 이곳에 암호화되어 저장
    • Data plane: AWS, Azure, Goolge 계정을 통해 관리되며 데이터가 저장되는 곳임 동시에 데이터가 처리되는 곳. 
    • 각 클라우드 계정을 사용해 다른 외부 데이터 저장소 접근 및 외부 스트리밍 데이터 원천으로부터 데이터 입수 가능

    모델이 아닌 코드 배포 접근 방식을 권장

    • ML 개발시 Databricks는 모델이 아닌 코드 배포를 권장

    • 매주 모델을 재교육해야하는 ML파이프라인을 개발할 경우, 코드는 변경되지 않을 수 있지만 새로운 데이터때문에 모델은 매주 재교육 해야할 수 있음
    • 모델 교육에는 비용과 시간이 많이 소요됨. 모델을 배포, 제공, 모니터링 하는 코드는 모델을 재교육하지 않고도 업데이트 가능
    • 여러번의 검증으로 보다 확실한 성능 확인 가능

     

     

     

    Databricks MLflow이란

    MLflow

    • 머신러닝 라이프 사이클을 관리하기 위한 오프소스 플랫폼.
    • 주요기능
    1. 실험을 추적하여 매개변수와 결과를 비교하고 기록
    2. 다른 데이터 과학자와 공유, 프로덕션으로 전송하기 위해 ML코드 패키징
    3. 사용 가능한 다양한 라이브러리를 사용하여 ML 모델 관리 및 배포
    4. 모델관리를 위해 모델 등록, 모델 제공 이를 REST 앤드포인트로 호스팅

     

    MLflow Tracking

    • 모델 개발 시 얻게되는 모든 데이터와 정보를 쉽게 기록, 추적, 시각화 기능 제공
    • 시각화하기위해 기계학습 코드를 실행할 때 매개변수, 코드버전, 측정항목 및 출력파일을 로깅하기 위한 API 및 UI
    • 여러 실행을 비교할 수 있음

     

    • 비교 내용을 시각화 가능

     

    MLflow 프로젝트

    • 모델 개발 시 프로젝트 구성 및 관리 기능 제공
    • 재현 가능한 방식으로 코드, 데이터, 환경정보, 파라미터 등을 패키징
      • 코드버전 관리: git 과 같은 버전 관리 시스템과 통합하여 관리
      • 프로젝트 패키징: 코드와 필요한 패키지, 데이터 등을 패키징하여 쉽게 배포하고 실행환경 제공
      • 실행환경 관리: 실행환경 설정하여 독립적인 실행 환경 생성 가능
      • 파라미터 관리: 실행 시 사용되는 파라미터 관리
      • 모델 버전 관리: 버전을 관리하고 저장하여 재사용이 가능하도록 기능 제공

    MLflow 모델

    • 모델 개발 시 모델 관리 및 배포를 위한 기능 제공
    • 머신러닝의 모델 훈련과 평가,추론을 모두 지원하는 종합적인 모델 관리 기능
    • 모델의 저장, 버전관리, 형식 변환, 메타데이터 관리, 배포 등을 편리하게 수행할 수 있게 기능제공
      • 모델 저장 및 버전 관리: 모델 저장하고 버전 관리하여 이전 버전과 비교 및 재사용 가능
      • 모델 추론 함수 정의: 저장된 모델에 대한 추론 함수 정의, 새로운 데이터에 대한 예측 쉽게 수행 가능
      • 모델 형식 변환: 다양한 머신러닝 라이브러리와 프레임워크 간의 모델 형식 변환, 모델 쉽게 이식 가능
      • 모델 메타데이터 관리: 모델의 생성일자, 생성자, 학습된 데이터 등을 추적 기능
      • 모델 배포: 저장된 모델을 서버에 배포. 클라이언트에서 쉽게 모델 추론 수행 가능

     

    Model Registry

    • 머신러닝 모델을 팀 내에서 공유, 추적, 검증, 배포하기 위한 중앙 집중식 저장소 역할
    • 팀 내의 머신러닝 개발자와 데이터 과학자가 함께 모델 버전 관리
      • 모델 저장 및 버전관리: 모델 저장 하고 버전관리, 이전 버전과 비교 및 재사용 가능
      • 모델 등록: 모델을 등록하여 다른 팀원이 모델에 대한 정보 공유
      • 모델 버전 관리: 모델 버전을 관리하여 이전 버전과 비교 및 추적 가능
      • 모델 배포: 모델을 배포하여 다른 팀원이 모델 추론을 수행할 수 있도록 함

     

    Databricks ML Workflow

    Data preparation & featurization

    1. 데이터 준비
    2. EDA
    • 노트북을 사용하여 데이터를 탐색하고 분석
    • 사용 가능 데이터가 비즈니스 문제 해결할 수 있는지 평가하는 것
    • 모델 훈련을 위한 데이터 준비 및 기능화 단계 식별

     

     

    ML (MLflow 활용)

    • MLflow는 머신러닝 프로젝트의 전체 수명 주기 관리 플랫폼
    1. 개발
      1. 카탈로그 테이블을 사용하여 모델 훈련 파이프라인 개발
      2. 훈련 및 튜닝
        • 모델 매개변수, 지표 및 아키팩트를 ML 추적 서버에 기록
        • 하이퍼파라미터 훈련하고 튜닝한 후 최종 모델 아티팩트가 추적 서버에 기록되어 모델, 훈련 입력 데이터, 모델 생성에 사용된 코드 간의 링크 기록
      3. 평가
        • 보유 데이터를 테스트하여 모델 품질 평가
        • 테스트 결과는 MLflow 추적 서버에 기록
        • 평가 목적은 새로 개발된 모델이 현재 생산 모델보다 더 나은 성능인지 판단하는 것
    2. 모델 검증 및 배포
      1. 모델 검증
        모델 훈련 파이프라인에서 URI를 가져와 Unity 카탈로그에 모델을 로드하고 유효성 검사 실행
        유효성 검사는 상황에 따라 다름.
        주요기능은 모델 배포 단계를 진행해야 하는지 여부 결정
      2. 모델 배포
        모델 제공 앤드포인트와 같은 필요한 추론 인프라를 설정할 수 있음

    Git Architecture

     

     

    Databricks platform 개념

    workspace

    • Control Plane에 존재하는 모든 데이터브릭스 자산에 접근할 수 있는 환경
    • 노트북, 라이브러리, 대시보드와 실험과 같은객체들을 폴더로 구조화하고 객체와 컴퓨팅 리소스에 대한 접근을 제공
      • 라이브러리: 노트북이나 job에 사용 가능한 코드패키지
      • 실험: ML 모델 훈련을 위한 ML flow 실행의 묶음

    interface

    • 여러 assets에 접근하기 위해 데이터브릭스가 제공하는 인터페이스(UI, API, CLI)

    Data Management

    • 분석을 행하거나 ML 모델에 들어가는 데이터를 가지고 있는 객체를 관리

     

    Databricks File System(DBFS)

    • blob 스토어를 래핑한 파일시스템 추상화 레이어
    • 파일과 다른 디렉토리들을 포함한 디렉토리를 가지고 있음
    • 데이터브릭스를 학습하기위해 사용할 수 있는 데이터셋을 가지고 자동적으로 생성
     

    Metastore

    • 데이터웨어하우스에 존재하는 다양한 테이블들과 파티션들에 대한 구조 정보 저장하는 컴포넌트
    • 모든 데이터브릭스 배포는 모든 메타데이터를 영속화하기 위해서 모든 클러스터가 접근 가능한 중앙 하이브 메타스토어를 가짐
     

    Computation management

    • 데이터브릭스에서 컴퓨팅을 하기 위해 알 필요있는 개념

     

    Cluster

    • job 들이 실행되는 컴퓨팅 자원이나 설정들의 모음
    1. all-purpose: UI, CLI또는 Rest API를 사용해서 이 타입의 클러스터 생성가능. 수동으로 클러스터 종료, 재시작, 공유 가능
    2. job: job을 새로운 클러스터에서 실행할 때 새로은 job cluster를 생성하고 job이 끝나면 클러스터 종료
     

    Pool

    • idle한 상태로 사용할 수 있는 인스턴트들로 클러스터 시작과 오토 스케일링 시간을 줄임
    • pool에 attatched되었을 때 하나의 클러스터는 풀에서 클러스터의 드라이버와 워커 할당
    • 만약 풀이 클러스터 요청을 처리하기 충분한 idle리소스를 가지지 못한다면 인스턴스 provider로 부터 새로운 인스턴스 할당하도록 하여 확장
    • attached 클러스터가 종료할 때, 클러스터가 사용한 인스턴스들은 pool에 반환되고 다른 클러스터에 의해 재사용 될 수 있음
     

    Databricks runtime

    • 데이터 브릭스에 의해 관리되는 클러스터에서 실행되는 핵심 컴포넌트
    1. 데이터 브릭스 런타임
      아파치 스파크를 포함하는 동사에 사용성, 성능, 분석의 보안을 높여주는 몇가지 컴포넌트와 업데이트 추가
    2. ML용 데이터 브릭스 런타임
      데이터 브릭스 런타임 기반
      ML과 데이터 사이언스를 위한 환경을 제공
      Tensorflow, Keras, Pytorch, XGBoost같은 유명한 라이브러리 포함
    3. Genomics용 데이터브릭스 런타임
      genomic과 biomedical 데이터를 다루는데 최적화된 데이터브릭스 런타임 버전
    4. 데이터브릭스 라이트
      오픈소스 아파치 스파크 런타임 패키징
      데이터브릭스가 제공하는 추가 성능이나 기능이 필요없는 작업에 사용
     

    Job

    • 노트북 라이브러리를 즉시 또는 스케쥴된 형태로 실행하는 non-interactive한 메커니즘
     
    Workload
    • 다른 가격 정책을 적용 받는 2가지 타입의 워크로드 구분
    1. 데이터 엔지니어링
      데이터 브릭스 job 스케쥴러가 각 워크로드를 위해 생성하는 job 클러스터에서 실행되는 워크로드
    2. 데이터 분석
      interactive한 워크로드로 all-purpose 클러스터에서 실행되나, all-purpose 클러스터에서 실행되는 job도 interactive 워크로드로 간주
     
    Execution Context
    • 각각 지원하는 프로그래밍 언어를 위한 REPL 환경상태
    • Python, R, Scala, SQL
     

     

    Model Management

    • ML 모델을 훈련하기 위한 개념

    Model

    • 예측값들과 결과물 간의 관계를 나타내는 수학적 함수
    • training과 inference 스탭으로 구성
    • 존재하는 데이터셋을 사용해 모델 train, 새로운 데이터에 대한 결과물을 예측하기 위해 모델 사용
     

    Run

    • ML 모델 훈련과 관련된 파라미터, 메트릭, 태그들의 모음
     

    Experiment

    • Runs를 위한 점근 관리 및 묶임의 주요 단위
    • 모든 MLflow Runs는 Experiment(실험)에 속하게 됨
    • 시각화, 검색, runs들을 비교, run 아키팩트나 다른 도구에서의 분석을 위한 메타데이터를 다운로드 할 수 있도록 해줌
     

    Authentication and authorization

    • 인증과 인가는 User, Group, Access Control List(ACL)이라는 개념을 중심으로 처리

     

    플랫폼

    • Databricks platform
      • Buisness용.
      • 제약없이 모든 기능 사용가능
      • Free trial 버전 14일간 사용
    • Community edition
      • 스파크 학습자를 위한 무료 버전
      • 기능 제한적
     



     

    Databricks 생성 및 S3 데이터 연동 hands on

    작업공간 생성

     

    • 클라우드 제공자 선택

     

    • 가입 후 로그인

     

    • workspace name 설정, aws region 설정

     

    • quick start 버튼 클릭 후 바로 aws로 넘어감

     

    • 모든 필드는 미리 작성되어 있음
    • iam 리소스 생성 승인 체크
    • 스택생성

     

    • 작업공간이 만들어짐

     

    • 작업공간 생성 완료 상태 Create Complete 확인

     

    • s3 bucket 자동생성

     

    • 작업공간 생성 후 이메일로 url 전송됨

     

    • 로그인 성공

     

    클러스터 생성

    • 신규 - 클러스터 선택

     

     

    {
        "num_workers": 0,
        "cluster_name": "soojung choi's Personal Compute Cluster",
        "spark_version": "15.3.x-cpu-ml-scala2.12",
        "spark_conf": {
            "spark.master": "local[*, 4]",
            "spark.databricks.cluster.profile": "singleNode"
        },
        "aws_attributes": {
            "first_on_demand": 1,
            "availability": "ON_DEMAND",
            "zone_id": "auto",
            "instance_profile_arn": null,
            "spot_bid_price_percent": 100
        },
        "node_type_id": "i3.xlarge",
        "driver_node_type_id": "i3.xlarge",
        "ssh_public_keys": [],
        "custom_tags": {
            "ResourceClass": "SingleNode"
        },
        "spark_env_vars": {},
        "autotermination_minutes": 4320,
        "enable_elastic_disk": true,
        "init_scripts": [],
        "single_user_name": "soojungchoi564@gmail.com",
        "policy_id": "000A0609E8F85CD4",
        "data_security_mode": "SINGLE_USER",
        "runtime_engine": "STANDARD"
    }
    • ui/json으로 설정가능
    • 정책, 액세스모드, 성능 선택
    1. Personal Compute
      개인용 컴퓨팅 정책
      작업공간의 모든 사용자가 사용 가능
      최소한의 구성 옵션으로 단일 노드 컴퓨팅 리소스를 쉽게 생성가능
    2. Share Compute
      여러 사용자가 공유 할 수 있도록 더 큰 다중 노드 리소스
      다목적 컴퓨팅 전용/여러 사용자 리소스 사용할 수 있도록 공유 액세스 모드/ 기본값은 최신 LTS Databricks Runtime/작업공간 관리자만 사용 가능
    3. Power User Compute
      더 큰 다중 노드 리소스 생성
      personal compute보다 더 많은 컴퓨팅 리소스가 필요한 단일 사용자 워크로드를 위한 것

     

     

    S3 데이터 가져오기

    • 신규 - 데이터 선택

     

    • S3 선택

     

    • databricks에 자동으로 생성된 s3 bucket과 기본적으로 연동되서 확인 가능

     

    • workspace 부분을 클릭하고 외부에 있는 s3 데이터를 가져오고자 함
    • 외부위치 클릭

     

    • 버킷명 기재
    • 새 토큰 생성 클릭

     

     

    • 파라미터란에 토큰 붙여넣기 - 스택생성 클릭

     

    • 스택 활성화 확인 

     

    • s3 버킷 추가 확인 후 선택

     

    • s3 저장된 데이터 파일 확인 후 체크
    • 테이블 미리보기 선택

     

    • 카탈로그, 스키마, 테이블이름 지정 후 테이블 만들기 선택

     

    • workspace_test 카탈로그 내부에있는 default 스키마 안에 테이블 적재 확인
    • 적재 확인이 안된다면 새로고침 해볼 것

     

     

    댓글