Google Colaboratory:GPUに関する誤解を招く情報(一部のユーザーは5%のRAMしか利用できません)


110

更新:この質問は、Google Colabの「ノートブック設定:ハードウェアアクセラレータ:GPU」に関連しています。この質問は、「TPU」オプションが追加される前に書かれました。

Google Colaboratoryが無料のTesla K80 GPUを提供していることについての興奮する発表を何度も読んで、私はそれについてfast.aiのレッスンを実行しようとしました。その理由を調べ始めました。

結論としては、「無料のTesla K80」は「無料」ではないということです。一部の場合、「無料」である場合もあります。

カナダ西海岸のGoogle Colabに接続しましたが、24GB GPU RAMであるはずの0.5GBしか取得できません。他のユーザーは11GBのGPU RAMにアクセスできます。

明らかに0.5GB GPU RAMはほとんどのML / DL作業には不十分です。

何が得られるかわからない場合は、ここで一緒に削った小さなデバッグ関数を示します(ノートブックのGPU設定でのみ機能します)。

# memory footprint support libraries/code
!ln -sf /opt/bin/nvidia-smi /usr/bin/nvidia-smi
!pip install gputil
!pip install psutil
!pip install humanize
import psutil
import humanize
import os
import GPUtil as GPU
GPUs = GPU.getGPUs()
# XXX: only one GPU on Colab and isn’t guaranteed
gpu = GPUs[0]
def printm():
 process = psutil.Process(os.getpid())
 print("Gen RAM Free: " + humanize.naturalsize( psutil.virtual_memory().available ), " | Proc size: " + humanize.naturalsize( process.memory_info().rss))
 print("GPU RAM Free: {0:.0f}MB | Used: {1:.0f}MB | Util {2:3.0f}% | Total {3:.0f}MB".format(gpu.memoryFree, gpu.memoryUsed, gpu.memoryUtil*100, gpu.memoryTotal))
printm()

他のコードを実行する前に、jupyterノートブックでそれを実行すると、次のようになります。

Gen RAM Free: 11.6 GB  | Proc size: 666.0 MB
GPU RAM Free: 566MB | Used: 10873MB | Util  95% | Total 11439MB

カード全体にアクセスできる幸運なユーザーには、次のものが表示されます。

Gen RAM Free: 11.6 GB  | Proc size: 666.0 MB
GPU RAM Free: 11439MB | Used: 0MB | Util  0% | Total 11439MB

GPUtilから借用した、GPU RAMの可用性の計算に問題はありますか?

このコードをGoogle Colabノートブックで実行すると、同様の結果が得られることを確認できますか?

私の計算が正しい場合、無料のボックスでGPU RAMを増やす方法はありますか?

更新:一部のユーザーが他のユーザーの20分の1を獲得する理由がわかりません。たとえば、これをデバッグするのを手伝ってくれた人はインド出身で、彼はすべてを手に入れました!

:GPUの一部を消費している可能性があるスタック/ランアウェイ/パラレルノートブックを強制終了する方法については、これ以上の提案を送信しないでください。どのようにスライスしても、私と同じボートにいてデバッグコードを実行すると、合計5%のGPU RAMがまだ得られることがわかります(この更新の時点では)。


これに対する解決策はありますか?!cat / proc / meminfoを実行すると異なる結果が得られる理由
MiloMinderbinder 2018

うん、同じ問題、約500 mbのGPU RAM ...誤解を招く説明:(
Naveen

2
IBMオープンソースデータサイエンスツール(cognitiveclass.ai)をお試しください。jupyterノートブックを備えた無料のGPUもあります。
2018年

この質問を、実際に質問がある状態にロールバックしました。より多くの調査を行って回答を見つけた場合、その適切な場所は回答ボックスにあります。ソリューションで質問を更新することは正しくありません。
クリスヘイズ

@ChrisHayes、私はあなたの意図を理解していますが、あなたのロールバックが現在なくなっている関連する詳細の束を削除したので、これは正しくありません。このコミュニティのルールにより適したより適切な表現を提案したい場合は、そうしてください。そうでない場合は、ロールバックを元に戻してください。ありがとうございました。PS私はすでに答えを投稿しました。
スターソン、

回答:


41

したがって、このスレッドの提案のコンテキストで無効を示唆する別のダースの回答を防ぐために、!kill -9 -1の提案では、このスレッドを閉じましょう。

答えは簡単です:

これを書いている時点では、GoogleはGPUの5%しか私たちに与えていないのに対し、他の人には100%を与えています。限目。

2019年12月の更新:問題はまだ存在しています-この質問の賛成票はまだ続きます。

2019年3月の更新:1年後、Googleの従業員@AmiFが問題は存在しないと述べ、この問題が発生していると思われるユーザーは、ランタイムをリセットしてメモリを回復する必要があると述べています。それでも、賛成票は続きます。これは、@ AmiFの反対の提案にもかかわらず、問題がまだ存在していることを私に伝えています。

2018年12月の更新:ロボットが非標準の動作を検出したときに、Googleが特定のアカウントのブラックリスト、またはブラウザーの指紋を持っている可能性があるという理論があります。まったくの偶然かもしれませんが、かなり長い間、偶然それを必要とするWebサイトでGoogle Re-captchaに問題がありました。完了するまでに10分以上かかります。これは何ヶ月も続いた。今月は突然、まったくパズルがなくなり、ほぼ1年前のように、マウスを1回クリックするだけでgoogleのキャプチャが解決されます。

そして、なぜ私はこの話をしているのですか?まあ、それと同時にColabでGPU RAMの100%が与えられたからです。だから、私の疑いは、理論上のGoogleブラックリストに載っているなら、無料で多くのリソースを与えられるとは信じられないということです。制限されたGPUアクセスと再キャプチャの悪夢の間で同じ相関関係を見つけた方はいるのでしょうか。私が言ったように、それは完全に偶然かもしれません。


4
「これを書いている時点で、GoogleはGPUの5%だけを一部の人に提供しているが、他の人には100%しか提供していない。期間」は正しくありません-Colabはこの方法で動作したことはありません。診断されたすべてのユーザーが利用可能なGPU RAMの完全な補数より少ないことを確認した場合、GPUの残りのRAMを使用する別のプロセス(同じユーザーによって開始され、場合によっては別のノートブックで)に要約されています。
アミF

11
今後の読者:GPU RAMが使用できないというこの症状または同様の症状が発生していると思われる場合は、[ランタイム]メニューの[すべてのランタイムをリセット]を使用すると、GPU RAMを保持している古いプロセスがないことを保証する新しいVMを取得できます。そのメニューオプションを使用した直後にこの症状が引き続き表示される場合は、github.com / googlecolab / colabtools / issuesで
Ami F

あなたの現実は、この投稿が作成されてから1年後にこの投稿に投票し続ける他の多くの現実とは明らかに異なります。一部のユーザーが実際にあなたが説明したことに遭遇する可能性は非常に高いですが、これはすべての場合に当てはまるわけではありません。ですから、あなたの発言がここでどのように役立つかわかりません。誰かがあなたの推奨するレポでこの正確な質問をすると、彼はBSの回答を得て、彼のチケットは閉じられました:github.com/googlecolab/colabtools/issues/52
stason

2
不明確な場合は、ユーザーとしてのシステムの動作の観察に基づいて実装が行われていると私が信じていることについては説明していません。実装について直接知っていることを説明しています。完全な可用性を下回るユーザーが、上記の誤ったステートメントを読んで問題なく動作していると想定するのではなく、問題(ユーザーエラーまたはシステムバグ)として報告することを期待して投稿しました。
アミF

1
いいえ、GPUは共有されたことはなく、リンクした例には嘘はありません(報告された症状の最も一般的な理由の推測と説明)。
アミF

22

昨夜私はあなたのスニペットを実行し、あなたが得たものを正確に取得しました:

Gen RAM Free: 11.6 GB  | Proc size: 666.0 MB
GPU RAM Free: 566MB | Used: 10873MB | Util  95% | Total 11439MB

しかし今日は:

Gen RAM Free: 12.2 GB  I Proc size: 131.5 MB
GPU RAM Free: 11439MB | Used: 0MB | Util   0% | Total 11439MB

最も可能性の高い理由は、GPUがVM間で共有されているためです。そのため、ランタイムを再起動するたびにGPUを切り替える機会があり、他のユーザーが使用しているGPUに切り替える可能性もあります。

更新:GPU RAMの空き容量が504 MBであっても、GPUを正常に使用できることがわかりました。これは、昨夜のResourceExhaustedErrorの原因であると考えました。


1
数日間でおそらく50回再接続したと思いますが、最初は常に同じ95%の使用率でした。一度だけ0%を見ました。これらすべての試みで、100%に近づくと、cuda out of memoryエラーが発生しました。
stason 2018

アップデートとはどういう意味ですか?500Mbで引き続き実行できますか?私は同じ問題を抱えています、私は得ていますRuntimeError: cuda runtime error (2) : out of memory at /pytorch/torch/lib/THC/generated/../THCTensorMathCompare.cuh:84
ivan_bilan

6


!kill -9 -1が含ま
れているセルを実行すると、ランタイムのすべての状態(メモリ、ファイルシステム、GPUを含む)が完全に消去され、再起動されます。30〜60秒待ってから、右上の[接続]ボタンを押して再接続します。


2
ありがとう、しかしあなたの提案は何も変えません。まだGPU RAMの5%を取得しています。
stason 2018年

これは役に立ちません。強制終了して再接続した後も、GPUメモリは12GBのうち500Mbのままです。
ivan_bilan 2018年

4

Googleの誤解を招く説明。あまりにも興奮しすぎたと思います。すべてをセットアップし、データをロードすると、ノートブックに割り当てられているメモリが500Mbしかないため、データを使用して何もできなくなります。


3

google colabに重いタスクを与えるだけで、25 GBのRAMに変更するよう求められます。

ここに画像の説明を入力してください

このコードを2回実行する例:

import numpy as np
from keras.layers import Conv2D, MaxPooling2D, AveragePooling2D
from keras.layers import Dropout, Flatten, Dense
from keras.models import Sequential
from keras.layers.advanced_activations import LeakyReLU
from keras.datasets import cifar10
(train_features, train_labels), (test_features, test_labels) = cifar10.load_data()
model = Sequential()

model.add(Conv2D(filters=16, kernel_size=(2, 2), padding="same", activation="relu", input_shape=(train_features.shape[1:])))
model.add(MaxPooling2D(pool_size=(2, 2), padding='same'))

model.add(Conv2D(filters=32, kernel_size=(3, 3), padding="same", activation="relu"))
model.add(MaxPooling2D(pool_size=(2, 2), padding='same'))

model.add(Conv2D(filters=64, kernel_size=(4, 4), padding="same", activation="relu"))
model.add(MaxPooling2D(pool_size=(2, 2), padding='same'))

model.add(Flatten())

model.add(Dense(25600, activation="relu"))
model.add(Dense(25600, activation="relu"))
model.add(Dense(25600, activation="relu"))
model.add(Dense(25600, activation="relu"))
model.add(Dense(10, activation="softmax"))

model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])

model.fit(train_features, train_labels, validation_split=0.2, epochs=10, batch_size=128, verbose=1)

次に、より多くのRAMを取得するをクリックします:) ここに画像の説明を入力してください ここに画像の説明を入力してください

ここに画像の説明を入力してください


確認できます。私は主にHD画像の15ギガデータセット(私のドライブは15ギガではなく30ギガ)を持っていて、コードを実行して画像データセットのサイズを224,224,3に変更し、高RAMランタイムに切り替えました。その後、RAM使用量のトレーニングを開始したとき、31.88ギグまで上がりました。
Anshuman Kumar

ただし、そのジョブを終了すると、過去24時間、別のGPU / TPUにアクセスできなくなったことを付け加えておきます。ブラックリストに登録された可能性があります。
Anshuman Kumar

@AnshumanKumar、最初は高負荷をかけ、それ以外の場合は構成を変更したときに、以前にRAMで行った作業を失うことになります。高構成を24時間使用しなかったため、ブラックリストについては知りません。
Jainil Patel

はい、それは私にも起こりました。しかし、仕事は終わりました。
Anshuman Kumar

2

Python3 pidを見つけて、pidをkillします。下の画像をご覧くださいここに画像の説明を入力してください

注:python3(pid = 130)のみを殺して、jupyter python(122)を殺さないでください。


これはメモリの問題に役立ちますか?じゃあ他の人の走りを全部殺してないの?
ivan_bilan

これは役に立たず、同じ問題が発生しました:GPU RAM Free: 564MB
ivan_bilan

2

Jupyter IPythonカーネルを再起動します。

!pkill -9 -f ipykernel_launcher

1
閉じるが、葉巻はない:GPU RAM Free: 564MB
ivan_bilan 2018

カーネルを再起動するより簡単な方法として、「ランタイム」をクリックするだけです。ランタイムを再起動...またはショートカットCMD/CTRL+M
アジャイルBean

2

このブラックリストが真実かどうかはわかりません!コアがユーザー間で共有されることはむしろ可能です。私もテストを実行し、私の結果は次のとおりです。

Gen RAMフリー:12.9 GB | プロセッサーサイズ:142.8 MB GPU RAMフリー:11441MB | 使用済み:0MB | 使用率0%| 合計11441MB

フルコアも取得しているようです。しかし、私はそれを数回実行し、同じ結果を得ました。たぶん、日中にこのチェックを数回繰り返して、変更がないか確認します。


1

複数のノートブックを開いていると思います。それを閉じるだけでは、実際にはプロセスは停止しません。私はそれを止める方法を理解していません。しかし、私はtopを使用して、最も長く実行されており、ほとんどのメモリを使用しているpython3のPIDを見つけ、それを強制終了しました。すべてが正常に戻りました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.