텐서플로우 성능 측정 방법


텐서플로우 성능 측정 방법
텐서플로우 성능 측정(Benchmark) GPU 속도 측정 방법에 대해서 설명드립니다. GTX 1080 Ti를 이용하여 Inception, ReNet, AlexNet, VGG 모델 등에 대해서 성능 측정을 테스트 해보도록 하겠습니다. 하나의 GPU를 이용하여 성능을 측정 할 수 있을 뿐만 아니라, 여러개의 GPU를 함께 사용하여 성능 측정 할 수도 있습니다.

성능 측정 스크립트에서 keras_benchmarks 와 tf_cnn_benchmarks 가 제공이 되는데, tf_cnn_benchmarks 를 이용하여 CNN 모델을 테스트 해보도록 하겠습니다. 이더리움 채굴 방법및 채굴 성능과 관련해서는 아래의 글을 참고해 주시기 바랍니다.

우분투 이더리움 채굴 방법

안내

tf_cnn_benchmarks는 많이 사용되고 있는 convolutional models 들이 구현되어 있는데, 이러한 모델들은 가능한 빠르게 실행될 수 있도록 설계되었습니다. 텐서플로우에서 성능 향상을 위해서 사용되는 기술들이 이 모델들에 적용되었는데 이와 관련해서는 아래의 페이지 내용을 참고해 주시기 바랍니다.

https://www.tensorflow.org/performance/benchmarks

GTX 1080 Ti 모델을 통해서 테스트 방법과 결과를 첨부해 드리지만, 다른 Tesla P100, K80 등의 GPU 테스트 결과는 아래의 페이지에서 확인 하실 수 있습니다.

https://www.tensorflow.org/performance/benchmarks

테스트

다음 명령어로 성능 측정 소스코드를 다운받고, scripts/tf_cnn_benchmarks/tf_cnn_benchmarks.py 스크립트를 실행하면 됩니다.

$ git clone https://github.com/tensorflow/benchmarks.git

참고로 tf_cnn_benchmarks 스크립트는 가장 최신버전(nightly version)의 텐서플로우를 필요로 합니다. 텐서플로우가 최신 정식버전(stable version)일 경우에도 실행되지 않을 수 있는데, 이 경우 아래의 명령어를 이용하여 텐서플로우를 업그레이드 후 실행해 주시기 바랍니다.

$ sudo -H pip install --upgrade tf-nightly-gpu

텐서플로우 GPU 성능 측정 스크립트에서 다양한 옵션을 사용할 수 있는데, 사용가능한 옵션은 아래의 명령어로 확인 할 수 있습니다.

$ scripts/tf_cnn_benchmarks/tf_cnn_benchmarks.py --help

tf_cnn_benchmarks.py 스크립트에서 사용되는 주요 옵션 값은 아래와 같습니다.

  • model : 성능측정에 사용될 모델입니다. resnet50, inception3, vgg16, 그리고 alexnet 등이 있습니다.
  • num_gpus : 사용될 gpu의 개수입니다.
  • data_dir : 처리될 데이터 디렉터리입니다. 지정되지 않았을 경우, 가짜 데이터가 사용됩니다.
  • batch_size : 각 GPU에서 사용될 batch size 입니다.
  • variable_update : 변수가 관리되는 방법으로 parameter_server ,replicated, distributed_replicated, independent를 선택할 수 있습니다.
  • local_parameter_device : 파리미터 서버로 사용될 장치로 cpu 또는 gpu를 선택할 수 있습니다.

아래의 명령어는 실행예 입니다. 1개의 GPU를 이용하여 ResNet50 모델의 성능을 측정하며, batch_size는 32로 지정하였습니다.

$ python scripts/tf_cnn_benchmarks/tf_cnn_benchmarks.py --num_gpus=1 --batch_size=32 --model=resnet50 --variable_update=parameter_server

실행결과는 다음과 같습니다.

TensorFlow:  1.8
Model:       resnet50
Dataset:     imagenet (synthetic)
Mode:        training
SingleSess:  False
Batch size:  32 global
             32 per device
Num batches: 100
Num epochs:  0.00
Devices:     ['/gpu:0']
Data format: NCHW
Layout optimizer: False
Optimizer:   sgd
Variables:   parameter_server
==========
Generating model
Running warm up
Done warm up
Step	Img/sec	total_loss
1	images/sec: 183.4 +/- 0.0 (jitter = 0.0)	8.136
10	images/sec: 196.5 +/- 2.3 (jitter = 8.7)	8.154
20	images/sec: 200.2 +/- 1.5 (jitter = 3.8)	8.059
30	images/sec: 202.0 +/- 1.1 (jitter = 0.8)	8.232
40	images/sec: 202.9 +/- 0.8 (jitter = 0.5)	8.379
50	images/sec: 203.2 +/- 0.7 (jitter = 0.5)	8.173
60	images/sec: 203.5 +/- 0.6 (jitter = 0.5)	8.494
70	images/sec: 203.7 +/- 0.5 (jitter = 0.5)	8.146
80	images/sec: 203.9 +/- 0.4 (jitter = 0.4)	7.962
90	images/sec: 204.0 +/- 0.4 (jitter = 0.4)	8.260
100	images/sec: 204.2 +/- 0.4 (jitter = 0.4)	8.287
----------------------------------------------------------------
total images/sec: 204.09
----------------------------------------------------------------

결과

GTX 1080 Ti 모델로 alexnet, inception3, resnet152, resnet50, vgg16 모델의 테스트 결과를 첨부합니다.

( 본문 인용시 출처를 밝혀 주시면 감사하겠습니다.)