Minsky 서버는 GPU 서버답게 전력 사용량이 많은 편이며, 따라서 rack 하나에 몇 대까지 장착 가능한지, 그리고 PDU는 몇 개나 준비해야 하는지 고민이 될 수 있습니다.
요약하면 다음과 같은 구성이 표준이라고 보시면 됩니다.
T42 표준 rack 한대당 :
- Minsky 서버 16대
- PDU (feature code EPTM) 4개
- 단상 220V 60A (정격 48A) PDU to wall cable (feature code 6492) 4개
- 기타 Infiniband 및 ethernet switch 류 2~3대
계산은 이렇습니다.
Minsky 서버에는 1300 W power supply가 2대 장착됩니다. (Minsky 서버의 최대 전력 사용량은 최대 2550 W이므로, 이 2개의 power supply는 redundant는 아닙니다.)
Minsky 서버 총 16대에서 필요한 전력량 (watt) 수는 다음과 같습니다.
16 * 2550 W = 40800 W
이를 220V로 나누면 필요 Ampere량을 구할 수 있습니다.
40800 W / 220 V = 185.5 A
보통 국내 기업들의 데이터센터의 분전반에는 50A짜리 차단기가 장착되어 있습니다. 즉, 60A짜리 PDU라고 해도 50A까지만 쓸 수 있다고 생각해야 합니다.
즉, 185.5 A를 처리하기 위해서 필요한 50A 짜리 PDU 개수는 다음과 같습니다.
185.5 A / 50 A = 3.7 개
즉, 다음 feature의 PDU와 'power to wall' 전원 케이블을 rack 하나당 4개씩 주문하면 됩니다.
Source https://www.ibm.com/support/knowledgecenter/POWER8/p8had/p8had_specsheetpdu.htm
https://www.ibm.com/support/knowledgecenter/POWER8/p8had/p8had_pdupowercords.htm
2017년 5월 15일 월요일
Minsky 서버에 Continuum 아나콘다(Anaconda) 설치하기 + Tensorflow로 inception v3 training 해보기
Continuum에서 내놓은 아나콘다(Anaconda)는 여태까지는 x86용으로만 존재했으나, 최근 ARM processor와 POWER8 processor를 위한 min-conda를 내놓았습니다. 아래 site에 해당 package를 download 받기 위한 link와 설치 방법이 정리되어 있습니다.
https://www.continuum.io/content/conda-support-raspberry-pi-2-and-power8-le
불행히도 ppc64le를 위한 link는 잘못 지정되어 있어 '404 Not Found'가 나옵니다만, 실제로는 link만 잘못된 것이고 아래와 같이 file은 실제로 존재합니다. 위의 것은 python version2 용이고, 아래 것은 python 3용입니다.
https://repo.continuum.io/miniconda/Miniconda2-4.3.14-Linux-ppc64le.sh
https://repo.continuum.io/miniconda/Miniconda3-4.3.14-Linux-ppc64le.sh
여기서는 python 3용을 설치해보겠습니다.
u0017496@sys-87250:~$ wget https://repo.continuum.io/miniconda/Miniconda3-4.3.14-Linux-ppc64le.sh
--2017-05-14 21:54:26-- https://repo.continuum.io/miniconda/Miniconda3-4.3.14-Linux-ppc64le.sh
Resolving repo.continuum.io (repo.continuum.io)... 104.16.19.10, 104.16.18.10, 2400:cb00:2048:1::6810:120a, ...
Connecting to repo.continuum.io (repo.continuum.io)|104.16.19.10|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 34765794 (33M) [application/x-sh]
Saving to: ‘Miniconda3-4.3.14-Linux-ppc64le.sh’
Miniconda3-4.3.14-Linux-pp 100%[=====================================>] 33.15M 10.2MB/s in 3.3s
2017-05-17 22:05:18 (10.0 MB/s) - ‘Miniconda3-4.3.14-Linux-ppc64le.sh’ saved [34765794/34765794]
u0017496@sys-87250:~$ chmod a+x Miniconda3-4.3.14-Linux-ppc64le.sh
이제 이 shell script를 수행하면 license 동의 등에 답을 해야 하며, 그 외에도 여러가지 입력 값을 넣어야 합니다. 대부분 그냥 enter를 누르시면 됩니다.
u0017496@sys-87250:~$ ./Miniconda3-4.3.14-Linux-ppc64le.sh
Welcome to Miniconda3 4.3.14 (by Continuum Analytics, Inc.)
In order to continue the installation process, please review the license
agreement.
Please, press ENTER to continue
>>>
(중략)
[/home/u0017496/miniconda3] >>>
PREFIX=/home/u0017496/miniconda3
installing: python-3.6.0-0 ...
installing: cffi-1.9.1-py36_0 ...
installing: conda-env-2.6.0-0 ...
installing: cryptography-1.7.1-py36_0 ...
installing: idna-2.2-py36_0 ...
installing: libffi-3.2.1-1 ...
installing: openssl-1.0.2k-1 ...
installing: pyasn1-0.2.3-py36_0 ...
installing: pycosat-0.6.2-py36_0 ...
installing: pycparser-2.17-py36_0 ...
installing: pyopenssl-16.2.0-py36_0 ...
installing: requests-2.13.0-py36_0 ...
installing: ruamel_yaml-0.11.14-py36_1 ...
installing: setuptools-27.2.0-py36_0 ...
installing: six-1.10.0-py36_0 ...
installing: sqlite-3.13.0-0 ...
installing: xz-5.2.2-1 ...
installing: yaml-0.1.6-0 ...
installing: zlib-1.2.8-3 ...
installing: conda-4.3.14-py36_0 ...
installing: pip-9.0.1-py36_1 ...
installing: wheel-0.29.0-py36_0 ...
Python 3.6.0 :: Continuum Analytics, Inc.
creating default environment...
installation finished.
Do you wish the installer to prepend the Miniconda3 install location
to PATH in your /home/u0017496/.bashrc ? [yes|no]
[no] >>> yes
Prepending PATH=/home/u0017496/miniconda3/bin to PATH in /home/u0017496/.bashrc
A backup will be made to: /home/u0017496/.bashrc-miniconda3.bak
For this change to become active, you have to open a new terminal.
Thank you for installing Miniconda2!
Share your notebooks and packages on Anaconda Cloud!
Sign up for free: https://anaconda.org
이제 mini-conda를 설치했으니 conda 명령을 쓸 수 있어야 합니다. 그러나 보시다시피 conda가 없습니다.
u0017496@sys-87250:~$ which conda
이는 mini-conda 설치시 ~/.bashrc에 conda의 PATH 정보가 자동으로 들어가긴 했지만 .bashrc가 수행되지 않았기 때문에 그런 것입니다. 수행하시면 conda의 PATH가 잡혀 있는 것을 보실 수 있습니다.
u0017496@sys-87250:~$ . ~/.bashrc
u0017496@sys-87250:~$ which conda
/home/u0017496/miniconda3/bin/conda
이제 다음과 같이 ananconda에 포함된 python library들을 보실 수 있습니다.
u0017496@sys-87250:~$ conda list
# packages in environment at /home/u0017496/miniconda3:
#
cffi 1.9.1 py36_0
conda 4.3.14 py36_0
conda-env 2.6.0 0
cryptography 1.7.1 py36_0
idna 2.2 py36_0
libffi 3.2.1 1
openssl 1.0.2k 1
pip 9.0.1 py36_1
pyasn1 0.2.3 py36_0
pycosat 0.6.2 py36_0
pycparser 2.17 py36_0
pyopenssl 16.2.0 py36_0
python 3.6.0 0
requests 2.13.0 py36_0
ruamel_yaml 0.11.14 py36_1
setuptools 27.2.0 py36_0
six 1.10.0 py36_0
sqlite 3.13.0 0
wheel 0.29.0 py36_0
xz 5.2.2 1
yaml 0.1.6 0
zlib 1.2.8 3
현재까지 Continuum에서 빌드해놓은 package들을 모조리 다 설치하는 명령을 다음에 정리했습니다.
u0017496@sys-87250:~$ for i in `conda list | awk '{print $1}' | grep -v \#`
> do
> conda install $i
> done
이제 위에서 설치한 패키지 중 pip가 제대로 설치되었는지 conda search로 확인해보겠습니다. 아래와 같이 * 표시가 된 것이 설치된 것입니다.
u0017496@sys-87250:~$ conda search pip
Fetching package metadata .........
pip 7.1.0 py27_0 defaults
7.1.0 py34_0 defaults
7.1.0 py27_1 defaults
7.1.0 py34_1 defaults
7.1.2 py27_0 defaults
7.1.2 py34_0 defaults
8.1.0 py27_0 defaults
8.1.0 py34_0 defaults
8.1.0 py35_0 defaults
8.1.2 py27_0 defaults
8.1.2 py34_0 defaults
8.1.2 py35_0 defaults
9.0.0 py27_0 defaults
9.0.0 py34_0 defaults
9.0.0 py35_0 defaults
9.0.1 py27_1 defaults
9.0.1 py35_1 defaults
* 9.0.1 py36_1 defaults
이렇게 conda에서 제공하는 pip로 keras 2.0.4를 설치해보겠습니다.
u0017496@sys-87250:~/miniconda3/lib$ pip install keras==2.0.4
Collecting keras==2.0.4
Downloading Keras-2.0.4.tar.gz (199kB)
100% |████████████████████████████████| 204kB 3.1MB/s
Collecting theano (from keras==2.0.4)
Downloading Theano-0.9.0.tar.gz (3.1MB)
100% |████████████████████████████████| 3.1MB 310kB/s
Collecting pyyaml (from keras==2.0.4)
Downloading PyYAML-3.12.tar.gz (253kB)
100% |████████████████████████████████| 256kB 3.6MB/s
Requirement already satisfied: six in ./python3.6/site-packages (from keras==2.0.4)
Requirement already satisfied: numpy>=1.9.1 in ./python3.6/site-packages (from theano->keras==2.0.4)
Requirement already satisfied: scipy>=0.14 in ./python3.6/site-packages (from theano->keras==2.0.4)
Building wheels for collected packages: keras, theano, pyyaml
Running setup.py bdist_wheel for keras ... done
Stored in directory: /home/u0017496/.cache/pip/wheels/48/82/42/f06a8c03a8f95ada523a81ba723e89f059693e6ad868d09727
Running setup.py bdist_wheel for theano ... done
Stored in directory: /home/u0017496/.cache/pip/wheels/d5/5b/93/433299b86e3e9b25f0f600e4e4ebf18e38eb7534ea518eba13
Running setup.py bdist_wheel for pyyaml ... done
Stored in directory: /home/u0017496/.cache/pip/wheels/2c/f7/79/13f3a12cd723892437c0cfbde1230ab4d82947ff7b3839a4fc
Successfully built keras theano pyyaml
Installing collected packages: theano, pyyaml, keras
Successfully installed keras-2.0.4 pyyaml-3.12 theano-0.9.0
또 gensim 2.0.0과 KoNLPy를 설치해보겠습니다.
u0017496@sys-87250:~$ pip install gensim==2.0.0
Collecting gensim==2.0.0
Downloading gensim-2.0.0.tar.gz (14.1MB)
100% |████████████████████████████████| 14.2MB 88kB/s
Requirement already satisfied: numpy>=1.3 in ./miniconda3/lib/python3.6/site-packages (from gensim==2.0.0)
Requirement already satisfied: scipy>=0.7.0 in ./miniconda3/lib/python3.6/site-packages (from gensim==2.0.0)
Requirement already satisfied: six>=1.5.0 in ./miniconda3/lib/python3.6/site-packages (from gensim==2.0.0)
Requirement already satisfied: smart_open>=1.2.1 in ./miniconda3/lib/python3.6/site-packages (from gensim==2.0.0)
Requirement already satisfied: boto>=2.32 in ./miniconda3/lib/python3.6/site-packages (from smart_open>=1.2.1->gensim==2.0.0)
Requirement already satisfied: bz2file in ./miniconda3/lib/python3.6/site-packages (from smart_open>=1.2.1->gensim==2.0.0)
Requirement already satisfied: requests in ./miniconda3/lib/python3.6/site-packages (from smart_open>=1.2.1->gensim==2.0.0)
Building wheels for collected packages: gensim
Running setup.py bdist_wheel for gensim ... done
Stored in directory: /home/u0017496/.cache/pip/wheels/e9/5f/e7/4ff23a3fe4b181b44f37eed5602f179c1cc92a0a34f337e745
Successfully built gensim
Installing collected packages: gensim
Found existing installation: gensim 1.0.1
Uninstalling gensim-1.0.1:
Successfully uninstalled gensim-1.0.1
Successfully installed gensim-2.0.0
이제 conda 명령을 통해 추가로 numpy와 matplotlib, scipy와 scikit-learn를 설치해보겠습니다. matplotlib의 prerequisite이 numpy이고, scikit-learn의 prerequisite이 scipy라서 그것들은 자동으로 설치되니까, 실제로는 conda 명령은 두번만 쓰면 됩니다.
u0017496@sys-87250:~$ conda install matplotlib
Fetching package metadata .........
Solving package specifications: .
Package plan for installation in environment /home/u0017496/miniconda3:
The following NEW packages will be INSTALLED:
cycler: 0.10.0-py36_0
freetype: 2.5.5-2
libpng: 1.6.27-0
matplotlib: 2.0.2-np112py36_0
numpy: 1.12.1-py36_0
openblas: 0.2.19-0
python-dateutil: 2.6.0-py36_0
pytz: 2017.2-py36_0
Proceed ([y]/n)? y
openblas-0.2.1 100% |###########################################################| Time: 0:00:00 10.21 MB/s
libpng-1.6.27- 100% |###########################################################| Time: 0:00:00 12.75 MB/s
freetype-2.5.5 100% |###########################################################| Time: 0:00:00 10.53 MB/s
numpy-1.12.1-p 100% |###########################################################| Time: 0:00:00 15.12 MB/s
pytz-2017.2-py 100% |###########################################################| Time: 0:00:00 13.25 MB/s
cycler-0.10.0- 100% |###########################################################| Time: 0:00:00 15.61 MB/s
python-dateuti 100% |###########################################################| Time: 0:00:00 6.43 MB/s
matplotlib-2.0 100% |###########################################################| Time: 0:00:00 14.62 MB/s
u0017496@sys-87250:~$ conda install scikit-learn
Fetching package metadata .........
Solving package specifications: .
Package plan for installation in environment /home/u0017496/miniconda3:
The following NEW packages will be INSTALLED:
scikit-learn: 0.18.1-np112py36_1
scipy: 0.19.0-np112py36_0
Proceed ([y]/n)? y
scipy-0.19.0-n 100% |###########################################################| Time: 0:00:02 14.75 MB/s
scikit-learn-0 100% |###########################################################| Time: 0:00:00 15.56 MB/s
이렇게 설치된 것들은 아래와 같이 /home/u0017496/miniconda3/lib/python3.6/site-packages 에 들어갑니다.
u0017496@sys-87250:~$ ls /home/u0017496/miniconda3/lib/python3.6/site-packages/
asn1crypto mpl_toolkits python_dateutil-2.6.0-py3.6.egg-info
asn1crypto-0.22.0-py3.6.egg-info numpy-1.12.1.dist-info pytz
cffi OpenSSL pytz-2017.2-py3.6.egg-info
cffi-1.10.0-py3.6.egg-info packaging README.txt
_cffi_backend.so packaging-16.8-py3.6.egg-info requests
conda pip requests-2.14.2-py3.6.egg-info
conda-4.3.18-py3.6.egg-info pip-9.0.1-py3.6.egg-info ruamel_yaml
conda_env pyasn1 scikit_learn-0.18.1-py3.6.egg-info
cryptography pyasn1-0.2.3-py3.6.egg-info scipy
cryptography-1.8.1-py3.6.egg-info __pycache__ scipy-0.19.0-py3.6.egg-info
cycler-0.10.0-py3.6.egg-info pycosat-0.6.2-py3.6.egg-info setuptools-27.2.0-py3.6.egg
cycler.py pycosat.cpython-36m-powerpc64le-linux-gnu.so setuptools.pth
dateutil pycparser six-1.10.0-py3.6.egg-info
easy-install.pth pycparser-2.17-py3.6.egg-info six.py
idna pylab.py sklearn
idna-2.5-py3.6.egg-info pyOpenSSL-17.0.0-py3.6.egg-info test_pycosat.py
matplotlib pyparsing-2.1.4-py3.6.egg-info wheel
matplotlib-2.0.2-py3.6.egg-info pyparsing.py wheel-0.29.0-py3.6.egg-info
따라서 이것들을 사용하기 위해서는 PYTHONPATH는 다음과 같이 설정하시면 됩니다.
u0017496@sys-87250:~$ export PYTHONPATH=/home/u0017496/miniconda3/lib/python3.6/site-packages:$PYTHONPATH
이제 여기에 (PowerAI에 포함된 tensorflow 말고) conda로 bazel, tensorflow 및 tensorflow-gpu도 설치해보겠습니다.
u0017496@sys-87250:~$ conda install bazel
Fetching package metadata .........
Solving package specifications: .
Package plan for installation in environment /home/u0017496/miniconda3:
The following NEW packages will be INSTALLED:
bazel: 0.4.5-0
Proceed ([y]/n)? y
bazel-0.4.5-0. 100% |#############################################| Time: 0:00:09 13.37 MB/s
u0017496@sys-87250:~$ conda install tensorflow
Fetching package metadata .........
Solving package specifications: .
Package plan for installation in environment /home/u0017496/miniconda3:
The following NEW packages will be INSTALLED:
libprotobuf: 3.2.0-0
protobuf: 3.2.0-py36_0
tensorflow: 1.1.0-np112py36_0
werkzeug: 0.12.2-py36_0
Proceed ([y]/n)? y
libprotobuf-3. 100% |#############################################| Time: 0:00:00 13.84 MB/s
werkzeug-0.12. 100% |#############################################| Time: 0:00:00 18.67 MB/s
protobuf-3.2.0 100% |#############################################| Time: 0:00:00 10.39 MB/s
tensorflow-1.1 100% |#############################################| Time: 0:00:01 15.16 MB/s
u0017496@sys-87250:~$ conda install tensorflow-gpu
Fetching package metadata .........
Solving package specifications: .
Package plan for installation in environment /home/u0017496/miniconda3:
The following NEW packages will be INSTALLED:
cudatoolkit: 8.0-0
cudnn: 6.0.21-0
tensorflow-gpu: 1.1.0-np112py36_0
Proceed ([y]/n)? y
cudatoolkit-8. 100% |#############################################| Time: 0:00:29 11.24 MB/s
cudnn-6.0.21-0 100% |#############################################| Time: 0:00:11 15.97 MB/s
tensorflow-gpu 100% |#############################################| Time: 0:00:06 14.27 MB/s
conda list 명령으로 보면 다음과 같은 것들이 설치된 것을 보실 수 있습니다.
u0017496@sys-87250:~$ conda list
# packages in environment at /home/u0017496/miniconda3:
#
asn1crypto 0.22.0 py36_0
bazel 0.4.5 0
boto 2.46.1 py36_0
bz2file 0.98 py36_0
cffi 1.10.0 py36_0
conda 4.3.18 py36_0
conda-env 2.6.0 0
cryptography 1.8.1 py36_0
cudatoolkit 8.0 0
cudnn 6.0.21 0
cycler 0.10.0 py36_0
freetype 2.5.5 2
gensim 1.0.1 np112py36_0
gensim 2.0.0 <pip>
idna 2.5 py36_0
Keras 2.0.4 <pip>
konlpy 0.4.4 <pip>
libffi 3.2.1 1
libpng 1.6.27 0
libprotobuf 3.2.0 0
matplotlib 2.0.2 np112py36_0
numpy 1.12.1 <pip>
numpy 1.12.1 py36_0
openblas 0.2.19 0
openssl 1.0.2k 2
packaging 16.8 py36_0
pip 9.0.1 py36_1
protobuf 3.2.0 py36_0
pyasn1 0.2.3 py36_0
pycosat 0.6.2 py36_0
pycparser 2.17 py36_0
pyopenssl 17.0.0 py36_0
pyparsing 2.1.4 py36_0
python 3.6.1 2
python-dateutil 2.6.0 py36_0
pytz 2017.2 py36_0
PyYAML 3.12 <pip>
requests 2.14.2 py36_0
ruamel_yaml 0.11.14 py36_1
scikit-learn 0.18.1 np112py36_1
scipy 0.19.0 np112py36_0
setuptools 27.2.0 py36_0
six 1.10.0 py36_0
smart_open 1.5.2 py36_0
sqlite 3.13.0 0
tensorflow 1.1.0 np112py36_0
tensorflow-gpu 1.1.0 np112py36_0
Theano 0.9.0 <pip>
werkzeug 0.12.2 py36_0
wheel 0.29.0 py36_0
xz 5.2.2 1
yaml 0.1.6 0
zlib 1.2.8 3
설치하는 김에, 이렇게 conda로 설치한 tensorflow를 이용하여 inception v3 model을 training 해보겠습니다. 다음 순서대로 따라 하시면 됩니다.
u0017496@sys-87250:~/inception$ pwd
/home/u0017496/inception
u0017496@sys-87250:~/inception$ export INCEPTION_DIR=/home/u0017496/inception
u0017496@sys-87250:~/inception$ curl -O http://download.tensorflow.org/models/image/imagenet/inception-v3-2016-03-01.tar.gz
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 380M 100 380M 0 0 5918k 0 0:01:05 0:01:05 --:--:-- 4233k
u0017496@sys-87250:~/inception$ tar -xvf inception-v3-2016-03-01.tar.gz
inception-v3/
inception-v3/checkpoint
inception-v3/README.txt
inception-v3/model.ckpt-157585
u0017496@sys-87250:~/inception$ git clone https://github.com/tensorflow/models.git
Cloning into 'models'...
remote: Counting objects: 4703, done.
remote: Compressing objects: 100% (43/43), done.
remote: Total 4703 (delta 17), reused 31 (delta 11), pack-reused 4649
Receiving objects: 100% (4703/4703), 153.34 MiB | 5.62 MiB/s, done.
Resolving deltas: 100% (2374/2374), done.
Checking connectivity... done.
u0017496@sys-87250:~/inception/models/inception$ export FLOWERS_DIR=/home/u0017496/inception/models/inception
u0017496@sys-87250:~/inception/models/inception$ mkdir -p $FLOWERS_DIR/data
u0017496@sys-87250:~/inception/models/inception$ which bazel
/home/u0017496/miniconda3/bin/bazel
u0017496@sys-87250:~/inception/models/inception$ bazel build inception/download_and_preprocess_flowers
Extracting Bazel installation...
....................
INFO: Found 1 target...
Target //inception:download_and_preprocess_flowers up-to-date:
bazel-bin/inception/download_and_preprocess_flowers
INFO: Elapsed time: 6.943s, Critical Path: 0.05s
u0017496@sys-87250:~/inception/models/inception$ export TEST_TMPDIR=/home/u0017496/.cache
u0017496@sys-87250:~/inception/models/inception$ bazel build inception/download_and_preprocess_flowers
INFO: $TEST_TMPDIR defined: output root default is '/home/u0017496/.cache'.
Extracting Bazel installation...
.............
INFO: Found 1 target...
Target //inception:download_and_preprocess_flowers up-to-date:
bazel-bin/inception/download_and_preprocess_flowers
INFO: Elapsed time: 4.867s, Critical Path: 0.03s
u0017496@sys-87250:~/inception/models/inception$ bazel-bin/inception/download_and_preprocess_flowers $FLOWERS_DIR/data
Downloading flower data set.
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 218M 100 218M 0 0 9372k 0 0:00:23 0:00:23 --:--:-- 10.1M
(중략)
Found 3170 JPEG files across 5 labels inside /home/u0017496/inception/models/inception/data/raw-data/train.
Launching 2 threads for spacings: [[0, 1585], [1585, 3170]]
2017-05-19 05:33:44.191446 [thread 0]: Processed 1000 of 1585 images in thread batch.
2017-05-19 05:33:44.213856 [thread 1]: Processed 1000 of 1585 images in thread batch.
2017-05-19 05:33:54.902070 [thread 1]: Wrote 1585 images to /home/u0017496/inception/models/inception/data/train-00001-of-00002
2017-05-19 05:33:54.902172 [thread 1]: Wrote 1585 images to 1585 shards.
2017-05-19 05:33:54.911283 [thread 0]: Wrote 1585 images to /home/u0017496/inception/models/inception/data/train-00000-of-00002
2017-05-19 05:33:54.911360 [thread 0]: Wrote 1585 images to 1585 shards.
2017-05-19 05:33:55.171141: Finished writing all 3170 images in data set.
아래에서 보시다시피 이 inception v3는 꽃 사진을 분류하는 neural network입니다.
u0017496@sys-87250:~/inception/models/inception$ du -sm data/raw-data/train/*
29 data/raw-data/train/daisy
44 data/raw-data/train/dandelion
1 data/raw-data/train/LICENSE.txt
33 data/raw-data/train/roses
47 data/raw-data/train/sunflowers
48 data/raw-data/train/tulips
u0017496@sys-87250:~/inception/models/inception$ bazel build inception/flowers_train
INFO: $TEST_TMPDIR defined: output root default is '/home/u0017496/.cache'.
............................
INFO: Found 1 target...
Target //inception:flowers_train up-to-date:
bazel-bin/inception/flowers_train
INFO: Elapsed time: 6.502s, Critical Path: 0.03s
이제 비로소 inception v3의 training 준비가 끝났습니다. 이제 다음 명령으로 training을 시작합니다.
u0017496@sys-87250:~/inception/models/inception$ time bazel-bin/inception/flowers_train --train_dir=$FLOWERS_DIR/train --data_dir=$FLOWERS_DIR/data --pretrained_model_checkpoint_path=$INCEPTION_DIR/inception-v3/model.ckpt-157585 --fine_tune=True --initial_learning_rate=0.001 -input_queue_memory_factor=1 --max_steps=50 --num_gpus 1 --batch_size=32
NVIDIA: no NVIDIA devices found
2017-05-19 05:41:03.740213: E tensorflow/stream_executor/cuda/cuda_driver.cc:405] failed call to cuInit: CUDA_ERROR_UNKNOWN
2017-05-19 05:41:03.740670: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:145] kernel driver does not appear to be running on this host (sys-87250): /proc/driver/nvidia/version does not exist
2017-05-19 05:41:51.947244: Pre-trained model restored from /home/u0017496/inception/inception-v3/model.ckpt-157585
2017-05-19 05:47:22.023602: step 0, loss = 2.79 (0.2 examples/sec; 182.713 sec/batch)
2017-05-19 06:05:58.942671: step 10, loss = 2.53 (0.4 examples/sec; 78.882 sec/batch)
2017-05-19 06:19:26.875533: step 20, loss = 2.40 (0.4 examples/sec; 82.410 sec/batch)
2017-05-19 06:33:10.333275: step 30, loss = 2.20 (0.4 examples/sec; 77.844 sec/batch)
2017-05-19 06:48:27.688993: step 40, loss = 2.24 (0.3 examples/sec; 96.148 sec/batch)
real 84m30.882s
user 135m20.864s
sys 2m30.832s
이제 와서 고백하지만 제가 설치 demo를 보여드린 이 서버는 사실 GPU가 달려 있지 않은 POWER8 서버입니다. GPU가 없는 경우 CPU를 이용하게 되는데, 그런 경우 이 training의 완료는 보시다시피 매우, 매우 오래 걸립니다. 저 output을 보면 초당 example 0.4개 처리로 나옵니다만, P100을 이용하는 경우 (GPU 개수 및 batch size에 따라) 초당 50개~200개 단위로 처리가 됩니다.
아래는 전에 PowerAI를 설치한 Minsky 서버에서 수행했던 inception v3의 결과 log 일부입니다.
2017-05-16 03:48:46.352210: Pre-trained model restored from /gpfs/gpfs_gl4_16mb/b7p088za/inception-v3/model.ckpt-157585
2017-05-16 03:52:44.322381: step 0, loss = 2.72 (17.6 examples/sec; 21.830 sec/batch)
2017-05-16 03:55:29.550791: step 10, loss = 2.57 (213.6 examples/sec; 1.797 sec/batch)
2017-05-16 03:55:47.619990: step 20, loss = 2.35 (212.1 examples/sec; 1.810 sec/batch)
2017-05-16 03:56:05.953991: step 30, loss = 2.17 (206.6 examples/sec; 1.859 sec/batch)
2017-05-16 03:56:24.306742: step 40, loss = 1.98 (209.4 examples/sec; 1.834 sec/batch)
2017-05-16 03:56:42.490063: step 50, loss = 1.92 (217.8 examples/sec; 1.763 sec/batch)
2017-05-16 03:57:00.444537: step 60, loss = 1.67 (216.6 examples/sec; 1.773 sec/batch)
2017-05-16 03:57:18.366941: step 70, loss = 1.58 (212.7 examples/sec; 1.806 sec/batch)
2017-05-16 03:57:36.467837: step 80, loss = 1.55 (213.6 examples/sec; 1.798 sec/batch)
https://www.continuum.io/content/conda-support-raspberry-pi-2-and-power8-le
불행히도 ppc64le를 위한 link는 잘못 지정되어 있어 '404 Not Found'가 나옵니다만, 실제로는 link만 잘못된 것이고 아래와 같이 file은 실제로 존재합니다. 위의 것은 python version2 용이고, 아래 것은 python 3용입니다.
https://repo.continuum.io/miniconda/Miniconda2-4.3.14-Linux-ppc64le.sh
https://repo.continuum.io/miniconda/Miniconda3-4.3.14-Linux-ppc64le.sh
여기서는 python 3용을 설치해보겠습니다.
u0017496@sys-87250:~$ wget https://repo.continuum.io/miniconda/Miniconda3-4.3.14-Linux-ppc64le.sh
--2017-05-14 21:54:26-- https://repo.continuum.io/miniconda/Miniconda3-4.3.14-Linux-ppc64le.sh
Resolving repo.continuum.io (repo.continuum.io)... 104.16.19.10, 104.16.18.10, 2400:cb00:2048:1::6810:120a, ...
Connecting to repo.continuum.io (repo.continuum.io)|104.16.19.10|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 34765794 (33M) [application/x-sh]
Saving to: ‘Miniconda3-4.3.14-Linux-ppc64le.sh’
Miniconda3-4.3.14-Linux-pp 100%[=====================================>] 33.15M 10.2MB/s in 3.3s
2017-05-17 22:05:18 (10.0 MB/s) - ‘Miniconda3-4.3.14-Linux-ppc64le.sh’ saved [34765794/34765794]
u0017496@sys-87250:~$ chmod a+x Miniconda3-4.3.14-Linux-ppc64le.sh
이제 이 shell script를 수행하면 license 동의 등에 답을 해야 하며, 그 외에도 여러가지 입력 값을 넣어야 합니다. 대부분 그냥 enter를 누르시면 됩니다.
u0017496@sys-87250:~$ ./Miniconda3-4.3.14-Linux-ppc64le.sh
Welcome to Miniconda3 4.3.14 (by Continuum Analytics, Inc.)
In order to continue the installation process, please review the license
agreement.
Please, press ENTER to continue
>>>
(중략)
[/home/u0017496/miniconda3] >>>
PREFIX=/home/u0017496/miniconda3
installing: python-3.6.0-0 ...
installing: cffi-1.9.1-py36_0 ...
installing: conda-env-2.6.0-0 ...
installing: cryptography-1.7.1-py36_0 ...
installing: idna-2.2-py36_0 ...
installing: libffi-3.2.1-1 ...
installing: openssl-1.0.2k-1 ...
installing: pyasn1-0.2.3-py36_0 ...
installing: pycosat-0.6.2-py36_0 ...
installing: pycparser-2.17-py36_0 ...
installing: pyopenssl-16.2.0-py36_0 ...
installing: requests-2.13.0-py36_0 ...
installing: ruamel_yaml-0.11.14-py36_1 ...
installing: setuptools-27.2.0-py36_0 ...
installing: six-1.10.0-py36_0 ...
installing: sqlite-3.13.0-0 ...
installing: xz-5.2.2-1 ...
installing: yaml-0.1.6-0 ...
installing: zlib-1.2.8-3 ...
installing: conda-4.3.14-py36_0 ...
installing: pip-9.0.1-py36_1 ...
installing: wheel-0.29.0-py36_0 ...
Python 3.6.0 :: Continuum Analytics, Inc.
creating default environment...
installation finished.
Do you wish the installer to prepend the Miniconda3 install location
to PATH in your /home/u0017496/.bashrc ? [yes|no]
Prepending PATH=/home/u0017496/miniconda3/bin to PATH in /home/u0017496/.bashrc
A backup will be made to: /home/u0017496/.bashrc-miniconda3.bak
For this change to become active, you have to open a new terminal.
Thank you for installing Miniconda2!
Share your notebooks and packages on Anaconda Cloud!
Sign up for free: https://anaconda.org
이제 mini-conda를 설치했으니 conda 명령을 쓸 수 있어야 합니다. 그러나 보시다시피 conda가 없습니다.
u0017496@sys-87250:~$ which conda
이는 mini-conda 설치시 ~/.bashrc에 conda의 PATH 정보가 자동으로 들어가긴 했지만 .bashrc가 수행되지 않았기 때문에 그런 것입니다. 수행하시면 conda의 PATH가 잡혀 있는 것을 보실 수 있습니다.
u0017496@sys-87250:~$ . ~/.bashrc
u0017496@sys-87250:~$ which conda
/home/u0017496/miniconda3/bin/conda
이제 다음과 같이 ananconda에 포함된 python library들을 보실 수 있습니다.
u0017496@sys-87250:~$ conda list
# packages in environment at /home/u0017496/miniconda3:
#
cffi 1.9.1 py36_0
conda 4.3.14 py36_0
conda-env 2.6.0 0
cryptography 1.7.1 py36_0
idna 2.2 py36_0
libffi 3.2.1 1
openssl 1.0.2k 1
pip 9.0.1 py36_1
pyasn1 0.2.3 py36_0
pycosat 0.6.2 py36_0
pycparser 2.17 py36_0
pyopenssl 16.2.0 py36_0
python 3.6.0 0
requests 2.13.0 py36_0
ruamel_yaml 0.11.14 py36_1
setuptools 27.2.0 py36_0
six 1.10.0 py36_0
sqlite 3.13.0 0
wheel 0.29.0 py36_0
xz 5.2.2 1
yaml 0.1.6 0
zlib 1.2.8 3
현재까지 Continuum에서 빌드해놓은 package들을 모조리 다 설치하는 명령을 다음에 정리했습니다.
u0017496@sys-87250:~$ for i in `conda list | awk '{print $1}' | grep -v \#`
> do
> conda install $i
> done
(중략)
이제 위에서 설치한 패키지 중 pip가 제대로 설치되었는지 conda search로 확인해보겠습니다. 아래와 같이 * 표시가 된 것이 설치된 것입니다.
u0017496@sys-87250:~$ conda search pip
Fetching package metadata .........
pip 7.1.0 py27_0 defaults
7.1.0 py34_0 defaults
7.1.0 py27_1 defaults
7.1.0 py34_1 defaults
7.1.2 py27_0 defaults
7.1.2 py34_0 defaults
8.1.0 py27_0 defaults
8.1.0 py34_0 defaults
8.1.0 py35_0 defaults
8.1.2 py27_0 defaults
8.1.2 py34_0 defaults
8.1.2 py35_0 defaults
9.0.0 py27_0 defaults
9.0.0 py34_0 defaults
9.0.0 py35_0 defaults
9.0.1 py27_1 defaults
9.0.1 py35_1 defaults
* 9.0.1 py36_1 defaults
u0017496@sys-87250:~$ which pip
/home/u0017496/miniconda3/bin/pip
u0017496@sys-87250:~$ pip --version
pip 9.0.1 from /home/u0017496/miniconda3/lib/python3.6/site-packages (python 3.6)
이렇게 conda에서 제공하는 pip로 keras 2.0.4를 설치해보겠습니다.
u0017496@sys-87250:~/miniconda3/lib$ pip install keras==2.0.4
Collecting keras==2.0.4
Downloading Keras-2.0.4.tar.gz (199kB)
100% |████████████████████████████████| 204kB 3.1MB/s
Collecting theano (from keras==2.0.4)
Downloading Theano-0.9.0.tar.gz (3.1MB)
100% |████████████████████████████████| 3.1MB 310kB/s
Collecting pyyaml (from keras==2.0.4)
Downloading PyYAML-3.12.tar.gz (253kB)
100% |████████████████████████████████| 256kB 3.6MB/s
Requirement already satisfied: six in ./python3.6/site-packages (from keras==2.0.4)
Requirement already satisfied: numpy>=1.9.1 in ./python3.6/site-packages (from theano->keras==2.0.4)
Requirement already satisfied: scipy>=0.14 in ./python3.6/site-packages (from theano->keras==2.0.4)
Building wheels for collected packages: keras, theano, pyyaml
Running setup.py bdist_wheel for keras ... done
Stored in directory: /home/u0017496/.cache/pip/wheels/48/82/42/f06a8c03a8f95ada523a81ba723e89f059693e6ad868d09727
Running setup.py bdist_wheel for theano ... done
Stored in directory: /home/u0017496/.cache/pip/wheels/d5/5b/93/433299b86e3e9b25f0f600e4e4ebf18e38eb7534ea518eba13
Running setup.py bdist_wheel for pyyaml ... done
Stored in directory: /home/u0017496/.cache/pip/wheels/2c/f7/79/13f3a12cd723892437c0cfbde1230ab4d82947ff7b3839a4fc
Successfully built keras theano pyyaml
Installing collected packages: theano, pyyaml, keras
Successfully installed keras-2.0.4 pyyaml-3.12 theano-0.9.0
또 gensim 2.0.0과 KoNLPy를 설치해보겠습니다.
u0017496@sys-87250:~$ pip install gensim==2.0.0
Collecting gensim==2.0.0
Downloading gensim-2.0.0.tar.gz (14.1MB)
100% |████████████████████████████████| 14.2MB 88kB/s
Requirement already satisfied: numpy>=1.3 in ./miniconda3/lib/python3.6/site-packages (from gensim==2.0.0)
Requirement already satisfied: scipy>=0.7.0 in ./miniconda3/lib/python3.6/site-packages (from gensim==2.0.0)
Requirement already satisfied: six>=1.5.0 in ./miniconda3/lib/python3.6/site-packages (from gensim==2.0.0)
Requirement already satisfied: smart_open>=1.2.1 in ./miniconda3/lib/python3.6/site-packages (from gensim==2.0.0)
Requirement already satisfied: boto>=2.32 in ./miniconda3/lib/python3.6/site-packages (from smart_open>=1.2.1->gensim==2.0.0)
Requirement already satisfied: bz2file in ./miniconda3/lib/python3.6/site-packages (from smart_open>=1.2.1->gensim==2.0.0)
Requirement already satisfied: requests in ./miniconda3/lib/python3.6/site-packages (from smart_open>=1.2.1->gensim==2.0.0)
Building wheels for collected packages: gensim
Running setup.py bdist_wheel for gensim ... done
Stored in directory: /home/u0017496/.cache/pip/wheels/e9/5f/e7/4ff23a3fe4b181b44f37eed5602f179c1cc92a0a34f337e745
Successfully built gensim
Installing collected packages: gensim
Found existing installation: gensim 1.0.1
Uninstalling gensim-1.0.1:
Successfully uninstalled gensim-1.0.1
Successfully installed gensim-2.0.0
u0017496@sys-87250:~$ pip install konlpy
Collecting konlpy
Downloading konlpy-0.4.4-py2.py3-none-any.whl (22.5MB)
100% |████████████████████████████████| 22.5MB 57kB/s
Installing collected packages: konlpy
Successfully installed konlpy-0.4.4
이제 conda 명령을 통해 추가로 numpy와 matplotlib, scipy와 scikit-learn를 설치해보겠습니다. matplotlib의 prerequisite이 numpy이고, scikit-learn의 prerequisite이 scipy라서 그것들은 자동으로 설치되니까, 실제로는 conda 명령은 두번만 쓰면 됩니다.
u0017496@sys-87250:~$ conda install matplotlib
Fetching package metadata .........
Solving package specifications: .
Package plan for installation in environment /home/u0017496/miniconda3:
The following NEW packages will be INSTALLED:
cycler: 0.10.0-py36_0
freetype: 2.5.5-2
libpng: 1.6.27-0
matplotlib: 2.0.2-np112py36_0
numpy: 1.12.1-py36_0
openblas: 0.2.19-0
python-dateutil: 2.6.0-py36_0
pytz: 2017.2-py36_0
Proceed ([y]/n)? y
openblas-0.2.1 100% |###########################################################| Time: 0:00:00 10.21 MB/s
libpng-1.6.27- 100% |###########################################################| Time: 0:00:00 12.75 MB/s
freetype-2.5.5 100% |###########################################################| Time: 0:00:00 10.53 MB/s
numpy-1.12.1-p 100% |###########################################################| Time: 0:00:00 15.12 MB/s
pytz-2017.2-py 100% |###########################################################| Time: 0:00:00 13.25 MB/s
cycler-0.10.0- 100% |###########################################################| Time: 0:00:00 15.61 MB/s
python-dateuti 100% |###########################################################| Time: 0:00:00 6.43 MB/s
matplotlib-2.0 100% |###########################################################| Time: 0:00:00 14.62 MB/s
u0017496@sys-87250:~$ conda install scikit-learn
Fetching package metadata .........
Solving package specifications: .
Package plan for installation in environment /home/u0017496/miniconda3:
The following NEW packages will be INSTALLED:
scikit-learn: 0.18.1-np112py36_1
scipy: 0.19.0-np112py36_0
Proceed ([y]/n)? y
scipy-0.19.0-n 100% |###########################################################| Time: 0:00:02 14.75 MB/s
scikit-learn-0 100% |###########################################################| Time: 0:00:00 15.56 MB/s
이렇게 설치된 것들은 아래와 같이 /home/u0017496/miniconda3/lib/python3.6/site-packages 에 들어갑니다.
u0017496@sys-87250:~$ ls /home/u0017496/miniconda3/lib/python3.6/site-packages/
asn1crypto mpl_toolkits python_dateutil-2.6.0-py3.6.egg-info
asn1crypto-0.22.0-py3.6.egg-info numpy-1.12.1.dist-info pytz
cffi OpenSSL pytz-2017.2-py3.6.egg-info
cffi-1.10.0-py3.6.egg-info packaging README.txt
_cffi_backend.so packaging-16.8-py3.6.egg-info requests
conda pip requests-2.14.2-py3.6.egg-info
conda-4.3.18-py3.6.egg-info pip-9.0.1-py3.6.egg-info ruamel_yaml
conda_env pyasn1 scikit_learn-0.18.1-py3.6.egg-info
cryptography pyasn1-0.2.3-py3.6.egg-info scipy
cryptography-1.8.1-py3.6.egg-info __pycache__ scipy-0.19.0-py3.6.egg-info
cycler-0.10.0-py3.6.egg-info pycosat-0.6.2-py3.6.egg-info setuptools-27.2.0-py3.6.egg
cycler.py pycosat.cpython-36m-powerpc64le-linux-gnu.so setuptools.pth
dateutil pycparser six-1.10.0-py3.6.egg-info
easy-install.pth pycparser-2.17-py3.6.egg-info six.py
idna pylab.py sklearn
idna-2.5-py3.6.egg-info pyOpenSSL-17.0.0-py3.6.egg-info test_pycosat.py
matplotlib pyparsing-2.1.4-py3.6.egg-info wheel
matplotlib-2.0.2-py3.6.egg-info pyparsing.py wheel-0.29.0-py3.6.egg-info
따라서 이것들을 사용하기 위해서는 PYTHONPATH는 다음과 같이 설정하시면 됩니다.
u0017496@sys-87250:~$ export PYTHONPATH=/home/u0017496/miniconda3/lib/python3.6/site-packages:$PYTHONPATH
이제 여기에 (PowerAI에 포함된 tensorflow 말고) conda로 bazel, tensorflow 및 tensorflow-gpu도 설치해보겠습니다.
u0017496@sys-87250:~$ conda install bazel
Fetching package metadata .........
Solving package specifications: .
Package plan for installation in environment /home/u0017496/miniconda3:
The following NEW packages will be INSTALLED:
bazel: 0.4.5-0
Proceed ([y]/n)? y
bazel-0.4.5-0. 100% |#############################################| Time: 0:00:09 13.37 MB/s
u0017496@sys-87250:~$ conda install tensorflow
Fetching package metadata .........
Solving package specifications: .
Package plan for installation in environment /home/u0017496/miniconda3:
The following NEW packages will be INSTALLED:
libprotobuf: 3.2.0-0
protobuf: 3.2.0-py36_0
tensorflow: 1.1.0-np112py36_0
werkzeug: 0.12.2-py36_0
Proceed ([y]/n)? y
libprotobuf-3. 100% |#############################################| Time: 0:00:00 13.84 MB/s
werkzeug-0.12. 100% |#############################################| Time: 0:00:00 18.67 MB/s
protobuf-3.2.0 100% |#############################################| Time: 0:00:00 10.39 MB/s
tensorflow-1.1 100% |#############################################| Time: 0:00:01 15.16 MB/s
u0017496@sys-87250:~$ conda install tensorflow-gpu
Fetching package metadata .........
Solving package specifications: .
Package plan for installation in environment /home/u0017496/miniconda3:
The following NEW packages will be INSTALLED:
cudatoolkit: 8.0-0
cudnn: 6.0.21-0
tensorflow-gpu: 1.1.0-np112py36_0
Proceed ([y]/n)? y
cudatoolkit-8. 100% |#############################################| Time: 0:00:29 11.24 MB/s
cudnn-6.0.21-0 100% |#############################################| Time: 0:00:11 15.97 MB/s
tensorflow-gpu 100% |#############################################| Time: 0:00:06 14.27 MB/s
conda list 명령으로 보면 다음과 같은 것들이 설치된 것을 보실 수 있습니다.
u0017496@sys-87250:~$ conda list
# packages in environment at /home/u0017496/miniconda3:
#
asn1crypto 0.22.0 py36_0
bazel 0.4.5 0
boto 2.46.1 py36_0
bz2file 0.98 py36_0
cffi 1.10.0 py36_0
conda 4.3.18 py36_0
conda-env 2.6.0 0
cryptography 1.8.1 py36_0
cudatoolkit 8.0 0
cudnn 6.0.21 0
cycler 0.10.0 py36_0
freetype 2.5.5 2
gensim 1.0.1 np112py36_0
gensim 2.0.0 <pip>
idna 2.5 py36_0
Keras 2.0.4 <pip>
konlpy 0.4.4 <pip>
libffi 3.2.1 1
libpng 1.6.27 0
libprotobuf 3.2.0 0
matplotlib 2.0.2 np112py36_0
numpy 1.12.1 <pip>
numpy 1.12.1 py36_0
openblas 0.2.19 0
openssl 1.0.2k 2
packaging 16.8 py36_0
pip 9.0.1 py36_1
protobuf 3.2.0 py36_0
pyasn1 0.2.3 py36_0
pycosat 0.6.2 py36_0
pycparser 2.17 py36_0
pyopenssl 17.0.0 py36_0
pyparsing 2.1.4 py36_0
python 3.6.1 2
python-dateutil 2.6.0 py36_0
pytz 2017.2 py36_0
PyYAML 3.12 <pip>
requests 2.14.2 py36_0
ruamel_yaml 0.11.14 py36_1
scikit-learn 0.18.1 np112py36_1
scipy 0.19.0 np112py36_0
setuptools 27.2.0 py36_0
six 1.10.0 py36_0
smart_open 1.5.2 py36_0
sqlite 3.13.0 0
tensorflow 1.1.0 np112py36_0
tensorflow-gpu 1.1.0 np112py36_0
Theano 0.9.0 <pip>
werkzeug 0.12.2 py36_0
wheel 0.29.0 py36_0
xz 5.2.2 1
yaml 0.1.6 0
zlib 1.2.8 3
설치하는 김에, 이렇게 conda로 설치한 tensorflow를 이용하여 inception v3 model을 training 해보겠습니다. 다음 순서대로 따라 하시면 됩니다.
u0017496@sys-87250:~/inception$ pwd
/home/u0017496/inception
u0017496@sys-87250:~/inception$ export INCEPTION_DIR=/home/u0017496/inception
u0017496@sys-87250:~/inception$ curl -O http://download.tensorflow.org/models/image/imagenet/inception-v3-2016-03-01.tar.gz
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 380M 100 380M 0 0 5918k 0 0:01:05 0:01:05 --:--:-- 4233k
u0017496@sys-87250:~/inception$ tar -xvf inception-v3-2016-03-01.tar.gz
inception-v3/
inception-v3/checkpoint
inception-v3/README.txt
inception-v3/model.ckpt-157585
u0017496@sys-87250:~/inception$ git clone https://github.com/tensorflow/models.git
Cloning into 'models'...
remote: Counting objects: 4703, done.
remote: Compressing objects: 100% (43/43), done.
remote: Total 4703 (delta 17), reused 31 (delta 11), pack-reused 4649
Receiving objects: 100% (4703/4703), 153.34 MiB | 5.62 MiB/s, done.
Resolving deltas: 100% (2374/2374), done.
Checking connectivity... done.
u0017496@sys-87250:~/inception/models/inception$ export FLOWERS_DIR=/home/u0017496/inception/models/inception
u0017496@sys-87250:~/inception/models/inception$ mkdir -p $FLOWERS_DIR/data
u0017496@sys-87250:~/inception/models/inception$ which bazel
/home/u0017496/miniconda3/bin/bazel
u0017496@sys-87250:~/inception/models/inception$ bazel build inception/download_and_preprocess_flowers
Extracting Bazel installation...
....................
INFO: Found 1 target...
Target //inception:download_and_preprocess_flowers up-to-date:
bazel-bin/inception/download_and_preprocess_flowers
INFO: Elapsed time: 6.943s, Critical Path: 0.05s
u0017496@sys-87250:~/inception/models/inception$ export TEST_TMPDIR=/home/u0017496/.cache
u0017496@sys-87250:~/inception/models/inception$ bazel build inception/download_and_preprocess_flowers
INFO: $TEST_TMPDIR defined: output root default is '/home/u0017496/.cache'.
Extracting Bazel installation...
.............
INFO: Found 1 target...
Target //inception:download_and_preprocess_flowers up-to-date:
bazel-bin/inception/download_and_preprocess_flowers
INFO: Elapsed time: 4.867s, Critical Path: 0.03s
u0017496@sys-87250:~/inception/models/inception$ bazel-bin/inception/download_and_preprocess_flowers $FLOWERS_DIR/data
Downloading flower data set.
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 218M 100 218M 0 0 9372k 0 0:00:23 0:00:23 --:--:-- 10.1M
(중략)
Found 3170 JPEG files across 5 labels inside /home/u0017496/inception/models/inception/data/raw-data/train.
Launching 2 threads for spacings: [[0, 1585], [1585, 3170]]
2017-05-19 05:33:44.191446 [thread 0]: Processed 1000 of 1585 images in thread batch.
2017-05-19 05:33:44.213856 [thread 1]: Processed 1000 of 1585 images in thread batch.
2017-05-19 05:33:54.902070 [thread 1]: Wrote 1585 images to /home/u0017496/inception/models/inception/data/train-00001-of-00002
2017-05-19 05:33:54.902172 [thread 1]: Wrote 1585 images to 1585 shards.
2017-05-19 05:33:54.911283 [thread 0]: Wrote 1585 images to /home/u0017496/inception/models/inception/data/train-00000-of-00002
2017-05-19 05:33:54.911360 [thread 0]: Wrote 1585 images to 1585 shards.
2017-05-19 05:33:55.171141: Finished writing all 3170 images in data set.
아래에서 보시다시피 이 inception v3는 꽃 사진을 분류하는 neural network입니다.
u0017496@sys-87250:~/inception/models/inception$ du -sm data/raw-data/train/*
29 data/raw-data/train/daisy
44 data/raw-data/train/dandelion
1 data/raw-data/train/LICENSE.txt
33 data/raw-data/train/roses
47 data/raw-data/train/sunflowers
48 data/raw-data/train/tulips
u0017496@sys-87250:~/inception/models/inception$ bazel build inception/flowers_train
INFO: $TEST_TMPDIR defined: output root default is '/home/u0017496/.cache'.
............................
INFO: Found 1 target...
Target //inception:flowers_train up-to-date:
bazel-bin/inception/flowers_train
INFO: Elapsed time: 6.502s, Critical Path: 0.03s
이제 비로소 inception v3의 training 준비가 끝났습니다. 이제 다음 명령으로 training을 시작합니다.
u0017496@sys-87250:~/inception/models/inception$ time bazel-bin/inception/flowers_train --train_dir=$FLOWERS_DIR/train --data_dir=$FLOWERS_DIR/data --pretrained_model_checkpoint_path=$INCEPTION_DIR/inception-v3/model.ckpt-157585 --fine_tune=True --initial_learning_rate=0.001 -input_queue_memory_factor=1 --max_steps=50 --num_gpus 1 --batch_size=32
NVIDIA: no NVIDIA devices found
2017-05-19 05:41:03.740213: E tensorflow/stream_executor/cuda/cuda_driver.cc:405] failed call to cuInit: CUDA_ERROR_UNKNOWN
2017-05-19 05:41:03.740670: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:145] kernel driver does not appear to be running on this host (sys-87250): /proc/driver/nvidia/version does not exist
2017-05-19 05:41:51.947244: Pre-trained model restored from /home/u0017496/inception/inception-v3/model.ckpt-157585
2017-05-19 05:47:22.023602: step 0, loss = 2.79 (0.2 examples/sec; 182.713 sec/batch)
2017-05-19 06:05:58.942671: step 10, loss = 2.53 (0.4 examples/sec; 78.882 sec/batch)
2017-05-19 06:19:26.875533: step 20, loss = 2.40 (0.4 examples/sec; 82.410 sec/batch)
2017-05-19 06:33:10.333275: step 30, loss = 2.20 (0.4 examples/sec; 77.844 sec/batch)
2017-05-19 06:48:27.688993: step 40, loss = 2.24 (0.3 examples/sec; 96.148 sec/batch)
real 84m30.882s
user 135m20.864s
sys 2m30.832s
이제 와서 고백하지만 제가 설치 demo를 보여드린 이 서버는 사실 GPU가 달려 있지 않은 POWER8 서버입니다. GPU가 없는 경우 CPU를 이용하게 되는데, 그런 경우 이 training의 완료는 보시다시피 매우, 매우 오래 걸립니다. 저 output을 보면 초당 example 0.4개 처리로 나옵니다만, P100을 이용하는 경우 (GPU 개수 및 batch size에 따라) 초당 50개~200개 단위로 처리가 됩니다.
아래는 전에 PowerAI를 설치한 Minsky 서버에서 수행했던 inception v3의 결과 log 일부입니다.
2017-05-16 03:48:46.352210: Pre-trained model restored from /gpfs/gpfs_gl4_16mb/b7p088za/inception-v3/model.ckpt-157585
2017-05-16 03:52:44.322381: step 0, loss = 2.72 (17.6 examples/sec; 21.830 sec/batch)
2017-05-16 03:55:29.550791: step 10, loss = 2.57 (213.6 examples/sec; 1.797 sec/batch)
2017-05-16 03:55:47.619990: step 20, loss = 2.35 (212.1 examples/sec; 1.810 sec/batch)
2017-05-16 03:56:05.953991: step 30, loss = 2.17 (206.6 examples/sec; 1.859 sec/batch)
2017-05-16 03:56:24.306742: step 40, loss = 1.98 (209.4 examples/sec; 1.834 sec/batch)
2017-05-16 03:56:42.490063: step 50, loss = 1.92 (217.8 examples/sec; 1.763 sec/batch)
2017-05-16 03:57:00.444537: step 60, loss = 1.67 (216.6 examples/sec; 1.773 sec/batch)
2017-05-16 03:57:18.366941: step 70, loss = 1.58 (212.7 examples/sec; 1.806 sec/batch)
2017-05-16 03:57:36.467837: step 80, loss = 1.55 (213.6 examples/sec; 1.798 sec/batch)
Minsky 서버에 한국어 text 분석을 위한 기초 환경 (gensim, keras, KoNLPy, MeCab) 및 Oracle client 버전 설치하기
Minsky 서버에 gensim 2.0.0, keras 2.0.4, KoNLPY, MeCab 및 Oracle client 버전을 설치하는 방법을 정리했습니다.
gensim은 python library로서 document로부터 어의(semantics)를 추출하는데 사용됩니다. pip 명령으로 설치하면 되는데, 특정 버전을 설치하기 위해서는 다음과 같이 '==version'의 형태를 사용하면 됩니다.
u0017496@sys-87250:~$ sudo pip install gensim==2.0.0
Collecting gensim==2.0.0
Downloading gensim-2.0.0.tar.gz (14.1MB)
100% |████████████████████████████████| 14.2MB 70kB/s
Requirement already satisfied (use --upgrade to upgrade): numpy>=1.3 in /usr/lib/python2.7/dist-packages (from gensim==2.0.0)
Requirement already satisfied (use --upgrade to upgrade): scipy>=0.7.0 in /usr/local/lib/python2.7/dist-packages (from gensim==2.0.0)
Requirement already satisfied (use --upgrade to upgrade): six>=1.5.0 in /usr/lib/python2.7/dist-packages (from gensim==2.0.0)
Requirement already satisfied (use --upgrade to upgrade): smart_open>=1.2.1 in /usr/local/lib/python2.7/dist-packages (from gensim==2.0.0)
Requirement already satisfied (use --upgrade to upgrade): boto>=2.32 in /usr/lib/python2.7/dist-packages (from smart_open>=1.2.1->gensim==2.0.0)
Requirement already satisfied (use --upgrade to upgrade): bz2file in /usr/local/lib/python2.7/dist-packages (from smart_open>=1.2.1->gensim==2.0.0)
Requirement already satisfied (use --upgrade to upgrade): requests in /usr/lib/python2.7/dist-packages (from smart_open>=1.2.1->gensim==2.0.0)
Installing collected packages: gensim
Running setup.py install for gensim ... done
Successfully installed gensim-2.0.0
keras는 high-level neural networks API로서, python으로 작성되어 tensorflow나 theano 위에서 사용됩니다. 역시 pip 명령으로 설치하면 됩니다.
u0017496@sys-87250:~$ sudo pip install keras==2.0.4
Collecting keras==2.0.4
Downloading Keras-2.0.4.tar.gz (199kB)
100% |████████████████████████████████| 204kB 2.5MB/s
Collecting theano (from keras==2.0.4)
Downloading Theano-0.9.0.tar.gz (3.1MB)
100% |████████████████████████████████| 3.1MB 310kB/s
Collecting pyyaml (from keras==2.0.4)
Downloading PyYAML-3.12.tar.gz (253kB)
100% |████████████████████████████████| 256kB 2.3MB/s
Requirement already satisfied (use --upgrade to upgrade): six in /usr/lib/python2.7/dist-packages (from keras==2.0.4)
Requirement already satisfied (use --upgrade to upgrade): numpy>=1.9.1 in /usr/lib/python2.7/dist-packages (from theano->keras==2.0.4)
Requirement already satisfied (use --upgrade to upgrade): scipy>=0.14 in /usr/local/lib/python2.7/dist-packages (from theano->keras==2.0.4)
Installing collected packages: theano, pyyaml, keras
Running setup.py install for theano ... done
Running setup.py install for pyyaml ... done
Running setup.py install for keras ... done
Successfully installed keras-2.0.4 pyyaml-3.12 theano-0.9.0
KoNLPy는 Korean National Language Processing in python으로서, 글자 그대로 한국어를 python으로 처리할 때 사용됩니다. '콘엔엘파이'라고 읽습니다. 이 역시 pip로 설치합니다.
u0017496@sys-87250:~$ sudo pip install konlpy
Collecting konlpy
Downloading konlpy-0.4.4-py2.py3-none-any.whl (22.5MB)
100% |████████████████████████████████| 22.5MB 46kB/s
Collecting JPype1>=0.5.7; python_version == "2.6" or python_version == "2.7" (from konlpy)
Downloading JPype1-0.6.2.tar.gz (147kB)
100% |████████████████████████████████| 153kB 3.7MB/s
Installing collected packages: JPype1, konlpy
Running setup.py install for JPype1 ... done
Successfully installed JPype1-0.6.2 konlpy-0.4.4
MeCab은 일본어 문자의 형태학적 분석을 위해 사용되는 패키지인데, 이는 Ubuntu OS 안에 다음과 같은 여러가지 package로 포함되어 있습니다. 다음과 같이 apt-get 명령으로 설치하면 됩니다.
u0017496@sys-87250:~$ sudo apt-get install mecab-utils libmecab-dev libmecab2 libmecab-jni ruby-mecab mecab-ipadic python-mecab libmecab-java mecab
...
reading /usr/share/mecab/dic/ipadic/Postp-col.csv ... 91
emitting double-array: 100% |###########################################|
reading /usr/share/mecab/dic/ipadic/matrix.def ... 1316x1316
emitting matrix : 100% |###########################################|
done!
Setting up python-mecab (0.99.6-1build2) ...
Setting up ruby-mecab (0.99.6-2build7) ...
Processing triggers for libc-bin (2.23-0ubuntu7) ...
위에서 보셨다시피 python-mecab이 이미 포함되어 있으므로, pip 명령으로 mecab-python을 설치하려고 해보면 이미 충족되었다고 나옵니다.
u0017496@sys-87250:~$ sudo pip install mecab-python
Requirement already satisfied (use --upgrade to upgrade): mecab-python in /usr/lib/python2.7/dist-packages
alien은 Ubuntu에서 주로 사용되는 debian 패키지와 Redhat에서 주로 사용되는 rpm 패키지 등을 상호 변환해주는 tool이며, Ubuntu OS에 기본 패키지로 포함되어 있습니다. 따라서 다음과 같이 apt-get 명령으로 설치만 해주면 됩니다. 이러면 rpm 등 필요한 패키지를 자동으로 함께 설치합니다.
u0017496@sys-87250:~$ sudo apt-get install alien
---------------------------
이제 Oracle client 버전을 설치해보겠습니다. Oracle DBMS의 서버 버전은 Minsky 서버의 processor 아키텍처인 ppc64le에 포팅이 되어 있지 않고, 앞으로도 그럴 일은 없어 보입니다. (IBM에서는 왜 Linux에 값비싼 Oracle을 쓰느냐, Linux를 쓰려거든 당연히 MariaDB나 PostgreSQL, MySQL 등의 오픈소스 DBMS를 쓰는 것이 맞는 방향이다 라고 말하고 있습니다.) 그러나 Linux건 UNIX건 Oracle DBMS가 차지하는 막대한 비중을 생각할 때, Linux 서버들이 Oracle 서버에는 접속할 필요가 있다고 보았는지 Oracle client 버전은 최신 12 버전까지 모두 포팅되어 있습니다. 아래의 Oracle site에서 무료 회원 가입하고 download 받으시면 됩니다.
http://www.oracle.com/technetwork/topics/linux-power-le-2835260.html
u0017496@sys-87250:/usr/local$ ls ~/
instantclient-basic-linux.leppc64-12.1.0.2.0.zip
instantclient-jdbc-linux.leppc64-12.1.0.2.0.zip
instantclient-odbc-linux.leppc64-12.1.0.2.0.zip
instantclient-sdk-linux.leppc64-12.1.0.2.0.zip
instantclient-sqlplus-linux.leppc64-12.1.0.2.0.zip
이것들을 unzip으로 다음과 같이 풀어놓으면 됩니다.
u0017496@sys-87250:/usr/local$ sudo unzip ~/instantclient-basic-linux.leppc64-12.1.0.2.0.zip
u0017496@sys-87250:/usr/local$ sudo unzip ~/instantclient-jdbc-linux.leppc64-12.1.0.2.0.zip
u0017496@sys-87250:/usr/local$ sudo unzip ~/instantclient-odbc-linux.leppc64-12.1.0.2.0.zip
u0017496@sys-87250:/usr/local$ sudo unzip ~/instantclient-sdk-linux.leppc64-12.1.0.2.0.zip
u0017496@sys-87250:/usr/local$ sudo unzip ~/instantclient-sqlplus-linux.leppc64-12.1.0.2.0.zip
내용을 살펴보면 다음과 같이 sqlplus 실행파일과 각종 shared object (so) 파일들이 들어 있습니다.
u0017496@sys-87250:/usr/local/instantclient_12_1$ ls
adrci libheteroxa12.so libsqlplus.so sdk
BASIC_README libnnz12.so libsqora.so.12.1 sqlplus
genezi libocci.so.12.1 ODBC_IC_Readme_Unix.html SQLPLUS_README
glogin.sql libociei.so odbc_update_ini.sh uidrvci
help libocijdbc12.so ojdbc6.jar xstreams.jar
JDBC_README libons.so ojdbc7.jar
libclntshcore.so.12.1 liboramysql12.so orai18n.jar
libclntsh.so.12.1 libsqlplusic.so orai18n-mapping.jar
이제 LD_LIBRARY_PATH와 PATH 등 환경변수를 설정하고 sqlplus를 구동해보겠습니다.
u0017496@sys-87250:/usr/local/instantclient_12_1$ cd
u0017496@sys-87250:~$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/instantclient_12_1
u0017496@sys-87250:~$ export PATH=$PATH:/usr/local/instantclient_12_1
u0017496@sys-87250:~$ which sqlplus
/usr/local/instantclient_12_1/sqlplus
u0017496@sys-87250:~$ sqlplus
sqlplus: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
놀랍게도 error가 납니다. 놀라실 것 없습니다. AIX 시절의 기억을 살려보면, Oracle은 async I/O를 사용하지요. Linux에도 aio library가 있고, apt-get 명령으로 설치할 수 있습니다.
u0017496@sys-87250:~$ sudo apt-get install libaio-dev libaio1 libaio1-dbg
이제 다시 sqlplus를 구동해보겠습니다. 잘 되는 것을 보실 수 있습니다.
u0017496@sys-87250:~$ sqlplus
SQL*Plus: Release 12.1.0.2.0 Production on Sun May 14 21:10:37 2017
Copyright (c) 1982, 2015, Oracle. All rights reserved.
Enter user-name:
gensim은 python library로서 document로부터 어의(semantics)를 추출하는데 사용됩니다. pip 명령으로 설치하면 되는데, 특정 버전을 설치하기 위해서는 다음과 같이 '==version'의 형태를 사용하면 됩니다.
u0017496@sys-87250:~$ sudo pip install gensim==2.0.0
Collecting gensim==2.0.0
Downloading gensim-2.0.0.tar.gz (14.1MB)
100% |████████████████████████████████| 14.2MB 70kB/s
Requirement already satisfied (use --upgrade to upgrade): numpy>=1.3 in /usr/lib/python2.7/dist-packages (from gensim==2.0.0)
Requirement already satisfied (use --upgrade to upgrade): scipy>=0.7.0 in /usr/local/lib/python2.7/dist-packages (from gensim==2.0.0)
Requirement already satisfied (use --upgrade to upgrade): six>=1.5.0 in /usr/lib/python2.7/dist-packages (from gensim==2.0.0)
Requirement already satisfied (use --upgrade to upgrade): smart_open>=1.2.1 in /usr/local/lib/python2.7/dist-packages (from gensim==2.0.0)
Requirement already satisfied (use --upgrade to upgrade): boto>=2.32 in /usr/lib/python2.7/dist-packages (from smart_open>=1.2.1->gensim==2.0.0)
Requirement already satisfied (use --upgrade to upgrade): bz2file in /usr/local/lib/python2.7/dist-packages (from smart_open>=1.2.1->gensim==2.0.0)
Requirement already satisfied (use --upgrade to upgrade): requests in /usr/lib/python2.7/dist-packages (from smart_open>=1.2.1->gensim==2.0.0)
Installing collected packages: gensim
Running setup.py install for gensim ... done
Successfully installed gensim-2.0.0
keras는 high-level neural networks API로서, python으로 작성되어 tensorflow나 theano 위에서 사용됩니다. 역시 pip 명령으로 설치하면 됩니다.
u0017496@sys-87250:~$ sudo pip install keras==2.0.4
Collecting keras==2.0.4
Downloading Keras-2.0.4.tar.gz (199kB)
100% |████████████████████████████████| 204kB 2.5MB/s
Collecting theano (from keras==2.0.4)
Downloading Theano-0.9.0.tar.gz (3.1MB)
100% |████████████████████████████████| 3.1MB 310kB/s
Collecting pyyaml (from keras==2.0.4)
Downloading PyYAML-3.12.tar.gz (253kB)
100% |████████████████████████████████| 256kB 2.3MB/s
Requirement already satisfied (use --upgrade to upgrade): six in /usr/lib/python2.7/dist-packages (from keras==2.0.4)
Requirement already satisfied (use --upgrade to upgrade): numpy>=1.9.1 in /usr/lib/python2.7/dist-packages (from theano->keras==2.0.4)
Requirement already satisfied (use --upgrade to upgrade): scipy>=0.14 in /usr/local/lib/python2.7/dist-packages (from theano->keras==2.0.4)
Installing collected packages: theano, pyyaml, keras
Running setup.py install for theano ... done
Running setup.py install for pyyaml ... done
Running setup.py install for keras ... done
Successfully installed keras-2.0.4 pyyaml-3.12 theano-0.9.0
KoNLPy는 Korean National Language Processing in python으로서, 글자 그대로 한국어를 python으로 처리할 때 사용됩니다. '콘엔엘파이'라고 읽습니다. 이 역시 pip로 설치합니다.
u0017496@sys-87250:~$ sudo pip install konlpy
Collecting konlpy
Downloading konlpy-0.4.4-py2.py3-none-any.whl (22.5MB)
100% |████████████████████████████████| 22.5MB 46kB/s
Collecting JPype1>=0.5.7; python_version == "2.6" or python_version == "2.7" (from konlpy)
Downloading JPype1-0.6.2.tar.gz (147kB)
100% |████████████████████████████████| 153kB 3.7MB/s
Installing collected packages: JPype1, konlpy
Running setup.py install for JPype1 ... done
Successfully installed JPype1-0.6.2 konlpy-0.4.4
MeCab은 일본어 문자의 형태학적 분석을 위해 사용되는 패키지인데, 이는 Ubuntu OS 안에 다음과 같은 여러가지 package로 포함되어 있습니다. 다음과 같이 apt-get 명령으로 설치하면 됩니다.
u0017496@sys-87250:~$ sudo apt-get install mecab-utils libmecab-dev libmecab2 libmecab-jni ruby-mecab mecab-ipadic python-mecab libmecab-java mecab
...
reading /usr/share/mecab/dic/ipadic/Postp-col.csv ... 91
emitting double-array: 100% |###########################################|
reading /usr/share/mecab/dic/ipadic/matrix.def ... 1316x1316
emitting matrix : 100% |###########################################|
done!
Setting up python-mecab (0.99.6-1build2) ...
Setting up ruby-mecab (0.99.6-2build7) ...
Processing triggers for libc-bin (2.23-0ubuntu7) ...
위에서 보셨다시피 python-mecab이 이미 포함되어 있으므로, pip 명령으로 mecab-python을 설치하려고 해보면 이미 충족되었다고 나옵니다.
u0017496@sys-87250:~$ sudo pip install mecab-python
Requirement already satisfied (use --upgrade to upgrade): mecab-python in /usr/lib/python2.7/dist-packages
alien은 Ubuntu에서 주로 사용되는 debian 패키지와 Redhat에서 주로 사용되는 rpm 패키지 등을 상호 변환해주는 tool이며, Ubuntu OS에 기본 패키지로 포함되어 있습니다. 따라서 다음과 같이 apt-get 명령으로 설치만 해주면 됩니다. 이러면 rpm 등 필요한 패키지를 자동으로 함께 설치합니다.
u0017496@sys-87250:~$ sudo apt-get install alien
이제 Oracle client 버전을 설치해보겠습니다. Oracle DBMS의 서버 버전은 Minsky 서버의 processor 아키텍처인 ppc64le에 포팅이 되어 있지 않고, 앞으로도 그럴 일은 없어 보입니다. (IBM에서는 왜 Linux에 값비싼 Oracle을 쓰느냐, Linux를 쓰려거든 당연히 MariaDB나 PostgreSQL, MySQL 등의 오픈소스 DBMS를 쓰는 것이 맞는 방향이다 라고 말하고 있습니다.) 그러나 Linux건 UNIX건 Oracle DBMS가 차지하는 막대한 비중을 생각할 때, Linux 서버들이 Oracle 서버에는 접속할 필요가 있다고 보았는지 Oracle client 버전은 최신 12 버전까지 모두 포팅되어 있습니다. 아래의 Oracle site에서 무료 회원 가입하고 download 받으시면 됩니다.
http://www.oracle.com/technetwork/topics/linux-power-le-2835260.html
u0017496@sys-87250:/usr/local$ ls ~/
instantclient-basic-linux.leppc64-12.1.0.2.0.zip
instantclient-jdbc-linux.leppc64-12.1.0.2.0.zip
instantclient-odbc-linux.leppc64-12.1.0.2.0.zip
instantclient-sdk-linux.leppc64-12.1.0.2.0.zip
instantclient-sqlplus-linux.leppc64-12.1.0.2.0.zip
이것들을 unzip으로 다음과 같이 풀어놓으면 됩니다.
u0017496@sys-87250:/usr/local$ sudo unzip ~/instantclient-basic-linux.leppc64-12.1.0.2.0.zip
u0017496@sys-87250:/usr/local$ sudo unzip ~/instantclient-jdbc-linux.leppc64-12.1.0.2.0.zip
u0017496@sys-87250:/usr/local$ sudo unzip ~/instantclient-odbc-linux.leppc64-12.1.0.2.0.zip
u0017496@sys-87250:/usr/local$ sudo unzip ~/instantclient-sdk-linux.leppc64-12.1.0.2.0.zip
u0017496@sys-87250:/usr/local$ sudo unzip ~/instantclient-sqlplus-linux.leppc64-12.1.0.2.0.zip
내용을 살펴보면 다음과 같이 sqlplus 실행파일과 각종 shared object (so) 파일들이 들어 있습니다.
u0017496@sys-87250:/usr/local/instantclient_12_1$ ls
adrci libheteroxa12.so libsqlplus.so sdk
BASIC_README libnnz12.so libsqora.so.12.1 sqlplus
genezi libocci.so.12.1 ODBC_IC_Readme_Unix.html SQLPLUS_README
glogin.sql libociei.so odbc_update_ini.sh uidrvci
help libocijdbc12.so ojdbc6.jar xstreams.jar
JDBC_README libons.so ojdbc7.jar
libclntshcore.so.12.1 liboramysql12.so orai18n.jar
libclntsh.so.12.1 libsqlplusic.so orai18n-mapping.jar
이제 LD_LIBRARY_PATH와 PATH 등 환경변수를 설정하고 sqlplus를 구동해보겠습니다.
u0017496@sys-87250:/usr/local/instantclient_12_1$ cd
u0017496@sys-87250:~$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/instantclient_12_1
u0017496@sys-87250:~$ export PATH=$PATH:/usr/local/instantclient_12_1
u0017496@sys-87250:~$ which sqlplus
/usr/local/instantclient_12_1/sqlplus
u0017496@sys-87250:~$ sqlplus
sqlplus: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
놀랍게도 error가 납니다. 놀라실 것 없습니다. AIX 시절의 기억을 살려보면, Oracle은 async I/O를 사용하지요. Linux에도 aio library가 있고, apt-get 명령으로 설치할 수 있습니다.
u0017496@sys-87250:~$ sudo apt-get install libaio-dev libaio1 libaio1-dbg
이제 다시 sqlplus를 구동해보겠습니다. 잘 되는 것을 보실 수 있습니다.
u0017496@sys-87250:~$ sqlplus
SQL*Plus: Release 12.1.0.2.0 Production on Sun May 14 21:10:37 2017
Copyright (c) 1982, 2015, Oracle. All rights reserved.
Enter user-name:
2017년 5월 11일 목요일
Minsky 서버에 CUDA 및 PowerAI 설치, 그리고 기본 tuning
Minsky에 Ubuntu를 설치할 때는 USB로 연결되는 DVD가 잘 인식이 안 되더라는 이야기가 있습니다. 대부분은 USB memory stick에 Ubuntu ISO image를 넣어서 설치하시고 있으며, 다음 site에서 download 받은 Ubuntu ISO image를 UltraISO 또는 Rufus 같은 tool을 이용해 USB memory stick에 booting 가능한 이미지로 넣습니다. 저는 Rufus를 써봤는데 괜찮은 것 같습니다.
$ sudo dpkg -i mldl*.deb
최근까지는 Ubuntu 16.04.01 LTS 버전을 많이 썼지만, 위의 ubuntu download site에 가보면 이미 16.04.01은 link가 없어졌고, 16.04.02의 이미지만 제공하고 있습니다. 어쩔 수 없이 이젠 16.04.02를 쓰셔야 할 듯 합니다.
https://www.ubuntu.com/download/server/power8
https://www.ubuntu.com/download/server/power8
그에 따라 CUDA도 기존에 많이 쓰던 8.0.44나 8.0.54 버전 말고, 최신의 8.0.61 버전을 사용하실 것을 권고드립니다. 어차피 다음의 CUDA download site에 가보면 기본으로 8.0.61 버전만 제공합니다.
저 위 화면에서 deb(local) 버튼을 클릭하면 1.3GB 정도의 deb file의 download가 시작됩니다.
Minsky 서버에서 곧장 download 받을 경우 다음과 같이 wget 명령으로 받으시면 됩니다.
$ wget https://developer.nvidia.com/compute/cuda/8.0/Prod2/local_installers/cuda-repo-ubuntu1604-8-0-local-ga2v2_8.0.61-1_ppc64el-deb
이걸 다 받고 나시면 다음과 같이 dpkg 명령으로 해당 deb file을 설치하십시요.
$ sudo dpkg -i cuda-repo-ubuntu1604-8-0-local-ga2v2_8.0.61-1_ppc64el.deb
이 deb file은 cuda 관련 debian package들을 /var/cuda-repo-8-0-local 로 copy한 뒤 local repository로 등록해주는 역할을 합니다. 다음으로는 이 local repository 속의 내용을 다음 명령을 통해 apt cache에 update 해줘야 합니다.
$ sudo apt-get update
이제 비로소 cuda를 설치할 준비가 끝났습니다. cuda toolkit에는 여러가지 것들이 많습니다만 일일이 하나하나 설치하실 필요없이 그냥 다음 명령 한줄만 내리면 전체적으로 알아서 다 설치해 줍니다.
$ sudo apt-get install cuda
일단 cuda 설치가 끝났습니다.
그 다음으로는 deep learning에 필요한 cuDNN library들을 download 받아서 설치해야 합니다. 다만 이것들은 다음의 NVIDIA site에서 사용자 등록을 (무료입니다) 하시고 받으셔야 합니다.
여기서 download를 click하면 사용자 등록부터 하라고 나올 겁니다. 등록하시고 license agreement도 click하시면 아래 화면이 나오는데, 이중 Download cuDNN v5.1 (Jan 20, 2017), for CUDA 8.0 을 click 하시고, 이어서 나오는 file 목록 중 POWER8에 관련된 것들을 download 받으신 뒤 Minsky 서버에 upload 하십시요.
이렇게 받은 libcudnn*.deb 파일들을 다음과 같이 dpkg 명령으로 설치합니다.
$ sudo dpkg -i libcudnn5_5.1.10-1+cuda8.0_ppc64el.deb
$ sudo dpkg -i libcudnn5-dev_5.1.10-1+cuda8.0_ppc64el.deb
$ sudo dpkg -i libcudnn5-doc_5.1.10-1+cuda8.0_ppc64el.deb
그 다음으로는 IBM PowerAI toolkit을 download 받습니다. 다음 site에서 최신의 local deb file을 받으시면 됩니다.
또는 다음과 같이 Minsky 서버에서 곧장 wget 명령으로 받으셔도 됩니다.
$ wget https://public.dhe.ibm.com/software/server/POWER/Linux/mldl/ubuntu/mldl-repo-local_3.4.2_ppc64el.deb
(최신 PowerAI 4.0은 다음과 같이 받으시면 됩니다.)
$ wget https://public.dhe.ibm.com/software/server/POWER/Linux/mldl/ubuntu/mldl-repo-local_4.0.0_ppc64el.deb
(최신 PowerAI 4.0은 다음과 같이 받으시면 됩니다.)
$ wget https://public.dhe.ibm.com/software/server/POWER/Linux/mldl/ubuntu/mldl-repo-local_4.0.0_ppc64el.deb
이것 역시 PowerAI 관련 debian package들을 /opt/DL/repo 로 copy한 뒤 local repository로 등록해주는 역할을 합니다. 이걸 dpkg 명령으로 설치하고, 그 다음에 이 local repository 속의 내용을 다음 명령을 통해 apt cache에 update 해줘야 합니다.
$ sudo dpkg -i mldl*.deb
$ sudo apt-get update
이제 PowerAI 설치 준비가 끝났습니다. PowerAI toolkit에는 여러가지 것들이 많습니다만 일일이 하나하나 설치하실 필요없이 그냥 다음 명령 한줄만 내리면 전체적으로 알아서 다 설치해 줍니다.
$ sudo apt-get install power-mldl
위와 같이 전체 PowerAI toolkit을 일괄 설치하는 명령에 error가 나는 경우가 가끔 있습니다. 복잡하게 생각하실 필요없이, (대부분 caffe와 tensorflow가 필요하시니까) 그냥 각각의 module을 설치하십시요. 그렇게 개개의 framework을 설치하는 것은 error 없이 잘 되실 겁니다. 이때 OpenCV나 bazel 같은 dependent package들은 자동으로 함께 설치됩니다.
$ sudo apt-get install caffe-ibm
$ sudo apt-get install caffe-bvlc
$ sudo apt-get install caffe-nv
$ sudo apt-get install tensorflow
이제 각 framework을 사용하실 때는 각각의 directory에서 사용하려는 framework을 activate 해주면 필요한 환경변수들이 자동으로 잡힙니다. 가령 caffe-ibm을 쓸 경우엔 다음과 같이 해주시면 됩니다.
$ source /opt/DL/caffe-ibm/bin/caffe-activate
다음과 같이 PATH 환경 변수를 확인해보십시요.
$ env | grep PATH
LD_LIBRARY_PATH=/opt/DL/openblas/lib:/opt/DL/caffe-ibm/lib:/usr/local/cuda-8.0/lib64
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/cuda-8.0/bin:/u/b7p088za/.local/bin:/u/b7p088za/bin:/opt/DL/caffe-ibm/bin
PYTHONPATH=/opt/DL/caffe-ibm/python
또는 tensorflow를 쓰시려 할 때는 다음과 같이 하시면 됩니다.
$ source /opt/DL/bazel/bin/bazel-activate
$ source /opt/DL/tensorflow/bin/tensorflow-activate
PATH 확인해보십시요.
$ env | grep PATH
LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64:/usr/local/cuda-8.0/extras/CUPTI/lib64:/opt/DL/tensorflow/lib
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/cuda-8.0/bin:/u/b7p088za/.local/bin:/u/b7p088za/bin:/opt/DL/bazel/bin:/opt/DL/tensorflow/bin
PYTHONPATH=/opt/DL/tensorflow/lib/python2.7/site-packages
이제 기본 시스템 튜닝입니다. 기본적으로는 cpupower의 governor를 "performance"로, GPU boost를 on으로, 그리고 SMT는 2로 세팅하는 것이 좋습니다. SMT를 몇으로 세팅하느냐 여부는 물론 workload 성격에 따라 다를 수 있습니다만, 대부분의 경우 일단 2에서 시작해서 4, 8로 늘려보거나 아예 off 해보시는 것이 좋습니다.
먼저 cpupower 명령어를 설치해야 합니다.
$ sudo apt-get install linux-tools-common cpufrequtils
만약 which cpupower 라고 입력했을 때 /usr/bin/cpupower 이라고 나온다면 이는 이미 설치된 것이므로 이건 안 하셔도 됩니다.
다음으로는 /etc/rc.local에 다음 3줄을 삽입하여 booting 시에 자동으로 cpu overclocking과 GPU autoboost가 enable 되도록 합니다.
$ sudo vi /etc/rc.local
...
(맨 아래쪽 exit 0 바로 위에 4줄 삽입)
/usr/bin/cpupower frequency-set --governor performance
/usr/bin/nvidia-smi -pm ENABLED
/usr/bin/nvidia-smi -ac 715,1480
/usr/sbin/ppc64_cpu --smt=2
exit 0
이제 rebooting 한번 해보시고, 정상적으로 부팅되면 빨간색 부분이 다음과 같이 되어 있는지 확인해보십시요.
$ cpupower frequency-info | grep governor
available cpufreq governors: conservative, ondemand, userspace, powersave, performance
The governor "performance" may decide which speed to use
$ nvidia-smi -q | tail -n 16
Applications Clocks
Graphics : 1480 MHz
Memory : 715 MHz
Default Applications Clocks
Graphics : 1328 MHz
Memory : 715 MHz
Max Clocks
Graphics : 1480 MHz
SM : 1480 MHz
Memory : 715 MHz
Video : 1480 MHz
Clock Policy
Auto Boost : N/A
Auto Boost Default : N/A
Processes : None
$ ppc64_cpu --smt
SMT = 2
이제 완료된 것입니다.
피드 구독하기:
글 (Atom)