DeepLearning 프레임워크 벤치마크

소개



요즈음, Deeplearing 열의 증가로부터 많은 Python을 사용한 Deeplearning 프레임 워크가 등장하고 있습니다. 현장에서 사용할 때 요구되는 것은 유연성이나 구현의 용이성 외에 처리 속도의 속도 등이 중요하다고 느낍니다. 그래서 Qiita에서는 프레임 워크 간의 처리 속도 비교에 관한 기사가 없기 때문에이 기사를 집필했습니다. 또, 이러한 결과는 환경에 의존하는 이야기이므로, 수중에서 시험할 수 있도록(듯이) 소스 코드를 공개하고 있습니다[ Github (개발중)].

환경







힘든
AWS g2.2xlarge

OS
우분투 16.04

파이썬
3.6.3

CUDA
8.0

cuDNN
6.0

Chainer
4.0.0b1

CuPy
4.0.0b1

Pytorch
0.4.0a0+5215640

Tensorflow
1.4.0

mxnet
0.12.1


기타 전제


  • (3, 28, 28) 더미 데이터 사용.
  • CNN (6 층 CNN + 3 층 FC)
  • 반복 횟수 1000

  • 결과



    1. 계산이 끝날 때까지의 총 시간





    2. 샘플당 계산 시간(=total_time/batch_size)




    어느 프레임워크도 배치 사이즈 2000당으로 계산 시간이 두드리기 시작하고 있다.

    3. 1 배치의 계산 시간






    *tensorflow는 버그가 있어 계측할 수 없었습니다.

    4. 결과 정보



    나의 환경에서는 결과로서, 작은 배치 사이즈에서는 mxnet이 제일 빠르고, 큰 배치 사이즈에서는 Pytorch가 제일 이른다고 하는 결과가 되었습니다. 그러나 환경이 다르면 물론 결과도 다릅니다. 또, 멀티 GPU를 이용했을 때의 결과는 크게 됩니다. Chainer가 느린 것처럼 보이지만 반드시 그런 것은 아닙니다.

    5. 큰 배치 크기로 실험하는 의미



    일반적으로 배치 사이즈를 크게 하면 정밀도가 떨어진다고 합니다. 그러나 최근에는 Facebook에서 시작되어 많은 팀이 큰 배치 크기로 학습을 성공시키고 있습니다. 따라서 앞으로는 분산 병렬이나 멀티 GPU를 이용해 큰 배치 사이즈로 스케일하는 프레임워크의 수요가 늘어나는 것은 아닐까요.

    소스 코드 정보 [ Github (개발 중)]



    1. pytorch 설치



     우선 pytorch를 설치해야 합니다. 이것은 GPU를 사용한 계산은 비동기적으로 처리가 이루어지기 때문에 처리 시간을 적절히 계측하기 위해 cudaEvent를 사용하여 적절하게 동기화를 취해야 하기 때문입니다. (CuPy나 PyCUDA에도 같은 방법이 있습니다만, 2017/11/23 현재, PyCUDA는 CUDA9.0에 대응하고 있지 않습니다.)

    2. 지원되는 Deeplearning 프레임워크




    DL
    CPU
    Single GPU
    MultiGPU


    pytorch
    ?
    o
    o

    chainer
    ?
    o
    o

    mxnet
    ?
    o
    o

    tensrflow
    ?
    o
    x

    neon
    ?
    x
    x

    cntk
    ?
    x
    x

    caffe2
    ?
    ?
    ?


    3. 실행 방법


    $ git clone https://github.com/0h-n0/DL_benchmarks.git
    $ cd DL_benchmarks
    $ pip install -r requirements.txt
    $ python -m benchmark.main  ## default framework is pytorch
    $
    $ # You can change framework.
    $ python -m benchmark.main with framework=chainer
    $ # And also, change batch size.
    $ python -m benchmark.main with framework=chainer batch_size=2000
    $ # get info of command line options
    $ python -m benchmark.main print_config
    $
    $ # check results
    $ cd results/<your experiment id>
    $ cat results.json
    

    좋은 웹페이지 즐겨찾기