R 스케일-아웃 전략을 통한 성능향상에 대해 살펴보고, 동일 모형내 최적모형 구축과 모형결합을 통한 병렬컴퓨팅을 이해한다.
parallel
팩키지 mclapply()
가 여기에 해당된다.병렬 프로그래밍에서 벽걸이 시간(wallclock time) 이 중요한데 작업시작과 작업종류를 측정한다. 즉, 개별 CPU 코어 성능이 얼마냐가 중요하긴 하지만, 결국 모든 계산이 끝났을 때 최종적으로 측정한 시간만이 의미가 있다는 뜻이다. 암달의 법칙(Amdahl’s law)은 암달의 저주로도 불리며, 프로그램을 100% 병렬처리가 가능하도록 만들고 프로세서를 늘리면 성능이 무한대로 가능하지만, 현실적으로 100% 병렬 프로그램을 작성할 수는 없다. 예를 들어, 95% 병렬처리가 가능하다고 가정하면, 무한대 프로세서를 사용해도 최대 20배로 속도향상(speedup) 이 제한된다.
CRAN Task View - High-Performance and Parallel Computing with R 사이트에 가면 R에서 바라본 다양한 고성능 슈퍼컴퓨팅 관련 작업이 일목요연하게 정리되어 있다.
분산 R 병렬 컴퓨팅을 수행해야 되는 이유는 각 범용 컴퓨터 메모리가 한정되어 있기 때문이다. 만약 데이터가 메모리보다 더 커다란 경우 메시지 전달을 통한 분산 처리를 통한 방법이 남는다.
Rmpi
가 대표적인 메시지 전달을 통한 분산병렬연산 작업을 수행한다. 분산된 컴퓨터는 직접 다른 컴퓨터의 메모리에 접근하여 작업을 할 수 없기 때문에 네트워크를 통해 메시지를 전달해서 공동작업을 수행한다.
library(snow)
library(Rmpi)
makeCluster(2, type="MPI")
cl <-clusterCall(cl, function() Sys.getpid())
clusterCall(cl, runif, 2)
stopCluster(cl)
mpi.quit()
caret
, tm
팩키지가 병렬컴퓨팅을 수행하는 대표적인 R 팩키지다. 서로 독립적으로 문제를 나누어서 병렬처리가 가능한 사례를 두가지 R 기계학습에서 들 수 있다. 동일한 모형내에서 최적모형을 개발할 태, 모수를 추정해야 한다. 각 변수에 대한 모수 뿐만 아니라, 능선회귀 등을 통해 정규화를 할 경우 정규화 모수 \(\lambda\) 도 추정을 해서 최적모형을 찾아낸다.
스파크의 힘을 빌어 SparkR로 분산처리 모형을 개발하는 방법이 하나이고, 또다른 방식을 다양한 R 병렬컴퓨팅 팩키지를 활용하여 최적모형을 찾아내는 것도 가능하다.
두번째 병렬처리 적용이 가능한 분야는 서로 다른 모형을 추정하여 결과값을 투표로 정해 조합하는 경우로 선형모형부터, 신경망, 나무모형, 확률숲 등 다양한 모형을 데이터 적합시키고 결과를 투표로 조합해서 산출해내는 방법이 있다. 위와 마찬가지로, 스파크의 힘을 빌어 SparkR로 분산처리 모형을 개발하는 방법이 하나이고, 또다른 방식을 다양한 R 병렬컴퓨팅 팩키지를 활용하여 최적모형을 찾아내는 것도 가능하다.
데이터 과학자 이광춘 저작
kwangchun.lee.7@gmail.com