2019년 5월 8일 수요일

ppc64le Ubuntu 18.04 환경에서 PyTorch 설치하기



여기서는 Ubuntu 18.04 기반에 CUDA 10-0 버전이 설치되어 있는 docker image 속에 PyTorch v1.0.1을 설치하는 과정을 보시겠습니다.

먼저 nvidia-docker2로 CUDA 10-0과 Anaconda3 v4.4이 설치되어 있는 Ubuntu 18.04 기반의 docker image를 run 시킵니다.

[root@ac922 ~]# docker run --runtime=nvidia -ti --rm -v /data/files:/mnt bsyu/ubuntu18.04_cuda10-0_python352_ppc64le:v0.1


Docker container 안에서, 먼저 openblas 등의 필요 SW를 설치합니다.

root@d7a720117c80:/# cd /mnt

root@d7a720117c80:/mnt# apt-get install -y libblas-dev libopenblas-base

root@d7a720117c80:/mnt# conda install numpy pyyaml setuptools cmake cffi openblas


다음과 같이 ONNX를 먼저 설치합니다.

root@d7a720117c80:/mnt# git clone --recursive https://github.com/onnx/onnx.git

root@d7a720117c80:/mnt# pip install -e onnx/


이제 pytorch의 source를 git clone으로 받습니다.

root@d7a720117c80:/mnt# git clone https://github.com/pytorch/pytorch.git

root@d7a720117c80:/mnt# cd pytorch

root@d7a720117c80:/mnt/pytorch# git submodule update --init

root@d7a720117c80:/mnt/pytorch# git checkout tags/v1.0.1

root@d7a720117c80:/mnt/pytorch# export CMAKE_PREFIX_PATH=/opt/anaconda3


여기서 한가지 source file을 수정해야 합니다.   아래와 같이 4줄을 //으로 comment-out하는 것이 수정의 내용입니다.  이렇게 수정하지 않으면 "fatal error: onnx/onnx.pb.h: No such file or directory"라는 error를 만나시게 됩니다.

root@d7a720117c80:/mnt/pytorch# vi third_party/onnx/onnx/onnx_pb.h
...
//#ifdef ONNX_ML
#include "onnx/onnx-ml.pb.h"
//#else
//#include "onnx/onnx.pb.h"
//#endif


이제 아래와 같이 setup.py를 수행하여 install 합니다.

root@d7a720117c80:/mnt/pytorch# python setup.py install


이제 install이 끝났습니다.   아래와 같이 다른 directory로 이동하여 python을 구동한 뒤, import torch를 해보십시요.

root@d7a720117c80:/mnt/pytorch# cd ..
root@d7a720117c80:/mnt# python
Python 3.5.6 |Anaconda custom (64-bit)| (default, Aug 26 2018, 22:03:11)
[GCC 7.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> from __future__ import print_function
>>> x = torch.Tensor(5, 3)
>>> print(x)
tensor([[0.0000e+00, 0.0000e+00, 7.1479e+22],
        [7.3909e+22, 2.5318e-12, 8.1465e-33],
        [1.3563e-19, 1.8888e+31, 4.7414e+16],
        [2.5171e-12, 8.0221e+17, 1.3556e-19],
        [1.3563e-19, 1.3563e-19, 1.8561e-19]])


이때 GPU를 제대로 사용하는지 확인해보시려면 아래와 같이 cuda()를 사용해보십시요.

>>> if torch.cuda.is_available():
...   x = x.cuda()
...   y = y.cuda()
...   x + y
...
tensor([[-1.3789e-07,  4.3664e-41, -1.3789e-07],
        [ 7.3909e+22,  4.8930e-12,  1.1625e+33],
        [ 8.9605e-01,  1.1632e+33,  5.6003e-02],
        [ 7.0374e+22,  1.5301e+10,  1.0795e+30],
        [ 6.1205e+10,  1.8812e+31,  1.3567e-19]], device='cuda:0')



댓글 없음:

댓글 쓰기