먼저 다음 링크를 참조하여 ppc64le (IBM POWER9) nvidia-docker2 환경에서 Ubuntu 기반의 docker image를 만듭니다.
http://hwengineer.blogspot.com/2019/05/ppc64le-ibm-power9-nvidia-docker2.html
참고로 ppc64le (IBM POWER9)에서의 CUDA 설치는 NVIDIA CUDA download page의 안내와 같이 아래처럼 진행하시면 됩니다.
# wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/ppc64el/cuda-repo-ubuntu1804_10.1.105-1_ppc64el.deb
# dpkg -i cuda-repo-ubuntu1804_10.1.105-1_ppc64el.deb
# apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/ppc64el/7fa2af80.pub
# apt-get update
# apt-get install cuda
또는 이미 만들어둔 docker image를 다음과 같이 pull 해와도 됩니다.
# docker pull bsyu/ubuntu18.04_cuda10-1_ppc64le:v0.1
이렇게 pull 받아온 docker image를 확인합니다.
root@unigpu:/files/docker# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
bsyu/ubuntu18.04_cuda10-1_ppc64le v0.1 ef8dd4d654e7 2 hours ago 6.33GB
ubuntu 18.04 ecc8dc2e4170 4 weeks ago 106MB
이 image를 다음과 같이 구동합니다.
root@unigpu:/files/docker# docker run --runtime=nvidia -ti --rm bsyu/ubuntu18.04_cuda10-1_ppc64lel:v0.1 bash
이제 그 image 속에서 다음과 같이 IBM PowerAI (IBM Watson ML Community Edition)을 설치합니다. 이는 IBM이 마련한 conda channel을 등록하고 거기에서 conda install 명령을 수행하는 방식으로 설치됩니다.
# conda config --prepend channels https://public.dhe.ibm.com/ibmdl/export/pub/software/server/ibm-ai/conda/
# conda create --name wmlce_env python=3.6
# conda activate wmlce_env
# apt-get install openssh-server
# conda install powerai
위와 같이 conda install powerai 명령을 내리면 tensorflow 뿐만 아니라 caffe, pytorch 등이 모두 설치됩니다. 가령 Tensorflow 1.14만 설치하고자 한다면 위 명령 대신 conda install tensorflow=1.14를 수행하시면 됩니다.
powerai 전체 package 설치는 network 사정에 따라 1~2시간이 걸리기도 합니다. 설치가 완료되면 다음과 같이 docker commit하여 docker image를 저장합니다.
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
45fb663f025c bsyu/ubuntu18.04_cuda10-1_ppc64le:v0.1 "bash" 42 seconds ago Up 39 seconds elastic_gates
이어서 v0.2 등의 새로운 tag로 commit 하시면 됩니다.
[root@ac922 docker]# docker commit 45fb663f025c bsyu/ubuntu18.04_cuda10-1_ppc64le:v0.2
아래는 그렇게 만들어진 docker image들의 사용예입니다. 제가 만든 그런 image들은 https://hub.docker.com/u/bsyu 에 올려져 있습니다.
root@unigpu:~# docker run --runtime=nvidia -ti --rm bsyu/ubuntu18.04_cuda10-1_tf1.15_pytorch1.2_ppc64le:latest
(wmlce_env) root@bdbf11e90094:/# python
Python 3.6.10 |Anaconda, Inc.| (default, Mar 26 2020, 00:22:27)
[GCC 7.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> import tensorflow as tf
2020-05-29 04:53:09.637141: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudart.so.10.1
>>> sess=tf.Session()
2020-05-29 04:53:20.795027: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcuda.so.1
2020-05-29 04:53:20.825918: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1639] Found device 0 with properties:
name: Tesla V100-SXM2-16GB major: 7 minor: 0 memoryClockRate(GHz): 1.53
pciBusID: 0004:04:00.0
2020-05-29 04:53:20.827162: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1639] Found device 1 with properties:
name: Tesla V100-SXM2-16GB major: 7 minor: 0 memoryClockRate(GHz): 1.53
pciBusID: 0004:05:00.0
2020-05-29 04:53:20.828421: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1639] Found device 2 with properties:
name: Tesla V100-SXM2-16GB major: 7 minor: 0 memoryClockRate(GHz): 1.53
pciBusID: 0035:03:00.0
2020-05-29 04:53:20.829655: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1639] Found device 3 with properties:
name: Tesla V100-SXM2-16GB major: 7 minor: 0 memoryClockRate(GHz): 1.53
pciBusID: 0035:04:00.0