지금까지 배운 알고리즘들을 수행하는 것은 하나의 컴퓨터나 서버에서 처리되는 방식이였습니다. 만약 데이터가 너무 커서 하나의 머신에서 학습이 어려울 경우에는 어떻게 하면 좋을까요? 이를 위해 나온것이 Map Reduce입니다.
아래와 같은 공식의 Batch gradient descent 가 있습니다. m = 400 개인 dataset을 가지고 있습니다. Map Reduce의 개념은 이 400개의 데이터를 한번에 연산하는 것이 아니라 100개씩 4개의 컴퓨터나 서버로 나누어 계산하고 최종적으로 하나의 master 개념의 컴퓨터에서 통합시켜서 처리하는 방법입니다.
아래 공식과 같이 4개로 dataset을 분리하여 각각 100개씩 처리하도록 공식을 나누는 것을 볼 수 있습니다. 그리고 최종적으로 연산된 4개의 결과를 하나로 통합하는 공식도 볼 수 있습니다. 세타 parameter를 업데이트 하기 위해서 temp1 + temp2 + temp3 + temp4 를 합하는 것과 같습니다.
이제 데이터가 400개가 아니라 4억개 이상이라면 이와 같이 4개로 병렬 처리가 되기 때문에 1개의 컴퓨터에서 수행하는 것보다 속도도 4배 가까이 될 것입니다. 그런데 사실상은 4배까지 되지 못합니다. 왜냐하면 네트워크 트래픽이 발생하기도 하고 다시 통합하여 연산을 해야하기 때문에 4배 보다는 조금 덜한 성능으로 나타납니다. 하지만 이러한 성능으로도 충분히 가치가 있습니다.
이 개념을 도식화하면 아래와 같이 됩니다. training set을 4개로 분리하고 이를 각각의 컴퓨터에서 처리하도록 한 후에 최종적인 결과를 통합하는 것입니다.
그럼 이렇게 분산처리가 가능한 알고리즘이 있을까요? 네 맞습니다. summation을 사용하는 대부분의 알고리즘에서 이렇게 분산 처리가 가능할 수 있습니다. 아래는 logistic regression에서 J train 함수와 편미분된 J train 함수를 보여주고 있습니다. summation이 있는 부분을 분리하여 분산 처리후 그 결과를 통합하여 하나로 생성하고 parameter를 업데이트 하는 것이 가능합니다.
위와 같은 분산처리를 위해서는 다수의 컴퓨터가 필요합니다. 오늘날에는 cloud 서버를 이용하거나 가상의 환경을 구축해서 사용하기 용이합니다. 또 다른 방법으로는 최근의 CPU들이 4 core 이상으로 나오기 때문에 각각의 core를 사용해서 분산 연산을 하면 하나의 컴퓨터나 서버상에도 이를 이용할 수 있습니다. 이를 도식화하면 아래 그림과 같이 됩니다. 이와 같은 경우에는 네트워크 문제도 발생하지 않게 되는 이점이 있습니다.
실제로 이러한 알고리즘을 구현할때에 사용되는 linear algebra 라이브러리등에 내부적으로 병렬처리를 하도록 되어 있어 일정부분은 연산할때에 자동적으로 병렬연산이 됩니다. 때문에 로컬 환경에서 처리하는 경우에는 별도로 크게 신경쓰지 않아도 될 것입니다.
Map reduce를 구현한 오픈소스가 바로 Hadoop 입니다. 빅데이터로 한때 유명세를 타기도 했는데 아파치 그룹의 커뮤니티에서 활발하게 발전되고 있는 java 환경의 시스템이 이런 종류에 하나입니다.
'Machine Learning' 카테고리의 다른 글
48. 머신러닝 시스템 예제 : Aritificial data synthesis (0) | 2016.09.11 |
---|---|
47. 머신러닝 시스템 예제 : Photo OCR (2) | 2016.09.10 |
45. 빅데이터 대응하기 : 스트림형 데이터 처리하기 (Online learning) (1) | 2016.09.06 |
44. 빅데이터 대응하기 : Large Scale Machine Learning (5) | 2016.09.05 |
43. 추천 시스템 : 관련된 다른 상품을 추천해주기(Low Rank Matrix Factorization) (0) | 2016.09.04 |
댓글