피드로 돌아가기
Dev.toBackend
원문 읽기
엔지니어가 TCP 기반 분산 작업 도구를 개발해 Dask·Ray과 동등한 3.52배 성능 향상 달성
I Built a Tool to Distribute Python Tasks Across Local Machines. Here's How It Performed
AI 요약
Context
기존에는 로컬 네트워크의 여러 머신에 Python 작업을 분산시키려면 Kubernetes나 클라우드 클러스터 같은 복잡한 도구를 사용해야 했다. 간단한 map 작업을 위해서도 셋업이 여러 줄의 코드를 요구했다.
Technical Solution
- TCP 기반 코디네이터-워커 아키텍처 도입: 코디네이터는 포트 5555로 작업을 분배하고 워커는 cloudpickle로 작업을 직렬화해 실행 후 결과 반환
- API 간소화: coordinator.map(my_func, data) 한 줄로 작업 분배 시작, 다른 머신에서는 distcompute worker 명령어만 실행
- 작업 재시도 기능 구현: coordinator.map(func, data, max_retries=3) 파라미터로 실패한 작업 자동 재시도
- 대용량 페이로드 처리: 자동 청킹 및 압축으로 네트워크 전송 최적화
- 인증 및 대화형 CLI 추가: 비밀번호 인증과 REPL 형태의 상태 모니터링 지원
Impact
Apple M2 MacBook의 4개 워커에서 NASA EP 벤치마크 3.57배, Mandelbrot 집합 계산 3.27배, SHA-256 해시 검색 3.72배 성능 향상 달성했다. 평균 3.52배 속도 향상으로 이론적 최대값(4.0배) 대비 88% 병렬 처리 효율을 기록했다. Dask(3.52배)·Ray(3.49배)와의 비교에서 평균 성능이 동등한 수준(3.52배)을 유지했다.
Key Takeaway
단순한 병렬 작업에서는 프레임워크 선택보다 CPU가 병목이 되므로, 간단한 map 사용 사례에는 최소한의 오버헤드로 설계된 도구가 복잡한 기능의 도구만큼 효과적이다. 작은 범위의 로컬 네트워크 분산 컴퓨팅 용도에는 작업 그래프·대시보드·클라우드 배포 같은 추가 기능 없이 핵심 기능만 제공하는 접근법이 실용적이다.
실천 포인트
로컬 네트워크의 여러 머신을 활용해야 하는 엔지니어가 간단한 맵 기반 병렬 처리를 구현할 때, TCP 기반 코디네이터 패턴을 최소한의 설정으로 도입하면 Dask나 Ray 수준의 성능을 얻으면서도 복잡한 설정 오버헤드를 제거할 수 있다.