pandas 코드 한 줄만 바꾸면 데이터 분석이 최대 10배 빨라진다면 믿어지시나요? 오늘은 NVIDIA가 만든 GPU 기반 데이터 분석 라이브러리인 RAPIDS cuDF의 놀라운 새 기능인 cudf.pandas를 소개합니다.
전체 코드 : https://colab.research.google.com/drive/1X3IHAy3qIcZAaFi5j1hV5Za1eCHUBqzt?usp=sharing
Google Colab Notebook
Run, share, and edit Python notebooks
colab.research.google.com
cuDF는 Apache Arrow 기반의 GPU DataFrame 라이브러리로, pandas와 거의 동일한 인터페이스를 제공하면서 GPU를 이용한 데이터 분석 속도를 크게 높일 수 있는 도구입니다. 특히 기존 pandas 코드를 변경하지 않고 그대로 GPU에서 실행할 수 있는 pandas 가속기 모드(cudf.pandas)가 추가되었습니다.
이 포스팅에서는 cuDF의 pandas 가속기 모드를 직접 활용하여 간단한 데이터 분석을 수행하는 과정을 소개합니다.
✅ NVIDIA GPU 환경 확인하기
먼저, 본인의 환경에서 GPU가 제대로 인식되고 있는지 확인합니다. 다음 명령어를 통해 NVIDIA GPU가 잘 작동하는지 확인할 수 있습니다.
# 현재 환경에서 GPU의 상태와 메모리 사용량 등을 확인하는 명령어입니다.
!nvidia-smi
이 명령어의 실행 결과에 GPU 정보가 정상적으로 표시되면 GPU 설정이 성공적으로 완료된 것입니다.
📥 데이터 다운로드
예제로 사용할 데이터는 뉴욕시의 주차 위반 데이터를 사용하겠습니다. 원본 데이터는 NYC 오픈 데이터 포털에서 제공되지만, 편의상 NVIDIA에서 제공하는 데이터를 사용합니다.
!wget https://data.rapids.ai/datasets/nyc_parking/nyc_parking_violations_2022.parquet -O /tmp/nyc_parking_violations_2022.parquet
파일 크기가 크기 때문에 다운로드가 완료될 때까지 잠시 기다려 주세요. 이후의 GPU 가속을 통해 데이터를 빠르게 처리할 수 있으니 조금만 인내해 주세요!
🐼 pandas로 데이터 분석하기
먼저 표준 pandas 라이브러리를 이용해 데이터의 일부를 불러오겠습니다.
import pandas as pd
# 일부 열만 선택적으로 불러오기
df = pd.read_parquet(
"/tmp/nyc_parking_violations_2022.parquet",
columns=["Registration State", "Violation Description", "Vehicle Body Type", "Issue Date", "Summons Number"]
)
# 데이터 샘플 확인하기
df.sample(10)
이렇게 데이터를 불러온 후에는 간단한 분석을 수행하여 데이터를 탐색할 수 있습니다.
🔍 분석 예시: 미국 각 주별 가장 흔한 주차 위반
각 주에서 가장 흔하게 발생하는 주차 위반 유형을 확인하는 방법입니다.
# 각 주별 위반유형의 발생 빈도 계산
violation_counts = df.groupby('Registration State')['Violation Description'].value_counts().groupby(level=0).head(1)
violation_counts
이를 통해 각 주별로 가장 빈번하게 발생하는 주차 위반 유형을 확인할 수 있습니다.
🚀 cudf.pandas로 GPU 가속 적용하기
이제 본격적으로 cuDF의 pandas 가속기 모드를 통해 GPU를 사용하여 더욱 빠르게 데이터를 분석하는 방법을 살펴보겠습니다.
📦 cudf.pandas 설치하기
cuDF를 Colab 환경에서 설치하는 방법은 간단합니다. 다음 명령어를 실행하여 설치할 수 있습니다.
!pip install cudf-cu12 dask-cudf-cu12 --extra-index-url=https://pypi.ngc.nvidia.com
설치 후에는 cuDF와 pandas를 거의 동일한 방식으로 사용할 수 있습니다.
⚡ GPU 가속 모드로 데이터 분석 수행하기
기존 pandas 코드의 한 글자도 바꾸지 않고, 단지 라이브러리 임포트 부분만 변경하여 GPU 환경에서 최대 수십 배 빠르게 데이터 분석을 할 수 있습니다.
import cudf.pandas as pd
# GPU 가속 pandas 사용하기
gpu_df = pd.read_parquet(
"/tmp/nyc_parking_violations_2022.parquet",
columns=["Registration State", "Violation Description", "Vehicle Body Type", "Issue Date", "Summons Number"]
)
# GPU에서 동일한 분석 수행하기
gpu_violation_counts = gpu_df.groupby('Registration State')['Violation Description'].value_counts().groupby(level=0).head(1)
gpu_violation_counts
위와 같이 기존 pandas 코드에서 변경 없이 GPU 기반 데이터 분석이 가능합니다.
⏱️ 성능 비교: pandas vs cudf.pandas
GPU 환경에서의 성능 향상을 체감하기 위해, 데이터 처리에 소요되는 시간을 측정하여 비교해보는 것이 좋습니다. 다음 코드를 통해 pandas와 cudf.pandas의 성능을 직접 비교해 볼 수 있습니다.
import time
# pandas 성능 측정
start_time = time.time()
df.groupby('Registration State')['Violation Description'].value_counts().groupby(level=0).head(1)
print("pandas 처리 시간:", time.time() - start_time, "초")
# cudf.pandas 성능 측정
start_gpu_time = time.time()
gpu_df.groupby('Registration State')['Violation Description'].value_counts().groupby(level=0).head(1)
print("cudf.pandas 처리 시간:", time.time() - start_gpu_time, "초")
🎯 결론 및 활용 팁
이번 포스팅에서는 RAPIDS cuDF의 pandas 가속기 모드를 이용해 GPU 기반 데이터 분석을 쉽게 구현하는 방법을 소개했습니다. pandas 코드를 변경하지 않고 GPU를 이용해 성능을 극대화할 수 있는 cudf.pandas는 데이터 분석가에게 큰 도움이 될 것입니다.
실무에서 빠른 데이터 분석이 필요하거나 큰 규모의 데이터로 인해 처리 속도가 문제될 때는 cudf.pandas를 적극적으로 활용하여 효율성을 높여 보시기 바랍니다.
앞으로 더 다양한 데이터 분석 방법과 팁을 지속적으로 공유하겠습니다. 많은 관심과 피드백 부탁드립니다!
'pandas' 카테고리의 다른 글
Pandas의 인덱싱과 슬라이싱: 데이터프레임에서의 원하는 값 추출하기 (0) | 2023.04.03 |
---|---|
복수열 조건문을 활용한 데이터프레임 필터링과 선택 (0) | 2023.03.27 |
람다(lambda) 함수와 함께하는 판다스(Pandas) apply() 메소드 활용법 (0) | 2023.03.27 |
Matplotlib으로 효과적인 데이터 시각화 방법 익히기 (2) | 2023.03.24 |
Seaborn을 활용한 데이터 시각화 - 깔끔하고 유용한 시각화 기법들 (0) | 2023.03.24 |
댓글