2017년 12월 4일 월요일

Tensorflow 의 로그로 tensorboard 사용하기

Tensorboard 를 사용하면 Tensorflow 수행 후 남아있는 로그들을 이용하여 loss, learning rate 등을 손쉽게 그래프로 확인할 수 있습니다.

단, Tensorflow를 수행하는 python 코드에 나중에 tensorboard로 그래프화 할 수 있게끔 timestamp, 수행 로그 등을 남겨주는 코드가 미리 삽입되어 있어야 합니다.

해당 내용은 아래의 링크를 참조하세요.

저는 이미 training 시의 이벤트 로그를 남기도록 되어있는 python script를 가지고 Tensorflow를 수행했습니다.
이후, tensorboard를 수행하며 log가 위치한 path 정보를 --log dir 인자값으로 넘겨줍니다.

b7p284za@p10login1:/gpfs/gpfs_gl4_16mb/b7p284za/benchmark/tensorflow/train_log_single$ tensorboard --logdir=./
TensorBoard 0.1.8 at http://p10login1:6006 (Press CTRL+C to quit)
W1129 01:09:46.680698 Reloader tf_logging.py:86] Found more than one graph event per run, or there was a metagraph containing a graph_def, as well as one or more graph events.  Overwriting the graph with the newest event.

위와 같이 tensorboard 데몬이 실행되면, 브라우저를 통해 위 URL로 접근해봅니다. (POK 센터는 http://p10login1.pbm.ihost.com:6006 으로 접근합니다.)

다음과 같이 해당 logdir에 위치한 event log의 정보들을 읽어오고, 그래프로 표현해줍니다.
저의 경우, 여러차례 동일 스크립트를 수행하는 바람에 로그가 duplicate 되어 warning 메시지가 발생하였습니다만, logdir에 각 수행되는 TF job 별로 하부 directory를 지정하여 로그를 기록하면 위와 같은 문제는 없을것이라 생각합니다.

예를들어, 기본 로그 디렉토리를 /train_log_dir로 설정하는 경우, 각 수행하는 TF job 별로 하부 디렉토리를 구분하여 적재하면 아래와 같이 Tensorboard에서 Runs의 toggle을 구분하여 그래프를 볼수 있습니다.

(예) logdir = /train_log_dir
tf1 Job은 /train_log_dir/tf1_job_log
tf2 Job은 /train_log_dir/tf2_job_log



2017년 12월 3일 일요일

Caffe의 plot_training_log.py 수행하기 (Caffe 수행 후 로그로 그래프 그리기)

Caffe-bvlc, caffe-nv 등 오픈소스를 보면 tools/extra/ 경로에 로그 그래프를 그릴 수 있는 스크립트를 기본으로 제공합니다. PowerAI에 포함된 caffe, caffe-nv, caffe-ibm에는 해당 스크립트는 없지만, github에 올라온 코드를 사용하여 동일한 plotting 을 수행할 수 있습니다.

우선 Github에서 caffe-bvlc 를 복제합니다.
b7p284za@p10login1:/gpfs/gpfs_gl4_16mb/b7p284za/imsi$ git clone https://github.com/BVLC/caffe.gitb7p284za@p10login1:/gpfs/gpfs_gl4_16mb/b7p284za/imsi$ cd bvlc_caffe

/usr/bin/python2.7 버전을 사용하여 tools/extra/plot_training_log.py.example 을 수행합니다. 이미 PYTHONPATH로 설정되어 있다면 python 명령어로 사용할 수 있습니다.

이때 plot_training_log.py.example을 수행하는 포맷은 다음과 같습니다.
Usage:
./plot_training_log.py.example chart_type[0-7] /where/to/save.png(저장할이미지명/경로) /path/to/first.log(읽어올 로그경로)
Notes:
1. Supporting multiple logs.
2. Log file name must end with the lower-cased ".log".
Supported chart types:
0: Test accuracy vs. Iters
1: Test accuracy vs. Seconds
2: Test loss vs. Iters
3: Test loss vs. Seconds
4: Train learning rate vs. Iters
5: Train learning rate vs. Seconds
6: Train loss vs. Iters
7: Train loss vs. Seconds

아래 수행의 경우, /usr/bin/python2.7 로 bvlc_caffe/tool/extra/plot_training_log.py.example을 실행시켰으며, 6번(Train loss vs Iters) 그래프를 그려서 bvlc_caffe/image_results/caffe_gnet_128b_4G.png 라는 이름의 이미지 파일로 저장합니다. 읽어올 로그 경로는 가장 마지막에 있는 ../../benchmark/caffe/log/output_inception_v1_iter50045_b64_4gpu.11160529.log <- 이 로그를 불러옵니다.

b7p284za@p10login1:/gpfs/gpfs_gl4_16mb/b7p284za/imsi/bvlc_caffe$ /usr/bin/python2.7 ./tools/extra/plot_training_log.py.example 6 ./image_results/caffe_gnet_128b_4G.png ../../benchmark/caffe/log/output_inception_v1_iter50045_b64_4gpu.11160529.log
/usr/lib/python2.7/dist-packages/matplotlib/font_manager.py:273: UserWarning: Matplotlib is building the font cache using fc-list. This may take a moment.
warnings.warn('Matplotlib is building the font cache using fc-list. This may take a moment.')

잠시간의 시간이 걸리고(수초-수분 내외), 아래와 같이 MATLAB을 사용하여 그래프를 그려줍니다.