본문 바로가기
Artificial Intelligence/60. Python

[PYTHON] 대용량 CSV 대비 Parquet 포맷이 AI 학습 속도를 높이는 3가지 원리와 7가지 해결 방법

by Papa Martino V 2026. 4. 27.
728x90

CSV vs Parquet
CSV vs Parquet

 

데이터 사이언스와 AI 모델링 프로젝트에서 가장 많은 시간을 소비하는 구간은 모델 연산이 아닌 '데이터 로딩' 단계입니다. 특히 테라바이트(TB) 단위의 대용량 데이터를 처리할 때, 범용적으로 사용되는 CSV 포맷은 심각한 병목 현상을 유발합니다. 파이썬 기반 AI 생태계에서 Apache Parquet 포맷이 왜 선택이 아닌 필수인지, 그리고 실제 학습 속도에 미치는 영향과 7가지 실무 최적화 해결 방안을 심층적으로 다룹니다.


1. CSV와 Parquet의 구조적 차이와 성능의 상관관계

CSV는 사람이 읽기 편한 텍스트 기반의 행(Row) 중심 포맷인 반면, Parquet은 컴퓨터가 읽기 최적화된 바이너리 기반의 열(Column) 중심 포맷입니다. 이 차이가 AI 학습 파이프라인에서 발생하는 I/O 비용을 결정짓습니다.


2. CSV vs Parquet 주요 성능 지표 비교

대규모 데이터 처리 시 두 포맷이 보여주는 구체적인 수치적 차이를 정리했습니다.

비교 항목 CSV (Comma Separated Values) Parquet (Columnar Storage) 성능 해결 핵심
저장 방식 행 기반 (Row-based) 열 기반 (Column-based) 필요한 특성(Feature)만 선별 로드 가능
압축 효율 낮음 (Plain Text) 매우 높음 (Snappy, Gzip 등) 디스크 공간 절약 및 I/O 대역폭 확보
데이터 타입 정보 없음 (Schema Inference 필요) 포함 (Metadata 기반) 파싱 오버헤드 제거로 로딩 속도 5~10배 향상
부분 조회 전체 파일 스캔 필요 특정 열만 선택적 스캔 AI 학습 시 특정 컬럼 선택 속도 극대화
메모리 사용량 로딩 시 전체 메모리 팽창 메타데이터 기반 효율적 적재 Out-of-memory(OOM) 에러 예방

3. AI 개발자를 위한 실무 적용 Sample Example (7가지)

실제 파이썬 환경에서 Parquet를 도입하여 데이터 파이프라인의 성능을 획기적으로 개선하는 7가지 실전 코드입니다.

Example 1: Pandas를 이용한 고성능 Parquet 변환 및 저장

CSV 파일을 AI 학습에 최적화된 Parquet 포맷으로 변환하는 가장 빠른 방법입니다.

import pandas as pd

# 대용량 CSV 읽기
df = pd.read_csv("huge_dataset.csv")

# Parquet으로 저장 (Snappy 압축 알고리즘 사용으로 속도와 용량 밸런스 확보)
df.to_parquet("huge_dataset.parquet", engine="pyarrow", compression="snappy")

print("변환 완료: 파일 크기가 약 70~80% 감소합니다.")
    

Example 2: 필요한 Feature(컬럼)만 선택적 로딩하여 메모리 절약

전체 데이터를 로드하지 않고 모델 학습에 필요한 열만 골라 읽어 로딩 속도를 높입니다.

import pandas as pd

# CSV는 특정 열만 읽어도 내부적으로는 전체 라인을 파싱하지만,
# Parquet은 물리적으로 해당 열의 블록만 접근합니다.
features = ["user_id", "purchase_amount", "target"]
df_subset = pd.read_parquet("huge_dataset.parquet", columns=features)

print(f"로드된 컬럼: {df_subset.columns.tolist()}")
    

Example 3: PyArrow를 이용한 대규모 데이터셋 필터링 로드

메모리에 올리기 전, 조건에 맞는 데이터만 필터링하여 AI 학습 전처리 시간을 단축합니다.

import pyarrow.parquet as pq

# 2024년 이후 데이터만 필터링하여 로드 (Predicate Pushdown)
table = pq.read_table(
    "huge_dataset.parquet", 
    filters=[('year', '>=', 2024)]
)
df_filtered = table.to_pandas()
    

Example 4: Polars와 결합한 초고속 데이터 스캔 및 학습 준비

Pandas보다 빠른 Polars 라이브러리를 통해 Parquet 성능을 극대화합니다.

import polars as pl

# Lazy evaluation을 활용하여 연산 최적화 후 로드
lazy_df = pl.scan_parquet("huge_dataset.parquet")
result = lazy_df.filter(pl.col("score") > 0.8).select(["id", "score"]).collect()

print(result.head())
    

Example 5: PyTorch DataLoader에서 Parquet 활용하기

커스텀 데이터셋 클래스를 통해 Parquet 파일에서 직접 배치를 읽어오는 구조입니다.

import torch
from torch.utils.data import Dataset
import pandas as pd

class ParquetDataset(Dataset):
    def __init__(self, file_path):
        self.data = pd.read_parquet(file_path)
    
    def __len__(self):
        return len(self.data)
    
    def __getitem__(self, idx):
        features = torch.tensor(self.data.iloc[idx, :-1].values, dtype=torch.float32)
        label = torch.tensor(self.data.iloc[idx, -1], dtype=torch.long)
        return features, label
    

Example 6: Dask를 이용한 분산 환경에서의 Parquet 병렬 처리

단일 머신 메모리를 초과하는 데이터를 여러 파티션으로 나누어 병렬로 로드합니다.

import dask.dataframe as dd

# 여러 개의 Parquet 파일을 병렬로 로드
ddf = dd.read_parquet("data_folder/*.parquet")

# 연산 후 학습에 필요한 결과만 산출
mean_val = ddf["feature_v1"].mean().compute()
print(f"병렬 처리 평균값: {mean_val}")
    

Example 7: Parquet Partitioning을 통한 데이터 관리 최적화

날짜나 카테고리별로 폴더 구조를 나누어 저장함으로써 쿼리 성능을 높이는 방법입니다.

import pandas as pd

df = pd.read_csv("logs.csv")

# 'region' 컬럼을 기준으로 파티셔닝하여 저장
# 결과: data/region=Asia, data/region=Europe 등의 구조로 생성됨
df.to_parquet("partitioned_data", partition_cols=["region"])
    

4. Parquet 포맷 도입이 AI 성능에 주는 3가지 영향

  1. 훈련 시간(Training Time) 단축: 전체 파이프라인 시간 중 I/O가 차지하는 비중을 50% 이상 줄여 GPU 가동률을 극대화합니다.
  2. 비용 효율성: S3나 GCS 같은 클라우드 저장소에서 데이터를 읽을 때 스캔하는 데이터 양이 줄어들어 통신 및 스토리지 비용이 절감됩니다.
  3. 데이터 무결성: CSV와 달리 데이터 타입(int, float 등)이 보존되므로 데이터 전처리 중 발생하는 예기치 못한 타입 에러를 원천 봉쇄합니다.

5. 결론: 왜 지금 Parquet인가?

AI 모델의 복잡도가 증가할수록 고품질의 대규모 데이터를 얼마나 빠르게 모델에 주입하느냐가 핵심 경쟁력이 됩니다. Parquet 포맷은 단순한 저장 방식의 변화를 넘어, 데이터 가용성과 인프라 효율성을 동시에 해결하는 실무적인 정답입니다. 지금 바로 기존의 CSV 파이프라인을 Parquet로 전환하여 비약적인 속도 향상을 경험해 보시기 바랍니다.


참고 문헌 및 출처:

  • Apache Arrow & Parquet 공식 문서 
  • Databricks Engineering Blog: "Understanding the Parquet Storage Format"
  • Wes McKinney, "Python for Data Analysis", 3rd Edition (O'Reilly)
  • Hugging Face Datasets Library Documentation on Data Formats
728x90