テンソルフロー CUDA メモリ不足
今日、サーバーを立ち上げたばかりなのに、プログラムが動かなくて、ビックリしそうになったよ。
エラーの種類 cuda_erroe_out_of_memory
E tensorflow/stream_executor/cuda/cuda_driver.cc:924] failed to alloc 17179869184 bytes on host: CUDA_ERROR_OUT_OF_MEMORY
W . /tensorflow/core/common_runtime/gpu/pool_allocator.h:195] could not allocate pinned host memory of size: 17179869184
Killed
実は結構わかりやすいんですよ。一般的な考え方は、サーバーのGPUサイズがM
tensorflowはN個(N<M)の要求しかできない。
つまり、tensorflowはGPUの全リソースを要求できないことを告げて終了します。
解決方法
コード内のSessionを探す
セッション定義の前に
config = tf.ConfigProto(allow_soft_placement=True)
# 最大70%のgpuリソース
gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.7)
# まずはtensorflowにすべてのGPUリソースを与えず、必要に応じて追加することから始めます。
config.gpu_options.allow_growth = True です。
sess = tf.Session(config=config)
これでいい
実は、tensorflowは欲張りなツールなのです。
device_idでgpuを指定しても、別のGPUのメモリリソースを占有するので、プログラムの前に実行する必要があります
実行する
export CUDA_VISIBLE_DEVICES=n python main.py
(nは可視サーバー番号)
そして、他のGPUリソースを占有しないように、python code.pyを実行しに行きます。
最近tensorflowを始めたばかりで、それ以前はcaffeでした
今週は3日連続で、研究室の人たちから「サーバーのリソースを使いすぎている」という報告がありました。
つまり、コードを実行する前に、export CUDA_VISIBLE_DEVICES=n を実行します。
1つまたは個々のGPUのみを可視化し、他を不可視化する。
例えば、サーバー上に8つのGPUがあり、3人でサーバーを共有している場合、コードを実行する前にまず次のコマンドを入力します。
nvidia-smi
上記のコマンドで、どのGPUが使われていないか、例えば#3と#5が使われていないことを確認し、次のコマンドでプログラムを実行します。
export CUDA_VISIBLE_DEVICES=3,5 python main.py
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
ハートビート・エフェクトのためのHTML+CSS
-
HTML ホテル フォームによるフィルタリング
-
HTML+cssのボックスモデル例(円、半円など)「border-radius」使いやすい
-
HTMLテーブルのテーブル分割とマージ(colspan, rowspan)
-
ランダム・ネームドロッパーを実装するためのhtmlサンプルコード
-
Html階層型ボックスシャドウ効果サンプルコード
-
QQの一時的なダイアログボックスをポップアップし、友人を追加せずにオンラインで話す効果を達成する方法
-
sublime / vscodeショートカットHTMLコード生成の実装
-
HTMLページを縮小した後にスクロールバーを表示するサンプルコード
-
html のリストボックス、テキストフィールド、ファイルフィールドのコード例