벤치마크 결과
DAWNBench는 여러 경연을 통해 다양한 딥 러닝 기법을 비교하기 위해 고안된 스탠포드 대학(Stanford University)의 프로젝트입니다. Dawnbench 대회 중에서도 CIFAR 10 와 Imagenet 경연이 눈길을 끌었는데요. 두 대회는 특정 정확도(Imagenet: 93%, CIFAR 10: 94%)를 달성하는 가장 신속하고, 가장 저렴한 이미지 분류기의 구현을 목표로 합니다.
CIFAR 10 대회에서 fast.ai의 출전작들이 트레이닝 신속성, 경제성 부문에서 모두 우승을 거두었는데요. 뿐만 아니라 fast.ai 소속의 학생인 벤 존슨(Ben Johnson)은 DARPA D3M 프로그램을 기반으로 단독 출전해서 두 부문에서 간발의 차이로 2위를 차지했습니다.
fast.ai는 Imagenet 대회에서 다음과 같은 결과를 거두었습니다.
- 공개 인프라스트럭처, GPU, 단일 머신 기준 각각 최고 속도 (머신 128개로 구성된 클러스터를 사용한 인텔(Intel)의 출전작 보다 더 빨랐음)
- 최저 실비 (DAWNBench의 공식 결과에서는 fast.ai의 실제 비용을 적용하지 않음).
이번 대회의 교훈을 종합하자면 다음과 같습니다.
- 알고리즘적 창의성이 베어 메탈(bare-metal) 성능보다 더 중요하다.
- 페이스북 인공지능 연구진(Facebook AI Research)가 여러 협력사와 개발한 파이토치(Pytorch)는 빠른 반복과 디버깅을 허용하여 이러한 알고리즘적 창의성을 지원할 수 있다.
- 아마존웹서비스 스팟 인스턴스(AWS spot instance)는 빠르고 저렴하게 많은 실험을 구동할 수 있는 뛰어난 플랫폼이다.
CIFAR 10
CIFAR 10과 Imagenet은 모두 이미지 인식 태스크입니다. 예를 들어, 개와 고양이 사진 세트가 있는데, 자동으로 분류하는 툴을 구축하고 싶다고 생각해보세요. 모델을 구축한 뒤 여러 사진으로 트레이닝을 해서 이후에는 처음 보는 개, 고양이 사진도 분류를 할 수 있게 됩니다. 그 후에는 모델을 CIFAR처럼 더 큰 데이터 세트에 적용합니다. CIFAR는 개, 고양이뿐 아니라 다른 동물, 기기 등 10가지 종류로 구성된 사진 세트입니다. 이미지가 작아서(32×32 픽셀), 데이터 세트도 작고(160MB), 작업이 쉽습니다. 요즘 유행하는 데이터 세트보다 오래되고 작아서 요즘에는 다소 저평가되는 데이터세트인데요. 하지만, CIFAR는 대부분의 조직들이 실제 보유한 데이터 양에 대한 대표성이 높습니다. 이미지 사이즈가 작아서 어렵기는 하지만, 접근성은 좋은 편입니다.
대회 참가를 결정했을 때, 당시 1위를 하고 있던 곳은 한 시간 남짓한 시간에 정확도 94%의 결과를 달성했습니다. fast.ai는 수퍼 컨버전스(super-convergence)로 Resnet 50 모델을 약 15분 만에 트레이닝 할 수 있다는 사실을 발견하고 가슴이 벅찼습니다! 그리고 다양한 아키텍처를 시험해본 후, Resnet 18(전활성화 variant 기준)로 같은 결과를 10분만에 달성할 수 있다는 점을 알았습니다. 수업 시간에도 이에 대해 논의했고, 벤 존슨은 fast.ai가 개발한 “컨캣 풀링(concat pooling: 끝에서 두 번째 네트워크 층에서 최고 풀링과 평균 풀링을 연결)”이라는 기법을 더해 단독으로 추가 개발을 진행해서 엔비디아 GPU 1개로 트레이닝 시간을 단 6분으로 단축했습니다.
fast.ai는 스터디 그룹에서 단일의 머신으로 가장 빠른 결과를 얻기 위해 멀티 GPU 트레이닝에 중점을 두기로 결정했는데요. 여러 머신을 통한 모델 트레이닝은 엔지니어링과 시스템에 가능한 지양해야 하는 복잡성을 더한다는 시각이 대부분이었습니다. 그래서, 단일의 머신에 적합한 기법에 주력했습니다. 또한, 최소의 오버헤드로 여러 GPU를 활용하기 위해 파이토치에 적합한 NCCL 라는 엔비디아의 라이브러리를 사용했습니다.
멀티 GPU 트레이닝에 대한 대부분의 논문과 담론들은 네트워크 트레이닝에 소요되는 시간을 실제로 규명하기 보다는 초당 완결된 작업의 수에 중점을 두고 있는데요. 하지만 fast.ai는 멀티GPU 트레이닝을 할 경우 아키텍처 결과가 아주 다르다는 점을 포착했습니다. 현장에서 더 나은 E2E 트레이닝 결과를 얻기 위해 어떻게 복수의 GPU를 활용할지 제대로 이해하기 위해서는 아직 많은 연구가 필요합니다. 예를 들어, fast.ai는 단일의 GPU에서 원활했던 트레이닝 설정이 멀티 GPU에서는 경사도(gradient) 문제를 야기한다는 사실을 발견했습니다. 기존 논문들의 권고를 접목해 괜찮은 결과를 얻었지만, 머신의 잠재력을 100% 활용하지 못했습니다.
결국 머신에 내장된 GPU 8개를 최대한 활용하기 위해서는 각 배치 별로 작업량을 늘려야 한다는 사실을 알게 되었습니다. 그래서, 각 레이어 별 활성화 수를 늘렸는데요. 이를 위해 많이 알려져 있지 않은 파리테크대학(Université Paris-Est)의 Wide Residual Networks의 연구 논문 중 한 편을 활용했습니다. 이 논문은 여러 residual networks의 구축 접근법을 광범위하게 분석하여, 이들 아키텍처에 필요한 빌딩블록(building block)에 대한 이해를 돕습니다.
같은 스터디 그룹 멤버인 브렛 쿤스(Brett Koonce)는 최적의 솔루션을 찾기 위해 다양한 변수 설정(parameter setting)으로 실험을 시작했습니다. 마침내 만들어낸 넓은 resnet-34 아키텍처는 브렛 쿤스가 고르고 고른 하이퍼 변수(hyper-parameter)를 통해 멀티 GPU 트레이닝으로 3분도 걸리지 않는 시간에 정확도 94%를 달성했습니다.
반정밀도 연산
트레이닝의 또 다른 주안점은 반정밀도(half-precision) 부동소수점 채택이었습니다. 엔비디아의 최신 볼타(Volta) 아키텍처는 반정밀 부동소수점 데이터로만 구동되는 텐서 코어를 장착하고 있습니다. 하지만, 이런 종류의 데이터로 성공적으로 트레이닝을 하는 것은 매우 까다롭습니다. 이들 데이터로 트레이닝 된 모델의 성공적인 실행 사례도 극히 소수입니다.
엔비디아는 fast.ai에 반정밀 부동소수점을 사용한 Imagenet 트레이닝의 오픈 소스 데모를 제공해주었는데요. 앤드류 쇼(Andrew Shaw)는 이 개념을 바로 fastai라고 불리우는 딥 러닝 모델 트레이닝 라이브러리에 접목했습니다. 이제 코드에 learn.half() 라고 쓰면, 바로 거기서부터 반정밀 부동소수점으로 신속·정확하게 트레이닝을 하는데 필요한 모든 절차가 자동으로 진행되는 수준에 도달했습니다.
*본 내용은 fast.ai 채널에 실린 Jeremy Howard의 포스팅 원문 ”Training Imagenet in 3 hours for $25; and CIFAR10 for $0.26” 에서 발췌하였습니다