2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

GCP Compute engine でGPUを使ってPythonの実行環境を構築する

Last updated at Posted at 2020-04-01

####経緯とやりたいこと
卒業研究で、グラフデータを取り扱った手法を行っていたのですが、
このグラフデータがかなりのメモリを消費する(主にテンソルの計算)ので
VMで環境構築をしました。

環境設定

今回は、以下の設定で環境を構築していきます。

  • Ubuntu 16.04 LTS
  • GCE
  • CUDA 9.0
  • cuNN 7.4
  • TensolFlowGPU 1.12.0

TensolFlowはバージョンによって、CUDAとバージョンを合わせたりする必要があるみたいです。
このバージョンがずれていたりするとうまくGCPが認識できなかったりするみたいなので、
以下から確認することをお勧めします。

TensolFlowGPU ビルド設定

環境構築の手順

0. GCPへの登録

  • CCPへアカウント登録
  • VMインススタンスの課金の有効化
  • VMインスタンスの作成
    • vCPU x 24
    • メモリ 90 GB
    • GPU : NVIDIA Tesla T4
    • Boot disk : Ubuntu 16.04 LTS (Size 250GB)
    • ZONE : us-west1-b
    • HTTPトラフィックを許可

参考サイト: タダでGCPのGPU(NVIDIA Tesla K80)を使ってディープラーニング(NVIDIA DIGITS)する方法

1. CUDAとNVIDIAドライバのインストール

VMインスタンスで以下のcommandを実行し,CUDAとドライバをインストールします。

$ curl -O http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_9.0.176-1_amd64.deb
$ sudo dpkg -i cuda-repo-ubuntu1604_9.0.176-1_amd64.deb
$ sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub
$ sudo apt-get update
$ sudo apt-get install cuda-9-0

さらに、GPUのパフォーマンスを最適化するために、以下のcommandを実行します。

$ sudo nvidia-smi -pm 1

2. cuDNN7.0のインストール

ここからdeveloperアカウントを作成し、cuDNNの以下の3つのファイルをダウンロードします。

  • version : ubuntu 16.04 cuda-9.0 version
  • libcudnn7_7.6.4.38-1+cuda9.0_amd64.deb
  • libcudnn7-dev_7.6.4.38-1+cuda9.0_amd64.deb
  • libcudnn7-doc_7.6.4.38-1+cuda9.0_amd64.deb

ダウンロードが完了したら、3つのファイルをStarageへアップロードします。
ここではバケット名はcuda_9とします(お好みで変更してください!)。

アップロードが完了したら gsutil command でそのままインスタンスへの転送します。
アップロードするディレクトリはお好みでどうぞ。

$ cd {UP_LOAD_PATH}
$ gsutil cp gs://cuda_9/libcudnn7_7.6.4.38-1+cuda9.0_amd64.deb .
$ gsutil cp gs://cuda_9/libcudnn7-dev_7.6.4.38-1+cuda9.0_amd64.deb .
$ gsutil cp gs://cuda_9/libcudnn7-doc_7.6.4.38-1+cuda9.0_amd64.deb .

転送が完了したらファイルを展開してインストールしていきます。

$ sudo dpkg -i *.deb

3. swap file の設定

swap file がない場合、プログラム実行時にメモリリークする可能性があります。
GCEでLinux仮想マシンを作成するとmUbuntuだろうがCentOSだろうが swap file がない状態で仮想マシンが作成される...らしい...です。(私は、ここで詰みました)

ということで、まずはfree commandでswapの有無を確認。

$ free -m

以下のようになっていたらSwap:がゼロになっているので、swapファイルを作成する必要があります。

               total        used        free      shared  buff/cache   available
Mem:            581         148          90           0         342         336
Swap:             0           0           0

swap file の作成。swap file の容量はお好みで(今回は10G)

$ sudo fallocate -l 10G /swapfile
$ sudo chmod 600 /swapfile
$ sudo mkswap /swapfile
$ sudo swapon /swapfile

swap file の確認

$ free -m
               total        used        free      shared  buff/cache   available
Mem:            581         148          88           0         344         336
Swap:          1023           0        10023

Tips : 再起動時にスワップファイルを自動マウントするには,/etc/fstabに以下を追加したらいいみたいです。

/swapfile none swap sw 0 0

4. GPU認識確認とCUDAの設定

CUDAの設定を行っていきます。

$ echo "export PATH=/usr/local/cuda-9.0/bin\${PATH:+:\${PATH}}" >> ~/.bashrc
$ source ~/.bashrc
$ sudo /usr/bin/nvidia-persistenced

その後、GPUが認識されているかを確認します。

$ nvidia-smi

以下のようなresponseがあれば、GPUの設定は完了です!

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 410.72       Driver Version: 410.72       CUDA Version: 10.0     |
|-------------------------------+----------------------+----------------------+
| 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 K80           Off  | 00000000:00:04.0 Off |                    0 |
| N/A   42C    P0    65W / 149W |      0MiB / 11441MiB |    100%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

5. Python環境の構築

最後に、Python環境をAnadondaで構築していきます。
(普段からAnacondaを使っているのと、他の方法だとなぜがプログラムが動かなかったので今回はAnacondaにしました)

wgetでAnaconda をダウンロードします。

$ wget https://repo.anaconda.com/archive/Anaconda3-5.3.1-Linux-x86_64.sh
$ sh ./Anaconda3-5.3.1-Linux-x86_64.sh
$ echo ". /home/{USER_NAME}/anaconda3/etc/profile.d/conda.sh" >> ~/.bashrc
$ source ~/.bashrc

次に、Anaondaの仮装環境を構築します。PythonのversionとENV_NAMEはお好みで。
(今回はtensorflow==1.12.0を使いたいので、Python3.6.5

$ conda create -n {ENV_NAME} python=3.6.5
$ conda activate {ENV_NAME}

6. tensorflow-gpuのインストール

condaからinstallします。(ここまでくると安心感がすごい)

$ conda install tensorflow-gpu==1.12.0

以下のプログラムを実行して、GPUと出てきたらtensorflow-gpuがGPUを認識してくれています。

test.py
from tensorflow.python.client import device_lib
device_lib.list_local_devices()
  • OUT
[name: "/device:CPU:0"
device_type: "CPU"
memory_limit: 268435456
locality {
}
incarnation: 2319180638018740093
, name: "/device:GPU:0"
device_type: "GPU"
memory_limit: 11324325888
locality {
  bus_id: 1
}
incarnation: 13854674477442207273
physical_device_desc: "device: 0, name: Tesla K80, pci bus id: 0000:00:04.0, compute capability: 3.7"
]

その他、必要なライブラリがあればcondaからinstallしてください。

$ conda install numpy==1.15.4
$ conda install scipy==1.1.0 
$ conda install scikit-learn==0.20.0

これで、GCPのVMを使ってPythonのプログラムを実行できるはずです!

※ 間違いなどがあればコメントをいただけますと幸いです。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?