LoginSignup
0
4

More than 5 years have passed since last update.

AI開発におけるGPU利用に関する備忘録

Posted at

背景

AI開発において、特にネットワークモデルが複雑な、画像系AI開発においては、その処理時間の短さを主な理由に、GPUを利用する事が推奨されています。

ただ、私が会社で利用しているAI開発環境は、GPUを2枚搭載しているサーバーであり、複数人がこの環境を共有し、GPUを使える事は非常にありがたいのですが、TensorFlowを使って、AIの勉強やPoCの学習をする際には、標準でTensorFlowを動かしてしまうと、GPUメモリーの90%を確保する為、同時に複数人でプログラムを動かしてしまうと、メモリー不足になり作業する事が出来なくなります。

このような状況を回避する為、自分で利用するGPUを制限する事が必要になりました。

1.Pythonプログラムで、TensorFlow実行時に、使用するGPUを指定する方法

GPU版のtensorFlow環境が前提:

実行前のGPUの状況:2枚のGPUを実装している例

$ nvidia-smi
Tue Aug 28 13:02:51 2018
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 390.30                 Driver Version: 390.30                    |
|-------------------------------+----------------------+----------------------+
| 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-PCIE...  Off  | 00000000:08:00.0 Off |                    0 |
| N/A   28C    P0    33W / 250W |     18MiB / 16280MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   1  Tesla P100-PCIE...  Off  | 00000000:84:00.0 Off |                    0 |
| N/A   28C    P0    25W / 250W |     18MiB / 16280MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

TensorFlowで使用するGPUを指定するプログラム例:

from __future__ import print_function

import tensorflow as tf

# Select GPU
config = tf.ConfigProto(
    gpu_options=tf.GPUOptions(
        visible_device_list="1", # specify GPU number
        allow_growth=True
    )
)

with tf.Session(config=config):
    input1 = tf.constant([1.0, 1.0, 1.0, 1.0])
    input2 = tf.constant([2.0, 2.0, 2.0, 2.0])
    output = tf.add(input1, input2)
    result = output.eval()
    print("result: ", result)

実行後の状況例

$ nvidia-smi

Tue Aug 28 13:26:57 2018
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 390.30                 Driver Version: 390.30                    |
|-------------------------------+----------------------+----------------------+
| 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-PCIE...  Off  | 00000000:08:00.0 Off |                    0 |
| N/A   28C    P0    33W / 250W |     18MiB / 16280MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   1  Tesla P100-PCIE...  Off  | 00000000:84:00.0 Off |                    0 |
| N/A   30C    P0    31W / 250W |  15518MiB / 16280MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

2.NVIDIA Docker 2.0 で、コンテナ実行時に、使用するGPUを制限する場合

指定されたコンテナ上では、指定されたGPUしか認識できないし、IDもずれる。

NVIDIA Docker 2.0でのGPUを制限したコンテナの起動方法:

$ docker run --runtime=nvidia -e NVIDIA_VISIBLE_DEVICES=1 -it -p 8888:8888 tensorflow/tensorflow:latest-gpu

確認する為のテスト的なコンテナの起動時のGPU使用状況:GPU #1を指定しているが、状況ではGPU #0 として表示される事に注意

$ docker run --runtime=nvidia -e NVIDIA_VISIBLE_DEVICES=1 -it --rm nvidia/cuda:8.0-cudnn7-devel-ubuntu16.04 nvidia-smi

Tue Aug 28 07:15:38 2018
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 390.30                 Driver Version: 390.30                    |
|-------------------------------+----------------------+----------------------+
| 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-PCIE...  Off  | 00000000:84:00.0 Off |                    0 |
| N/A   28C    P0    25W / 250W |     18MiB / 16280MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+
z2010035@gpu1:~$
0
4
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
0
4