Massively Large-Scale Distributed Reinforcement Learning with Menger
Google AI Blog
[Menger를 이용한 대규모 분산 강화 학습 🛠] 어릴 적 서유기의 손오공이 분신술 쓰는 게 그렇게나 부러웠습니다. 😔 실생활에서 무척 요긴해 보이는 능력이거든요. 전공 서적 전체가 시험 범위(...)인 기말고사를 앞두고 손오공이 벼락치기를 한다고 상상해 봅시다. 분신을 여럿 만들고 페이지를 나눠서 공부하면 만점이겠네요. 참 쉽죠? 근데 녹록하지 않은 게 각 장의 내용은 서로 다른 장에 의존하잖아요? 분신 입장에서는 한 번에 이해될 리가 없어요. 그러니까 분신들이 공부한 내용을 손오공 본체가 모아서 윤곽을 잡고 깊게 이해할 필요가 있습니다. 그렇게 통합된 지식을 분신에게 나눠주면 그들은 그걸 바탕으로 다시 본문 읽고 밑줄 치고 연습 문제 풀어 본체한테 알려주고... 이 과정이 반복돼야겠죠. 근데 수십, 수백 명의 분신이 본체에게 한꺼번에 달려들어 이해한 지식을 얘기해달라고 한다면? 또 분신들이 각자 공부한 내용을 너도나도 본체에게 알려줄 텐데 이것을 모두 소화하기 전에 본체 기억력의 한계가 온다면? 분신술 알고 보니 효율이 참 떨어지네요. 그래서 전 학교 다닐 때 A학점 포기했습니다. 교수님, 손오공도 하기 힘든 건데 제가 어떻게 합니까? 😔 손오공의 상황을 분산 강화 학습에 대입해봅시다. 여러 개의 행위자(= 손오공의 분신들)가 환경을 탐색(= 각자 맡은 범위 공부하기)한 다음 얻은 궤적 데이터를 학습자에게 전달합니다. 학습자(= 손오공의 본체)는 쌓인 데이터를 통해 모델, 즉 정책을 학습(= 전체 내용 이해하기)합니다. 행위자는 업데이트된 모델(= 통합된 지식)을 바탕으로 환경을 탐색하고 궤적 데이터를 다시 얻어 전달합니다. 최적 정책을 얻을 때까지 위 과정이 반복되겠죠. 대량의 분산 학습을 진행할 때 병목이 발생 가능한 두 지점이 있습니다. (1) 행위자들로부터 동시 발생하는 학습자의 모델 '읽기' (2) 모델의 입력 파이프라인, 다시 말해 행위자들이 동시다발적으로 수행하는 데이터 '쓰기' 부분 말입니다. Google에서는 지난 10월 2일 이런 문제점을 해결한 대규모 분산 강화 학습 인프라스트럭쳐 Menger를 소개했습니다. (1) Menger는 우선 첫 번째 문제를 해결하기 위해 별도의 분산 캐싱 컴포넌트를 두었습니다. 즉 학습자는 업데이트한 모델을 행위자들이 모인 컴퓨팅 클러스터마다 전달하고 각 행위자는 각자가 소속된 클러스터의 캐싱 서비스에다가 모델 '읽기'를 요청합니다. 이 과정을 통해 부하를 줄입니다. (2) 두 번째 문제 또한 해결 과정이 비슷합니다. RL의 경우 경험 재현(Experience Replay)을 위해 행위자들은 재현 버퍼에 데이터를 쌓아놓습니다. 학습자는 샘플의 시간적 상관성을 줄이기 위해서 재현 버퍼에서 셔플링한 다음 배치를 추출하죠. 만약 재현 버퍼가 하나뿐이고 용량의 한계가 있다면 행위자의 수가 늘수록 데이터 '쓰기' 지연이 커질 겁니다. 이를 해결하기 위해 재현 버퍼를 샤딩(Sharding)합니다. 즉 클러스터마다 별도의 버퍼를 두고 행위자는 각자 소속된 클러스터의 버퍼에 '쓰기' 작업을 수행합니다. 학습자는 각 버퍼마다 쌓인 데이터를 다시 합쳐서 가져가는 거고요. 캐싱 서비스와 재현 버퍼 용도로 Deepmind가 개발한 자료구조(Reverb 라이브러리)를 사용했다고 하네요. Menger를 칩 배치를 위한 RL 실사용 사례에 적용해봤더니 학습 속도가 최대 8.6배 향상됐답니다. 내부 구현은 좀 더 복잡하겠지만 두 가지 병목 문제 모두 알고리즘 기본 전략인 '낫과 망치'... 아니 '분할과 정복'으로 해결했습니다. 손오공이 본인과 분신들 사이에 입과 귀가 되어주는 팀장 몇몇을 둔 셈이죠. 이렇게 분산 학습 인프라는 관료제(?)를 닮아가고... 😔
2020년 10월 10일 오후 12:18