質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
CUDA

CUDAは並列計算プラットフォームであり、Nvidia GPU(Graphics Processing Units)向けのプログラミングモデルです。CUDAは様々なプログラミング言語、ライブラリ、APIを通してNvidiaにインターフェイスを提供します。

強化学習

強化学習とは、ある環境下のエージェントが現状を推測し行動を決定することで報酬を獲得するという見解から、その報酬を最大限に得る方策を学ぶ機械学習のことを指します。問題解決時に得る報酬が選択結果によって変化することで、より良い行動を選択しようと学習する点が特徴です。

PyTorch

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

23953閲覧

強化学習でRuntimeError: CUDA error: out of memoryが出る

onosan

総合スコア59

CUDA

CUDAは並列計算プラットフォームであり、Nvidia GPU(Graphics Processing Units)向けのプログラミングモデルです。CUDAは様々なプログラミング言語、ライブラリ、APIを通してNvidiaにインターフェイスを提供します。

強化学習

強化学習とは、ある環境下のエージェントが現状を推測し行動を決定することで報酬を獲得するという見解から、その報酬を最大限に得る方策を学ぶ機械学習のことを指します。問題解決時に得る報酬が選択結果によって変化することで、より良い行動を選択しようと学習する点が特徴です。

PyTorch

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2021/12/10 02:40

以下のプログラムは途中までのものですが、google colabだと動いたのですが、会社のGPUを積んだマシンだとエラーがでました。エラーが出た原因が知りたいです。
動かしたプログラム

import gym from creversi.gym_reversi.envs import ReversiVecEnv from creversi import * import os import datetime import math import random import numpy as np from collections import namedtuple from itertools import count from tqdm import tqdm_notebook as tqdm import matplotlib.pyplot as plt import torch import torch.nn as nn import torch.optim as optim import torch.nn.functional as F BATCH_SIZE = 256 vecenv = ReversiVecEnv(BATCH_SIZE) # if gpu is to be used device = torch.device("cuda" if torch.cuda.is_available() else "cpu") ###################################################################### # Replay Memory Transition = namedtuple('Transition', ('state', 'action', 'next_state', 'next_actions', 'reward')) class ReplayMemory(object): def __init__(self, capacity): self.capacity = capacity self.memory = [] self.position = 0 def push(self, *args): """Saves a transition.""" if len(self.memory) < self.capacity: self.memory.append(None) self.memory[self.position] = Transition(*args) self.position = (self.position + 1) % self.capacity def sample(self, batch_size): return random.sample(self.memory, batch_size) def __len__(self): return len(self.memory) ###################################################################### # DQN k = 192 fcl_units = 256 class DQN(nn.Module): def __init__(self): super(DQN, self).__init__() self.conv1 = nn.Conv2d(2, k, kernel_size=3, padding=1) self.bn1 = nn.BatchNorm2d(k) self.conv2 = nn.Conv2d(k, k, kernel_size=3, padding=1) self.bn2 = nn.BatchNorm2d(k) self.conv3 = nn.Conv2d(k, k, kernel_size=3, padding=1) self.bn3 = nn.BatchNorm2d(k) self.conv4 = nn.Conv2d(k, k, kernel_size=3, padding=1) self.bn4 = nn.BatchNorm2d(k) self.conv5 = nn.Conv2d(k, k, kernel_size=3, padding=1) self.bn5 = nn.BatchNorm2d(k) self.conv6 = nn.Conv2d(k, k, kernel_size=3, padding=1) self.bn6 = nn.BatchNorm2d(k) self.conv7 = nn.Conv2d(k, k, kernel_size=3, padding=1) self.bn7 = nn.BatchNorm2d(k) self.conv8 = nn.Conv2d(k, k, kernel_size=3, padding=1) self.bn8 = nn.BatchNorm2d(k) self.conv9 = nn.Conv2d(k, k, kernel_size=3, padding=1) self.bn9 = nn.BatchNorm2d(k) self.conv10 = nn.Conv2d(k, k, kernel_size=3, padding=1) self.bn10 = nn.BatchNorm2d(k) self.fcl1 = nn.Linear(k * 64, fcl_units) self.fcl2 = nn.Linear(fcl_units, 65) def forward(self, x): x = F.relu(self.bn1(self.conv1(x))) x = F.relu(self.bn2(self.conv2(x))) x = F.relu(self.bn3(self.conv3(x))) x = F.relu(self.bn4(self.conv4(x))) x = F.relu(self.bn5(self.conv5(x))) x = F.relu(self.bn6(self.conv6(x))) x = F.relu(self.bn7(self.conv7(x))) x = F.relu(self.bn8(self.conv8(x))) x = F.relu(self.bn9(self.conv9(x))) x = F.relu(self.bn10(self.conv10(x))) x = F.relu(self.fcl1(x.view(-1, k * 64))) x = self.fcl2(x) return x.tanh() def get_states(envs): features_vec = np.zeros((BATCH_SIZE, 2, 8, 8), dtype=np.float32) for i, env in enumerate(envs): env.board.piece_planes(features_vec[i]) return torch.from_numpy(features_vec).to(device)

この最後のreturn torch.from_numpy(features_vec).to(device)のところで、、google colabでは
エラーが出ないのですが、会社のGPUを積んだLinuxだと
RuntimeError: CUDA error: out of memory
CUDA kernel errors might be asynchronously reported at some other API call,so the stacktrace below might be incorrect.
For debugging consider passing CUDA_LAUNCH_BLOCKING=1.
というエラーがでます。ググったりして調べたのですが、原因が分かりませんでした。
会社のGPUの環境は、下記の通りです。
-bash-4.2$ lspci | grep -i nvidia
3b:00.0 VGA compatible controller: NVIDIA Corporation TU102 [GeForce RTX 2080 Ti] (rev a1)
3b:00.1 Audio device: NVIDIA Corporation TU102 High Definition Audio Controller (rev a1)
3b:00.2 USB controller: NVIDIA Corporation TU102 USB 3.1 Host Controller (rev a1)
3b:00.3 Serial bus controller [0c80]: NVIDIA Corporation TU102 USB Type-C UCSI Controller (rev a1)
af:00.0 VGA compatible controller: NVIDIA Corporation GP102 [GeForce GTX 1080 Ti] (rev a1)
af:00.1 Audio device: NVIDIA Corporation GP102 HDMI Audio Controller (rev a1)

ご教示いただけますと幸いです。
何卒、よろしくお願い申し上げます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

episteme

2021/12/10 02:46

単にデバイス(グラボ)上のメモリーが足りんのじゃないですか?
onosan

2021/12/10 02:56

ありがとうございます。 nvidia-smiをためすと以下のようになりますが、足りていないでしょうか。 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 440.82 Driver Version: 440.82 CUDA Version: 10.2 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | |===============================+======================+======================| | 0 GeForce RTX 208... Off | 00000000:3B:00.0 Off | N/A | | 28% 36C P2 61W / 250W | 11013MiB / 11019MiB | 0% Default | +-------------------------------+----------------------+----------------------+ | 1 GeForce GTX 108... Off | 00000000:AF:00.0 Off | N/A | | 20% 24C P8 8W / 250W | 10MiB / 11178MiB | 0% Default | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: GPU Memory | | GPU PID Type Process name Usage | |=============================================================================| | 0 101628 C .../local/anaconda3/envs/37prod/bin/python 6897MiB | | 0 169129 C .../local/anaconda3/envs/37prod/bin/python 833MiB | | 0 181127 C /home/s80141/.conda/envs/s80141/bin/python 959MiB | | 0 188149 C .../local/anaconda3/envs/37prod/bin/python 2313MiB | +-----------------------------------------------------------------------------+
episteme

2021/12/10 02:58

いやそんなの知らんよgoogle colabでどんだけメモリ使ったんかわからんのだから。
guest

回答1

0

ベストアンサー

CUDA error: out of memory なので、単純に GPU のメモリが足りない
無料の Goolge Colab で割り当てられる Tesla K80 とかでも 24GB のメモリがあったと思いますが、市販のゲーミング用の GPU だと多くてもメモリ量が 12GB とかなので、業務用の GPU に比べるとメモリ量が少ない

以下のバッチサイズをエラーがでなくなるまで小さい値にしてください

BATCH_SIZE = 256

追記

GPU_ID=1 の GPU を使う方法 device = torch.device("cuda", index=1)

Pytorch - 計算を行うデバイスを指定する方法について

投稿2021/12/10 02:45

編集2021/12/10 03:02
tiitoi

総合スコア21956

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

onosan

2021/12/10 02:49

ご回答ありがとうございます。実は書き忘れていたのですが BATCH_SIZE = 8 まで落としても、エラーは変わりませんでした。 ここが原因ではないかと考えております。
tiitoi

2021/12/10 02:52

その GPU で既に他のプロセスで GPU メモリを使用したりしていますか? nvidia-smi コマンドで実行前に GPU メモリが使われていないことを確認してみてください
onosan

2021/12/10 02:58

ありがとうございます。 nvidia-smiをためすと以下のようになりますが、足りていないでしょうか。 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 440.82 Driver Version: 440.82 CUDA Version: 10.2 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | |===============================+======================+======================| | 0 GeForce RTX 208... Off | 00000000:3B:00.0 Off | N/A | | 28% 36C P2 61W / 250W | 11013MiB / 11019MiB | 0% Default | +-------------------------------+----------------------+----------------------+ | 1 GeForce GTX 108... Off | 00000000:AF:00.0 Off | N/A | | 20% 24C P8 8W / 250W | 10MiB / 11178MiB | 0% Default | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: GPU Memory | | GPU PID Type Process name Usage | |=============================================================================| | 0 101628 C .../local/anaconda3/envs/37prod/bin/python 6897MiB | | 0 169129 C .../local/anaconda3/envs/37prod/bin/python 833MiB | | 0 181127 C /home/s80141/.conda/envs/s80141/bin/python 959MiB | | 0 188149 C .../local/anaconda3/envs/37prod/bin/python 2313MiB | +-----------------------------------------------------------------------------+
tiitoi

2021/12/10 03:01

| 0 GeForce RTX 208... Off | 00000000:3B:00.0 Off | N/A | | 28% 36C P2 61W / 250W | 11013MiB / 11019MiB | 0% Default | すでに他のプロセスで GPU が使われていないですか? 共有のサーバーであるならば他の方が使っているとか GPU ID=1は空いているようなので、回答に追記したやり方で GPU_ID=1の Device オブジェクトを作成してください
onosan

2021/12/10 03:21

ありがとうございます。動きました。ベストアンサーにさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問