주요 컨텐츠로 이동

Unity Catalog Volume의 정식 출시 발표

모든 비테이블형 데이터를 검색, 관리, 쿼리 및 공유하세요.
이 포스트 공유하기

(번역: Youngkyong Ko) Original Post

오늘 우리는 Unity Catalog Volume이 이제 AWS, Azure, GCP에서 정식 출시된다는 소식을 알려드립니다.  Unity Catalog는 데이터 및 AI를 위한 통합 거버넌스 솔루션으로, 데이터브릭스 데이터 인텔리전스 플랫폼에 기본적으로 내장되어 있습니다. 데이터 및 AI 팀은 Unity Catalog Volume을 사용하여 테이블형 데이터 및 ML 모델과 함께 비정형, 반정형, 정형 데이터를 비롯한 모든 유형의 비테이블형 데이터를 중앙에서 분류, 보호, 관리, 공유 및 계보를 추적할 수 있습니다.

이 블로그에서는 Unity Catalog Volume의 핵심 기능을 요약하고, 확장성있는 AI 및 수집 애플리케이션을 제작하면서 다양한 파일 형식의 데이터를 로드하는데 어떻게 사용할 수 있는지 실제 사례를 제공하며, GA 릴리스에 도입된 개선 사항을 살펴 보겠습니다.

Unity Catalog Volumes 으로 비테이블형 데이터 관리하기

볼륨은 테이블 형식이 아닌 데이터의 거버넌스 및 관리를 위해 설계된 Unity Catalog의 오브젝트 유형입니다. 각 볼륨은 Unity Catalog의 디렉터리 및 파일 모음으로, 클라우드 오브젝트 스토리지 경로에서 논리적 저장 단위 역할을 합니다. 정형, 반정형, 비정형 등 모든 형식의 데이터에 액세스하고, 저장하고, 관리할 수 있는 기능을 제공합니다. 

레이크하우스 아키텍처에서 애플리케이션은 보통 파일에서 데이터를 가져오는 것으로 시작합니다. 여기에는 디렉터리 읽기, 기존 파일 열기와 읽기, 새 파일 만들기와 쓰기, 각 사용 사례에 맞는 다양한 도구와 라이브러리를 사용한 파일 콘텐츠 처리 등이 포함됩니다. 

볼륨을 사용하면 형식에 관계없이 클라우드 스토리지 성능으로 광범위한 비테이블형 데이터 모음을 읽고 처리하는 다양한 파일 기반 애플리케이션을 제작할 수 있습니다. 볼륨을 사용하면 데이터브릭스 워크스페이스 UI, Spark API, 데이터브릭스 파일 시스템 유틸리티(dbutils.fs), REST API, Python의 os 모듈과 같은 언어 네이티브 파일 라이브러리, SQL 커넥터, 데이터브릭스 CLI, 데이터브릭스 SDK, 테라폼 등 원하는 툴을 사용하여 파일 작업을 할 수 있습니다.

"데이터 민주화를 향한 여정에서 사용자가 사용할 수 있는 툴을 간소화하는 것은 매우 중요한 단계입니다. Unity Catalog Volume을 통해 사용자가 비정형 데이터에 액세스하는 방식을 간소화할 수 있었습니다. Unity Catalog Volume을 통해 스토리지 계정 액세스에 대한 복잡한 RBAC 접근 방식을 대체하여, 정형 및 비정형 데이터에 대한 통합 액세스 모델을 Unity Catalog로 대체할 수 있었습니다. 사용자는 여러 번의 클릭을 거쳐 액세스하는 방식에서 단일 직접 액세스 모델로 전환하여 보다 정교하고 관리하기 쉬운 UX를 보장함으로써 위험을 줄이고 전반적인 환경을 강화할 수 있었습니다. " - Sergio Leoni, 데이터 엔지니어링 및 데이터 플랫폼 책임자, Plenitude

공개 프리뷰 블로그 게시물에서 우리는 볼륨과 이를 통해 가능한 사용 사례에 대한 자세한 개요를 제공했습니다. 여기서는 GA 릴리스에서 제공되는 새로운 기능을 포함해 볼륨의 다양한 기능을 시연해 보겠습니다. 이를 위해 파일에서 데이터를 로드하는 두 가지 실제 시나리오를 보여드리겠습니다. 이 단계는 AI 애플리케이션을 구축하거나 데이터를 수집할 때 필수적입니다.

AI 애플리케이션에 볼륨 사용

AI 애플리케이션은 PDF, 이미지, 동영상, 오디오 파일 및 기타 문서와 같은 대량의 비테이블형 데이터를 처리하는 경우가 많습니다. 이는 컴퓨터 비전 및 자연어 처리와 같은 머신 러닝 시나리오에서 특히 그렇습니다. 비테이블형 데이터 소스에서 인사이트를 추출하기 위해 검색 증강 생성(RAG)과 같은 기술을 사용하는 생성형 AI 애플리케이션도 이 범주에 속합니다. 이러한 인사이트는 챗봇 인터페이스, 고객 지원 애플리케이션, 콘텐츠 제작 등을 강화하는 데 매우 중요합니다.  

볼륨을 사용하면 다음과 같은 다양한 이점을 AI 애플리케이션에 제공합니다:

  • 테이블형 및 비테이블형 AI 데이터 세트를 위한 통합 거버넌스: 볼륨을 통해 관리되는 비테이별형 데이터와 테이블형 데이터 등, AI 애플리케이션과 관련된 모든 데이터가 이제 동일한 Unity Catalog 아래에 통합됩니다. 
  • AI 애플리케이션 전반의 종단간 리니지: 이제 AI 애플리케이션의 리니지는 Unity Catalog Volume과 테이블로 구성된 엔터프라이즈 지식 기반에서, 데이터 파이프라인, 모델 미세 튜닝 및 기타 커스터마이징을 거쳐 생성형 AI의 엔드포인트 또는 RAG 체인을 호스팅하는 엔드포인트에 서비스를 제공하는 모델까지 확장됩니다. 이를 통해 AI 애플리케이션의 완전한 추적성, 감사 가능성 및 근본 원인 분석을 가속화할 수 있습니다.
  • 손쉬운 개발자 환경: 많은 AI 라이브러리와 프레임워크는 기본적으로 클라우드 오브젝트 스토리지 API를 지원하지 않고 로컬 파일 시스템에 있는 파일을 기대합니다. 볼륨은 FUSE를 기본적으로 지원하므로 사용자는 익숙한 방식으로 파일을 작업하면서 이러한 라이브러리를 원활하게 활용할 수 있습니다. 
  • 소스 데이터셋에 대한 AI 애플리케이션 응답을 간편하게 동기화: 이제 볼륨을 지원하도록 개선된 Job 파일 도착 트리거 또는 Auto Loader의 파일 감지 등의 기능을 사용하면 볼륨에 추가된 최신 파일로 자동으로 업데이트하여 AI 애플리케이션 응답을 최신 상태로 유지할 수 있습니다. 

예를 들어 RAG 애플리케이션을 생각해 보겠습니다. 이러한 AI 애플리케이션에 기업 데이터를 통합할 때 초기 단계 중 하나는 문서를 업로드하고 처리하는 것입니다. 이 프로세스는 볼륨을 사용하면 간소화됩니다. 원시 파일이 볼륨에 추가되면 소스 데이터가 더 작은 청크로 나뉘고 임베딩을 통해 숫자 형식으로 변환된 다음 벡터 데이터베이스에 저장됩니다. 이처럼 RAG 애플리케이션은 사용자가 데이터를 쿼리할 때 벡터 검색과 대규모 언어 모델(LLM)을 사용하여 적절한 응답을 제공합니다.

다음에서는 컴퓨터에 로컬로 저장된 PDF 파일 모음에서 시작하여 RAG 애플리케이션을 만드는 초기 단계를 보여드립니다. 전체 RAG 애플리케이션은 관련 블로그 게시물데모를 참조하세요.

먼저 압축된 PDF 파일을 zip 파일로 업로드합니다. 간소화를 위해 CLI를 사용하여 PDF를 업로드하지만, REST API 또는 데이터브릭스 SDK와 같은 다른 도구를 사용하여 비슷한 단계를 수행할 수 있습니다. 먼저 볼륨을 나열하여 업로드 대상을 결정한 다음 파일을 위한 디렉터리를 만들고 마지막으로 이 새 디렉터리에 압축파일을 업로드합니다:

databricks fs ls dbfs:/Volumes/main/default/my_volume
databricks fs mkdir dbfs:/Volumes/main/default/my_volume/uploaded_pdfs
databricks fs cp upload_pdfs.zip dbfs:/Volumes/main/default/my_volume/uploaded_pdfs/

이제 데이터브릭스 노트북에서 업로드한 파일의 압축을 풉니다. 볼륨에 내장된 FUSE 지원기능을 이용하여 볼륨 내부의 파일 위치에서 직접 명령을 실행할 수 있습니다:

%sh
cd /Volumes/main/default/my_volume
unzip upload_pdfs.zip -d uploaded_pdfs
ls uploaded_pdfs

Python UDF를 사용하여 PDF 텍스트를 추출하고 청크로 나누어 임베딩을 생성합니다. gen_chunks UDF는 볼륨 경로를 가져와 텍스트 청크를 출력합니다. gen_embedding UDF는 텍스트 청크를 처리하여 벡터 임베딩을 반환합니다.

%python
@udf('array<string>')
def gen_chunks(path: str) -> list[str]:
   from pdfminer.high_level import extract_text
   from langchain.text_splitter import TokenTextSplitter
   text = extract_text(path)
   splitter = TokenTextSplitter(chunk_size = 500, chunk_overlap  = 50)
   return [doc.page_content for doc in splitter.create_documents([text])]
@udf
def gen_embedding(chunk: str) -> list[float]:
   import mlflow.deployments
   deploy_client = mlflow.deployments.get_deploy_client("databricks")
   response = deploy_client.predict(endpoint="databricks-bge-large-en", inputs={"input": [chunk]})
   return response.data[0]['embedding']

그런 다음 아래 그림과 같이 Auto Loader와 함께 UDF를 사용해 청크를 델타 테이블에 로드합니다. 이 델타 테이블은 RAG 애플리케이션의 필수 구성 요소인 벡터 검색 인덱스와 연결되어야 합니다. 간결한 설명을 위해, 인덱스 구성에 필요한 단계는 관련 튜토리얼을 참조하시기 바랍니다.

%python
from pyspark.sql.functions import explode


df = (spark.readStream
       .format('cloudFiles')
       .option('cloudFiles.format', 'BINARYFILE')
       .load("/Volumes/main/default/my_volume/uploaded_pdfs")
       .select(
               '_metadata',
               explode(gen_chunks('_metadata.file_path')).alias('chunk'),
               gen_embedding('chunk').alias('embedding'))
       )


(df.writeStream
 .trigger(availableNow=True)
 .option("checkpointLocation", '/Volumes/main/default/my_volume/checkpoints/pdfs_example')
 .table('main.default.pdf_embeddings')
 .awaitTermination()
)

프로덕션 환경에서 RAG 애플리케이션은 지속적으로 변경되는 비테이블형 데이터의 광범위한 지식 기반에 의존하는 경우가 많습니다. 따라서 애플리케이션 응답을 최신 상태로 유지하고 데이터 중복을 방지하기 위해서는 벡터 검색 인덱스를 최신 데이터로 업데이트하는 것을 자동화하는 것이 중요합니다. 이를 위해 앞서 설명한 대로 코드 로직을 사용해 소스 파일 처리를 자동화하는 Databricks 워크플로우 파이프라인을 생성할 수 있습니다. 볼륨을 파일 도착 트리거를 모니터링하는 위치로 추가로 구성하면 볼륨에 새 파일이 추가되면 파이프라인이 자동으로 처리합니다. 이러한 파일을 정기적으로 업로드하는 데는 CLI 명령, UI, REST API 또는 SDK 등 다양한 방법을 사용할 수 있습니다.

기업에서는 내부 데이터 외에도 선별된 데이터셋이나 파트너 및 공급업체로부터 구매한 데이터 등 외부에서 생성된 데이터를 활용할 수도 있습니다. Volume Sharing을 사용하면 데이터를 복사할 필요 없이 이러한 데이터셋을 RAG 애플리케이션에 통합할 수 있습니다. 아래 데모를 통해 Volume Sharing이 실제로 작동하는 모습을 확인하세요.

수집 파이프라인 시작점에서 볼륨 사용

이전 섹션에서는 볼륨에 저장된 비정형 파일 형식에서 데이터를 로드하는 방법을 보여드렸습니다. JSON이나 CSV와 같은 반정형 형식이나 Parquet과 같은 정형 형식에서 데이터를 로드하는 데도 볼륨을 사용할 수 있으며, 이는 수집 및 ETL 작업 중 일반적인 첫 번째 단계입니다. 

볼륨을 사용해 Auto Loader, Delta Live Tables (DLT), COPY INTO 등 선호하는 수집 도구를 사용하거나 CTAS 명령을 실행하여 데이터를 테이블로 로드할 수 있습니다. 또한, Job 파일 도착 트리거 또는 Auto Loader 파일 감지와 같은 기능을 활용하여 볼륨에 새 파일이 추가될 때 테이블이 자동으로 업데이트되도록 할 수도 있습니다. 볼륨과 관련된 수집 워크로드는 데이터브릭스 워크스페이스 또는 SQL 커넥터에서 실행할 수 있습니다.

다음은 CTAS, COPY INTO 및 DLT 명령에서 볼륨을 사용하는 몇 가지 예시입니다. Auto Loader를 사용하는 것은 이전 섹션에서 다룬 코드 샘플과 매우 유사합니다.

CREATE TABLE demo.ingestion.table_raw AS 
SELECT * FROM json.`/Volumes/demo/ingestion/raw_data/json/`
COPY INTO demo.ingestion.table_raw FROM '/Volumes/demo/ingestion/raw_data/json/'
CREATE STREAMING LIVE TABLE table_raw AS 
SELECT * FROM STREAM read_files("/Volumes/demo/ingestion/raw_data/json/")

또한, 새로 도입된 볼륨용 테이블 생성 마법사를 사용해 UI에서 볼륨의 데이터를 테이블로 빠르게 로드할 수도 있습니다. 이 기능은 코드를 작성할 필요 없이 UI를 사용하여 테이블을 빠르게 만들고자 할 때 ad-hoc 데이터 사이언스 작업에 특히 유용합니다. 그 과정은 아래 스크린샷에 나와 있습니다.

Unity Catalog Volumes GA 릴리스 요약

볼륨의 GA(general availability) 릴리스에는 몇 가지 새로운 기능과 개선 사항이 포함되어 있으며, 그 중 일부는 이전 섹션에서 소개한 바 있습니다. 요약하면, GA 릴리스에는 다음이 포함됩니다:

  • Delta Sharing을 통한 Volume Sharing 과 데이터브릭스 마켓플레이스의 볼륨 공유: 이제 Delta Sharing를 통해 볼륨을 공유할 수 있습니다. 이를 통해 고객은 테이블, 노트북, AI 모델과 함께 PDF, 이미지, 동영상, 오디오 파일, 기타 문서 및 자산과 같은 광범위한 비테이블형 데이터 컬렉션을 클라우드, 지역 및 계정 간에 안전하게 공유할 수 있습니다. 또한 사업부 또는 파트너 간의 협업과 새로운 공동 작업자의 온보딩을 간소화합니다. 또한, 고객은 데이터브릭스 마켓플레이스에서 Volume Sharing을 활용하여 데이터 공급자가 모든 비테이블형 데이터를 데이터 소비자와 쉽게 공유할 수 있습니다. Volume Sharing은 현재 AWS, Azure, GCP에서 공개 프리뷰 버전으로 제공됩니다
  • 원하는 도구를 사용하여 파일 관리: Databricks CLI (AWS | Azure | GCP), 현재 공개 프리뷰 버전으로 제공되는 Files REST API (AWS | Azure | GCP) , 그리고 Databricks SDK (AWS | Azure | GCP)를 사용해 파일 업로드, 다운로드, 삭제, 디렉토리 관리, 파일 나열 등의 파일 관리 작업을 실행할 수 있습니다. 또한 Python, Go, Node.js, JDBC Databricks SQL 커넥터는 볼륨에 저장된 파일을 업로드, 다운로드, 삭제할 수 있는 PUT, GET, REMOVE SQL 명령을 제공하며 (AWS | Azure | GCP), ODBC에 대한 지원도 곧 제공될 예정입니다. 
  • Scala 및 Python UDF와 Scala IO의 볼륨 지원: 이제 모든 컴퓨팅 액세스 모드(AWS | Azure | GCP)에서 UDF에서 볼륨 경로에 액세스하고 Scala에서 IO 작업을 실행할 수 있습니다.
  • Job 파일 도착 트리거의 볼륨 지원: 이제 볼륨을 통해 액세스하는 스토리지에 대한 Job 파일 도착 트리거를 구성할 수 있어 (AWS | Azure | GCP), 새 파일이 볼륨에 추가될 때 복잡한 파이프라인을 트리거하는 편리한 방법을 사용할 수 있습니다. 
  • 클라우드 스토리지 URI를 사용해 파일에 액세스: 이제 데이터브릭스 볼륨 경로 외에도 클라우드 스토리지 URI를 사용하여 외부 볼륨의 데이터에 액세스할 수 있습니다 (AWS | Azure | GCP). 따라서 볼륨 도입을 시작할 때 기존 코드를 더 쉽게 사용할 수 있습니다.
  • 클러스터 라이브러리, 작업 의존성, 초기화 스크립트에서 볼륨 지원: 이제 볼륨은 UI와 API 모두에서 클러스터 라이브러리, 작업 의존성(job dependencies), 초기화 스크립트(init script)의 소스로 지원됩니다. 자세한 내용은 관련 블로그를 참조하세요. 
  • 검색을 쉽게 하는 볼륨 태그(Discovery Tags): 이제 UI, SQL 명령, information schema를 사용하여 볼륨 수준의 태깅을 정의하고 관리할 수 있습니다. (AWS | Azure | GCP).
  • 개선된 볼륨 UI: 파일에서 테이블을 만들고, 여러 파일을 한 번에 다운로드 및 삭제하는 등 다양한 파일 관리 작업을 지원하도록 볼륨 UI가 업그레이드되었습니다. 또한 업로드와 다운로드의 최대 파일 크기가 2GB에서 5GB로 증가했습니다.

볼륨 시작하기

볼륨 사용을 시작하려면 포괄적인 단계별 가이드를 따라 주요 볼륨 기능을 빠르게 살펴보세요.  볼륨을 처음 만드는 방법에 대한 자세한 지침은 설명서 (AWS | Azure | GCP)를 참조하세요. 볼륨을 만든 후에는 Catalog Explorer (AWS | Azure | GCP)를 활용하여 콘텐츠를 탐색하고, 볼륨 관리를 위한 SQL 구문을 사용하거나 (AWS | Azure | GCP), 다른 공동 작업자와 볼륨을 공유할 수 있습니다 (AWS | Azure | GCP). 또한 볼륨을 최대한 활용하기 위한 모범 사례 (AWS | Azure | GCP)를 검토해 보시기 바랍니다.

Databricks 무료로 시작하기

관련 포스트

Data and AI Summit 2023, Unity Catalog 의 새로운 소식 확인하기

데이터 관리에 필수적인 거버넌스의 기본 원칙인 책임, 규정 준수, 품질 및 투명성은 이제 AI에도 똑같이 필수적인 요소가 되었습니다. Databricks는 Unity Catalog 를 통해...
모든 플랫폼 & 제품 & 공지사항 포스트 보기