본문 바로가기
728x90

performance_optimization3

[PYTHON] Apache Arrow를 활용한 언어 간 데이터 이동 최적화 : 제로 카피로 성능 병목 해결 방법 7가지 현대 데이터 엔지니어링 및 머신러닝 파이프라인에서 가장 큰 성능 저하 요인은 연산 자체가 아닌 '데이터 이동'과 '직렬화(Serialization)'입니다. 서로 다른 프로그래밍 언어(예: Python과 Java, C++와 Python) 간에 데이터를 주고받을 때, 데이터를 복사하고 형식을 변환하는 과정에서 막대한 CPU 자원이 소모됩니다. Apache Arrow는 이러한 구조적 한계를 극복하기 위해 설계된 메모리 내 열 지향(Columnar) 데이터 형식입니다. 이 글에서는 Python을 중심으로 Apache Arrow를 활용하여 시스템 간 데이터 전송 효율을 극대화하는 구체적인 아키텍처와 실무 해결 방안을 다룹니다.1. 데이터 이동의 고질적인 문제와 Apache Arrow의 차이기존의 행 기반(Row.. 2026. 4. 19.
[PYTHON] DataLoader num_workers 설정이 학습 속도와 메모리에 미치는 3가지 영향과 해결 방법 딥러닝 모델 학습 중 GPU 사용률(GPU Utilization)이 낮게 유지되거나 학습 속도가 기대보다 느리다면, 범인은 모델 아키텍처가 아닌 데이터 로딩 파이프라인일 확률이 매우 높습니다. 파이썬(Python) 기반의 PyTorch 프레임워크에서 DataLoader의 num_workers 옵션은 데이터를 읽어오는 멀티프로세싱의 수준을 결정하는 핵심 스위치입니다. 본 포스팅에서는 num_workers가 시스템 자원에 미치는 구조적 차이를 심층 분석하고, 데이터 로딩 병목을 해결하여 학습 효율을 200% 이상 끌어올릴 수 있는 7가지 실전 테크닉을 공유합니다.1. num_workers 수치에 따른 시스템 동작 차이와 병목 지점num_workers는 메인 프로세스가 데이터를 기다리는 동안, 별도의 서브 프.. 2026. 4. 18.
[PYTHON] 성능 차이 2가지 비밀 : Global 변수가 Local보다 느린 이유와 바이트코드 해결 방법 파이썬으로 고성능 애플리케이션을 개발하다 보면 "전역 변수(Global Variable) 사용을 지양하라"는 조언을 자주 듣게 됩니다. 이는 단순히 유지보수나 가독성 때문만이 아닙니다. 파이썬 인터프리터 수준에서 전역 변수와 지역 변수(Local Variable)를 처리하는 방식에는 명확한 성능 차이가 존재하기 때문입니다. 본 글에서는 파이썬 바이트코드(Bytecode)를 직접 분석하여 왜 지역 변수 접근이 더 빠른지, 그리고 실무에서 이를 어떻게 성능 최적화에 활용할 수 있는지 방법을 심층적으로 다룹니다.1. 파이썬 변수 접근의 메커니즘: 네임스페이스와 딕셔너리파이썬에서 모든 변수는 특정 네임스페이스(Namespace)에 저장됩니다. 하지만 이 네임스페이스를 관리하는 내부 구조가 변수의 범위(Scope.. 2026. 2. 28.
728x90