2019년 2월 22일 금요일

CUDA 9.2의 AC922 서버에 tensorflow 1.12.0 설치하기


IBM POWER9 processor 기반의 GPU서버인 AC922을 2018년에 도입하셨던 고객분들은 대개 CUDA 9.2를 사용하고 계실 것입니다.  이 상황에서 아래와 같이 tensorflow를 포함한 기존 python package들의 버전을 올려야 하는 필요성이 있을 수 있습니다.

변경전
pandas 0.23.4  --> 0.24.0
tensorflow 1.8.0  --> 1.12.0
keras 2.2.2  --> 2.2.4
numpy 1.15.2  --> 1.16.1
scikit-learn 0.20.0  --> 0.20.2
scipy 1.0.0  --> 1.2.0

이게 가능할까요 ?  예 물론 가능합니다.  AC922 서버가 인터넷에 연결되어 있거나, 또는 사내 intranet에 PYPI (python repository) mirror본이 구성되어 있다면 쉽습니다.  (Tensorflow를 제외한 나머지 package들은) 아래와 같이 pip install --upgrade 명령을 통해 간단히 수행됩니다.

$ pip install --upgrade pandas==0.24.0
$ pip install --upgrade keras==2.2.4
$ pip install --upgrade numpy==1.16.1
$ pip install --upgrade scikit-learn==0.20.2
$ pip install --upgrade scipy==1.2.0

예를 들어 numpy는 아래와 같이 upgrade 됩니다.  설치 과정 때 nmon으로 시스템 모니터링을 해보면 cc1 (compiler)가 CPU를 열심히 쓰고 있는 것을 보실 수 있습니다.

[u0017649@sys-97058 files]$ pip install --upgrade numpy==1.16.1
Collecting numpy==1.16.1
  Downloading https://files.pythonhosted.org/packages/2b/26/07472b0de91851b6656cbc86e2f0d5d3a3128e7580f23295ef58b6862d6c/numpy-1.16.1.zip (5.1MB)
    100% |????????????????????????????????| 5.1MB 3.7MB/s
Building wheels for collected packages: numpy
  Running setup.py bdist_wheel for numpy ... done
  Stored in directory: /home/u0017649/.cache/pip/wheels/04/64/e1/283a3672c2865608968594c02a6923311f44d033bcece2683b
Successfully built numpy
jupyter 1.0.0 requires qtconsole, which is not installed.
distributed 1.21.8 requires msgpack, which is not installed.
gevent 1.3.0 has requirement greenlet>=0.4.13, but you'll have greenlet 0.4.12 which is incompatible.
Installing collected packages: numpy
  Found existing installation: numpy 1.13.3
    Uninstalling numpy-1.13.3:
      Successfully uninstalled numpy-1.13.3
Successfully installed numpy-1.16.1
You are using pip version 10.0.1, however version 19.0.2 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.


문제는 tensorflow입니다.  Tensorflow는 불행히도 아직 1.12 버전이 ppc64le 아키텍처 상에서는 PYPI로부터는 pip로 설치가 안 됩니다.  하지만 이것도 큰 문제는 아닙니다.  Tensorflow는 open source니까, 그냥 github에서 source code를 받아서 직접 build하시면 됩니다.

원래 IBM은 작년 11월에 나온 PowerAI toolkit v1.5.4에서 tensorflow 1.12를 지원합니다.  그러나 이 PowerAI v1.5.4는 CUDA 10.0을 필요로 합니다.  따라서 이 PowerAI v1.5.4에 포함된 tensorflow를 쓰시려면 기존의 CUDA 9.2 환경을 뒤집어 엎고 CUDA 10.0으로 upgrade를 하셔야 합니다.  이건 기존에 쓰시던 다른 python package들과도 연관되는 일이니 그렇게 간단히 진행하실 일은 아니지요.

그래서 제가 tensorflow v1.12를 Redhat 7.4 ppc64le 플랫폼에서 python 3.6.8 + CUDA 9.2 환경용으로 build했고, 그 wheel file을 아래 google drive에 올려놓았습니다.  제가 가난하여 GPU 서버가 없는지라 test된 것은 아니라는 점은 양해 부탁드립니다. 

tensorflow v1.12 wheel file  --> https://drive.google.com/open?id=1plqSuw9WnWuOPJCPEiVYSp3uK3IilQMy

위의 wheel file을 download 받아서 아래 명령으로 설치하시면 됩니다.

[u0017649@sys-97058 files]$ pip install /tmp/tensorflow-1.12.0-cp36-cp36m-linux_ppc64le.whl

단 위의 tensorflow-*.whl 파일을 설치하실 때 pip가 termcolor, astor, grpcio 등의 필요 python package들을 추가로 internet에서 download하여 설치하므로, 만약 internet이 없는 환경이라면 intranet에 있는 PYPI repository에서 그런 package들을 download 할 수 있도록 설정이 필요하다는 점 유의하십시요.

설치가 끝난 뒤 확인하는 방법은 다음과 같습니다.

[bsyu@redhat74 tensorflow]$ pip list | grep tensor
tensorboard                        1.12.2
tensorflow                         1.12.0

[bsyu@redhat74 files]$ python
Python 3.6.8 |Anaconda, Inc.| (default, Dec 30 2018, 01:34:02)
[GCC 7.3.0] on linux

>>> import tensorflow as tf
/home/bsyu/anaconda3/lib/python3.6/site-packages/h5py/__init__.py:36: 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

>>> sess=tf.Session()
2019-02-22 22:14:15.250972: E tensorflow/stream_executor/cuda/cuda_driver.cc:300] failed call to cuInit: CUDA_ERROR_UNKNOWN: unknown error
2019-02-22 22:14:15.251021: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:150] kernel driver does not appear to be running on this host (redhat74): /proc/driver/nvidia/version does not exist

제가 GPU가 없는 서버에서 이걸 수행했기 때문에 위에서는 error가 났습니다만, GPU가 장착된 서버에서는 error가 없어야 하고 nvidia-smi로 보았을 때 python이 GPU를 점거하는 것으로 보일 것입니다.


PS1.  혹시 위의 wheel file 설치가 무슨 이유로든 잘 안 될 경우에 대비하여, 최후의 수단으로 tensorflow 및 위에 언급된 버전의 전체 python package들을 포함한 anaconda3 directory 전체를 tar로 말아서 아래의 google drive에 올려두겠습니다.

anaconda3 directory 전체의 tarball : https://drive.google.com/open?id=1vnmi8t2L_XKgRqfhQbBQbJgjVU7vNGav

위의 anaconda3_tf1.12.tgz를 다음과 같이 기존 anaconda3 directory 위치 또는 $HOME 밑에서 풀어놓으면 됩니다.  기존의 anaconda3 directory는 mv 명령으로 잠시 다른 이름으로 바꿔 놓으셨다가, 혹시 이 새로운 anaconda3가 정상 작동하지 않을 경우 다시 원복시키시기를 권고드립니다.

[root@sys-97264 opt]# ls
anaconda3   at11.0  ibm

[root@sys-97264 opt]# tar -zcpsf opt_anaconda3_tf1.12.tgz ./anaconda3


이 opt_anaconda3_tf1.12.tgz를 다른 서버에 올려놓은 뒤에 풀어놓아 보았습니다.  먼저 기존 anaconda3를 다른 이름으로 바꿔놓습니다.

[root@sys-97269 ~]# cd /opt

[root@sys-97269 ~]# mv anaconda3 anaconda3_org

[root@sys-97269 opt]# tar -zxvpsf /tmp/opt_anaconda3_tf1.12.tgz

[root@sys-97269 opt]# which python
/opt/anaconda3/bin/python

아래와 같이 잘 작동하는 것을 보실 수 있습니다.

[root@sys-97269 opt]# pip list | egrep 'pandas|Keras|numpy|scikit-learn|scipy|tensorflow'
Keras                              2.2.4
Keras-Applications                 1.0.7
Keras-Preprocessing                1.0.9
numpy                              1.16.1
numpydoc                           0.8.0
pandas                             0.24.0
scikit-learn                       0.20.2
scipy                              1.2.0
tensorflow                         1.12.0

[root@sys-97269 opt]# cd
[root@sys-97269 ~]# which python
/opt/anaconda3/bin/python

[root@sys-97269 ~]# python
Python 3.6.5 |Anaconda, Inc.| (default, Apr 29 2018, 16:38:54)
[GCC 7.2.0] on linux

>>> import keras
/opt/anaconda3/lib/python3.6/site-packages/h5py/__init__.py:36: 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.
>>> import numpy
>>> import pandas
>>> import tensorflow
>>>


PS2.  혹시 위의 anaconda3 directory를 통째로 풀어놓는 것이 무슨 이유에서든 잘 안될 경우에 대비해서, 아래 site에 해당 tensorflow 등의 pacakge들을 모두 갖춘 CUDA 9.2를 설치한 Redhat 7.5 ppc64le 기반의 docker image를 올려놓았습니다.

https://hub.docker.com/r/bsyu/rhel75_ppc64le_cuda92_tf1.12_py3

다음과 같이 받아서 사용하시면 됩니다.

[u0017649@sys-97269 ~]$ sudo docker pull bsyu/rhel75_ppc64le_cuda92_tf1.12_py3:v0.2


댓글 없음:

댓글 쓰기