- 2020년 6월 1일 오후 12:52
- 조회수: 4511
REFERENCES
INFORMATION
- 2020년 6월 5일
- 오후 1시 ~
- 고려대학교 신공학관 218호
TOPIC
OVERVIEW
발표자 후기
이번 세미나는 분산학습 기법을 활용하기 위한 전반적인 기법을 소개하고 설명하는 자리로 준비하였다. 익숙하지 않은 주제였지만 모두 집중하여 들어주었기에 더욱 힘을 내서 설명을 할 수 있었던 것 같다. 아직 학교에서는 각자 자신의 machine을 가지고 활용하는 일이 대부분이며 GPU개수가 1~2장인 경우이기에 필요성을 모르고 듣는 경우가 더 많았을 것이라고 생각한다. 앞으로 연구에서도 실제 분산학습이 필요한 경우가 얼마나 있을지는 장담할 수 없다. 하지만 누군가 분산학습이란 것이 있고 활용할 수 있다는 것만 기억해준다면 충분히 의미가 있었다고 생각한다. 세미나 준비를 통해 분산학습에 대해 더욱 깊게 깨달은 것은 사실 발표자 본인이었다. 아직은 생소하고 어려운 분산학습을 누구나 쓸 수 있게 좋은 플랫폼을 빨리 만들어주고 싶은 욕구가 더욱 생기게 만드는 세미나였다.
청취자 후기
GPU 연산에서의 분산 학습에 대한 세미나를 청취했다. 딥러닝 알고리즘을 사용하는 다양한 연구가 주를 이루고, 많은 양의 데이터를 사용하다보면 메모리가 부족하거나 학습속도가 느린 문제 상황에 직면하게 된다. 이때 분산 학습을 사용하게 되는데 이는 크게 1) 작업 분할 방식: data or model parallelism 2) 동기화 방식: sync or async parameters 3) 데이터 취합 방식: all-reduce or ring-all-reduce으로 구분할 수 있으며, 각각 상황에 맞게 하나씩 선택해서 사용을 하면 된다. 지금은 GPU를 1개만 사용하고 있어서 크게 사용할 일이 없었지만, 서버를 사용하는 등 여러 개의 GPU를 사용할 때는 필수적으로 고려해야 되는 부분이다. 필요성에 비해 공부를 하기 위해 따로 시간을 내지는 않았던 분야여서 오늘은 특별히 더 유익한 내용을 배울 수 있었다고 느꼈다. 욱수형은 data / async / ring-all-reduce 조합을 최종적으로 추천을 해주었는데, 연구실에서는 GPU를 엄청 많이 사용하지 않기 때문에 오히려 sync 방식을 사용하는게 차라리 더 나을 것 같다고 생각한다. 여러 상황별로 어떤 방식을 사용해야 하는가에 대한 가이드라인을 받을 수 있어서 좋았고, 직접 사용할 수 있는 패키지까지 소개해주어서 실전에서 유용한 점이 많은 세미나였다. 마지막에도 언급되었듯이, GPU를 잘 사용하는 것도 중요하지만 결국에는 자기 코드를 얼마나 잘 구성하는지가 핵심이다.
금일 세미나는 욱수형이 분산학습 전반에 대하여 소개해주었다. 데이터 양이 많아지고 이를 처리하는 모델의 파라미터가 기하급수적으로 늘어남에 따라 최근 딥러닝 기반의 연구들은 많은 컴퓨팅 리소스를 필요로하고 또 그만큼 많은 학습 시간이 필요하다. 오늘 세미나는 이러한 문제점을 해결하는 방법으로 multi-gpu를 활용한 효율적인 분산처리 방식에 대하여 다루었다. 분산학습은 작업 분할방식, 동기화 방식, 데이터 취합 방식을 상황에 맞게 선택하여 효율적으로 처리할 수 있다는 것을 알게 되었으며, 각 방식의 간단한 원리에 대하여 욱수형이 예시와 함께 설명해주어 쉽게 이해할 수 있었다. 개인 연구 분야인 자연어처리 분야에서는 transformer 계열, 특히 Bert 이후 모델들이 파라미터가 매우 많은 헤비한 모델들이기 때문에 항상 컴퓨팅 문제를 겪는데 오늘 욱수형이 설명해준 분산처리를 잘 알고 있으면 효율적으로 연구를 할 수 있을 것이라는 생각을 했다. 연구실에서 쉽게 접하기 어려운 주제인 분산처리에 대하여 쉽게 이해할 수 있도록 준비해주신 욱수형에게 감사하다는 말을 전한다.
금일 세미나는 "시간 단축을 위한 분산 학습의 원리와 코딩 최적화" 에 대한 주제로 진행하였다.
우리가 일반적으로 코딩을 하면서 복잡한 코딩을 사용하기 위해 GPU를 활용하게 되고 이로 인해 Memory, 학습 속도등에 대해 문제가 생기는데 이를 해결해 주기 위해 1> 작업 분할 방식: Data/Model Parallelism, 2> 동기화 방식: Sync/Asunc Parameters, 3> 데이터 취합 방식: All-Reduce, Ring-All_Reduce 방식등의 분산 학습을 사용하게 된다. 각각을 상황에 맞추어서 선택을 하면 되는데 각각에 대해 설명을 하자면, 1>의 경우 모델을 여러 GPU에 분산하여 처리하는 방식과 데이터를 여러 GPU에 분산하여 처리하는 방식이 있는데 모델을 분리하는 경우는 모델이 매우 큰 경우 사용하고 일반적으로는 데이터를 분리하여 사용하는것이 편하다. 2>의 경우 Sync는 각각 분산처리가 모두 끝났을때 한꺼번에 업데이트 하여 수렴이 빠르고(크게 크게 진행되는 느낌)Async는 매 분산처리마다 업데이트를 하여 수렴이 느리고(짧게짧게 진행되는 느낌)으로 Async의 경우 매 분산처리 때 잘못된 값이 들어갈 경우 이상한 값으로 진행될 수도 있지만 업데이트가 많아서 금방 개선될 수 있다. Async의 장점으로는 GPU가 많아지면 많아질수록 학습속도가 더 빨라질 수 있다는 점이다. 3>의 경우 parameter가 많고 주고받는 데이터가 클수록 Ring-All Reduce 방식이 네트워크 부하 감소 효과가 있다. 여러 상황에 맞추어서 잘 사용해야 하지만 결국은 자신의 코드를 잘 구성하고 효과적으로 사용할 수 있도록 잘 공부하는것이 중요한것 같다. Hardware에 대해 잘 몰랐는데 조금은 알게 된 것같다.
오늘 세미나는 “시간 단축을 위한 분산 학습의 원리와 코딩 최적화”라는 주제로 연구실의 큰 형님이신 신욱수님이 발표해 주셨다. 지금까지의 세미나가 Deep learning의 성능을 올리기 위한 알고리즘에 맞춰져 있었다면, 오늘의 세미나는 컴퓨터가 실제 Data를 처리할 때의 문제점과 해결방안에 초점을 맞춘 Deep learning 고급 강좌 수준의 세미나였다. Deep learning의 발전에 따라 처리하고자 하는 Data는 많아지게 되고, 알고리즘은 복잡 해졌으며 필요한 메모리는 늘어나게 되었다. 따라서 일반적인 방법으로는 처리할 수 없는 Data가 많아지게 되었는데, 본 세미나에서는 이를 1) Batch size를 줄여서 해결하는 방법 2) 모델 사이즈를 줄여서 해결하는 방법 3) Multi-GPU를 활용하여 해결하는 방법으로 나누어 설명해 주었다. 특히 Multi-GPU를 활용하여 해결하는 방법을 집중적으로 설명해 주었다. 특히 2012년에 토론토 대학의 힌튼 교수님이 당시 모자라는 컴퓨팅 능력을 해결하기 위해 이미 Multi-GPU를 사용한 논문을 보았을 때는 아직 Multi-GPU를 한번도 써보지 않았음에 스스로 부끄러움도 많이 느껴지는 세미나였다. 또 다른 지식의 세계를 열어 주신 발표자 신욱수님께 감사하다는 말을 전한다.
오늘 세미나는 시간 단축을 위한 분산 학습의 원리와 코딩 최적화는 주제로 욱수오빠가 진행해주셨다. 세미나는 평소 다뤄지는 주제와는 전혀 다른 주제였기 때문에 더욱 흥미로웠고 욱수 오빠의 매끄럽고 재미있는 설명 덕분에 시간가는 줄 모르고 들었던 것 같다. 인공지능 알고리즘은 점점 복잡해지고 학습해야 할 파라미터 수가 늘어남에 따라 필요한 메모리가 당연히 늘어난다. 이를 해결하기 위해 Multi-GPU 사용이 한가지 해결방법이 될 수 있다. 이때 각 gpu에 model 혹은 데이터를 각 task의 목적에 따라 분산처리 가능하다. 오늘 핵심은 분산 처리한 이후 취합하는 방식이었는대 All-Reduce, Ring-AllReduce, Horovod 등 어려운 개념을 욱수오빠가 이해가 쉽도록 설명해주셔서 유익했다. 특히 Ring-AllReduce 설명에서 Scatter-reduce, AllGather 방법을 ppt 한 장으로 이해시켜 주셔서 역시 이래서 임원오빠구나 싶었다. 또 마지막에는 ‘어떤 상황에 직면했을때 어떤 방식으로 해결해야한다.’는 실전을 위한 설명과 사용가능한 패키지, example 코드까지 설명을 해주셔서 나중에 필요한 상황이 생길 때 유용하게 활용할 것 같다.
오늘은 욱수형이 '시간 단축을 위한 분산 학습의 원리와 코딩 최적화'라는 주제로 세미나를 진행했다. 발표의 주된 내용은 다수의 GPU를 이용해 딥러닝 모델을 학습하는지에 관한 내용이었다. 다수의 GPU를 사용하여 학습하는 것을 분산 학습이라고 부르고 있고, 이를 수행하는 방식에 대해 설명해주었다. 분산학습을 이용해 하나의 GPU를 사용하는 경우보다 큰 batch_size를 가질 수 있게 되었고, 모델을 학습할 때 더 다양한 상황의 loss를 계산 가능하게 되었다. 세미나 마지막에 일단 GPU-CUDA 연산량을 100%를 달성할 수 있도록 코딩하는 것이 중요하고, 이를 달성하고 나서 분산학습을 고려하라는 이야기가 굉장히 인상적이었다. 단순히 GPU를 한 장 더 사야지만 생각하고 있던 나에게 큰 물음을 주게하는 이야기였다. 매번 컴퓨터 하드웨어와 이를 활용하는 방안에 대해 정리해주고, 하드웨어 및 코딩 지식을 전달해주는 욱수형에게 감사하다는 이야기를 전하고 싶다.
금일 세미나는 욱수오빠가 ‘시간 단축을 위한 분산 학습의 원리와 코딩 최적화’라는 주제로 진행해주셨다. 초기 딥러닝이 제안된 이후 오랜 기간 딥러닝 발전이 어려웠던 데에는 이를 뒷받침할 수 있는 computing power가 부족했기 때문이다. 이런 맥락에서 GPU의 발전은 알고리즘 발전에 직접적으로 기여하게 되었다. 대표적으로 ImageNet competition과 같이 최근 연구 동향을 살펴보면, 이러한 자본으로 인한 성능 격차가 점점 커지고 있음을 알 수 있다. 따라서, 추후에는 더더욱 memory와 학습속도에 대한 이슈가 중요해질 것이며 오늘 세미나는 이러한 문제를 어떻게 개선할 수 있는지에 대한 분산학습에 대한 기술적인 내용을 다루어 주셨다. 데이터가 매우 큰 경우와 모델의 구조가 큰 경우 각각 사용하기 적합한 data, model parallelism 분할방식과 sync, async parameters와 같은 동기화 방식, all-reduce, ring-all-reduce와 같은 데이터 취합방식에 대해 알 수 있었다. 다소 생소했던 동기화방식에서 sync방식은 분산처리가 모두 끝났을 때 parameter를 업데이트 하는 방식을 의미하고, async는 각 분산처리 job마다 parameter를 업데이트하는 방식인 것을 알 수 있었다. 여러 분산처리 및 GPU효율에 대해 알아볼 수 있는 기회가 흔하지 않은데, 금일 세미나를 통해 전반적인 흐름에 대해 알 수 있었을 뿐더러 pytorch환경에서 간단하게 구현할 수 있는 기술적인 방안에 대해서도 공유해 주셔서 재미있고, 유익했던 시간이었다. 다시한번 욱서 오빠께 쉽게 접하지 못한 내용들에 대해 다루어 주셔서 감사하다는 마음을 전하며 세미나 후기를 마친다.
금일 세미나는 욱수 형님이 평소의 연구실 세미나에서 접하던 주제와 달리 분산학습의 원리와 수행 방법에 대한 신선한 주제로 세미나를 진행해주셨다. 근래의 딥러닝 알고리즘에서는 모델의 파라미터의 수가 기하급수적으로 증가함에 따라 '모델의 학습 시간 단축'이 중요한 과제 중 하나로 자리잡았다. 따라서 분산 학습은 학습 시간을 단축하는데 필수적인 기술 중 하나다.
오늘 욱수 형님은 이 분산 학습의 전반에 대해 훑어주셨다. 분산 학습은 크게 작업 분할, 동기화, 데이터 취합의 세 영역의 특징에 따라 구분된다. 먼저 작업 분할 방식은 데이터를 분할하여 시간을 단축시킬지, 모델을 분할 학습시켜 시간을 단축시킬지로 나뉜다. 다음으로 동기화 방식은 Gradient Descent Search의 업데이트의 주기에 따라 Synchronous와 Asynchronous replication으로 나뉜다. Synchronous 방식의 경우 분산처리가 모두 끝났을 때, 파라미터 업데이트를 하는 방식이고, Asynchronous replication은 각 분산 모델이 1 Step을 지날때마다 파라미터 업데이트를 하는 방식이다. 마지막으로 분산된 작업들을 통합하여 처리하는 과정에 따라 AllReduce와 Ring-AllReduce로 구분된다. AllReduce는 모든 프로세스의 그래디언트를 파라미터 서버 역할을 하는 GPU로 모으고 이 GPU에서 취합 후 축소 작업을 수행 한 다음에 나머지 프로세스에 배포하는 방식이다. 반면, Ring-AllReduce 방식은 AllReduce와는 달리 파라미터 서버 역할을 하는 GPU를 없애고 각 프로세스들을 고리 형태로 구성하여 이 고리를 순환하며 파라미터의 일부를 다음 프로세스로 넘겨줌으로써 고리가 한바퀴를 완성했을때 모든 프로세스에 분산된 부분이 취합이 완료된 결과를 얻는 방식이다.
욱수형님이 발표를 너무 잘해주셔서 전혀 생소했던 분산 학습에 대해 세미나만으로도 많은 것을 얻을 수 있었다. 평소 많이 접하던 분야와는 사뭇 다른 분야에 대해 시야를 넓혀 준 욱수 형님께 다시 한번 감사의 뜻을 전한다.
이번 세미나는 ‘시간단축을 위한 분산학습의 원리와 코딩 최적화’라는 주제로 고려대학교신공학관 218호에서 신욱수 연구원님 발표로 진행되었습니다. DMQA(Data Mining & Quality Analytics) 연구실 또한 최근 많은 수의 데이터와 이를 활용하기 위해 복잡해진 모델을 쓰면서 연구를 진행중에 있습니다. 이렇게 되면서 한정적인 컴퓨팅 리소스에서 원하는 수준의 속도와 성능을 발휘하는 것은 많은 연구원들에게 도전적인 일이 되고 있습니다. 이러한 문제를 해결하기 위한 방안 중에 하나로 오늘의 주제이기도 한 분산 학습이 주로 사용되고 있습니다.
분산학습은 크게 3가지로 나눠서 생각해볼 수 있는데 작업 분할 방식, 동기화 방식 그리고 데이터 취합 방식입니다. 작업 분할 방식은 데이터를 쪼개는 방식과 모델을 쪼개는 방식으로 나누어 볼 수 있습니다. 일반적으로 연구를 수행할 때는 데이터를 쪼개는 방식이 직관적이고 나누어진 가중치들을 나중에 통합하는 형태로 진행되므로 분산 학습이 필요할 때 먼저 적용해볼 수 있다고 생각합니다. 모델을 쪼개는 것은 모델이 상당히 복잡하거나 GPU 성능이 부족할 때 사용해볼 수 있습니다. 동기화 방식은 가중치들을 업데이트하는 시기에 따라 설명할 수 있는 것입니다. 마지막으로 데이터 취합 방식은 All-Reduce, Ring-AllReduce 등으로 나누어 볼 수 있습니다. 위와 같은 여러 방식들을 상황에 맞게 잘 이용하여 분산 학습을 하면 한정된 자원 안에서 효율적으로 실험과 연구를 진행할 수 있을 것이라 생각합니다. 처음 접하는 내용인데도 집중이 되고 이해가 쉽게 되는 세미나를 진행해주신 신욱수 연구원님에게 감사의 인사를 전하며 짧은 후기를 마치도록 하겠습니다.
이번 세미나는 '시간 단축을 위한 분산 학습의 원리와 코딩 최적화'를 주제로 진행되었다. 기존에 진행되던 세미나와는 다른 맥락의 주제라서 더욱 흥미롭게 다가온 것 같다. 딥러닝 알고리즘이 발전되어가면서 점점 학습해야할 파라미터의 수가 많아져 GPU의 활용도가 높아지고 있다. 오늘 세미나는 Multi-GPU의 활용과 함께 학습 시간의 단축 및 GPU의 충분한 사용을 위하여 필요한 분산 학습에 대하여 알아보았다. 분산 학습에는 작업 분할 방식, 동기화 방식, 데이터 취합 방식의 총 3가지 방법이 존재한다. 이 중에서 사용자의 상황에 맞는 방식을 취사선택할 수 있으며, 이번 세미나 시간에서는 작업 분할 방식으로는 Data Parallelism을, 동기화 방식은 Asynchronous replication, 마지막으로 데이터 취합 방식은 Ring-Allreduce를 사용하는 것으로 추천해주셨다. 이 중에서 가장 신선한 방식이라고 생각된 Ring-AllReduce방식은 하나의 메인 GPU를 설정하는 것이 아니라, 서로 순환하면서 파라미터 값들의 일부를 보내어 최종적으로 완성된 파라미터를 마지막에 공유하는 형태로 진행된다. 이러한 분산 처리를 잘 활용한다면 개인 연구도 효율적으로 진행할 수 있을 것이라는 생각이 들었다. 앞으로 연구를 진행할 때 세미나 시간에 직접 설명해주신 코드를 기반으로 분산 처리도 활용해보고 싶다.
금일 세미나는 시간 단축을 위한 분산학습의 원리와 코딩 최적화라는 주제로 신욱수 연구원님이 발표해주셨다. 분산학습이란 딥러닝 모델 학습에 필요한 연산을 다중 GPU에 할당하여 학습하는 것이 목표이다. 분산 학습의 방식 중 모델의 연산 장소를 분리하는 방식과 데이터를 서로 다른 GPU에서 연산하는 작업분할 방식에 대해 소개해주었다. 다음으로 파라미터 업데이트 방식인 동기화 방식과 모델의 파라미터를 기억하고 저장하는 데이터 취합 방식에 관한 소개를 해주었다. 소프트웨어(알고리즘) 위주의 기존의 세미나와 달리 하드웨어의 적절한 사용에 관한 세미나라는 것이 새로웠다. 컴퓨터공학을 전공을 한 나로써는 매우 흥미로웠고, 앞으로 대용량 데이터에 대해 모델 학습을 진행할 때 Pytorch의 nn.data.parallel 패키지를 사용한다면 효과적인 모델 학습을 진행 할 수 있을 것 같다고 생각했다. 새로운 내용과 매끄러운 발표를 진행해준 신욱수 연구원님께 감사를 표한다.
이번 세미나는 분산학습의 원리와 코딩 최적화를 주제로 진행되었습니다. 현재 딥러닝은 다양한 방면에서 좋은 성능을 내며 많은 사람의 관심을 받고 있습니다. 하지만 좋은 성능을 내기 위해 모델의 크기가 커짐에 따라 학습을 위해 필요한 파라미터 수와 메모리가 점차 증가함에 따라 딥러닝 모델을 학습하기 위해서는 GPU가 필수적으로 되었습니다. GPU를 하나만 사용할 경우 큰 문제가 없지만 여러 개의 GPU를 사용할 경우 어떻게 분산해서 학습할지에 대한 문제가 발생합니다. 분할 학습하는 방식은 작업 분할, 동기화, 데이터 취합 방식에 따라서 구분되며 이번 세미나에서는 Data Parallelism, Asynchronous replication, Ring-All Reduce 방식을 사용할 것을 추천하셨습니다. 작업 분할 방식은 Data Parallelism과 Model Parallelism이 있습니다. Data Parallelism은 데이터를 분할하여 학습하는 방식으로 데이터의 분할은 학습에 쉽게 적용할 수 있어 많이 사용되는 방식입니다. 반면 Model Parallelism은 모델을 분할하는 방식으로 데이터를 분할하는 것에 비해 어렵고 때에 따라 성능이 잘 나오지 않을 수 있어 실제 학습에 적용하기 어려운 점이 있습니다. 동기화 방식에는 Synchronous와 Asynchronous replication이 있으며 Synchronous는 모든 분산처리가 끝나고 한 번에 파라미터가 업데이트되며 Asynchronous는 각 분산처리가 끝날 때마다 파라미터가 업데이트되는 방식입니다. Asynchronous 방식은 Synchronous 방식보다 수렴하는 속도가 느릴 수 있지만 분산하는 양이 많아질수록 시간을 효율적으로 사용할 수 있기 때문에 Asynchronous 방식이 선호됩니다. 마지막으로 데이터의 취합 방식에 따라 All-Reduce와 Ring-All Reduce 방식으로 구분이 가능합니다. All-Reduce 방식은 파라미터 서버를 별도로 지정해 해당 서버에서 모든 gradient를 취합해서 파라미터를 업데이트하게 됩니다. 단순하게 사용이 가능하지만 파라미터 서버에 부하가 걸리는 단점이 있습니다. Ring-All Reduce 방식은 별도의 파라미터 서버가 없이 각 GPU를 순환하며 파라미터를 업데이트하게 되고 기존의 All-Reduce 방식보다 처리해야 하는 데이터 수가 많아지게 되면 효율적으로 작동하게 됩니다. 이번 세미나를 통해서 분산학습에 대해 처음 접하게 되었으며 처음 접하는 내용이었지만 다양한 시각 자료들을 통해 쉽게 이해할 수 있어 좋았습니다. 쉽게 이해할 수 있도록 열심히 세미나를 해주신 신욱수 연구원님께 감사의 뜻을 표합니다.
이번주 세미나는 욱수형이 “시간 단축을 위한 분산학습의 원리와 코딩 최적화”라는 주제를 가지고 진행하였다. 우리가 하고자 하는 연구에는 data, computer, algorithm 등 다양한 것들을 요구한다. 또한 이런 알고리즘이 복잡해 질수록 처리해야할 파라미터가 늘어나며 파라미터가 늘어남으로써 연산에도 많은 시간이 걸린다. 이러한 문제를 해결하기 위해서는 배치사이즈를 줄이거나 모델 사이즈를 줄일 수도 있으며 반대로 multi-GPU를 활용함으로써 해결할 수도 있다. Multi-GPU 방식에는 크게 작업 분할 방식, 동기화 방식, 데이터 취합 방식에 해당하는 3가지 방식이 존재한다. 작업 분할 방식에는 모델을 여러 GPU에 분산하여 처리하는 방법과 데이터를 여러 GPU에 분산하여 처리하는 방법이 있으며 동기화 방식에는 Synchronous방식과 Asynchronous방식 두가지가 존재한다. 데이터 취합 방식에는 All-Reduce, Ring-AllReduce 방식이 존재하며 이중 한가지 방식을 상황에 맞게 선택하여 사용하면 된다. 욱수형의 세미나를 들으면서 느낀점은 지금 내가 가지고 있는 GPU를 100% 잘 활용하면 그때 multi-GPU방식을 사용해도 늦지 않다는 점이다. 기존의 세미나 주제와 다른 컴퓨팅분야에 대해 쉽게 설명해준 욱수형에게 감사하다는 말을 전하고 싶다.
이번 세미나의 주제는 시간 단축을 위한 분산학습의 원리와 코딩 최적화이다. 알고리즘이 복잡해지고 파라미터 수도 많아지는 만큼 한정된 컴퓨팅 자원으로 이를 처리하기 위해서 다양한 방법들이 존재한다. 그 중에는 단순히 배치나 모델 사이즈를 줄이는 방법이 있지만 여러 장의 GPU를 사용하여 분산 처리를 하는 방법도 있다. 분산 학습은 크게 작업 분할 방식, 동기화 방식, 데이터 취합 방식에 따라서 나뉜다고 볼 수 있다. 여기서 작업 분할 방식은 여러 GPU에서 분산 처리할 때 모델을 나눌지 데이터를 나눌지에 따라 결정된다. 모델이 큰 경우에는 모델을 나누는 방식을 사용하지만 데이터를 나누는 방식이 좀 더 사용하기 편하고 모든 모델에 적용할 수 있다. 동기화 방식은 Synchronous와 Asynchronous 한 방식으로 나뉜다. Asynchronous방식은 각 분산 처리마다 파라미터를 업데이트를 하는 반면 Synchronous 방식은 분산처리가 모두 끝난 다음에 파라미터를 업데이트하기 때문에 수렴이 상대적으로 빠르다는 장점이 있다. 하지만 분산 처리를 맡을 수 있는 GPU의 수가 많아질수록 Asynchronous 방식이 더 효율적이라고 한다. 데이터 취합 방식은 All-Reduce와 Ring-AllReduce 방식으로 나뉜다. 여기서 Ring-AllReduce 방식은 GPU를 순환하면서 보낸 일부 파라미터들을 마지막에 공유하는 방법을 취한다. 이는 UBer에서 개발한 Horovod라는 패키지를 쓰면 간편하게 구현할 수 있다고 한다. 최근에 수업 과제나 프로젝트에서 조금씩 딥러닝을 써보고 있는 중인데 가지고 있는 컴퓨팅 자원에 맞춰서 모델을 실행한다는 것이 얼마나 중요한지를 알아가는 차에 분산 처리를 듣게 되어서 정말 귀담아 들을 수 있었다. 좋은 모델을 많이 알고 이해하는 것도 중요하지만 결국엔 어떻게 실행할 것인가에 대한 고민이 꼭 필요하다는 것을 알게 된 세미나였다. 접해보기 힘든 분야를 쉽게 정리해주신 욱수형께 감사하다는 이야기를 전하고 싶다.
시간단축을 위한 분산학습의 원리와 코딩 최적화를 주제로 금일 신욱수 연구원이 세미나를 진행했다.
Deep Learning 수행 시 데이터량이 많거나 모델의 파라미터 수가 많은 경우 메모리가 부족하거나 학습속도가 느려 오랜 시간이 걸리는 상황에 부딪히는 경우에 직면하게 된다.
이런 경우에 분산 학습을 사용하면 해당 문제를 해결할 수 있는 데, 크게는
- 작업 분할 방식: data or model parallelism
- 동기화 방식: sync or async parameters
- 데이터 취합 방식: all-reduce or ring-all-reduce으로 구분할 수 있으며
신욱수 연구원은 일반적으로는 data / async / ring-all-reduce 조합을 추천해 주었다
내용을 보면서 빅데이터나 빅파라미터의 모델을 다루기 위해서는 컴퓨터의 구조에 대한 이해도 높아야 된다는 생각이 들었다.
분산 처리를 하기 위해서 분산 작업 간의 스케쥴링이나 결과값의 취합이 생각보다 많이 복잡하기 때문이다.
아직은 컴퓨팅 파워가 계속 증가하기 때문에 분산 처리가 많은 주목을 받고 있지 않지만 향후에 컴퓨팅 파워가 한계에 다다르면 분산 처리에 대한 관심이 폭증 할 거라 생각한다.
좀 더 쉽게 접근할 수 있도록 일반화되는 분산 처리가 될거란 기대를 가지며, 친절하고 쉽게 세미나를 끝마친 신욱수 연구원에게 감사의 말을 전한다.
금일은 분산 학습 원리에 대한 주제로 세미나가 진행되었다. 분산 학습에 대해 기초적인 내용과 사용 방식에 대해 공부할 수 있는 시간이었다. AI 알고리즘이 계속해서 복잡해지면서 처리할 파라미터가 늘어나고 이에 따라 필요한 메모리도 늘어나고 있다. 한정된 하드웨어 내에서 복잡한 알고리즘을 사용하기 위해 우리는 주로 배치 사이즈를 줄이는 방식을 활용하고 있다. 모델 자체 사이즈를 줄이는 것도 한가지 방법일 수 있으나, 모델을 경량화 하며 성능을 유지하는 일은 연구 주제가 될 정도로 어려운 방법이기 때문에 주로 배치 사이즈를 줄여 사용하고 있다. 현재 대부분 연구원들이 가지고 있는 GPU는 한 개이지만 GPU가 2개 이상이라면 우리는 분산 학습을 통해 2개 이상의 GPU를 동시에 활용하며 작업 효율을 높일 수 있다. 분산 학습을 하는 방식은 크게 3가지 갈래가 있다. 어떤 작업을 분할할 것인가에 따라 Model Parallelism과 Data Parallelism, 동기화 방식에 따라 Synchronous와 Asynchronous replication, 취합 방식에 따라 All-Reduce와 Ring-AllReduce로 구분된다. 여기서 신기했던 점은 이미 예전부터 한정된 자원에서 복잡한 알고리즘을 돌리기 위해 분산 처리 방식이 적용되고 있다는 것이었다. 2012년에 나온 논문에서 3GB 밖에 안되는 GPU로 사이즈가 큰 데이터를 처리하기 위해 분산 처리 방식을 적용하고 있었다. 해당 논문은 이전에 봤던 것이었지만 이처럼 분산 학습을 진행하고 있었다는 사실은 전혀 알지 못했었다. 이번 세미나를 들은 이후부터는 논문 내에 데이터를 처리하기 위해 어떤 방식을 취했는지에 대해서도 관심을 갖으며 읽겠다고 생각했다. 새로운 영역에 대해서 알기 쉽게 설명해주신 욱수형에게 감사하다고 말씀드리고 싶다.
딥러닝 모델의 크기가 기하급수적으로 증가하면서 분산학습에 대한 관심이 많아지고 있다. 최근 공개되는 논문들만 보아도 GPU 3~4장은 기본으로 사용하며 많게는 수백, 수천 장의 GPU를 통해 큰 배치 사이즈로 빠른 학습을 진행한다. 핵심적으로 여러 대의 GPU에 나누어 전파/역전파 계산을 한 이후, 신경망 업데이트를 위해 계산한 그레디언트(gradient)를 병합해주는 과정이 필요하다. 파라미터 서버(parameter server)를 사용하여 하나의 GPU에서 병합을 해주는 방법은 가장 직관적이지만, GPU간 메모리 불균형이 발생하여 학습 모델의 크기에 제약이 발생한다. 오늘 주요하게 다룬 Ring Reduce 방식은 GPU간 최소한의 통신으로 메모리 균형을 맞추는데, horovod 등 많은 분산학습 플랫폼에서 이를 활용하고 있다고 한다. 우리 연구실 특성상 관심을 갖기 어려운 분야인데 신욱수 발표자님께서 쉽고 직관적인 설명을 해주셔서 많은 연구원들이 쉽게 이해한 것 같다. 더 큰 모델을 학습하기 위한 노력의 일환으로 요새 분산학습과 더불어 mixed precision 학습도 크게 각광을 받고 있는데 누군가 세미나를 열어주면 좋을 것 같다는 생각이 든다.
이번 세미나의 주제는 분산학습에 관한 내용이었다. 그 동안의 세미나에서 다뤘던 내용과는 조금 다른 내용이지만 딥러닝과 관련된 내용이다. 분산학습은 말 그대로 여러 대의 연산 장치가 일을 나누어 작업하는 것이다. 최근 딥러닝에서는 gpu 하나로 학습이 불가능한 경우가 가끔 있다. 이럴 경우 여러 대의 gpu가 같이 작업을 할 수밖에 없는데, 이러한 경우 일 분배를 어떻게 하느냐에 따라 연산 속도가 차이나게 된다. 아직은 널리 사용되고 있지는 않지만, 딥러닝 모델들이 점점 커지고 gpu의 발전 속도에도 한계가 있기 때문에 점점 많이 사용될 것 같다. 현재도 dgx 스테이션을 사용하긴 하지만, 여러 대의 gpu를 동시에 사용한 적이 많지 않다. 이를 위해 여러 패키지도 있으며 소프트웨어들이 나와 있다. 관련 분야를 개발하는 사람은 아니지만, 적어도 딥러닝을 사용하면서 컴퓨팅 활용 면에서 알고있으면 좋은 개념들인 것 같다.
이번 세미나는 ‘시간 단축을 위한 분산 학습의 원리와 코딩 최적화’ 라는 주제로 진행되었다. 기존 세미나 주제들과는 좀 다르게 컴퓨팅 파워와같은 하드웨어적인 이야기가 나와서 색다르고 흥미로웠다.
데이터가 많아지고 알고리즘이 복잡해 질 수록 많은 리소스가 필요하고 그에따라 GPU 사용하고 있지만 그것도 부족하여 여러장을 병렬로 사용할 수 없을까 하는 생각을 할때가 있다. 다루기 어렵지만 Multi-GPU 를 사용하는 방법이 있다고만 들었었는데 이번 시간을 통해 알 수 있었다.
크게 작업분할 방식( 데이터 또는 모델 paralelism) , 동기화 방식( sync 또는 async ), 데이터 취합방식(all-reduce 또는 ring-all-reduce) 으로 나눌 수 있다. 이 중 데이터 분할 방식이 좀 더 쉽고 모든 모델이 적용해볼 수 있고, 동기화는 Async 방식이 GPU 사용에 더 효율적이라고 설명해 주었다. 그리고 데이처 취합방식으로는 Horovod 를 사용하면 Ring-Allduce 를 쉽게 할 수 있다고 추천해주었다.
세미나 말미의 summary 가 가장 인상 적이 었는데, 우선 GPU 1장에서 메모리와 코어를 알차게 다 사용할 수 있도록 우선 코드를 개선해보라는 조언이었다.
그동안 잘 몰랐던 하드웨어 리소스를 잘 활용하는 방법에 대해 재미있고 이해하기 쉽게 알려주신 신옥수 연구원님께 감사의 인사를 드린다.
금일 세미나는 “시간 단축을 위한 분산 학습의 원리와 코딩 최적화” 주제로 욱수형이 발표했다. 최근 딥러닝 모델, 사용하는 데이터 크기가 증가하면서 분산 학습은 필수 요소가 되어가고 있다. 분산 학습은 모델이나 데이터를 여러 대의 연산 장치를 사용하여 나누어 작업하는 것이며 학습 속도나 처리하는 시간을 줄이는데 효율적이다. 최근 논문들에서는 제안 방법론 실험 장비에 대해 언급하며 분산 학습을 진행하는 경우가 대다수이고 적용하기 위한 패키지들이 구현되고 있다. 우리 연구실에는 관심 갖기 어려운 분야일 수 있지만 딥러닝 모델, 사용 데이터의 크기가 증가하는 추세에 맞게 분산 학습에 대해 공부할 필요가 있다고 생각한다. 개인적으로 오늘 세미나는 연구하는데 있어서 분산 학습, 코딩 최적화의 중요성을 다시 한 번 깨닫고 추후 연구를 위해 공부해볼 생각이다.
금일 세미나는 욱수형이 시간 단축을 위한 분산학습의 원리와 코딩 최적화라는 주제로 세미나를 진행해주었다. 금일 세미나는 데이터마이닝을 위한 새로운 알고리즘, 논문 소개가 아닌 우리가 평소 실험에서 사용하는 컴퓨터의 데이터 처리 방법과 실험 시간이 느린 문제를 해결해 줄 수 있는 보다 실용적이고 필수적인 이야기들이었다. 새로운 알고리즘이나 방법론에 대한 세미나는 내가 추후 프로젝트에 적용해보고 싶거나, 새롭게 공부하고 싶을 때 필요한 이야기였다면 분산 학습의 원리에 대한 이야기는 내가 앞으로 연구를 하는데 있어서 꼭 필요한 이야기 같았다. 최근 새롭게 연구되어온 알고리즘의 파라미터 수는 기하급수적으로 증가하여 가끔 메모리 한계의 장벽에 부딪히곤 한다. 이러한 현실적인 부분에서 데이터나 모델을 원하는 업무에 맞춰 분산 처리 및 학습을 진행하게 해주면 보다 문제를 해결해줄 수 있다고 한다. 물리적인 문제를 해결하는 방법들에 대하여 이해하기 쉽고 재밌게 설명해주셔서 더 쉽게 이해할 수 있었던 것 같다. 단순히 모델이 커서 돌리지 못한다고 생각했던 자신이 조금 부끄럽게 느껴졌고, 앞으로는 이러한 부분들에 대해서 욱수형이 이야기해줬던 방법들로 해결해야겠다고 생각했다. 오늘도 유익한 자료를 설명해주신 욱수형에게 감사하다.
오늘 세미나는 "시간 단축을 위한 분산학습의 원리와 코딩 최적화"를 주제로 욱수형이 진행하였다. 어려운 문제일 수록 예측모델의 복잡도는 올라가기 마련인데 그에 상응하는 하드웨어는 제한적이다. 하드웨어 자원이 한정적인 상황에서 효율적인 모델 학습을 이루기 위한 접근 법이 분산학습과 코딩 최적화다. 손쉬운 방법으로는 배치사이즈와 모델 사이즈를 조정하는 것인데 이는 예측성능과 직결되는 조치이기 때문에 좀더 효율적인 방법이 필요하다. python에서 가장 먼저 생각해 볼 수 있는 방법이 pytorch에서 data loader를 사용하여 multi-gpu를 가동하는 방법이다. 또한, 작업분할, 동기화, 데이터 취합방식으로 진행하는 방법이 있다. 최근 현대자동차 빅데이터실 프로젝트를 진행하며 그동안 좋은 GPU하나를 잘 활용하면 된다고 생각했던 생각이 어려움에 부딪히는 중이었는데 오늘 세미나로 좀더 효율적인 작업방식을 채택할 수 있을 것 같다. 우리 연구실에서 욱수형만이 진행할 수 있는 세미나였다. 수고 많으셨습니다.