[解決済み] Google Colaboratory: GPUに関する誤解を招く情報 (一部のユーザーは5%のRAMしか利用できない)
質問
update: この質問は 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 notebookでそれを実行すると、私に与えます。
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 notebookで実行した場合、同様の結果が得られることを確認できますか?
私の計算が正しければ、空き箱のGPU RAMをより多く取得する方法はありますか?
update: なぜ一部のユーザーが他のユーザーの 20 分の 1 を取得するのかわかりません。たとえば、このデバッグを手伝ってくれた人はインド出身ですが、彼は全部を取得しました!
ノート : GPU の一部を消費している可能性のあるスタック/暴走/並列ノートブックを殺す方法についての提案は、これ以上送らないでください。どのように切り取っても、もしあなたが私と同じ状況にあり、デバッグ コードを実行していたなら、まだ合計 5% の GPU RAM があることがわかるでしょう (まだこの更新の時点では)。
どのように解決するのですか?
このスレッドの文脈では無効であることを示唆する回答が何十件も出てくるのを防ぐため、!kill -9 -1 を提案し、このスレッドを閉じましょう。
答えは簡単です。
この記事を書いている時点では、Google は単純に、一部の人には GPU の 5% しか与えず、他の人には 100% を与えています。これは単純なことです。
dec-2019 update: 問題はまだ存在する - この質問のupvotesはまだ続いています。
Mar-2019 update: 1 年後、Google 社員 @AmiF が事態についてコメントし、問題は存在せず、この問題があるように見える人は、メモリを回復するためにランタイムをリセットする必要があると述べています。しかし、アップボートは続いており、私には、@AmiFの提案にもかかわらず、この問題がまだ存在していることを物語っているように思えます。
Dec-2018 update: 私は、Google がロボットが非標準的な動作を検出したときに、特定のアカウントのブラックリスト、またはおそらくブラウザのフィンガープリントを持っているかもしれないという仮説を立てています。まったくの偶然かもしれませんが、かなり長い間、Google Re-captcha を必要とするあらゆる Web サイトで、通過を許可される前に何十ものパズルを通過しなければならず、達成に 10 分以上かかることがよくある、という問題が発生しました。これは何ヶ月も続きました。今月になって突然、パズルがまったくなくなり、1年前と同じように、どんな Google Re-captcha もマウスを1回クリックするだけで解決するようになりました。
なぜこの話をするのか?それは のGPU RAMを100%使わされたからです。 . だから、もしあなたが理論上のGoogleブラックリストに載っているなら、たくさんのリソースを無料で与えられるほど信頼されていないのではないかというのが、私の疑念です。GPUアクセスの制限とRe-captchaの悪夢の間に同じ相関関係を見いだせる人はいるのでしょうか。私が言ったように、それは完全に偶然の一致である可能性もあります。
関連
-
[解決済み] Jupyterノートブックでenv変数を設定する方法
-
[解決済み] Python 3でバイナリデータを標準出力に書き込むには?
-
[解決済み] SQLAlchemy: 日付フィールドをフィルタリングする方法は?
-
[解決済み] 文字列から先頭と末尾のスペースを削除するには?
-
[解決済み] 値で列挙名を取得する [重複]。
-
[解決済み] あるオブジェクトが数であるかどうかを確認する、最もパイソン的な方法は何でしょうか?
-
[解決済み] if 節の終了方法
-
[解決済み] あるメソッドが複数の引数のうち1つの引数で呼び出されたことを保証する
-
[解決済み] djangoのQueryDictをPythonのDictに変更するには?
-
[解決済み] 新しいpip backtrackingの実行時問題の解決
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Pythonでコード行間にかかる時間を測定するには?
-
[解決済み] バブルソートの宿題
-
[解決済み] Python 2.7サポート終了?
-
[解決済み] Django で全てのリクエストヘッダを取得するにはどうすれば良いですか?
-
[解決済み] djangoフレームワークでフォームフィールドから値を取得するには?
-
[解決済み] Celeryタスクのユニットテストはどのように行うのですか?
-
[解決済み] Flaskで非同期タスクを作る
-
[解決済み] 新しいpip backtrackingの実行時問題の解決
-
[解決済み] pipの依存性/必要条件をリストアップする方法はありますか?
-
[解決済み] ファブリックタスクにパラメータを渡す