최근 IBM이 tensorflow 1.8을 ppc64le에서도 사용할 수 있다고 발표했습니다. 그 prerequisite은 CUDA 9.2가 설치되어 있는 환경이어야 한다는 점입니다. 아래 site에서 wheel file을 받아서 아래처럼 설치하면 간단히 쓸 수 있습니다.
[ibm@centos01 files]$ wget ftp://ftp.unicamp.br/pub/ppc64el/ai_frameworks/tensorflow/tensorflow-1.8.0-cp27-none-linux_ppc64le.whl
[ibm@centos01 files]$ which python
~/anaconda2/bin/python
[ibm@centos01 files]$ pip install tensorflow-1.8.0-cp27-none-linux_ppc64le.whl
그러나 위 site에는 python2.7을 위한 wheel file만 있습니다. python3.6을 위한 tensorflow가 필요하시다면 직접 source에서 build하셔야 합니다. 현재로서는 이걸 build하실 때 아래와 같이 약간 source 수정이 필요합니다.
먼저, tensorflow 1.8.0에서는 기존 버전과 눈에 띄게 달라진 점이 있습니다. NCCL ('니클'이라고 읽습니다) library를 사용한다는 점입니다. 따라서 NCCL을 먼저 설치해야 하는데, 다행히 쉽습니다.
[ibm@centos01 ~]$ git clone https://github.com/NVIDIA/nccl
[ibm@centos01 ~]$ cd nccl
[ibm@centos01 nccl]$ make
[ibm@centos01 nccl]$ sudo make install
python 버전이 3.x 인 것을 확인하십시요.
[ibm@centos01 ~]$ which python
~/anaconda3/bin/python
[ibm@centos01 ~]$ git clone https://github.com/tensorflow/tensorflow
[ibm@centos01 ~]$ cd tensorflow
[ibm@centos01 tensorflow]$ git checkout tags/v1.8.0
예전 버전과 마찬가지로, -march=native가 default로 들어가 있으면 error가 나므로 해당 부분을 다 -mcpu=power8으로 수정하십시요.
[ibm@centos01 tensorflow]$ vi ./configure.py
...
default_cc_opt_flags = '-mcpu=power8'
...
default_cc_opt_flags = '-mcpu=power8'
...
write_to_bazelrc('build:opt --host_copt=-mcpu=power8')
...
그리고 configure를 수행합니다. 아래 표시된 질문 외에는 다 default 값을 택하시면 됩니다.
[ibm@centos01 tensorflow]$ ./configure
...
Do you wish to build TensorFlow with Google Cloud Platform support? [Y/n]: n
...
Do you wish to build TensorFlow with Amazon S3 File System support? [Y/n]: n
...
Do you wish to build TensorFlow with Apache Kafka Platform support? [Y/n]: n
...
Do you wish to build TensorFlow with CUDA support? [y/N]: y
...
Please specify the CUDA SDK version you want to use, e.g. 7.0. [Leave empty to default to CUDA 9.0]: 9.2
...
Please specify the cuDNN version you want to use. [Leave empty to default to cuDNN 7.0]: 7
Please specify the location where cuDNN 7 library is installed. Refer to README.md for more details. [Default is /usr/local/cuda]:/usr/local/cuda-9.2
...
Please note that each additional compute capability significantly increases your build time and binary size. [Default is: 3.5,5.2]6.0,7.0
...
그리고나서 아래 issue #19291에 제시된 대로 third_party/png.BUILD 파일을 수정해주십시요.
https://github.com/tensorflow/tensorflow/pull/19291/commits/8f8a3c5151a674b3496691af49c3aa063841f292
[ibm@centos01 tensorflow]$ vi third_party/png.BUILD #31번째 줄 대신 아래를 삽입
# ],
] + select({
"@org_tensorflow//tensorflow:linux_ppc64le": [
"powerpc/powerpc_init.c",
"powerpc/filter_vsx_intrinsics.c",
],
"//conditions:default": [
],
}),
//* 이 수정을 해주지 않으면 아래와 같은 error를 만나시게 됩니다.
ERROR: /home/ibm/.cache/bazel/_bazel_ibm/4869dbc4f6d1a096d34c86242ee59bba/external/boringssl/BUILD:115:1: C++ compilation of rule '@boringssl//:crypto' failed (Exit 1)
external/boringssl/src/crypto/pkcs8/pkcs8.c: In function 'ascii_to_ucs2':
external/boringssl/src/crypto/pkcs8/pkcs8.c:86:3: error: 'for' loop initial declarations are only allowed in C99 mode
for (size_t i = 0; i < ulen - 2; i += 2) {
^
*//
이제 예전과 동일하세 bazel build 하시면 됩니다.
[ibm@centos01 tensorflow]$ bazel build --config=opt --config=cuda //tensorflow/tools/pip_package:build_pip_package
...
Target //tensorflow/tools/pip_package:build_pip_package up-to-date:
bazel-bin/tensorflow/tools/pip_package/build_pip_package
INFO: Elapsed time: 8178.924s, Critical Path: 252.09s
INFO: Build completed successfully, 11585 total actions
예전에 비해 build 시간이 굉장히 길어진 것을 느끼실 겁니다. 이제 whl file을 만듭니다.
[ibm@centos01 tensorflow]$ bazel-bin/tensorflow/tools/pip_package/build_pip_package ~/files/tensorflow_pkg
만들어진 whl file을 보면 확실히 기존 TF1.5.1보다 size도 2배 가량 커졌습니다.
[ibm@centos01 tensorflow]$ ls -l ~/files/tensorflow_pkg
total 162328
-rw-rw-r--. 1 ibm ibm 55160703 May 9 15:17 tensorflow-1.5.1-cp36-cp36m-linux_ppc64le.whl
-rw-rw-r--. 1 ibm ibm 111062624 May 31 16:07 tensorflow-1.8.0-cp36-cp36m-linux_ppc64le.whl
이 whl file을 설치하시면 됩니다.
[ibm@centos01 tensorflow]$ pip install ~/files/tensorflow_pkg/tensorflow-1.8.0-cp36-cp36m-linux_ppc64le.whl
...
Successfully uninstalled numpy-1.13.1
Successfully installed absl-py-0.2.2 astor-0.6.2 gast-0.2.0 grpcio-1.12.0 markdown-2.6.11 numpy-1.14.3 tensorboard-1.8.0 tensorflow-1.8.0 termcolor-1.1.0
[ibm@centos01 tensorflow]$ pip list | grep tensor
tensorboard 1.8.0
tensorflow 1.8.0
이 TF1.8.0으로 Neural Machine Translation의 training과 inference를 수행해보면, 동일한 HW에서 기존 TF1.5.1의 수행 결과보다 더 빨라진 것 같지는 않습니다.
여기서 build한 tensorflow 1.8.0의 wheel file을 아래 google drive에 올려놓겠습니다. 이것을 사용하시려면 CUDA 9.2가 설치되어 있어야 한다는 점을 유의하시기 바랍니다.
https://drive.google.com/open?id=1jEXy0A6gRSTzUG_ttwGYQivWoGlHWsU6
2018년 5월 31일 목요일
2018년 5월 16일 수요일
Ubuntu ppc64le 환경에서 nvidia-docker를 source로부터 build하기
최근에 nvidia-docker를 source에서 build 해보니 기존에 있던 ppc64le branch가 없어져서 그냥 하면 error가 납니다. 물론 nvidia-docker는 다음과 같이 apt repository에서 편리하게 설치가 가능합니다.
$ sudo vi /etc/apt/sources.list.d/nvidia-docker.list
deb https://nvidia.github.io/libnvidia-container/ubuntu16.04/$(ARCH) /
deb https://nvidia.github.io/nvidia-container-runtime/ubuntu16.04/$(ARCH) /
deb https://nvidia.github.io/nvidia-docker/ubuntu16.04/$(ARCH) /
$ sudo vi /etc/apt/sources.list.d/docker.list
deb [arch=ppc64el] https://download.docker.com/linux/ubuntu xenial stable
그래도 필요에 의해서 nvidia-docker를 source로부터 build해야 할 경우가 있습니다. 이 경우에도 근성만 있으면 아래와 같이 build가 가능합니다.
minsky_test@minsky:~/files$ git clone https://github.com/NVIDIA/nvidia-docker.git
minsky_test@minsky:~/files$ cd nvidia-docker
minsky_test@minsky:~/files/nvidia-docker$ git fetch --all
minsky_test@minsky:~/files/nvidia-docker$ git checkout tags/v1.0.1
여기서 그냥 make를 하시면 결국 다음과 같은 "exec format error"가 납니다.
minsky_test@minsky:~/files/nvidia-docker$ sudo make
...
http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1404/x86_64 /" > /etc/apt/sources.list.d/cuda.list
---> Running in 9bc30333d07a
standard_init_linux.go:178: exec user process caused "exec format error"
...
make: *** [tools] Error 2
이건 기본적으로 이 build를 위해 pull 해오는 golang container image가 ppc64le가 아닌 AMD64 아키텍처의 것이기 때문입니다.
minsky_test@minsky:~/files/nvidia-docker$ sudo docker inspect golang:1.5 | grep Arch
"Architecture": "amd64",
이 문제와 기타 다른 문제들을 해결하기 위해 아래와 같이 Makefile과 Dockerfile.build을 일부 수정해주면 됩니다.
minsky_test@minsky:~/files/nvidia-docker$ vi Makefile
...
#ifneq ($(MAKECMDGOALS),rpm)
#PKG_ARCH := amd64
#else
#PKG_ARCH := x86_64
#endif
PKG_ARCH := ppc64le
...
minsky_test@minsky:~/files/nvidia-docker$ vi Dockerfile.build
#FROM golang:1.5
FROM ppc64le/golang:1.9
...
# apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1404/x86_64/7fa2af80.pub && \
apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/ppc64el/7fa2af80.pub && \
...
# echo "deb http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1404/x86_64 /" > /etc/apt/sources.list.d/cuda.list
echo "deb http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/ppc64el /" > /etc/apt/sources.list.d/cuda.list
...
# cuda-cudart-dev-6-5=6.5-14 \
cuda-cudart-dev-8-0=8.0.61-1 \
# cuda-misc-headers-6-5=6.5-19 && \
cuda-misc-headers-8-0=8.0.61-1 && \
...
#RUN objcopy --redefine-sym memcpy=memcpy@GLIBC_2.2.5 /usr/local/cuda-6.5/lib64/libcudart_static.a #으로 comment-out합니다
...
#ENV CGO_CFLAGS "-I /usr/local/cuda-6.5/include -I /usr/include/nvidia/gdk"
ENV CGO_CFLAGS "-I /usr/local/cuda-8.0/include -I /usr/include/nvidia/gdk"
#ENV CGO_LDFLAGS "-L /usr/local/cuda-6.5/lib64"
ENV CGO_LDFLAGS "-L /usr/local/cuda-8.0/lib64"
이제 build를 하면 됩니다. make tarball을 수행하면 nvidia-docker와 nvidia-docker-plugin binary를 tar.xz로 묶어 줍니다. 이걸 /usr/local 등 적절한 위치에 풀어주기만 하면 됩니다.
minsky_test@minsky:~/files/nvidia-docker$ sudo make tarball
...
Find tarball at /home/minsky_test/files/nvidia-docker/dist
minsky_test@minsky:~/files/nvidia-docker$ tar -tvf /home/minsky_test/files/nvidia-docker/dist/nvidia-docker_1.0.1_ppc64le.tar.xz
-rwxr-xr-x root/miruware 5247984 2018-05-16 16:57 nvidia-docker/nvidia-docker
-rwxr-xr-x root/miruware 6489232 2018-05-16 16:57 nvidia-docker/nvidia-docker-plugin
물론 이렇게 source에서 build한 nvidia-docker는 service로 등록하기 전엔 아래처럼 손으로 start 해주고 kill로 죽여야 합니다.
minsky_test@minsky:~/files/nvidia-docker/bin$ sudo ./nvidia-docker-plugin &
minsky_test@minsky:~/files/nvidia-docker/bin$ sudo ./nvidia-docker run -ti bsyu/tf1.3-ppc64le:v0.1 bash
root@78d0b67e2c8d:/# nvidia-smi
Wed May 16 08:05:31 2018
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 384.111 Driver Version: 384.111 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 Tesla P100-SXM2... Off | 00000002:01:00.0 Off | 0 |
| N/A 35C P0 31W / 300W | 10MiB / 16276MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 1 Tesla P100-SXM2... Off | 00000003:01:00.0 Off | 0 |
| N/A 35C P0 30W / 300W | 10MiB / 16276MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 2 Tesla P100-SXM2... Off | 0000000A:01:00.0 Off | 0 |
| N/A 35C P0 32W / 300W | 10MiB / 16276MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 3 Tesla P100-SXM2... Off | 0000000B:01:00.0 Off | 0 |
| N/A 30C P0 31W / 300W | 10MiB / 16276MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
아래에 이렇게 만들어진 nvidia-docker tarball을 google drive에 올려놓았습니다.
https://drive.google.com/open?id=1XoXXgpdsQPKHo-IPx3iNbKuJYHKgpihz
$ sudo vi /etc/apt/sources.list.d/nvidia-docker.list
deb https://nvidia.github.io/libnvidia-container/ubuntu16.04/$(ARCH) /
deb https://nvidia.github.io/nvidia-container-runtime/ubuntu16.04/$(ARCH) /
deb https://nvidia.github.io/nvidia-docker/ubuntu16.04/$(ARCH) /
$ sudo vi /etc/apt/sources.list.d/docker.list
deb [arch=ppc64el] https://download.docker.com/linux/ubuntu xenial stable
그래도 필요에 의해서 nvidia-docker를 source로부터 build해야 할 경우가 있습니다. 이 경우에도 근성만 있으면 아래와 같이 build가 가능합니다.
minsky_test@minsky:~/files$ git clone https://github.com/NVIDIA/nvidia-docker.git
minsky_test@minsky:~/files$ cd nvidia-docker
minsky_test@minsky:~/files/nvidia-docker$ git fetch --all
minsky_test@minsky:~/files/nvidia-docker$ git checkout tags/v1.0.1
여기서 그냥 make를 하시면 결국 다음과 같은 "exec format error"가 납니다.
minsky_test@minsky:~/files/nvidia-docker$ sudo make
...
http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1404/x86_64 /" > /etc/apt/sources.list.d/cuda.list
---> Running in 9bc30333d07a
standard_init_linux.go:178: exec user process caused "exec format error"
...
make: *** [tools] Error 2
이건 기본적으로 이 build를 위해 pull 해오는 golang container image가 ppc64le가 아닌 AMD64 아키텍처의 것이기 때문입니다.
minsky_test@minsky:~/files/nvidia-docker$ sudo docker inspect golang:1.5 | grep Arch
"Architecture": "amd64",
이 문제와 기타 다른 문제들을 해결하기 위해 아래와 같이 Makefile과 Dockerfile.build을 일부 수정해주면 됩니다.
minsky_test@minsky:~/files/nvidia-docker$ vi Makefile
...
#ifneq ($(MAKECMDGOALS),rpm)
#PKG_ARCH := amd64
#else
#PKG_ARCH := x86_64
#endif
PKG_ARCH := ppc64le
...
minsky_test@minsky:~/files/nvidia-docker$ vi Dockerfile.build
#FROM golang:1.5
FROM ppc64le/golang:1.9
...
# apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1404/x86_64/7fa2af80.pub && \
apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/ppc64el/7fa2af80.pub && \
...
# echo "deb http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1404/x86_64 /" > /etc/apt/sources.list.d/cuda.list
echo "deb http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/ppc64el /" > /etc/apt/sources.list.d/cuda.list
...
# cuda-cudart-dev-6-5=6.5-14 \
cuda-cudart-dev-8-0=8.0.61-1 \
# cuda-misc-headers-6-5=6.5-19 && \
cuda-misc-headers-8-0=8.0.61-1 && \
...
#RUN objcopy --redefine-sym memcpy=memcpy@GLIBC_2.2.5 /usr/local/cuda-6.5/lib64/libcudart_static.a #으로 comment-out합니다
...
#ENV CGO_CFLAGS "-I /usr/local/cuda-6.5/include -I /usr/include/nvidia/gdk"
ENV CGO_CFLAGS "-I /usr/local/cuda-8.0/include -I /usr/include/nvidia/gdk"
#ENV CGO_LDFLAGS "-L /usr/local/cuda-6.5/lib64"
ENV CGO_LDFLAGS "-L /usr/local/cuda-8.0/lib64"
이제 build를 하면 됩니다. make tarball을 수행하면 nvidia-docker와 nvidia-docker-plugin binary를 tar.xz로 묶어 줍니다. 이걸 /usr/local 등 적절한 위치에 풀어주기만 하면 됩니다.
minsky_test@minsky:~/files/nvidia-docker$ sudo make tarball
...
Find tarball at /home/minsky_test/files/nvidia-docker/dist
minsky_test@minsky:~/files/nvidia-docker$ tar -tvf /home/minsky_test/files/nvidia-docker/dist/nvidia-docker_1.0.1_ppc64le.tar.xz
-rwxr-xr-x root/miruware 5247984 2018-05-16 16:57 nvidia-docker/nvidia-docker
-rwxr-xr-x root/miruware 6489232 2018-05-16 16:57 nvidia-docker/nvidia-docker-plugin
물론 이렇게 source에서 build한 nvidia-docker는 service로 등록하기 전엔 아래처럼 손으로 start 해주고 kill로 죽여야 합니다.
minsky_test@minsky:~/files/nvidia-docker/bin$ sudo ./nvidia-docker-plugin &
minsky_test@minsky:~/files/nvidia-docker/bin$ sudo ./nvidia-docker run -ti bsyu/tf1.3-ppc64le:v0.1 bash
root@78d0b67e2c8d:/# nvidia-smi
Wed May 16 08:05:31 2018
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 384.111 Driver Version: 384.111 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 Tesla P100-SXM2... Off | 00000002:01:00.0 Off | 0 |
| N/A 35C P0 31W / 300W | 10MiB / 16276MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 1 Tesla P100-SXM2... Off | 00000003:01:00.0 Off | 0 |
| N/A 35C P0 30W / 300W | 10MiB / 16276MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 2 Tesla P100-SXM2... Off | 0000000A:01:00.0 Off | 0 |
| N/A 35C P0 32W / 300W | 10MiB / 16276MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 3 Tesla P100-SXM2... Off | 0000000B:01:00.0 Off | 0 |
| N/A 30C P0 31W / 300W | 10MiB / 16276MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
아래에 이렇게 만들어진 nvidia-docker tarball을 google drive에 올려놓았습니다.
https://drive.google.com/open?id=1XoXXgpdsQPKHo-IPx3iNbKuJYHKgpihz
nvidia-driver 올린 뒤 container 속에서의 "Driver/library version mismatch" error
다음과 같이 nvidia-driver가 384.111인 환경에서 docker image bsyu/tf1.3-ppc64le:v0.1를 구동했습니다.
minsky_test@minsky:~/files/nvidia-docker/bin$ sudo ./nvidia-docker run -ti bsyu/tf1.3-ppc64le:v0.1 bash
그 속에 들어가서 nvidia-smi 명령으로 nvidia-driver가 384.111인 것을 확인합니다.
root@78d0b67e2c8d:/# nvidia-smi
Wed May 16 08:05:31 2018
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 384.111 Driver Version: 384.111 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 Tesla P100-SXM2... Off | 00000002:01:00.0 Off | 0 |
| N/A 35C P0 31W / 300W | 10MiB / 16276MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 1 Tesla P100-SXM2... Off | 00000003:01:00.0 Off | 0 |
| N/A 35C P0 30W / 300W | 10MiB / 16276MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 2 Tesla P100-SXM2... Off | 0000000A:01:00.0 Off | 0 |
| N/A 35C P0 32W / 300W | 10MiB / 16276MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 3 Tesla P100-SXM2... Off | 0000000B:01:00.0 Off | 0 |
| N/A 30C P0 31W / 300W | 10MiB / 16276MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
이 docker container에 변화를 주기 위해 다음과 같이 tensorflow models를 clone 해서 넣습니다.
root@78d0b67e2c8d:/# git clone https://github.com/tensorflow/models.git
root@78d0b67e2c8d:/# cd /models/tutorials/image/cifar10
여기서 cifar10 training을 잠깐 시켜봐도 좋습니다. 도중에 중단시키고 빠져 나갑니다.
root@78d0b67e2c8d:/models/tutorials/image/cifar10# python cifar10_train.py
...
2018-05-16 08:15:25.329494: step 1520, loss = 1.97 (9342.9 examples/sec; 0.014 sec/batch)
2018-05-16 08:15:25.454485: step 1530, loss = 1.86 (10240.0 examples/sec; 0.013 sec/batch)
2018-05-16 08:15:25.580138: step 1540, loss = 2.06 (10186.0 examples/sec; 0.013 sec/batch)
2018-05-16 08:15:25.711379: step 1550, loss = 1.73 (9754.1 examples/sec; 0.013 sec/batch)
^Z
[1]+ Stopped python cifar10_train.py
root@78d0b67e2c8d:/models/tutorials/image/cifar10# exit
이제 parent OS로 나왔습니다. docker ps 명령으로 다음과 같이 78d0b67e2c8d container가 남아 있는 것을 보실 수 있습니다.
minsky_test@minsky:~/files/nvidia-docker/bin$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
78d0b67e2c8d bsyu/tf1.3-ppc64le:v0.1 "bash" 11 minutes ago Exited (148) 43 seconds ago vigilant_jennings
af8e4f0af9d2 9d72ea809195 "/bin/sh -c 'go ge..." 42 minutes ago Exited (2) 42 minutes ago practical_brown
021b52c86fdf 588a60a80ab7 "/bin/sh -c 'go ge..." About an hour ago Exited (2) About an hour ago nifty_beaver
716660e1b44b bf2674b6db4a "/bin/sh -c 'go ge..." About an hour ago Exited (1) About an hour ago blissful_pasteur
7e0b933581c5 3349633cccc3 "/bin/sh -c 'apt-g..." About an hour ago Exited (100) About an hour ago unruffled_haibt
53853b98c3f0 958e9eb53afd "/bin/sh -c 'NVIDI..." About an hour ago Exited (2) About an hour ago goofy_williams
85afec3a1429 52a84e97014b "/bin/bash -c 'mak..." 3 weeks ago Exited (2) 3 weeks ago vigilant_curie
5e172a9eb6c0 3426d0bdc1ee "/bin/sh -c 'cd /p..." 3 weeks ago Exited (2) 3 weeks ago thirsty_wescoff
27725169f8c2 c9cf4b61ab78 "/bin/sh -c 'pip i..." 3 weeks ago Exited (127) 3 weeks ago
이제 nvidia driver를 390으로 올립니다.
minsky_test@minsky:~$ sudo apt-get install nvidia-390-dev nvidia-390
당장 nvidia-smi를 해보면 error가 납니다. 원래는 reboot을 해야 하는데, 그러지 않았기 때문인가 봅니다.
minsky_test@minsky:~$ nvidia-smi
Failed to initialize NVML: Driver/library version mismatch
이걸 rebooting하지 않고 하기 위해서는 nvidia-docker-plugin을 죽인 뒤, 현재 load된 nvidia 관련 module들을 rmmod로 제거한 뒤 다시 nvidia-docker-plugin을 살리면 됩니다.
minsky_test@minsky:~$ ps -ef | grep 86949 | grep -v grep
root 86949 86948 0 17:03 pts/7 00:00:03 ./nvidia-docker-plugin
minsky_test@minsky:~$ sudo kill -9 86949
minsky_test@minsky:~$ sudo lsmod | grep nvidia
nvidia_drm 59673 0
nvidia_modeset 1173401 1 nvidia_drm
nvidia_uvm 869865 4
nvidia 16625272 779 nvidia_modeset,nvidia_uvm
drm_kms_helper 182400 2 ast,nvidia_drm
drm 453521 5 ast,ttm,drm_kms_helper,nvidia_drm
minsky_test@minsky:~$ sudo rmmod nvidia_drm
minsky_test@minsky:~$ sudo rmmod nvidia_uvm
minsky_test@minsky:~$ sudo rmmod nvidia_modeset
minsky_test@minsky:~$ sudo rmmod nvidia
nvidia 관련 모듈이 다 없어진 것을 아래와 같이 확인합니다.
minsky_test@minsky:~$ sudo lsmod | grep nvidia
minsky_test@minsky:~$
이제 다시 nvidia-docker-plugin을 살립니다. 그러면 nvidia 관련 module들이 다시 load 됩니다.
minsky_test@minsky:~/files/nvidia-docker/bin$ sudo ./nvidia-docker-plugin &
이제 nvidia-smi로 보면 driver 버전이 390.31로 올라온 것을 볼 수 있습니다.
minsky_test@minsky:~/files/nvidia-docker/bin$ nvidia-smi
Wed May 16 17:32:17 2018
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 390.31 Driver Version: 390.31 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 Tesla P100-SXM2... Off | 00000002:01:00.0 Off | 0 |
| N/A 37C P0 31W / 300W | 10MiB / 16280MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 1 Tesla P100-SXM2... Off | 00000003:01:00.0 Off | 0 |
| N/A 36C P0 30W / 300W | 10MiB / 16280MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 2 Tesla P100-SXM2... Off | 0000000A:01:00.0 Off | 0 |
| N/A 36C P0 32W / 300W | 10MiB / 16280MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 3 Tesla P100-SXM2... Off | 0000000B:01:00.0 Off | 0 |
| N/A 31C P0 31W / 300W | 10MiB / 16280MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
이제 아까 exit했던 bsyu/tf1.3-ppc64le:v0.1의 container인 78d0b67e2c8d에 다시 attach 해보겠습니다.
minsky_test@minsky:~/files/nvidia-docker/bin$ sudo ./nvidia-docker start 78d0b67e2c8d
78d0b67e2c8d
minsky_test@minsky:~/files/nvidia-docker/bin$ sudo ./nvidia-docker attach 78d0b67e2c8d
root@78d0b67e2c8d:/#
이 속에서 nvidia-smi 해봐도 다음과 같은 error만 납니다.
root@78d0b67e2c8d:/# nvidia-smi
Failed to initialize NVML: Driver/library version mismatch
이렇게 예전 버전의 384 driver를 가지고 구동된 container는 다시 제대로 작동시킬 방법이 없습니다. 새로 다시 시작해야 하는데, 그러자면 기존에 변경시켜둔 file 내용들이 날라갑니다. 그렇게 변경시켜둔 file들을 보존하려면 docker commit을 하시면 됩니다. 가령 아까 위에서 clone 받아둔 /models의 내용이 그대로 보존될 수 있습니다.
먼저 parent OS에서 다음과 같이 새로운 이름의 image로 해당 container id를 commit 합니다.
minsky_test@minsky:~/files/nvidia-docker/bin$ ./nvidia-docker commit 78d0b67e2c8d bsyu/tf1.3-ppc64le:v0.2
sha256:4e5cf1b9f9672a41d2a71737f32a0d0f2a042d9162ab351433d16a828946d4f4
이제 새로 만들어진 bsyu/tf1.3-ppc64le:v0.2 image를 새로 start 합니다.
minsky_test@minsky:~/files/nvidia-docker/bin$ ./nvidia-docker run -ti bsyu/tf1.3-ppc64le:v0.2 bash
이제 nvidia-smi를 해보시면 새로운 driver version으로 잘 올라오는 것을 보실 수 있습니다.
root@53f8f0993f34:/# nvidia-smi
Wed May 16 08:39:33 2018
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 390.31 Driver Version: 390.31 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 Tesla P100-SXM2... Off | 00000002:01:00.0 Off | 0 |
| N/A 34C P0 30W / 300W | 10MiB / 16280MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 1 Tesla P100-SXM2... Off | 00000003:01:00.0 Off | 0 |
| N/A 34C P0 30W / 300W | 10MiB / 16280MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 2 Tesla P100-SXM2... Off | 0000000A:01:00.0 Off | 0 |
| N/A 33C P0 31W / 300W | 10MiB / 16280MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 3 Tesla P100-SXM2... Off | 0000000B:01:00.0 Off | 0 |
| N/A 29C P0 31W / 300W | 10MiB / 16280MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
물론 /models directory도 그대로 잘 보존되어 있습니다.
root@53f8f0993f34:/# cd /models/tutorials/image/cifar10
root@53f8f0993f34:/models/tutorials/image/cifar10# ls
BUILD __init__.py cifar10.py cifar10_input.py cifar10_multi_gpu_train.py
README.md __pycache__ cifar10_eval.py cifar10_input_test.py cifar10_train.py
minsky_test@minsky:~/files/nvidia-docker/bin$ sudo ./nvidia-docker run -ti bsyu/tf1.3-ppc64le:v0.1 bash
그 속에 들어가서 nvidia-smi 명령으로 nvidia-driver가 384.111인 것을 확인합니다.
root@78d0b67e2c8d:/# nvidia-smi
Wed May 16 08:05:31 2018
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 384.111 Driver Version: 384.111 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 Tesla P100-SXM2... Off | 00000002:01:00.0 Off | 0 |
| N/A 35C P0 31W / 300W | 10MiB / 16276MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 1 Tesla P100-SXM2... Off | 00000003:01:00.0 Off | 0 |
| N/A 35C P0 30W / 300W | 10MiB / 16276MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 2 Tesla P100-SXM2... Off | 0000000A:01:00.0 Off | 0 |
| N/A 35C P0 32W / 300W | 10MiB / 16276MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 3 Tesla P100-SXM2... Off | 0000000B:01:00.0 Off | 0 |
| N/A 30C P0 31W / 300W | 10MiB / 16276MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
이 docker container에 변화를 주기 위해 다음과 같이 tensorflow models를 clone 해서 넣습니다.
root@78d0b67e2c8d:/# git clone https://github.com/tensorflow/models.git
root@78d0b67e2c8d:/# cd /models/tutorials/image/cifar10
여기서 cifar10 training을 잠깐 시켜봐도 좋습니다. 도중에 중단시키고 빠져 나갑니다.
root@78d0b67e2c8d:/models/tutorials/image/cifar10# python cifar10_train.py
...
2018-05-16 08:15:25.329494: step 1520, loss = 1.97 (9342.9 examples/sec; 0.014 sec/batch)
2018-05-16 08:15:25.454485: step 1530, loss = 1.86 (10240.0 examples/sec; 0.013 sec/batch)
2018-05-16 08:15:25.580138: step 1540, loss = 2.06 (10186.0 examples/sec; 0.013 sec/batch)
2018-05-16 08:15:25.711379: step 1550, loss = 1.73 (9754.1 examples/sec; 0.013 sec/batch)
^Z
[1]+ Stopped python cifar10_train.py
root@78d0b67e2c8d:/models/tutorials/image/cifar10# exit
이제 parent OS로 나왔습니다. docker ps 명령으로 다음과 같이 78d0b67e2c8d container가 남아 있는 것을 보실 수 있습니다.
minsky_test@minsky:~/files/nvidia-docker/bin$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
78d0b67e2c8d bsyu/tf1.3-ppc64le:v0.1 "bash" 11 minutes ago Exited (148) 43 seconds ago vigilant_jennings
af8e4f0af9d2 9d72ea809195 "/bin/sh -c 'go ge..." 42 minutes ago Exited (2) 42 minutes ago practical_brown
021b52c86fdf 588a60a80ab7 "/bin/sh -c 'go ge..." About an hour ago Exited (2) About an hour ago nifty_beaver
716660e1b44b bf2674b6db4a "/bin/sh -c 'go ge..." About an hour ago Exited (1) About an hour ago blissful_pasteur
7e0b933581c5 3349633cccc3 "/bin/sh -c 'apt-g..." About an hour ago Exited (100) About an hour ago unruffled_haibt
53853b98c3f0 958e9eb53afd "/bin/sh -c 'NVIDI..." About an hour ago Exited (2) About an hour ago goofy_williams
85afec3a1429 52a84e97014b "/bin/bash -c 'mak..." 3 weeks ago Exited (2) 3 weeks ago vigilant_curie
5e172a9eb6c0 3426d0bdc1ee "/bin/sh -c 'cd /p..." 3 weeks ago Exited (2) 3 weeks ago thirsty_wescoff
27725169f8c2 c9cf4b61ab78 "/bin/sh -c 'pip i..." 3 weeks ago Exited (127) 3 weeks ago
이제 nvidia driver를 390으로 올립니다.
minsky_test@minsky:~$ sudo apt-get install nvidia-390-dev nvidia-390
당장 nvidia-smi를 해보면 error가 납니다. 원래는 reboot을 해야 하는데, 그러지 않았기 때문인가 봅니다.
minsky_test@minsky:~$ nvidia-smi
Failed to initialize NVML: Driver/library version mismatch
이걸 rebooting하지 않고 하기 위해서는 nvidia-docker-plugin을 죽인 뒤, 현재 load된 nvidia 관련 module들을 rmmod로 제거한 뒤 다시 nvidia-docker-plugin을 살리면 됩니다.
minsky_test@minsky:~$ ps -ef | grep 86949 | grep -v grep
root 86949 86948 0 17:03 pts/7 00:00:03 ./nvidia-docker-plugin
minsky_test@minsky:~$ sudo kill -9 86949
minsky_test@minsky:~$ sudo lsmod | grep nvidia
nvidia_drm 59673 0
nvidia_modeset 1173401 1 nvidia_drm
nvidia_uvm 869865 4
nvidia 16625272 779 nvidia_modeset,nvidia_uvm
drm_kms_helper 182400 2 ast,nvidia_drm
drm 453521 5 ast,ttm,drm_kms_helper,nvidia_drm
minsky_test@minsky:~$ sudo rmmod nvidia_drm
minsky_test@minsky:~$ sudo rmmod nvidia_uvm
minsky_test@minsky:~$ sudo rmmod nvidia_modeset
minsky_test@minsky:~$ sudo rmmod nvidia
nvidia 관련 모듈이 다 없어진 것을 아래와 같이 확인합니다.
minsky_test@minsky:~$ sudo lsmod | grep nvidia
minsky_test@minsky:~$
이제 다시 nvidia-docker-plugin을 살립니다. 그러면 nvidia 관련 module들이 다시 load 됩니다.
minsky_test@minsky:~/files/nvidia-docker/bin$ sudo ./nvidia-docker-plugin &
이제 nvidia-smi로 보면 driver 버전이 390.31로 올라온 것을 볼 수 있습니다.
minsky_test@minsky:~/files/nvidia-docker/bin$ nvidia-smi
Wed May 16 17:32:17 2018
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 390.31 Driver Version: 390.31 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 Tesla P100-SXM2... Off | 00000002:01:00.0 Off | 0 |
| N/A 37C P0 31W / 300W | 10MiB / 16280MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 1 Tesla P100-SXM2... Off | 00000003:01:00.0 Off | 0 |
| N/A 36C P0 30W / 300W | 10MiB / 16280MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 2 Tesla P100-SXM2... Off | 0000000A:01:00.0 Off | 0 |
| N/A 36C P0 32W / 300W | 10MiB / 16280MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 3 Tesla P100-SXM2... Off | 0000000B:01:00.0 Off | 0 |
| N/A 31C P0 31W / 300W | 10MiB / 16280MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
이제 아까 exit했던 bsyu/tf1.3-ppc64le:v0.1의 container인 78d0b67e2c8d에 다시 attach 해보겠습니다.
minsky_test@minsky:~/files/nvidia-docker/bin$ sudo ./nvidia-docker start 78d0b67e2c8d
78d0b67e2c8d
minsky_test@minsky:~/files/nvidia-docker/bin$ sudo ./nvidia-docker attach 78d0b67e2c8d
root@78d0b67e2c8d:/#
이 속에서 nvidia-smi 해봐도 다음과 같은 error만 납니다.
root@78d0b67e2c8d:/# nvidia-smi
Failed to initialize NVML: Driver/library version mismatch
이렇게 예전 버전의 384 driver를 가지고 구동된 container는 다시 제대로 작동시킬 방법이 없습니다. 새로 다시 시작해야 하는데, 그러자면 기존에 변경시켜둔 file 내용들이 날라갑니다. 그렇게 변경시켜둔 file들을 보존하려면 docker commit을 하시면 됩니다. 가령 아까 위에서 clone 받아둔 /models의 내용이 그대로 보존될 수 있습니다.
먼저 parent OS에서 다음과 같이 새로운 이름의 image로 해당 container id를 commit 합니다.
minsky_test@minsky:~/files/nvidia-docker/bin$ ./nvidia-docker commit 78d0b67e2c8d bsyu/tf1.3-ppc64le:v0.2
sha256:4e5cf1b9f9672a41d2a71737f32a0d0f2a042d9162ab351433d16a828946d4f4
이제 새로 만들어진 bsyu/tf1.3-ppc64le:v0.2 image를 새로 start 합니다.
minsky_test@minsky:~/files/nvidia-docker/bin$ ./nvidia-docker run -ti bsyu/tf1.3-ppc64le:v0.2 bash
이제 nvidia-smi를 해보시면 새로운 driver version으로 잘 올라오는 것을 보실 수 있습니다.
root@53f8f0993f34:/# nvidia-smi
Wed May 16 08:39:33 2018
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 390.31 Driver Version: 390.31 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 Tesla P100-SXM2... Off | 00000002:01:00.0 Off | 0 |
| N/A 34C P0 30W / 300W | 10MiB / 16280MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 1 Tesla P100-SXM2... Off | 00000003:01:00.0 Off | 0 |
| N/A 34C P0 30W / 300W | 10MiB / 16280MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 2 Tesla P100-SXM2... Off | 0000000A:01:00.0 Off | 0 |
| N/A 33C P0 31W / 300W | 10MiB / 16280MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 3 Tesla P100-SXM2... Off | 0000000B:01:00.0 Off | 0 |
| N/A 29C P0 31W / 300W | 10MiB / 16280MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
물론 /models directory도 그대로 잘 보존되어 있습니다.
root@53f8f0993f34:/# cd /models/tutorials/image/cifar10
root@53f8f0993f34:/models/tutorials/image/cifar10# ls
BUILD __init__.py cifar10.py cifar10_input.py cifar10_multi_gpu_train.py
README.md __pycache__ cifar10_eval.py cifar10_input_test.py cifar10_train.py
2018년 5월 15일 화요일
Redhat ppc64le 환경에서의 OpenJDK 9과 OpenJFX의 build
앞선 posting은 OpenJDK 8에서 OpenJFX를 올린 것이었습니다만, 현재 OpenJFX의 current version은 JDK 9부터 지원됩니다. 이번 posting에서는 OpenJDK 9을 ppc64le 환경에서 build하고, 그를 지원하는 OpenJFX도 build해보겠습니다.
사전에 필요한 rpm package는 전과 동일하게 설치합니다.
[ibm@centos01 ~]$ sudo yum install mercurial bison flex gperf ksh pkgconfig libpng12-devel libjpeg-devel libxml2-devel libxslt-devel systemd-devel glib2-devel gtk2-devel pango-devel freetype-devel ant alsa-lib-devel freetype-devel cups-devel libXtst-devel libXt-devel libXrender-devel libXi-devel libX11-devel libXext-devel libffi-devel ccache make gcc gcc-c++ libstdc++-devel giflib-devel curl rpm-build gpg rpmbuild rpm-sign
OpenJFX의 current version에서는 gradle 4.3이 필요합니다.
[ibm@centos01 files]$ wget https://services.gradle.org/distributions/gradle-4.3-all.zip
[ibm@centos01 files]$ unzip gradle-4.3-all.zip
[ibm@centos01 files]$ cd gradle-4.3/bin
[ibm@centos01 bin]$ ./gradle --version
------------------------------------------------------------
Gradle 4.3
------------------------------------------------------------
Build time: 2017-10-30 15:43:29 UTC
Revision: c684c202534c4138b51033b52d871939b8d38d72
Groovy: 2.4.12
Ant: Apache Ant(TM) version 1.9.6 compiled on June 29 2015
JVM: 1.8.0_161 (Oracle Corporation 25.161-b14)
OS: Linux 3.10.0-693.11.6.el7.ppc64le ppc64le
이제 JDK 9 부터 build 합니다.
[ibm@centos01 ~]$ mkdir ~/openjdkathome && cd ~/openjdkathome
[ibm@centos01 openjdkathome]$ git clone https://github.com/hgomez/obuildfactory.git
다음과 같이 명령을 내리면 hg 명령을 통해 source를 추가로 download 받는 것부터 compile까지 일괄적으로 이루어집니다. hg download 과정이 특히 오래 걸리고 compile도 무척 많은 CPU를 사용하며 오래 걸린다는 점에 유의하십시요.
[ibm@centos01 openjdkathome]$ XUSE_NEW_BUILD_SYSTEM=true XBUILD=true ./obuildfactory/openjdk9/linux/standalone-job.sh
...
Creating jre jimage
Creating jdk jimage
WARNING: Using incubator modules: jdk.incubator.httpclient
WARNING: Using incubator modules: jdk.incubator.httpclient
Stopping sjavac server
Finished building target 'images' in configuration 'linux-x86-normal-server-release'
openjdk version "9-internal"
OpenJDK Runtime Environment (build 9-internal+0-adhoc.ibm.openjdk9)
OpenJDK 64-Bit Server VM (build 9-internal+0-adhoc.ibm.openjdk9, mixed mode)
openjdk version "9-internal"
OpenJDK Runtime Environment (build 9-internal+0-adhoc.ibm.openjdk9)
OpenJDK 64-Bit Server VM (build 9-internal+0-adhoc.ibm.openjdk9, mixed mode)
~/openjdkathome/sources/openjdk9/build/linux-x86-normal-server-release/images ~/openjdkathome
produced tarball files under /home/ibm/openjdkathome/OBF_DROP_DIR/openjdk9
-rw-rw-r--. 1 ibm ibm 337406797 May 14 10:36 /home/ibm/openjdkathome/OBF_DROP_DIR/openjdk9/jdk-ppc64le-b94-20180514.tar.bz2
-rw-rw-r--. 1 ibm ibm 188142592 May 14 10:37 /home/ibm/openjdkathome/OBF_DROP_DIR/openjdk9/jre-ppc64le-b94-20180514.tar.bz2
~/openjdkathome
생선된 tar ball은 아래 directory에 있습니다. JDK와 JRE가 각각 하나씩 만들어집니다.
[ibm@centos01 openjdkathome]$ ls -l OBF_DROP_DIR/openjdk9
total 513236
-rw-rw-r--. 1 ibm ibm 337406797 May 14 10:36 jdk-ppc64le-b94-20180514.tar.bz2
-rw-rw-r--. 1 ibm ibm 188142592 May 14 10:37 jre-ppc64le-b94-20180514.tar.bz2
우리는 여기서 JDK를 설치할 것입니다. 다음과 같이 /usr/local에 풀어놓고 JAVA_HOME 및 PATH를 설정해주시면 됩니다.
[ibm@centos01 openjdkathome]$ cd /usr/local
[ibm@centos01 local]$ sudo tar -jxvf ~/openjdkathome/OBF_DROP_DIR/openjdk9/jdk-ppc64le-b94-20180514.tar.bz2
[ibm@centos01 local]$ export JAVA_HOME=/usr/local/jdk
[ibm@centos01 local]$ export PATH=$JAVA_HOME/bin:/home/ibm/files/gradle-4.3/bin:$PATH
[ibm@centos01 local]$ java -fullversion
openjdk full version "9-internal+0-adhoc.ibm.openjdk9"
이제 open JFX의 source code를 받아옵니다. Mericurial의 hg 명령을 써서 가져오는데, 처음 몇 분 정도는 source를 전혀 못 가져오고 hang만 걸려 있는 것처럼 보이지만 한 10~20분 기다리니 결국은 받아오니 인내심을 가지시기 바랍니다. 또는 지난 번처럼 github에서 받아오셔도 됩니다. github에서 받아오는 것이 훨씬 빠릅니다.
[ibm@centos01 files]$ hg clone http://hg.openjdk.java.net/openjfx/jfx-dev/rt
destination directory: rt
requesting all changes
adding changesets
adding manifests
adding file changes
added 10923 changesets with 178749 changes to 85736 files
updating to branch default
31760 files updated, 0 files merged, 0 files removed, 0 files unresolved
[ibm@centos01 files]$ cd ../rt
[ibm@centos01 rt]$ ls -ltr
total 300
-rw-rw-r--. 1 ibm ibm 116 May 14 10:13 README
-rw-rw-r--. 1 ibm ibm 19274 May 14 10:13 LICENSE
-rw-rw-r--. 1 ibm ibm 1522 May 14 10:13 ASSEMBLY_EXCEPTION
-rw-rw-r--. 1 ibm ibm 2114 May 14 10:13 ADDITIONAL_LICENSE_INFO
drwxrwxr-x. 7 ibm ibm 102 May 14 10:13 apps
-rw-rw-r--. 1 ibm ibm 3166 May 14 10:13 build.properties
-rw-rw-r--. 1 ibm ibm 232809 May 14 10:13 build.gradle
drwxrwxr-x. 5 ibm ibm 60 May 14 10:13 dependencies
drwxrwxr-x. 4 ibm ibm 272 May 14 10:13 buildSrc
drwxrwxr-x. 26 ibm ibm 4096 May 14 10:13 netbeans
-rw-rw-r--. 1 ibm ibm 2176 May 14 10:13 gradlew.bat
-rw-rw-r--. 1 ibm ibm 5296 May 14 10:13 gradlew
-rw-rw-r--. 1 ibm ibm 13404 May 14 10:13 gradle.properties.template
drwxrwxr-x. 4 ibm ibm 34 May 14 10:13 gradle
drwxrwxr-x. 2 ibm ibm 49 May 14 10:13 doc-files
-rw-rw-r--. 1 ibm ibm 2275 May 14 10:13 settings.gradle
drwxrwxr-x. 6 ibm ibm 123 May 14 10:13 tests
drwxrwxr-x. 12 ibm ibm 215 May 14 10:13 modules
drwxrwxr-x. 4 ibm ibm 36 May 14 10:13 tools
지난번 posting에서처럼, 여기서도 gradle에게 ppc64le도 지원하는 아키텍처라고 인식시키도록 다음 file을 살짝 수정해줍니다. 그러지 않을 경우 "FAIL: Unknown and unsupported build architecture: ppc64le" error를 만나시게 됩니다.
[ibm@centos01 rt]$ vi build.gradle
...
//} else if (IS_LINUX && OS_ARCH != "i386" && OS_ARCH != "amd64") {
} else if (IS_LINUX && OS_ARCH != "ppc64le" && OS_ARCH != "amd64") {
fail("Unknown and unsupported build architecture: $OS_ARCH")
}
이제 grale을 수행해 보시면 잘 됩니다.
[ibm@centos01 rt]$ gradle
...
:zipSourceFilesStandaloneLinux
:buildModules
:createTestArgfilesLinux
:sdkLinux
:sdk
BUILD SUCCESSFUL in 2m 31s
111 actionable tasks: 111 executed
Build된 SDK는 build/modular-sdk 밑에 들어있습니다.
[ibm@centos01 rt]$ ls build/modular-sdk
make modules modules_conf modules_legal modules_libs modules_src
다음과 같이 이 SDK가 제대로 build된 것인지 테스트해보겠습니다.
[ibm@centos01 rt]$ gradle :base:test
...
:sdk
:base:compileShimsJava UP-TO-DATE
:base:processShimsResources NO-SOURCE
:base:copyGeneratedShims UP-TO-DATE
:base:compileTestJava UP-TO-DATE
:base:processTestResources NO-SOURCE
:base:testClasses UP-TO-DATE
:base:test UP-TO-DATE
BUILD SUCCESSFUL in 10s
115 actionable tasks: 8 executed, 107 up-to-date
잘 됩니다.
[ibm@centos01 rt]$ du -sm .
1440 .
이제 이 rt directory를 tar로 돌돌 말면 됩니다.
[ibm@centos01 rt]$ cd ..
[ibm@centos01 files]$ tar -zcf openjfs.tgz rt
이 openjfs.tgz와 저 위에서 build한 jdk-ppc64le-b94-20180514.tar.bz2, jre-ppc64le-b94-20180514.tar.bz2은 아래 google drive에 올려두겠습니다.
openjfs.tgz https://drive.google.com/open?id=1DYj_ZqzXsqSGNZ5cOuJVl9Dn9apJMCoo
jdk-ppc64le-b94-20180514.tar.bz2 https://drive.google.com/open?id=17AVhSwUlPMLv7q975HpBE_wUc5bf-FdY
jre-ppc64le-b94-20180514.tar.bz2 https://drive.google.com/open?id=1On0UVyYOocDyImWxl28mDB2kopzsCVcE
사전에 필요한 rpm package는 전과 동일하게 설치합니다.
[ibm@centos01 ~]$ sudo yum install mercurial bison flex gperf ksh pkgconfig libpng12-devel libjpeg-devel libxml2-devel libxslt-devel systemd-devel glib2-devel gtk2-devel pango-devel freetype-devel ant alsa-lib-devel freetype-devel cups-devel libXtst-devel libXt-devel libXrender-devel libXi-devel libX11-devel libXext-devel libffi-devel ccache make gcc gcc-c++ libstdc++-devel giflib-devel curl rpm-build gpg rpmbuild rpm-sign
OpenJFX의 current version에서는 gradle 4.3이 필요합니다.
[ibm@centos01 files]$ wget https://services.gradle.org/distributions/gradle-4.3-all.zip
[ibm@centos01 files]$ unzip gradle-4.3-all.zip
[ibm@centos01 files]$ cd gradle-4.3/bin
[ibm@centos01 bin]$ ./gradle --version
------------------------------------------------------------
Gradle 4.3
------------------------------------------------------------
Build time: 2017-10-30 15:43:29 UTC
Revision: c684c202534c4138b51033b52d871939b8d38d72
Groovy: 2.4.12
Ant: Apache Ant(TM) version 1.9.6 compiled on June 29 2015
JVM: 1.8.0_161 (Oracle Corporation 25.161-b14)
OS: Linux 3.10.0-693.11.6.el7.ppc64le ppc64le
이제 JDK 9 부터 build 합니다.
[ibm@centos01 ~]$ mkdir ~/openjdkathome && cd ~/openjdkathome
[ibm@centos01 openjdkathome]$ git clone https://github.com/hgomez/obuildfactory.git
다음과 같이 명령을 내리면 hg 명령을 통해 source를 추가로 download 받는 것부터 compile까지 일괄적으로 이루어집니다. hg download 과정이 특히 오래 걸리고 compile도 무척 많은 CPU를 사용하며 오래 걸린다는 점에 유의하십시요.
[ibm@centos01 openjdkathome]$ XUSE_NEW_BUILD_SYSTEM=true XBUILD=true ./obuildfactory/openjdk9/linux/standalone-job.sh
...
Creating jre jimage
Creating jdk jimage
WARNING: Using incubator modules: jdk.incubator.httpclient
WARNING: Using incubator modules: jdk.incubator.httpclient
Stopping sjavac server
Finished building target 'images' in configuration 'linux-x86-normal-server-release'
openjdk version "9-internal"
OpenJDK Runtime Environment (build 9-internal+0-adhoc.ibm.openjdk9)
OpenJDK 64-Bit Server VM (build 9-internal+0-adhoc.ibm.openjdk9, mixed mode)
openjdk version "9-internal"
OpenJDK Runtime Environment (build 9-internal+0-adhoc.ibm.openjdk9)
OpenJDK 64-Bit Server VM (build 9-internal+0-adhoc.ibm.openjdk9, mixed mode)
~/openjdkathome/sources/openjdk9/build/linux-x86-normal-server-release/images ~/openjdkathome
produced tarball files under /home/ibm/openjdkathome/OBF_DROP_DIR/openjdk9
-rw-rw-r--. 1 ibm ibm 337406797 May 14 10:36 /home/ibm/openjdkathome/OBF_DROP_DIR/openjdk9/jdk-ppc64le-b94-20180514.tar.bz2
-rw-rw-r--. 1 ibm ibm 188142592 May 14 10:37 /home/ibm/openjdkathome/OBF_DROP_DIR/openjdk9/jre-ppc64le-b94-20180514.tar.bz2
~/openjdkathome
생선된 tar ball은 아래 directory에 있습니다. JDK와 JRE가 각각 하나씩 만들어집니다.
[ibm@centos01 openjdkathome]$ ls -l OBF_DROP_DIR/openjdk9
total 513236
-rw-rw-r--. 1 ibm ibm 337406797 May 14 10:36 jdk-ppc64le-b94-20180514.tar.bz2
-rw-rw-r--. 1 ibm ibm 188142592 May 14 10:37 jre-ppc64le-b94-20180514.tar.bz2
우리는 여기서 JDK를 설치할 것입니다. 다음과 같이 /usr/local에 풀어놓고 JAVA_HOME 및 PATH를 설정해주시면 됩니다.
[ibm@centos01 openjdkathome]$ cd /usr/local
[ibm@centos01 local]$ sudo tar -jxvf ~/openjdkathome/OBF_DROP_DIR/openjdk9/jdk-ppc64le-b94-20180514.tar.bz2
[ibm@centos01 local]$ export JAVA_HOME=/usr/local/jdk
[ibm@centos01 local]$ export PATH=$JAVA_HOME/bin:/home/ibm/files/gradle-4.3/bin:$PATH
[ibm@centos01 local]$ java -fullversion
openjdk full version "9-internal+0-adhoc.ibm.openjdk9"
이제 open JFX의 source code를 받아옵니다. Mericurial의 hg 명령을 써서 가져오는데, 처음 몇 분 정도는 source를 전혀 못 가져오고 hang만 걸려 있는 것처럼 보이지만 한 10~20분 기다리니 결국은 받아오니 인내심을 가지시기 바랍니다. 또는 지난 번처럼 github에서 받아오셔도 됩니다. github에서 받아오는 것이 훨씬 빠릅니다.
[ibm@centos01 files]$ hg clone http://hg.openjdk.java.net/openjfx/jfx-dev/rt
destination directory: rt
requesting all changes
adding changesets
adding manifests
adding file changes
added 10923 changesets with 178749 changes to 85736 files
updating to branch default
31760 files updated, 0 files merged, 0 files removed, 0 files unresolved
[ibm@centos01 files]$ cd ../rt
[ibm@centos01 rt]$ ls -ltr
total 300
-rw-rw-r--. 1 ibm ibm 116 May 14 10:13 README
-rw-rw-r--. 1 ibm ibm 19274 May 14 10:13 LICENSE
-rw-rw-r--. 1 ibm ibm 1522 May 14 10:13 ASSEMBLY_EXCEPTION
-rw-rw-r--. 1 ibm ibm 2114 May 14 10:13 ADDITIONAL_LICENSE_INFO
drwxrwxr-x. 7 ibm ibm 102 May 14 10:13 apps
-rw-rw-r--. 1 ibm ibm 3166 May 14 10:13 build.properties
-rw-rw-r--. 1 ibm ibm 232809 May 14 10:13 build.gradle
drwxrwxr-x. 5 ibm ibm 60 May 14 10:13 dependencies
drwxrwxr-x. 4 ibm ibm 272 May 14 10:13 buildSrc
drwxrwxr-x. 26 ibm ibm 4096 May 14 10:13 netbeans
-rw-rw-r--. 1 ibm ibm 2176 May 14 10:13 gradlew.bat
-rw-rw-r--. 1 ibm ibm 5296 May 14 10:13 gradlew
-rw-rw-r--. 1 ibm ibm 13404 May 14 10:13 gradle.properties.template
drwxrwxr-x. 4 ibm ibm 34 May 14 10:13 gradle
drwxrwxr-x. 2 ibm ibm 49 May 14 10:13 doc-files
-rw-rw-r--. 1 ibm ibm 2275 May 14 10:13 settings.gradle
drwxrwxr-x. 6 ibm ibm 123 May 14 10:13 tests
drwxrwxr-x. 12 ibm ibm 215 May 14 10:13 modules
drwxrwxr-x. 4 ibm ibm 36 May 14 10:13 tools
지난번 posting에서처럼, 여기서도 gradle에게 ppc64le도 지원하는 아키텍처라고 인식시키도록 다음 file을 살짝 수정해줍니다. 그러지 않을 경우 "FAIL: Unknown and unsupported build architecture: ppc64le" error를 만나시게 됩니다.
[ibm@centos01 rt]$ vi build.gradle
...
//} else if (IS_LINUX && OS_ARCH != "i386" && OS_ARCH != "amd64") {
} else if (IS_LINUX && OS_ARCH != "ppc64le" && OS_ARCH != "amd64") {
fail("Unknown and unsupported build architecture: $OS_ARCH")
}
이제 grale을 수행해 보시면 잘 됩니다.
[ibm@centos01 rt]$ gradle
...
:zipSourceFilesStandaloneLinux
:buildModules
:createTestArgfilesLinux
:sdkLinux
:sdk
BUILD SUCCESSFUL in 2m 31s
111 actionable tasks: 111 executed
Build된 SDK는 build/modular-sdk 밑에 들어있습니다.
[ibm@centos01 rt]$ ls build/modular-sdk
make modules modules_conf modules_legal modules_libs modules_src
다음과 같이 이 SDK가 제대로 build된 것인지 테스트해보겠습니다.
[ibm@centos01 rt]$ gradle :base:test
...
:sdk
:base:compileShimsJava UP-TO-DATE
:base:processShimsResources NO-SOURCE
:base:copyGeneratedShims UP-TO-DATE
:base:compileTestJava UP-TO-DATE
:base:processTestResources NO-SOURCE
:base:testClasses UP-TO-DATE
:base:test UP-TO-DATE
BUILD SUCCESSFUL in 10s
115 actionable tasks: 8 executed, 107 up-to-date
잘 됩니다.
[ibm@centos01 rt]$ du -sm .
1440 .
이제 이 rt directory를 tar로 돌돌 말면 됩니다.
[ibm@centos01 rt]$ cd ..
[ibm@centos01 files]$ tar -zcf openjfs.tgz rt
이 openjfs.tgz와 저 위에서 build한 jdk-ppc64le-b94-20180514.tar.bz2, jre-ppc64le-b94-20180514.tar.bz2은 아래 google drive에 올려두겠습니다.
openjfs.tgz https://drive.google.com/open?id=1DYj_ZqzXsqSGNZ5cOuJVl9Dn9apJMCoo
jdk-ppc64le-b94-20180514.tar.bz2 https://drive.google.com/open?id=17AVhSwUlPMLv7q975HpBE_wUc5bf-FdY
jre-ppc64le-b94-20180514.tar.bz2 https://drive.google.com/open?id=1On0UVyYOocDyImWxl28mDB2kopzsCVcE
2018년 5월 14일 월요일
Redhat ppc64le 환경에서 OpenJFX build하기 (OpenJDK 8)
먼저, 이 posting은 아래 OpenJFX install guide를 기본으로 따라한 것입니다. 저 link에 있는 좀 더 최신 버전의 JFX는 java 9을 필요로 하더군요. 아마 아직 Java 9보다는 java 8이 표준인 것 같아 OpenJDK 8 기준으로 이걸 작성했습니다. OpenJDK 8을 지원하는 JFX는 8u 버전이며, 이는 또 gradle 버전 1.8만 지원합니다.
https://wiki.openjdk.java.net/display/OpenJFX/Building+OpenJFX#BuildingOpenJFX-OracleEnterpriseLinux7andFedora21
먼저 필요 fileset들을 설치합니다.
[ibm@centos01 ~]$ sudo yum install mercurial bison flex gperf ksh pkgconfig libpng12-devel libjpeg-devel libxml2-devel libxslt-devel systemd-devel glib2-devel gtk2-devel pango-devel freetype-devel ant alsa-lib-devel freetype-devel cups-devel libXtst-devel libXt-devel libXrender-devel libXi-devel libX11-devel libXext-devel libffi-devel ccache make gcc gcc-c++ libstdc++-devel giflib-devel curl rpm-build gpg rpmbuild rpm-sign
gradle 1.8을 download 합니다.
[ibm@centos01 files]$ wget https://services.gradle.org/distributions/gradle-1.8-all.zip
[ibm@centos01 files]$ unzip gradle-1.8-all.zip
[ibm@centos01 files]$ export PATH=~/files/gradle-1.8/bin:$PATH
[ibm@centos01 files]$ which gradle
~/files/gradle-1.8/bin/gradle
이제 source code를 download 받습니다.
[ibm@centos01 files]$ git clone https://github.com/javafxports/openjdk-jfx.git
[ibm@centos01 files]$ cd openjdk-jfx
그리고 OpenJDK 8을 지원하는 버전 중 비교적 최신인 8u51-b09로 checkout 합니다.
[ibm@centos01 openjdk-jfx]$ git checkout tags/8u51-b09
이제 gradle을 이용하여 JFX를 build합니다. 그러나 첫 시도는 아래와 같이 error로 끝납니다.
[ibm@centos01 openjdk-jfx]$ gradle
...
FAILURE: Build failed with an exception.
* Where:
Build file '/home/ibm/files/openjdk-jfx/build.gradle' line: 250
* What went wrong:
A problem occurred evaluating root project 'openjdk-jfx'.
> FAIL: Unknown and unsupported build architecture: ppc64le
이는 다음과 같이 ppc64le일 경우도 그냥 build하도록 308번째 line을 바꿔주면 해결됩니다.
[ibm@centos01 openjdk-jfx]$ vi /home/ibm/files/openjdk-jfx/build.gradle
...
// } else if (IS_LINUX && OS_ARCH != "i386" && OS_ARCH != "amd64") {
} else if (IS_LINUX && OS_ARCH != "ppc64le" && OS_ARCH != "amd64") {
fail("Unknown and unsupported build architecture: $OS_ARCH")
}
이제 다시 gradle을 수행합니다. 다음과 같이 잘 됩니다.
[ibm@centos01 openjdk-jfx]$ gradle
...
:swt:assemble
:systemTests:compileJava UP-TO-DATE
:systemTests:processResources UP-TO-DATE
:systemTests:classes UP-TO-DATE
:systemTests:jar
:systemTests:assemble
:web:assemble
:jfxrtLinux
:jfxrtIndexLinux
:jfxswtLinux
:jfxswtIndexLinux
:jmxLinux
:copySources SKIPPED
:zipSources SKIPPED
:src SKIPPED
:sdkLinux
modules/graphics/build/libs/font/linux/libjavafx_font.so
modules/graphics/build/libs/prism/linux/libprism_common.so
modules/graphics/build/libs/prismSW/linux/libprism_sw.so
modules/graphics/build/libs/prismES2/linux/libprism_es2.so
modules/graphics/build/libs/glass/linux/libglass.so
modules/graphics/build/libs/iio/linux/libjavafx_iio.so
modules/graphics/build/libs/fontFreetype/linux/libjavafx_font_freetype.so
modules/graphics/build/libs/fontPango/linux/libjavafx_font_pango.so
:sdk
BUILD SUCCESSFUL
Total time: 3 mins 44.846 secs
이렇게 build된 binary들은 build/sdk에 생성되며, 물론 ppc64le용으로 만들어진 것입니다.
[ibm@centos01 openjdk-jfx]$ ls build/sdk
bin lib man rt
[ibm@centos01 openjdk-jfx]$ ls build/sdk/bin
javafxpackager javapackager
[ibm@centos01 openjdk-jfx]$ file build/sdk/rt/lib/ppc64le/libglass.so
build/sdk/rt/lib/ppc64le/libglass.so: ELF 64-bit LSB shared object, 64-bit PowerPC or cisco 7500, version 1 (SYSV), dynamically linked, BuildID[sha1]=aba660bd5a3247c07b783eeede8ea6ce685f9070, not stripped
저 build directory를 통째로 tar로 말아 둡니다.
[ibm@centos01 openjdk-jfx]$ tar -zcvf openjdk-jfx.tgz build
[ibm@centos01 openjdk-jfx]$ ls -l openjdk-jfx.tgz
-rw-rw-r--. 1 ibm ibm 15540240 May 14 17:10 openjdk-jfx.tgz
위 파일을 아래 google drive에 올려두었습니다.
https://drive.google.com/open?id=19yjDL37nI-UecGaPirkwOSTws4fBgwJT
https://wiki.openjdk.java.net/display/OpenJFX/Building+OpenJFX#BuildingOpenJFX-OracleEnterpriseLinux7andFedora21
먼저 필요 fileset들을 설치합니다.
[ibm@centos01 ~]$ sudo yum install mercurial bison flex gperf ksh pkgconfig libpng12-devel libjpeg-devel libxml2-devel libxslt-devel systemd-devel glib2-devel gtk2-devel pango-devel freetype-devel ant alsa-lib-devel freetype-devel cups-devel libXtst-devel libXt-devel libXrender-devel libXi-devel libX11-devel libXext-devel libffi-devel ccache make gcc gcc-c++ libstdc++-devel giflib-devel curl rpm-build gpg rpmbuild rpm-sign
gradle 1.8을 download 합니다.
[ibm@centos01 files]$ wget https://services.gradle.org/distributions/gradle-1.8-all.zip
[ibm@centos01 files]$ unzip gradle-1.8-all.zip
[ibm@centos01 files]$ export PATH=~/files/gradle-1.8/bin:$PATH
[ibm@centos01 files]$ which gradle
~/files/gradle-1.8/bin/gradle
이제 source code를 download 받습니다.
[ibm@centos01 files]$ git clone https://github.com/javafxports/openjdk-jfx.git
[ibm@centos01 files]$ cd openjdk-jfx
그리고 OpenJDK 8을 지원하는 버전 중 비교적 최신인 8u51-b09로 checkout 합니다.
[ibm@centos01 openjdk-jfx]$ git checkout tags/8u51-b09
이제 gradle을 이용하여 JFX를 build합니다. 그러나 첫 시도는 아래와 같이 error로 끝납니다.
[ibm@centos01 openjdk-jfx]$ gradle
...
FAILURE: Build failed with an exception.
* Where:
Build file '/home/ibm/files/openjdk-jfx/build.gradle' line: 250
* What went wrong:
A problem occurred evaluating root project 'openjdk-jfx'.
> FAIL: Unknown and unsupported build architecture: ppc64le
이는 다음과 같이 ppc64le일 경우도 그냥 build하도록 308번째 line을 바꿔주면 해결됩니다.
[ibm@centos01 openjdk-jfx]$ vi /home/ibm/files/openjdk-jfx/build.gradle
...
// } else if (IS_LINUX && OS_ARCH != "i386" && OS_ARCH != "amd64") {
} else if (IS_LINUX && OS_ARCH != "ppc64le" && OS_ARCH != "amd64") {
fail("Unknown and unsupported build architecture: $OS_ARCH")
}
이제 다시 gradle을 수행합니다. 다음과 같이 잘 됩니다.
[ibm@centos01 openjdk-jfx]$ gradle
...
:swt:assemble
:systemTests:compileJava UP-TO-DATE
:systemTests:processResources UP-TO-DATE
:systemTests:classes UP-TO-DATE
:systemTests:jar
:systemTests:assemble
:web:assemble
:jfxrtLinux
:jfxrtIndexLinux
:jfxswtLinux
:jfxswtIndexLinux
:jmxLinux
:copySources SKIPPED
:zipSources SKIPPED
:src SKIPPED
:sdkLinux
modules/graphics/build/libs/font/linux/libjavafx_font.so
modules/graphics/build/libs/prism/linux/libprism_common.so
modules/graphics/build/libs/prismSW/linux/libprism_sw.so
modules/graphics/build/libs/prismES2/linux/libprism_es2.so
modules/graphics/build/libs/glass/linux/libglass.so
modules/graphics/build/libs/iio/linux/libjavafx_iio.so
modules/graphics/build/libs/fontFreetype/linux/libjavafx_font_freetype.so
modules/graphics/build/libs/fontPango/linux/libjavafx_font_pango.so
:sdk
BUILD SUCCESSFUL
Total time: 3 mins 44.846 secs
이렇게 build된 binary들은 build/sdk에 생성되며, 물론 ppc64le용으로 만들어진 것입니다.
[ibm@centos01 openjdk-jfx]$ ls build/sdk
bin lib man rt
[ibm@centos01 openjdk-jfx]$ ls build/sdk/bin
javafxpackager javapackager
[ibm@centos01 openjdk-jfx]$ file build/sdk/rt/lib/ppc64le/libglass.so
build/sdk/rt/lib/ppc64le/libglass.so: ELF 64-bit LSB shared object, 64-bit PowerPC or cisco 7500, version 1 (SYSV), dynamically linked, BuildID[sha1]=aba660bd5a3247c07b783eeede8ea6ce685f9070, not stripped
저 build directory를 통째로 tar로 말아 둡니다.
[ibm@centos01 openjdk-jfx]$ tar -zcvf openjdk-jfx.tgz build
[ibm@centos01 openjdk-jfx]$ ls -l openjdk-jfx.tgz
-rw-rw-r--. 1 ibm ibm 15540240 May 14 17:10 openjdk-jfx.tgz
위 파일을 아래 google drive에 올려두었습니다.
https://drive.google.com/open?id=19yjDL37nI-UecGaPirkwOSTws4fBgwJT
ppc64le 환경에서 ActiveMQ install 하기
한줄 요약 : 아래 google drive에 올려놓은 ppc64le용 apache-activemq-5.15.2-bin.tar.gz 파일을 적절한 위치에 풀어놓으시면 됩니다. 이건 제가 Ubuntu 16.04 ppc64le에서 build한 것입니다.
https://drive.google.com/open?id=10ZOMhhcxEMwbYT0w7aJKDi6EpVS0N9JS
이 파일은 아래와 같이 build된 것입니다. 아래 ActiveMQ homepage에 나온 instruction대로 build하시면 됩니다.
http://activemq.apache.org/version-5-getting-started.html#GettingStarted-UnixSourceInstallation
먼저 JAVA_HOME을 설정합니다. IBM ppc64le용 Ubuntu의 경우, 아래와 같이 되어 있습니다.
u0017649@sys-93315:~$ ls -l /etc/alternatives/java
lrwxrwxrwx 1 root root 48 Jan 4 20:38 /etc/alternatives/java -> /usr/lib/jvm/java-8-openjdk-ppc64el/jre/bin/java
u0017649@sys-93315:~$ export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-ppc64el
그리고 이 ActiveMQ는 maven으로 build되는 SW입니다. 다음과 같이 mvn을 설치합니다.
u0017649@sys-93315:~$ sudo apt-get install maven
이제 source code를 download 받습니다.
u0017649@sys-93315:~$ git clone https://github.com/apache/activemq.git
u0017649@sys-93315:~$ cd activemq
이제 mvn으로 package build를 하시면 되는데, 첫 시도에서는 다음과 같이 error가 납니다.
u0017649@sys-93315:~/activemq$ mvn clean package -Dmaven.test.skip=true
[ERROR] Failed to execute goal on project activemq-kahadb-store: Could not resolve dependencies for project org.apache.activemq:activemq-kahadb-store:jar:5.16.0-SNAPSHOT: Could not find artifact org.apache.activemq:activemq-broker:jar:tests:5.16.0-SNAPSHOT in apache.snapshots (https://repository.apache.org/snapshots) -> [Help 1]
이건 그냥 activemq 최신 버전인 5.15.3의 bug이며, ppc64le 아키텍처와는 무관한 것입니다. 구글링해보시면 x86에서도 같은 error들이 많이 report된 것을 보실 수 있습니다.
http://activemq.2283324.n4.nabble.com/Building-ActiveMQ-td4728361.html
이 error는 그냥 minor version을 하나 내린 5.15.2로 해보면 금방 해결됩니다. 다음과 같이 checkout 하십시요.
u0017649@sys-93315:~/activemq$ git checkout tags/activemq-5.15.2
그리고나서 다시 mvn package 명령을 내리시면 됩니다.
u0017649@sys-93315:~/activemq$ mvn clean package -Dmaven.test.skip=true
...
[INFO] Building zip: /home/u0017649/activemq/assembly/target/apache-activemq-5.15.2-bin.zip
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] ActiveMQ ........................................... SUCCESS [ 1.972 s]
[INFO] ActiveMQ :: Openwire Generator ..................... SUCCESS [ 5.275 s]
[INFO] ActiveMQ :: Client ................................. SUCCESS [ 16.029 s]
[INFO] ActiveMQ :: Openwire Legacy Support ................ SUCCESS [ 4.506 s]
[INFO] ActiveMQ :: JAAS ................................... SUCCESS [ 6.235 s]
[INFO] ActiveMQ :: Broker ................................. SUCCESS [ 6.564 s]
[INFO] ActiveMQ :: KahaDB Store ........................... SUCCESS [ 4.021 s]
[INFO] ActiveMQ :: STOMP Protocol ......................... SUCCESS [ 1.134 s]
[INFO] ActiveMQ :: MQTT Protocol .......................... SUCCESS [ 2.055 s]
[INFO] ActiveMQ :: JDBC Store ............................. SUCCESS [ 1.008 s]
[INFO] ActiveMQ :: LevelDB Store .......................... SUCCESS [01:10 min]
[INFO] ActiveMQ :: Generic JMS Pool ....................... SUCCESS [ 0.898 s]
[INFO] ActiveMQ :: Pool ................................... SUCCESS [ 0.753 s]
[INFO] ActiveMQ :: RA ..................................... SUCCESS [ 1.790 s]
[INFO] ActiveMQ :: Spring ................................. SUCCESS [ 11.830 s]
[INFO] ActiveMQ :: Console ................................ SUCCESS [ 2.446 s]
[INFO] ActiveMQ :: Partition Management ................... SUCCESS [ 0.889 s]
[INFO] ActiveMQ :: Runtime Configuration .................. SUCCESS [ 17.503 s]
[INFO] ActiveMQ :: Tooling ................................ SUCCESS [ 0.028 s]
[INFO] ActiveMQ :: JUnit Rule ............................. SUCCESS [ 0.342 s]
[INFO] ActiveMQ :: Unit Tests ............................. SUCCESS [ 2.850 s]
[INFO] ActiveMQ :: HTTP Protocol Support .................. SUCCESS [ 3.166 s]
[INFO] ActiveMQ :: AMQP ................................... SUCCESS [ 1.300 s]
[INFO] ActiveMQ :: Camel .................................. SUCCESS [ 3.726 s]
[INFO] ActiveMQ :: All JAR bundle ......................... SUCCESS [ 3.952 s]
[INFO] ActiveMQ :: Log4j Appender ......................... SUCCESS [ 0.270 s]
[INFO] ActiveMQ :: Apache Karaf ........................... SUCCESS [ 1.795 s]
[INFO] ActiveMQ :: ConnectionFactory ...................... SUCCESS [ 1.334 s]
[INFO] ActiveMQ :: RAR .................................... SUCCESS [ 1.663 s]
[INFO] ActiveMQ :: Run Jar ................................ SUCCESS [ 0.499 s]
[INFO] ActiveMQ :: Shiro .................................. SUCCESS [ 0.785 s]
[INFO] ActiveMQ :: Memory Usage Test Plugin ............... SUCCESS [ 2.519 s]
[INFO] ActiveMQ :: Performance Test Plugin ................ SUCCESS [ 2.504 s]
[INFO] ActiveMQ :: StartUp/Stop Plugin .................... SUCCESS [ 4.245 s]
[INFO] ActiveMQ :: Web .................................... SUCCESS [ 1.134 s]
[INFO] ActiveMQ :: OSGi bundle ............................ SUCCESS [ 12.958 s]
[INFO] ActiveMQ :: Blueprint .............................. SUCCESS [ 0.235 s]
[INFO] ActiveMQ :: Web Demo ............................... SUCCESS [ 14.682 s]
[INFO] ActiveMQ :: Web Console ............................ SUCCESS [ 5.986 s]
[INFO] ActiveMQ :: Karaf Integration Tests ................ SUCCESS [ 2.232 s]
[INFO] ActiveMQ :: Integration Test :: Spring 3.1 ......... SUCCESS [ 0.097 s]
[INFO] ActiveMQ :: Assembly ............................... SUCCESS [ 17.442 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 04:05 min
[INFO] Finished at: 2018-05-13T22:44:49-04:00
[INFO] Final Memory: 159M/558M
[INFO] ------------------------------------------------------------------------
생성된 package file은 아래 directory에 tag.gz과 zip의 두가지 형태로 되어 있습니다.
u0017649@sys-93315:~/activemq$ ls -l assembly/target/apach*
-rw-rw-r-- 1 u0017649 u0017649 57997764 May 13 22:44 assembly/target/apache-activemq-5.15.2-bin.tar.gz
-rw-rw-r-- 1 u0017649 u0017649 65138709 May 13 22:44 assembly/target/apache-activemq-5.15.2-bin.zip
이렇게 build된 file을 아래와 같이 원하는 directory에 풀어놓고 관련 환경변수만 잡아주시면 사용하실 수 있습니다.
u0017649@sys-93315:~/activemq$ cd /usr/local
u0017649@sys-93315:/usr/local$ sudo tar -zxvf ~/activemq/assembly/target/apache-activemq-5.15.2-bin.tar.gz
u0017649@sys-93315:~$ export PATH=/usr/local/apache-activemq-5.15.2/bin:$PATH
u0017649@sys-93315:~$ export LD_LIBRARY_PATH=/usr/local/apache-activemq-5.15.2/lib:$LD_LIBRARY_PATH
u0017649@sys-93315:~$ activemq --help
INFO: Loading '/usr/local/apache-activemq-5.15.2//bin/env'
INFO: Using java '/usr/bin/java'
Java Runtime: Oracle Corporation 1.8.0_171 /usr/lib/jvm/java-8-openjdk-ppc64el/jre
Heap sizes: current=62976k free=62320k max=932352k
JVM args: -Xms64M -Xmx1G -Djava.util.logging.config.file=logging.properties -Djava.security.auth.login.config=/usr/local/apache-activemq-5.15.2//conf/login.config -Dactivemq.classpath=/usr/local/apache-activemq-5.15.2//conf:/usr/local/apache-activemq-5.15.2//../lib/: -Dactivemq.home=/usr/local/apache-activemq-5.15.2/ -Dactivemq.base=/usr/local/apache-activemq-5.15.2/ -Dactivemq.conf=/usr/local/apache-activemq-5.15.2//conf -Dactivemq.data=/usr/local/apache-activemq-5.15.2//data
Extensions classpath:
[/usr/local/apache-activemq-5.15.2/lib,/usr/local/apache-activemq-5.15.2/lib/camel,/usr/local/apache-activemq-5.15.2/lib/optional,/usr/local/apache-activemq-5.15.2/lib/web,/usr/local/apache-activemq-5.15.2/lib/extra]
ACTIVEMQ_HOME: /usr/local/apache-activemq-5.15.2
ACTIVEMQ_BASE: /usr/local/apache-activemq-5.15.2
ACTIVEMQ_CONF: /usr/local/apache-activemq-5.15.2/conf
ACTIVEMQ_DATA: /usr/local/apache-activemq-5.15.2/data
Usage: Main [--extdir <dir>] [task] [task-options] [task data]
Tasks:
browse - Display selected messages in a specified destination.
bstat - Performs a predefined query that displays useful statistics regarding the specified broker
consumer - Receives messages from the broker
create - Creates a runnable broker instance in the specified path.
decrypt - Decrypts given text
dstat - Performs a predefined query that displays useful tabular statistics regarding the specified destination type
encrypt - Encrypts given text
export - Exports a stopped brokers data files to an archive file
list - Lists all available brokers in the specified JMX context
producer - Sends messages to the broker
purge - Delete selected destination's messages that matches the message selector
query - Display selected broker component's attributes and statistics.
start - Creates and starts a broker using a configuration file, or a broker URI.
stop - Stops a running broker specified by the broker name.
Task Options (Options specific to each task):
--extdir <dir> - Add the jar files in the directory to the classpath.
--version - Display the version information.
-h,-?,--help - Display this help information. To display task specific help, use Main [task] -h,-?,--help
Task Data:
- Information needed by each specific task.
JMX system property options:
-Dactivemq.jmx.url=<jmx service uri> (default is: 'service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi')
-Dactivemq.jmx.user=<user name>
-Dactivemq.jmx.password=<password>
2018년 5월 11일 금요일
ppc64le 환경에서 NVIDIA DIGITS의 설치
먼저 알아두셔야 하는 것이, NVIDIA DIGITS를 사용하기 위해서는 caffe 설치는 필수이며 또 python2만 지원된다는 것입니다. python3는 현재 지원되지 않습니다.
[ibm@centos01 ~]$ sudo yum install graphviz graphviz-devel gfortran libxkbcommon-x11-devel xorg-x11-server-devel
[ibm@centos01 ~]$ which pip
~/anaconda2/bin/pip
먼저 caffe를 설치한 뒤, 다음과 같이 caffe가 요구하는 python package들을 설치합니다.
[ibm@centos01 DIGITS]$ env | grep ROOT
DIGITS_ROOT=/home/ibm/DIGITS
CAFFE_ROOT=/home/ibm/caffe
[ibm@centos01 ~]$ pip install -r $CAFFE_ROOT/python/requirements.txt
특히 caffe 설치 때 make pycaffe를 수행하는 것을 잊지 마셔야 합니다.
[ibm@centos01 caffe]$ pwd
/home/ibm/caffe
[ibm@centos01 caffe]$ make pycaffe
이제 DIGITS source code를 download 받습니다.
[ibm@centos01 ~]$ git clone https://github.com/NVIDIA/DIGITS.git
[ibm@centos01 ~]$ cd DIGITS
[ibm@centos01 DIGITS]$ vi requirements.txt
...
#h5py>=2.2.1,<=2.6.0
h5py>=2.2.1,<=2.7.1
#pydot>=1.0.28,<=1.0.29
pydot>=1.2.4,<1.2.5
...
위와 같이 수정하지 않으면 다음과 같이 h5py 및 pydot에서 다음과 같은 error들을 겪게 됩니다.
/tmp/pip-build-csqz23it/h5py/h5py/api_compat.h:27:18: fatal error: hdf5.h: No such file or directory
#include "hdf5.h"
^
compilation terminated.
error: command 'gcc' failed with exit status 1
File "/tmp/pip-build-5i5hsyt1/pydot/pydot.py", line 31
except Exception, e:
^
SyntaxError: invalid syntax
----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-5i5hsyt1/pydot/
기본적으로 DIGITS는 python2로 작성된 script라 pip로 필요 package들을 다음과 같이 설치하면 됩니다.
[ibm@centos01 DIGITS]$ pip install -r ./requirements.txt
추가로 다음과 같은 python package를 수동으로 설치해야 합니다.
[ibm@centos01 DIGITS]$ pip install scikit-fmm
그러지 않으면 다음과 같은 에러가 날 수 있습니다.
ImportError: No module named skfmm
이제 digits 서버를 구동합니다. digits 서버는 daemon화 되어 있지 않으므로, nohup으로 돌리시는 것이 좋습니다.
[ibm@centos01 DIGITS]$ ./digits-devserver &
___ ___ ___ ___ _____ ___
| \_ _/ __|_ _|_ _/ __|
| |) | | (_ || | | | \__ \
|___/___\___|___| |_| |___/ 6.1.1
/home/ibm/anaconda2/lib/python2.7/site-packages/h5py/__init__.py:34: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.
from ._conv import register_converters as _register_converters
cudaRuntimeGetVersion() failed with error #30
2018-05-11 16:09:54 [INFO ] Loaded 0 jobs.
위에서 난 cudaRuntimeGetVersion() error는 이 서버에는 GPU가 없기 때문에 발생한 것이니 무시하셔도 됩니다.
이제 5000번 port로 연결해보면 다음과 같이 메뉴가 나옵니다. 다음번에는 DIGITS를 이용하여 data preprocessing부터 해보도록 하겠습니다.
[ibm@centos01 ~]$ sudo yum install graphviz graphviz-devel gfortran libxkbcommon-x11-devel xorg-x11-server-devel
[ibm@centos01 ~]$ which pip
~/anaconda2/bin/pip
먼저 caffe를 설치한 뒤, 다음과 같이 caffe가 요구하는 python package들을 설치합니다.
[ibm@centos01 DIGITS]$ env | grep ROOT
DIGITS_ROOT=/home/ibm/DIGITS
CAFFE_ROOT=/home/ibm/caffe
[ibm@centos01 ~]$ pip install -r $CAFFE_ROOT/python/requirements.txt
특히 caffe 설치 때 make pycaffe를 수행하는 것을 잊지 마셔야 합니다.
[ibm@centos01 caffe]$ pwd
/home/ibm/caffe
[ibm@centos01 caffe]$ make pycaffe
이제 DIGITS source code를 download 받습니다.
[ibm@centos01 ~]$ git clone https://github.com/NVIDIA/DIGITS.git
[ibm@centos01 ~]$ cd DIGITS
[ibm@centos01 DIGITS]$ vi requirements.txt
...
#h5py>=2.2.1,<=2.6.0
h5py>=2.2.1,<=2.7.1
#pydot>=1.0.28,<=1.0.29
pydot>=1.2.4,<1.2.5
...
위와 같이 수정하지 않으면 다음과 같이 h5py 및 pydot에서 다음과 같은 error들을 겪게 됩니다.
/tmp/pip-build-csqz23it/h5py/h5py/api_compat.h:27:18: fatal error: hdf5.h: No such file or directory
#include "hdf5.h"
^
compilation terminated.
error: command 'gcc' failed with exit status 1
File "/tmp/pip-build-5i5hsyt1/pydot/pydot.py", line 31
except Exception, e:
^
SyntaxError: invalid syntax
----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-5i5hsyt1/pydot/
기본적으로 DIGITS는 python2로 작성된 script라 pip로 필요 package들을 다음과 같이 설치하면 됩니다.
[ibm@centos01 DIGITS]$ pip install -r ./requirements.txt
추가로 다음과 같은 python package를 수동으로 설치해야 합니다.
[ibm@centos01 DIGITS]$ pip install scikit-fmm
그러지 않으면 다음과 같은 에러가 날 수 있습니다.
ImportError: No module named skfmm
이제 digits 서버를 구동합니다. digits 서버는 daemon화 되어 있지 않으므로, nohup으로 돌리시는 것이 좋습니다.
[ibm@centos01 DIGITS]$ ./digits-devserver &
___ ___ ___ ___ _____ ___
| \_ _/ __|_ _|_ _/ __|
| |) | | (_ || | | | \__ \
|___/___\___|___| |_| |___/ 6.1.1
/home/ibm/anaconda2/lib/python2.7/site-packages/h5py/__init__.py:34: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.
from ._conv import register_converters as _register_converters
cudaRuntimeGetVersion() failed with error #30
2018-05-11 16:09:54 [INFO ] Loaded 0 jobs.
위에서 난 cudaRuntimeGetVersion() error는 이 서버에는 GPU가 없기 때문에 발생한 것이니 무시하셔도 됩니다.
이제 5000번 port로 연결해보면 다음과 같이 메뉴가 나옵니다. 다음번에는 DIGITS를 이용하여 data preprocessing부터 해보도록 하겠습니다.
2018년 5월 10일 목요일
Minsky Ubuntu16.04에서 tensorflow 1.5.1 build하기
P100을 장착한 Ubuntu 16.04 환경의 Minsky 서버에는 원래 CUDA 8.0과 PowerAI에 딸린 tensorflow 1.0(python2)을 주로 썼습니다. 물론 Minsky 서버에도 Ubuntu 16.04를 그대로 유지한 채 CUDA 9.1을 설치한 뒤 tensorflow 1.5.1을 설치하여 쓸 수 있습니다. 여기서는 python3 환경입니다.
u0017649@sys-93315:~$ sudo apt-get install libaprutil1-dev ant cmake automake libtool-bin openssl libcurl4-openssl-dev
전에는 bazel-0.8.1을 썼습니다만, 요즘의 openjdk 1.8.0_151 환경에서는 이 bazel 버전은 다음과 같은 error를 냅니다.
ERROR: /home/minsky/files/bazel-0.8.1/src/main/java/com/google/devtools/common/options/BUILD:27:1: Building src/main/java/com/google/devtools/common/options/liboptions_internal.jar (35 source files) failed (Exit 1): java failed: error executing command
(cd /tmp/bazel_vQeTUQIe/out/execroot/io_bazel && \
exec env - \
LC_CTYPE=en_US.UTF-8 \
external/local_jdk/bin/java -XX:+TieredCompilation '-XX:TieredStopAtLevel=1' -Xbootclasspath/p:third_party/java/jdk/langtools/javac-9-dev-r4023-3.jar -jar bazel-out/host/bin/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/bootstrap_deploy.jar @bazel-out/ppc-opt/bin/src/main/java/com/google/devtools/common/options/liboptions_internal.jar-2.params)
java.lang.InternalError: Cannot find requested resource bundle for locale en_US
이 error는 bazel-0.10.0 버전을 쓰면 없어집니다.
u0017649@sys-93315:~$ wget https://github.com/bazelbuild/bazel/releases/download/0.10.0/bazel-0.10.0-dist.zip
u0017649@sys-93315:~$ which python
/home/u0017649/anaconda3/bin/python
u0017649@sys-93315:~$ conda install protobuf
u0017649@sys-93315:~$ which protoc
/home/u0017649/anaconda3/bin/protoc
u0017649@sys-93315:~$ export PROTOC=/home/u0017649/anaconda3/bin/protoc
u0017649@sys-93315:~$ mkdir bazel-0.10.0 && cd bazel-0.10.0
u0017649@sys-93315:~/bazel-0.10.0$ unzip ../bazel-0.10.0-dist.zip
u0017649@sys-93315:~/bazel-0.10.0$ ./compile.sh
u0017649@sys-93315:~/bazel-0.10.0$ sudo cp output/bazel /usr/local/bin
u0017649@sys-93315:~$ git clone https://github.com/tensorflow/tensorflow
u0017649@sys-93315:~$ cd tensorflow
u0017649@sys-93315:~/tensorflow$ git checkout tags/v1.5.1
u0017649@sys-93315:~/tensorflow$ vi configure.py
...
# default_cc_opt_flags = '-mcpu=native'
default_cc_opt_flags = '-mcpu=power8'
else:
# default_cc_opt_flags = '-march=native'
default_cc_opt_flags = '-mcpu=power8'
...
# write_to_bazelrc('build:opt --host_copt=-march=native')
write_to_bazelrc('build:opt --host_copt=-mcpu=power8')
...
u0017649@sys-93315:~/tensorflow$ ./configure
...
Do you wish to build TensorFlow with Google Cloud Platform support? [Y/n]: n
...
Do you wish to build TensorFlow with Amazon S3 File System support? [Y/n]: n
...
Do you wish to build TensorFlow with CUDA support? [y/N]: y
Please specify the CUDA SDK version you want to use, e.g. 7.0. [Leave empty to default to CUDA 9.0]: 9.1
...
Please specify the cuDNN version you want to use. [Leave empty to default to cuDNN 7.0]: 7
...
Please specify the location where cuDNN 7 library is installed. Refer to README.md for more details. [Default is /usr/local/cuda]:/usr/local/cuda/lib64
...
Please note that each additional compute capability significantly increases your build time and binary size. [Default is: 3.5,5.2]6.0,7.0 #6.0은 P100, 7.0은 V100 입니다.
...
u0017649@sys-93315:~/tensorflow$ bazel build --config=opt --config=cuda //tensorflow/tools/pip_package:build_pip_package
u0017649@sys-93315:~/tensorflow$ bazel-bin/tensorflow/tools/pip_package/build_pip_package ~/tensorflow_pkg
u0017649@sys-93315:~/tensorflow$ pip install ~/tensorflow_pkg/tensorflow-1.5.1-cp36-cp36m-linux_ppc64le.whl
확인은 다음과 같이 합니다.
u0017649@sys-93315:~$ python
Python 3.6.4 |Anaconda, Inc.| (default, Feb 11 2018, 08:19:13)
[GCC 7.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
>>> sess=tf.Session()
아래에 그렇게 만들어진 python3용 tensorflow-1.5.1-cp36-cp36m-linux_ppc64le.whl를 올려놓았습니다. 물론 이건 Ubuntu 환경에서든 Redhat 환경에서든 다 쓰실 수 있습니다.
https://drive.google.com/open?id=1CHIM-dgr0KcMJlHcc_I0fJUqBNs2czvL
그리고 아래는 python2용 tensorflow-1.5.1-cp27-cp27mu-linux_ppc64le.whl 입니다.
https://drive.google.com/open?id=1cTZAsLwyozPNufoZfeKIIaIJ7snYGC0M
u0017649@sys-93315:~$ sudo apt-get install libaprutil1-dev ant cmake automake libtool-bin openssl libcurl4-openssl-dev
전에는 bazel-0.8.1을 썼습니다만, 요즘의 openjdk 1.8.0_151 환경에서는 이 bazel 버전은 다음과 같은 error를 냅니다.
ERROR: /home/minsky/files/bazel-0.8.1/src/main/java/com/google/devtools/common/options/BUILD:27:1: Building src/main/java/com/google/devtools/common/options/liboptions_internal.jar (35 source files) failed (Exit 1): java failed: error executing command
(cd /tmp/bazel_vQeTUQIe/out/execroot/io_bazel && \
exec env - \
LC_CTYPE=en_US.UTF-8 \
external/local_jdk/bin/java -XX:+TieredCompilation '-XX:TieredStopAtLevel=1' -Xbootclasspath/p:third_party/java/jdk/langtools/javac-9-dev-r4023-3.jar -jar bazel-out/host/bin/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/bootstrap_deploy.jar @bazel-out/ppc-opt/bin/src/main/java/com/google/devtools/common/options/liboptions_internal.jar-2.params)
java.lang.InternalError: Cannot find requested resource bundle for locale en_US
이 error는 bazel-0.10.0 버전을 쓰면 없어집니다.
u0017649@sys-93315:~$ wget https://github.com/bazelbuild/bazel/releases/download/0.10.0/bazel-0.10.0-dist.zip
u0017649@sys-93315:~$ which python
/home/u0017649/anaconda3/bin/python
u0017649@sys-93315:~$ conda install protobuf
u0017649@sys-93315:~$ which protoc
/home/u0017649/anaconda3/bin/protoc
u0017649@sys-93315:~$ export PROTOC=/home/u0017649/anaconda3/bin/protoc
u0017649@sys-93315:~$ mkdir bazel-0.10.0 && cd bazel-0.10.0
u0017649@sys-93315:~/bazel-0.10.0$ unzip ../bazel-0.10.0-dist.zip
u0017649@sys-93315:~/bazel-0.10.0$ ./compile.sh
u0017649@sys-93315:~/bazel-0.10.0$ sudo cp output/bazel /usr/local/bin
u0017649@sys-93315:~$ git clone https://github.com/tensorflow/tensorflow
u0017649@sys-93315:~$ cd tensorflow
u0017649@sys-93315:~/tensorflow$ git checkout tags/v1.5.1
u0017649@sys-93315:~/tensorflow$ vi configure.py
...
# default_cc_opt_flags = '-mcpu=native'
default_cc_opt_flags = '-mcpu=power8'
else:
# default_cc_opt_flags = '-march=native'
default_cc_opt_flags = '-mcpu=power8'
...
# write_to_bazelrc('build:opt --host_copt=-march=native')
write_to_bazelrc('build:opt --host_copt=-mcpu=power8')
...
u0017649@sys-93315:~/tensorflow$ ./configure
...
Do you wish to build TensorFlow with Google Cloud Platform support? [Y/n]: n
...
Do you wish to build TensorFlow with Amazon S3 File System support? [Y/n]: n
...
Do you wish to build TensorFlow with CUDA support? [y/N]: y
Please specify the CUDA SDK version you want to use, e.g. 7.0. [Leave empty to default to CUDA 9.0]: 9.1
...
Please specify the cuDNN version you want to use. [Leave empty to default to cuDNN 7.0]: 7
...
Please specify the location where cuDNN 7 library is installed. Refer to README.md for more details. [Default is /usr/local/cuda]:/usr/local/cuda/lib64
...
Please note that each additional compute capability significantly increases your build time and binary size. [Default is: 3.5,5.2]6.0,7.0 #6.0은 P100, 7.0은 V100 입니다.
...
u0017649@sys-93315:~/tensorflow$ bazel build --config=opt --config=cuda //tensorflow/tools/pip_package:build_pip_package
u0017649@sys-93315:~/tensorflow$ bazel-bin/tensorflow/tools/pip_package/build_pip_package ~/tensorflow_pkg
u0017649@sys-93315:~/tensorflow$ pip install ~/tensorflow_pkg/tensorflow-1.5.1-cp36-cp36m-linux_ppc64le.whl
확인은 다음과 같이 합니다.
u0017649@sys-93315:~$ python
Python 3.6.4 |Anaconda, Inc.| (default, Feb 11 2018, 08:19:13)
[GCC 7.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
>>> sess=tf.Session()
아래에 그렇게 만들어진 python3용 tensorflow-1.5.1-cp36-cp36m-linux_ppc64le.whl를 올려놓았습니다. 물론 이건 Ubuntu 환경에서든 Redhat 환경에서든 다 쓰실 수 있습니다.
https://drive.google.com/open?id=1CHIM-dgr0KcMJlHcc_I0fJUqBNs2czvL
그리고 아래는 python2용 tensorflow-1.5.1-cp27-cp27mu-linux_ppc64le.whl 입니다.
https://drive.google.com/open?id=1cTZAsLwyozPNufoZfeKIIaIJ7snYGC0M
RNN PTB benchmark 수행방법
CNN은 Image classification이나 object detection 같은 정적인 image 처리에 많이 사용됩니다. 그러나 기계 번역(machine translation)이나 동영상 captioning 등을 deep learning으로 처리할 때는 시계열(time-series) 분석 등을 통해 미래를 예측하는 것이 필요합니다. 여기에는 CNN 대신 LSTM과 같은 RNN을 사용합니다.
문제는 CNN과는 달리, RNN/LSTM은 그 본질상 data history를 참조해야 하므로 메모리 사용량이 많다는 점입니다. 당연히 시스템 대역폭이 전체 시스템 성능에 영향을 끼치게 됩니다.
RNN 관련 가장 일반적인 벤치마크는 tensorflow models에 포함되어 있는 language modeling이며, 이는 영어 단어 모음인 PTB dataset을 이용합니다. 이것을 이용하여 적절한 성능 벤치마크를 해볼 수 있습니다. 먼저, python3에 tensorflow 1.5.1을 설치한 환경을 준비합니다.
[u0017649@sys-93214 ~]$ git clone https://github.com/tensorflow/models.git
[u0017649@sys-93214 ~]$ cd models/tutorials/rnn/ptb
이 벤치마크에서 사용하는 PTB dataset은 아래와 같이 download 받을 수 있습니다.
[u0017649@sys-93214 ptb]$ wget http://www.fit.vutbr.cz/~imikolov/rnnlm/simple-examples.tgz
[u0017649@sys-93215 ptb]$ tar -zxvf simple-examples.tgz
이제 다음과 같이 ptb_word_lm.py를 수행하면 됩니다.
[u0017649@sys-93214 ptb]$ time python ptb_word_lm.py --data_path=./simple-examples/data/ --model=large
...
Epoch: 1 Learning rate: 1.000
0.008 perplexity: 25072.184 speed: 1565 wps
0.107 perplexity: 1574.659 speed: 2033 wps
0.206 perplexity: 974.553 speed: 2057 wps
0.306 perplexity: 754.209 speed: 2065 wps
0.405 perplexity: 643.568 speed: 2069 wps
...
0.704 perplexity: 133.906 speed: 2085 wps
0.803 perplexity: 133.743 speed: 2085 wps
0.903 perplexity: 132.101 speed: 2085 wps
Epoch: 10 Train Perplexity: 131.618
Epoch: 10 Valid Perplexity: 117.277
Test Perplexity: 113.380
...
다만 이를 그대로 수행하면 무려 55 epochs를 수행하므로 (P100 4장으로 해도 약 3시간 정도), 좀 짧게 수행하시려면 아래와 같이 max_epoch과 max_max_epoch을 수정하시면 됩니다. 또 좀더 많은 hidden parameter를 사용하면 per word perplexity를 더 줄일 수 있는데, 대신 시간도 더 많이 걸리고 더 많은 메모리를 사용하게 됩니다.
[u0017649@sys-93214 ptb]$
...
class LargeConfig(object):
"""Large config."""
init_scale = 0.04
learning_rate = 1.0
max_grad_norm = 10
num_layers = 2
num_steps = 2
hidden_size = 1000
max_epoch = 4 #원래 14
max_max_epoch = 10 #원래 55
keep_prob = 0.35
lr_decay = 1 / 1.15
batch_size = 20
vocab_size = 10000
rnn_mode = BLOCK
...
저는 --num_gpus=0 옵션을 쓰서 GPU가 없는 CPU 환경에서 수행했는데, 이때 위의 python program이 차지하는 real memory 사용량(ps aux에서 봤을 때의 Res Set 항목)을 보면 RNN이 정말 메모리를 dynamic하게 늘였다줄였다를 반복하는 것을 보실 수 있습니다. 아래는 10분 동안만 2초 간격으로 그 메모리 사용량을 모니터링한 결과입니다. 계속 저 패턴이 반복됩니다.
문제는 CNN과는 달리, RNN/LSTM은 그 본질상 data history를 참조해야 하므로 메모리 사용량이 많다는 점입니다. 당연히 시스템 대역폭이 전체 시스템 성능에 영향을 끼치게 됩니다.
RNN 관련 가장 일반적인 벤치마크는 tensorflow models에 포함되어 있는 language modeling이며, 이는 영어 단어 모음인 PTB dataset을 이용합니다. 이것을 이용하여 적절한 성능 벤치마크를 해볼 수 있습니다. 먼저, python3에 tensorflow 1.5.1을 설치한 환경을 준비합니다.
[u0017649@sys-93214 ~]$ git clone https://github.com/tensorflow/models.git
[u0017649@sys-93214 ~]$ cd models/tutorials/rnn/ptb
이 벤치마크에서 사용하는 PTB dataset은 아래와 같이 download 받을 수 있습니다.
[u0017649@sys-93214 ptb]$ wget http://www.fit.vutbr.cz/~imikolov/rnnlm/simple-examples.tgz
[u0017649@sys-93215 ptb]$ tar -zxvf simple-examples.tgz
이제 다음과 같이 ptb_word_lm.py를 수행하면 됩니다.
[u0017649@sys-93214 ptb]$ time python ptb_word_lm.py --data_path=./simple-examples/data/ --model=large
...
Epoch: 1 Learning rate: 1.000
0.008 perplexity: 25072.184 speed: 1565 wps
0.107 perplexity: 1574.659 speed: 2033 wps
0.206 perplexity: 974.553 speed: 2057 wps
0.306 perplexity: 754.209 speed: 2065 wps
0.405 perplexity: 643.568 speed: 2069 wps
...
0.704 perplexity: 133.906 speed: 2085 wps
0.803 perplexity: 133.743 speed: 2085 wps
0.903 perplexity: 132.101 speed: 2085 wps
Epoch: 10 Train Perplexity: 131.618
Epoch: 10 Valid Perplexity: 117.277
Test Perplexity: 113.380
...
다만 이를 그대로 수행하면 무려 55 epochs를 수행하므로 (P100 4장으로 해도 약 3시간 정도), 좀 짧게 수행하시려면 아래와 같이 max_epoch과 max_max_epoch을 수정하시면 됩니다. 또 좀더 많은 hidden parameter를 사용하면 per word perplexity를 더 줄일 수 있는데, 대신 시간도 더 많이 걸리고 더 많은 메모리를 사용하게 됩니다.
[u0017649@sys-93214 ptb]$
...
class LargeConfig(object):
"""Large config."""
init_scale = 0.04
learning_rate = 1.0
max_grad_norm = 10
num_layers = 2
num_steps = 2
hidden_size = 1000
max_epoch = 4 #원래 14
max_max_epoch = 10 #원래 55
keep_prob = 0.35
lr_decay = 1 / 1.15
batch_size = 20
vocab_size = 10000
rnn_mode = BLOCK
...
저는 --num_gpus=0 옵션을 쓰서 GPU가 없는 CPU 환경에서 수행했는데, 이때 위의 python program이 차지하는 real memory 사용량(ps aux에서 봤을 때의 Res Set 항목)을 보면 RNN이 정말 메모리를 dynamic하게 늘였다줄였다를 반복하는 것을 보실 수 있습니다. 아래는 10분 동안만 2초 간격으로 그 메모리 사용량을 모니터링한 결과입니다. 계속 저 패턴이 반복됩니다.
2018년 5월 4일 금요일
ppc64le 환경에서 gcc7과 cmake3을 source로부터 build
제목 그대로입니다. gcc7과 cmake3을 source code로부터 build하는 방법은 비교적 간단합니다. 여기서는 Redhat 7.4 ppc64le 환경입니다.
단, gcc를 build할 때 make 부분은 (CPU power가 약하다면) 시간이 매우 오래 걸린다는 점에 유의하세요.
먼저 사전에 필요한 package 설치합니다.
[u0017649@sys-93214 ~]$ sudo yum install yum install gmp-devel mpfr-devel libmpc-devel
gcc 7.2 source code부터 download 합니다.
[u0017649@sys-93214 ~]$ wget https://ftp.gnu.org/gnu/gcc/gcc-7.2.0/gcc-7.2.0.tar.gz
[u0017649@sys-93214 ~]$ tar -zxvf gcc-7.2.0.tar.gz
[u0017649@sys-93214 ~]$ cd gcc-7.2.0
[u0017649@sys-93214 gcc-7.2.0]$ mkdir build && cd build
[u0017649@sys-93214 build]$ ../configure --enable-languages=c,c++,fortran
[u0017649@sys-93214 build]$ make -j 8
[u0017649@sys-93214 build]$ sudo make install
[u0017649@sys-93214 build]$ which gcc
/usr/local/bin/gcc
g++도 함께 설치됩니다.
[u0017649@sys-93214 build]$ which g++
/usr/local/bin/g++
다음으로 cmake 3.11 source code를 download 합니다.
[u0017649@sys-93214 ~]$ wget https://cmake.org/files/v3.11/cmake-3.11.1.tar.gz
[u0017649@sys-93214 ~]$ tar -zxvf cmake-3.11.1.tar.gz
[u0017649@sys-93214 ~]$ cd cmake-3.11.1
[u0017649@sys-93214 cmake-3.11.1]$ ./configure
[u0017649@sys-93214 cmake-3.11.1]$ make
[u0017649@sys-93214 cmake-3.11.1]$ sudo make install
[u0017649@sys-93214 cmake-3.11.1]$ which cmake
/usr/local/bin/cmake
[u0017649@sys-93214 cmake-3.11.1]$ cmake --version
cmake version 3.11.1
CMake suite maintained and supported by Kitware (kitware.com/cmake).
라벨:
build,
cmake,
gcc,
ppc64le,
source code
2018년 5월 2일 수요일
요즘 anaconda 5.1 환경에서 많이 발생하는 undefined symbol error의 해결책
아래 URL에 나오는 간단한 LSTM 관련 python code를 수행하려고 하는데, 이런 error가 나는 경우가 있습니다.
https://machinelearningmastery.com/time-series-prediction-lstm-recurrent-neural-networks-python-keras/
minsky@minsky:~/exam$ python lstm1.py
...
import scipy.special as spec
File "/home/minsky/anaconda3/lib/python3.6/site-packages/scipy/special/__init__.py", line 6 40, in <module>
from ._ufuncs import *
ImportError: /home/minsky/anaconda3/lib/python3.6/site-packages/scipy/special/_ufuncs.cpython -36m-powerpc64le-linux-gnu.so: undefined symbol: _gfortran_stop_numeric_f08
이건 꼭 ppc64le 환경에서만 나는 error는 아닙니다. 그러나 최근에 저도 caffe를 build하면서 이와 유사한 undefined symbol error로 인해 고생을 한 적이 있습니다.
이 error는 한줄 요약하면 올해 초에 release된 Anaconda 5.1 때문에 발생하는 것입니다. 그렇다고 Anaconda 5.1에 bug가 있는 것은 아니고, Anaconda 5.1을 build하기 위해 사용된 gcc 버전이 7.2.0이라는 것에 문제가 있는 것입니다.
minsky@minsky:~/exam$ python
Python 3.6.4 |Anaconda, Inc.| (default, Feb 11 2018, 08:19:13)
[GCC 7.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
저 undefined symbol error는 서로 다른 버전의 gcc로 compile된 object file들을 하나로 link할 때 주로 발생합니다. 따라서 Anaconda 5.1 환경에서 gcc로 뭔가 build할 때는 gcc 버전도 7.2로 맞추는 것이 좋습니다. 그러나 Redhat 7.4의 경우 포함된 gcc의 default 버전은 4.8이고, Ubuntu 16.04도 5.4에 불과합니다.
minsky@minsky:~/exam$ gcc --version
gcc (Ubuntu/IBM 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
다시 말해, Anaconda 5.1에 포함된 python library들은 gcc 7.2로 compile된 것에 비해 OS에 포함된 gcc 버전은 훨씬 낮기 때문에 이 문제가 발생합니다.
이 문제를 해결하려면 어떻게 해야 할까요 ? 가장 간단한 방법은 Anaconda 5.0을 쓰는 것입니다. 이 버전은 gcc 4.8로 compile되었거든요.
https://repo.continuum.io/archive/
Filename Size Last Modified MD5
Anaconda2-5.1.0-Linux-ppc64le.sh 267.3M 2018-02-15 09:08:49 e894dcc547a1c7d67deb04f6bba7223a
Anaconda3-5.1.0-Linux-ppc64le.sh 285.7M 2018-02-15 09:08:56 47b5b2b17b7dbac0d4d0f0a4653f5b1c
Anaconda2-5.0.0-Linux-ppc64le.sh 282.3M 2017-09-26 16:25:07 157890d591c61a9b511f8452476d6d19
Anaconda3-5.0.0-Linux-ppc64le.sh 296.3M 2017-09-25 14:39:31 8fe5b29ca5be3ff11411621f79babfc2
아래와 같이 Anaconda 5.0을 download 받아 설치하면 그 속에 든 python은 GCC 4.8.4로 build된 것을 보실 수 있습니다.
minsky@minsky:~/files$ wget https://repo.continuum.io/archive/Anaconda3-5.0.0-Linux-ppc64le.sh
minsky@minsky:~/exam$ which python
/home/minsky/anaconda3_50/bin/python
minsky@minsky:~/exam$ python
Python 3.6.2 |Anaconda, Inc.| (default, Sep 15 2017, 20:38:23)
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.
이제 새로 설치된 Anaconda 환경에 keras와 tensorflow를 설치합니다.
minsky@minsky:~/exam$ pip install keras
minsky@minsky:~/exam$ pip install ~/files/tensorflow_pkg/tensorflow-1.3.1-cp36-cp36m-linux_ppc64le.whl
이제 아까 돌리려 했던 lstm1.py를 다시 수행해보는데, 이번엔 또 색다른 error가 납니다.
minsky@minsky:~/exam$ python lstm1.py
Using TensorFlow backend.
RuntimeError: module compiled against API version 0xc but this version of numpy is 0xb
ImportError: numpy.core.multiarray failed to import
...
이건 numpy의 버전이 낮아서 생기는 문제입니다. numpy를 upgrade하면 해결됩니다.
minsky@minsky:~/exam$ pip install numpy --upgrade
minsky@minsky:~/exam$ time python lstm1.py
/home/minsky/anaconda3_50/lib/python3.6/site-packages/h5py/__init__.py:34: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.
from ._conv import register_converters as _register_converters
Using TensorFlow backend.
...
- 4s - loss: 0.0057
Epoch 1/1
- 1s - loss: 0.0141
Epoch 1/1
- 1s - loss: 0.0099
Epoch 1/1
- 1s - loss: 0.0072
Epoch 1/1
...
Epoch 1/1
- 1s - loss: 0.0039
Epoch 1/1
- 1s - loss: 0.0038
Epoch 1/1
- 1s - loss: 0.0038
Epoch 1/1
- 1s - loss: 0.0037
Epoch 1/1
- 1s - loss: 0.0036
Train Score: 29.74 RMSE
Test Score: 79.26 RMSE
real 2m12.613s
user 3m1.860s
sys 0m9.948s
https://machinelearningmastery.com/time-series-prediction-lstm-recurrent-neural-networks-python-keras/
minsky@minsky:~/exam$ python lstm1.py
...
import scipy.special as spec
File "/home/minsky/anaconda3/lib/python3.6/site-packages/scipy/special/__init__.py", line 6 40, in <module>
from ._ufuncs import *
ImportError: /home/minsky/anaconda3/lib/python3.6/site-packages/scipy/special/_ufuncs.cpython -36m-powerpc64le-linux-gnu.so: undefined symbol: _gfortran_stop_numeric_f08
이건 꼭 ppc64le 환경에서만 나는 error는 아닙니다. 그러나 최근에 저도 caffe를 build하면서 이와 유사한 undefined symbol error로 인해 고생을 한 적이 있습니다.
이 error는 한줄 요약하면 올해 초에 release된 Anaconda 5.1 때문에 발생하는 것입니다. 그렇다고 Anaconda 5.1에 bug가 있는 것은 아니고, Anaconda 5.1을 build하기 위해 사용된 gcc 버전이 7.2.0이라는 것에 문제가 있는 것입니다.
minsky@minsky:~/exam$ python
Python 3.6.4 |Anaconda, Inc.| (default, Feb 11 2018, 08:19:13)
[GCC 7.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
저 undefined symbol error는 서로 다른 버전의 gcc로 compile된 object file들을 하나로 link할 때 주로 발생합니다. 따라서 Anaconda 5.1 환경에서 gcc로 뭔가 build할 때는 gcc 버전도 7.2로 맞추는 것이 좋습니다. 그러나 Redhat 7.4의 경우 포함된 gcc의 default 버전은 4.8이고, Ubuntu 16.04도 5.4에 불과합니다.
minsky@minsky:~/exam$ gcc --version
gcc (Ubuntu/IBM 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
다시 말해, Anaconda 5.1에 포함된 python library들은 gcc 7.2로 compile된 것에 비해 OS에 포함된 gcc 버전은 훨씬 낮기 때문에 이 문제가 발생합니다.
이 문제를 해결하려면 어떻게 해야 할까요 ? 가장 간단한 방법은 Anaconda 5.0을 쓰는 것입니다. 이 버전은 gcc 4.8로 compile되었거든요.
https://repo.continuum.io/archive/
Filename Size Last Modified MD5
Anaconda2-5.1.0-Linux-ppc64le.sh 267.3M 2018-02-15 09:08:49 e894dcc547a1c7d67deb04f6bba7223a
Anaconda3-5.1.0-Linux-ppc64le.sh 285.7M 2018-02-15 09:08:56 47b5b2b17b7dbac0d4d0f0a4653f5b1c
Anaconda2-5.0.0-Linux-ppc64le.sh 282.3M 2017-09-26 16:25:07 157890d591c61a9b511f8452476d6d19
Anaconda3-5.0.0-Linux-ppc64le.sh 296.3M 2017-09-25 14:39:31 8fe5b29ca5be3ff11411621f79babfc2
아래와 같이 Anaconda 5.0을 download 받아 설치하면 그 속에 든 python은 GCC 4.8.4로 build된 것을 보실 수 있습니다.
minsky@minsky:~/files$ wget https://repo.continuum.io/archive/Anaconda3-5.0.0-Linux-ppc64le.sh
minsky@minsky:~/exam$ which python
/home/minsky/anaconda3_50/bin/python
minsky@minsky:~/exam$ python
Python 3.6.2 |Anaconda, Inc.| (default, Sep 15 2017, 20:38:23)
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.
이제 새로 설치된 Anaconda 환경에 keras와 tensorflow를 설치합니다.
minsky@minsky:~/exam$ pip install keras
minsky@minsky:~/exam$ pip install ~/files/tensorflow_pkg/tensorflow-1.3.1-cp36-cp36m-linux_ppc64le.whl
이제 아까 돌리려 했던 lstm1.py를 다시 수행해보는데, 이번엔 또 색다른 error가 납니다.
minsky@minsky:~/exam$ python lstm1.py
Using TensorFlow backend.
RuntimeError: module compiled against API version 0xc but this version of numpy is 0xb
ImportError: numpy.core.multiarray failed to import
...
이건 numpy의 버전이 낮아서 생기는 문제입니다. numpy를 upgrade하면 해결됩니다.
minsky@minsky:~/exam$ pip install numpy --upgrade
minsky@minsky:~/exam$ time python lstm1.py
/home/minsky/anaconda3_50/lib/python3.6/site-packages/h5py/__init__.py:34: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.
from ._conv import register_converters as _register_converters
Using TensorFlow backend.
...
- 4s - loss: 0.0057
Epoch 1/1
- 1s - loss: 0.0141
Epoch 1/1
- 1s - loss: 0.0099
Epoch 1/1
- 1s - loss: 0.0072
Epoch 1/1
...
Epoch 1/1
- 1s - loss: 0.0039
Epoch 1/1
- 1s - loss: 0.0038
Epoch 1/1
- 1s - loss: 0.0038
Epoch 1/1
- 1s - loss: 0.0037
Epoch 1/1
- 1s - loss: 0.0036
Train Score: 29.74 RMSE
Test Score: 79.26 RMSE
real 2m12.613s
user 3m1.860s
sys 0m9.948s
다만 이 sample code는 아래와 같이 CPU도 GPU도 사용량이 그다지 많지 않습니다. 따라서 POWER 아키텍처의 장점인 intel x86 대비 2배에 가까운 memory bandwidth를 보여주기에는 적절한 예는 아닌 것으로 생각됩니다.
피드 구독하기:
글 (Atom)