태그 보관물: Benchmark

Chainer, MXNet, CNTK, TF benchmarking

체이너(Chainer)는 일본에서 만들어져 널리 사용되는 딥러닝 프레임워크입니다. 지난 1월 샌프란시스코에서 열린 딥러닝 서밋을 통해 발표한 체이너의 분산버전의 체이너(Chainer Multi-Node)를 이용해 다른 프레임워크와 비교를 한 결과가 체이너 블로그에 올려졌습니다. 블로그에서도 언급했지만 이는 완벽하게 공정한 벤치마킹이 아닐 수 있습니다. 비교적 체이너가 실험 환경에 최적화되어 있고 다른 프레임워크는 그러지 못했을 수도 있습니다. 그렇더라도 GPU가 증가함에 따라 거의 선형적으로 퍼포먼스가 증가하는 그래프는 대단한 것 같습니다. 이 벤치마킹의 결과는 텐서플로우가 CNTK나 MXNet 과 비교해도 많이 성능이 뒤쳐진 것을 보여 줍니다.

dlsummit_06_framework-samples-per-second

체이너 멀티 노드 프레임워크는 Nvidia 의 니켈(NCCL) 라이브러리를 사용하여 GPU간 데이터 전송을 직접 처리합니다. MXNet과 CNTK가 단일 서버(4 코어까지는 단일 서버입니다)에서 조금 더 높은 성능을 내는 이유는 C++ 구현이기 때문이고 체이너는 파이썬 구현이라는 차이 때문으로 보고 있습니다. CNTK는 체이너 멀티노드처럼 니켈 라이브러리를 사용하지만 서버가 늘어남에 따라 MXNet과 성능 차이가 엇갈리고 있습니다. 텐서플로우가 느린 주된 요인으로는 분산 모드에서 파라미터 서버와 워커 서버간의 gRPC 통신의 오버헤드로 추측하고 있습니다. 스탠드얼론(standalone)일 경우엔 이와 다른 결과가 나올 수 있습니다. 이 벤치마킹에는 분산 기능이 내장되지 않은 씨아노(Theano)나 토치(Torch)는 포함되지 않았습니다.

최근에 나온 또 다른 벤치바킹 자료들에서도 텐서플로우의 성능은 그다지 뛰어나게 평가되지는 못하고 있습니다. 하나는 DyNet 의 페이퍼 ‘DyNet: The Dynamic Neural Network Toolkit‘ 이고 또 다른 하나는 ‘Benchmarking State-of-the-Art Deep Learning Software Tools‘ 입니다. 파이토치를 포함한 더 광범위한 벤치마킹이 진행되길 기대해 봅니다.

Benchmarks for popular CNN models

스탠포드 비전랩의 저스틴 존슨(Justin Johnson)이 콘볼루션 뉴럴 네트워크의 잘 알려진 모델들을 비교 벤치마크한 자료를 깃허브에 공개하였습니다. 이 벤치마크는 토치로 수행되었으며 메모리 부족으로 ResNet-200을 GTX 1080에서 돌리지 못한 것을 제외하고는 모든 모델을 Titan X와 GTX 1080에서 직접 비교할 수 있도록 테스트했습니다. 결과로는 GTX 1080이 모든 모델에 대해 조금 더 빨랐으며 ResNet-50이 VGG-16보다 빠르고 에러도 작았고 ResNet-101은 VGG-16과 비슷한 속도에서 VGG-19보다 훨씬 에러가 작았습니다.

Network Layers Top-1 error Top-5 error Speed (ms) Citation
AlexNet 8 42.90 19.80 23.18 [1]
VGG-16 16 25.60 8.10 232.55 [2]
VGG-19 19 25.50 8.00 281.69 [2]
ResNet-18 18 30.43 10.76 47.07 [3]
ResNet-34 34 26.73 8.74 79.70 [3]
ResNet-50 50 24.01 7.02 153.90 [3]
ResNet-101 101 22.44 6.21 235.33 [3]
ResNet-152 152 22.16 6.16 328.90 [3]
ResNet-200 200 21.66 5.79 [4]

DSSTNE is Faster than TensorFlow

12pbkhxz60gfierig1slclg

아마존의 딥러닝 프레임워크 데스트니(DSSTNE)와 텐서플로우의 벤치마크 내용이 공개되었습니다. 이 벤치마크를 위한 코드는 데스트니 깃허브에서 확인하실 수 있습니다. 데스트니가 처음 공개되었을 때 온라인상에서 데스트니 프로젝트의 리더였었다며 여러 의견을 피력했었던 Scott Le Grand가 미디엄에 이번 벤치마킹과 관련된 을 올렸습니다.

AWS g2.8xlarge 인스턴스의 싱글 GPU에서 무비렌즈 20M 데이터셋을 이용하여 오토인코더를 위한 피드 포워드(Feed Forward) 뉴럴네트워크를 훈련시키는데 데스티가 텐서플로우보다 2배정도 빨랐다고 합니다. 위 그림에서 맨 왼쪽(TensorFlow Single GPU)과 왼쪽에서 두번째(DSSTNE Single GPU)의 노란색 막대 그래프입니다. 또한 두 패키지 모두 AWS에 있는 K520 GPU(2012년 출시) 보다 물리 서버에 장착한 M40 GPU(2015년 출시)에서 더 높은 성능을 내었지만 차이가 있었습니다. 텐서플로우는 M40을 사용해서 약 1.4배 정도 빨라 졌지만 데스트니는 3.4배 더 빨라 졌습니다.(푸른색 막대 그래프) 데스트니가 최신의 GPU의 성능을 더 잘 활용하고 있다고 볼 수 있습니다.

이런 성능의 차이가 나는 점은 텐서플로우가 GPU에 데이터를 로드시키는 데 더 많은 시간을 들이고 있기 때문이라고 합니다. 텐서플로우는 데이터를 numpy의 CSR 포맷과 유사한 형태로 관리하고 있고 데스트니는 파스칼 GPU가 제공하는 자동 메모리 관리 기능을 사용하고 있기 때문이라고 합니다. 데스트니의 또 하나의 장점은 모델 병렬화를 자동으로 해주는 것으로 여러개의 GPU에 연산을 자동으로 분배해 줍니다(데스트니 FAQ에서: DSSTNE can automatically distribute each computation across all available GPUs…). Quad GPU에서 데스트니는 Single GPU의 텐서플로우보다 무려 15배나 더 빠르다고 합니다. 텐서플로우에는 자동으로 모델을 병렬화해 주진 않기 때문에 이번 벤치마크에서는 직접 비교는 안되었지만 추후 텐서플로우 팀에서 이에 대응하는 실험을 할 수 있을 것 같습니다. 아마존이 데스트니를 공개한 것이 심심해서는 아니겠지만 생각보다 세게 나오네요.

Scott 는 Nvidia 출신으로 구글에 입사했으나 자기에게 GPU 코딩을 시키지 않아 금새 그만두고 아마존으로 이직했다고 합니다. 구글에 대한 시각이 그리 좋지는 않은 것 같습니다. TPU를 공개할 때 무어의 법칙의 3세대를 앞섰다고한 구글의 발언을 비꼬아 텐서플로우보다 데스트니를 사용하는게 3년은 더 무어의 법칙을 앞설 수 있을거라고 합니다 : )

텐서플로우와 토치(Torch) 벤치마킹

토치는 루아(Lua) 기반의 딥러닝을 위한 신경망 알고리즘 패키지 입니다. 여러 알고리즘을 벤치마킹하는 Soumith 가 토치와 텐서플로우를 비교해 보았는데요. 결과적으로는 토치의 완승입니다. 텐서플로우가 토치보다 2~3배 가량 느린 것으로 나타났습니다. 이에 대한 내용은 구글팀이 이미 알고 있으면 버그(?) 수정을 위해 작업을 진행하고 있다고 합니다.