주요 컨텐츠로 이동
Engineering blog

Petastorm은 Apache Parquet 형식의 데이터 세트에서 딥 러닝 모델을 단일 머신 또는
분산 학습 및 평가할 수 있는 Uber의 인기 있는 오픈 소스 라이브러리입니다.
Petastorm 0.9.0이 Apache Spark DataFrame에서 TensorFlow 데이터세트 및
PyTorch DataLoader로의 간편한 데이터 변환을 지원한다는 소식을 발표하게 되어 기쁩니다.
새로운 Spark 데이터세트 변환기 API를 사용하면 여러 데이터 소스에서 대규모 데이터에 대한
분산 모델 학습 및 추론을 더 쉽게 수행할 수 있습니다. Spark 데이터세트 Converter API는
Xiangrui Meng, Weichen Xu, Liang Zhang(Databricks)이 Yevgeni Litvin 및
Travis Addair(Uber)와 공동으로 기여했습니다.

딥러닝을 위한 데이터 변환이 어려운 이유는
무엇입니까?

딥러닝 파이프라인의 핵심 단계는 데이터를 DL 프레임워크의 입력 형식으로 변환하는 것입니다. Apache Spark는 가장 널리 사용되는 빅데이터 프레임워크입니다. Apache Spark에서 딥 러닝 프레임워크로의 데이터 변환 프로세스는 지루할 수 있습니다. 예를 들어 기능 열과 레이블 열이
있는 Apache Spark DataFrame을 TensorFlow 데이터세트 파일 형식으로 변환하려면 사용자는 Apache Spark DataFrame을 parquet 형식으로 분산 파일 시스템에 저장하고 Petastorm과 같은 타사 도구를 사용하여 변환된 데이터를 로드하거나 spark-tensorflow-connector를 사용하여 TFRecord 파일에 직접 저장하고 TFRecordDataset를 사용하여 다시 로드해야 합니다. 두 방법 모두 중간 데이터 파일을 관리하기 위해 20줄 이상의 코드를 사용하고, 서로 다른 구문 분석 구문을 사용하며, Spark DataFrames에서 열을 처리하는 데 각별한 주의가 필요합니다. 이러한 엔지니어링 마찰은 데이터 사이언티스트의 생산성을 저해합니다.

솔루션 한 눈에 보기

Databricks는 이러한 지루한 데이터 변환 프로세스 단계를 간소화하기 위해 Petastorm에
새로운 Spark 데이터세트 변환기 API 를 제공했습니다. 새 API를 사용하면 몇 줄의 코드로
Spark DataFrame을 TensorFlow 데이터 세트 또는 PyTorch DataLoader with default parameter로 변환할 수 있습니다.

petastorm.spark에서 가져오기 SparkDatasetConverter, make_spark_converter

# 캐시 디렉토리 지정
spark.conf.set (SparkDatasetConverter.PARENT_CACHE_DIR_URL_CONF, 'file:///dbfs/tmp/ ...')

df = 스파크.읽기...

converter = make_spark_converter(df) # 변환기 생성

converter.make_tf_dataset()와 함께 as 데이터세트: # TensorFlow 데이터세트로 변환
        # 데이터 세트를 사용한 학습 또는 추론 코드 
        ...
converter.make_torch_dataloader()와 함께 as dataloader: # PyTorch DataLoader로 변환
        # 데이터 로더를 사용한 학습 또는 추론 코드 
        ...

Spark 데이터세트 변환기의 기능은
무엇입니까?

Spark 데이터세트 변환기 API는 다음과 같은 기능을 제공합니다.

  • 캐시 관리. 변환기는 Spark DataFrame을 분산 파일 시스템에 캐시하고 인터프리터가
    최선을 다해 종료할 때 캐시된 파일을 삭제합니다. 명시적 삭제 API도 제공됩니다.
  • 출력 데이터 세트를 사용자 지정할 수 있는 풍부한 parameter . 사용자는 배치,
    workers_count 및 프리페치를 설정하여 출력 데이터 세트를 사용자 정의하고 제어하여
    최상의 I/O 성능을 얻을 수 있습니다.
  • pandas 데이터 프레임에 정의 된 변환 함수. 많은 딥 러닝 데이터 세트에는
    Spark DataFrames에 이진 열로 로드할 수 있는 이미지, 오디오 또는 비디오 바이트가
    포함되어 있습니다. 이러한 이진 열은 딥 러닝 모델에 공급하기 전에 디코딩해야 합니다.
    Converter는 디코딩 논리를 지정하기 위해 변환 함수에 대한 후크를 노출합니다.
    변환 함수는 Spark DataFrame에서 변환된 pandas 데이터 프레임을 입력으로 사용하며
    디코딩된 데이터가 있는 pandas 데이터 프레임을 반환해야 합니다.
  • MLlib 벡터 처리. 기본 데이터 형식 외에도 변환기는 Spark MLlib 벡터 형식을
    Spark DataFrame을 캐싱하기 전에 배열 열로 자동 변환하여 지원합니다.
    transform 함수에서 1D 배열을 다차원 배열로 형태 변경할 수도 있습니다.
  • 원격 데이터 로딩. 변환기는 Spark 작업자에 피클링되고 작업자에서
    TensorFlow 데이터 세트 또는 PyTorch DataLoader를 만드는 데 사용할 수 있습니다.
    parameter에서 특정 샤드를 읽을지 또는 전체 데이터 세트를 읽을지 여부를 지정할 수 있습니다.
  • 단일 노드에서 분산 컴퓨팅으로 쉽게 마이그레이션할 수 있습니다.
    단일 노드 추론 코드를 분산 추론으로 마이그레이션하는 경우 데이터 처리 시 코드를 변경할
    필요가 없으며 Spark에서만 작동합니다. 분산 학습의 경우 샤드 인덱스와 총 샤드 수를 나타내는 두개의 parameter API에 추가하기만 하면 됩니다.
  • 엔드투엔드 예제 노트북에서는 Horovod를 사용하여 단일 노드 코드를 분산 추론 및
    분산 학습으로 마이그레이션하는 방법을 설명했습니다.

자세한 내용은 리소스 섹션의 링크를 확인하세요.

시작하기

모든 요구 사항이 설치된 상태에서 아래에 링크된 엔드투엔드 예제 노트북과 Databricks Runtime for Machine Learning 7.0 베타의 리소스 섹션을 사용해 보세요.

AWS 노트북

Azure 노트북

승인

이 기능을 사용할 수 있도록 자세한 리뷰와 토론을 해주신 Uber의 Petastorm 저자 Yevgeni Litvin과 Travis Addair에게 감사드립니다!

리소스

엔드투엔드 예제가 포함된 Databricks 설명서( AWS | Azure )
Petastorm GitHub 홈페이지
Petastorm SparkDatasetConverter API 설명서