데이터실무

DA, SQL, DB보안 등 실무자를 위한 위한 DB기술 바이블!

R에서의 처리성능 개선

데이터 분석
통계분석
R에서의 처리성능 개선
작성자
admin
작성일
2021-02-15 15:09
조회
1841

R은 기본적으로 모든 데이터셋을 메인메모리에 올려 놓고 작업하기 때문에 작업성능이 뛰어나다. 하지만 역설적으로 데이터 크기가 커지면 메모리 크기가 한계로 작용하고 극단적인 경우 데이터를 한꺼번에 올리지 못하는 경우도 발생하게 된다. 뿐만 아니라 알고리즘의 종류에 따라서는 아주 큰 메모리를 필요로 하는 경우가 생기는데 최적화 등이 그 대표적인 예이다.
이와 같은 R에서의 성능 이슈는 일상 작업에서는 거의 의식하지 못하지만 빅데이터 또는 복잡한 알고리즘을 수행해야 할 때 문제가 된다. 해결방법으로 여러 가지가 제시되는데 구체적 기법은 데이터의 종류(정형, 비정형)와 크기 (한꺼번에 적재해야 할 데이터의 사이즈)는 물론 적용하려는 알고리즘의 종류 등에 따라 매우 다양하다. 이와 함께 빅데이터 분석을 위해 R코드에 대해 MapReduce 적용하는 문제가 최근 많은 관심의 대상이 되고 있다.
여기서는 R의 성능개선 문제를 살펴봄에 있어 일반적인 성능개선 방법과 MapReduce 적용의 두가지로 나누어 설명하되 일반론에 대해서는 개략적인 소개 위주로 설명하는 대신 MapReduce 적용을 조금 자세히 살펴보고자 한다. 그리고 이 과정에서 편의상 MR 적용을 제4절로 절을 달리하여 기술하기로 한다.


개요

R은 그 어떤 통계 패키지에 못지 않게 고성능을 자랑한다. R은 알고리즘이 탄탄하고 이들을 최대한 메인메모리에서 수행한다.


  • R 언어가 C로 작성됐고, 전형적인 함수형(functional) 언어이므로 수리ㆍ통계분석을 최적으로 수용한다(예: Vectorization).
  • 큰 데이터 이용 시 메모리를 미리 할당한다.
  • gc() (garbage collector)를 이용해 저장공간을 늘리거나 object.size() 명령을 통해 메모리 사용현황을 수시로 검사한다.
 

뿐만 아니라 R의 성능을 더욱 빠르게 하기 위한 각종 확장 패키지 역시 매우 풍부하다.18) 여기서는 일상적인 R 사용 시 참조할 수 있는 대표적인 기법 몇 가지를 소개한다.


R 코드 최적화

  • 가능한 내장함수를 이용한다. 내장함수는 이미 전체적인 성능 최적화에 관한 개발자의 엄격한 심사를 거친 것이기 때문이다.
  • 크기가 큰 데이터에 대해 질의(Query) 작업이 필요할 때는 내장 파일형식으로 데이터베이스를 구현하는 RSQLite 패키지를 이용한다. 데이터관리와 통계분석을 구분해 각 기능에 최적화된 모듈을 사용하게 된다.

parallel R

  • R. Rosario는 HPC의 4가지 영역을 구분했다.
  • 명시적 병렬처리(Explicit parallelism): 사용자가 병렬처리 과정을 제어
  • 묵시적 병렬처리(Implicit parallelism): 시스템이 사용자를 대신해 통제
  • MapReduce: 데이터를 파티셔닝해 처리하는 것
  • 대규모 메모리의 활용
 

한편 R (커뮤니티)에서 제공하는 병렬처리용 패키지에는 다음과 같은 것이 있다.


  • Rmpi
  • Snowfall: 기존의 snow(simple network of workstations) 패키지를 개량
  • Foreach: Revolution Computing에서 제공
  • multicore