1.在用keras框架跑NER的train時,並且只是在用了keras_contrib.layers的CRF時出現問題:session
遇到無錯跳出finished with exit code -1073740791 (0xC0000409),框架
(有其餘博主說的減少batchsize的 我試過把batchsize減少爲2,可是沒有用)大數據
2.查出是顯卡內存不足的問題,解決以下(對我的有效):spa
import os os.environ["CUDA_VISIBLE_DEVICES"] = "-1"
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------.net
3.<原理參考>:code
keras在使用GPU的時候有個特色,就是默認所有佔滿顯存。這樣若是有多個模型都須要使用GPU跑的話,那麼限制是很大的,並且對於GPU也是一種浪費。所以在使用keras時須要有意識的設置運行時使用那塊顯卡,須要使用多少容量。blog
這方面的設置通常有三種狀況:內存
1.指定顯卡 2.限制GPU用量 3.即指定顯卡又限制GPU用量get
1、指定顯卡it
import os os.environ["CUDA_VISIBLE_DEVICES"] = "2"
這裏指定了使用編號爲2的GPU,你們能夠根據須要和實際狀況來指定使用的GPU
2、限制GPU用量
一、設置使用GPU的百分比
import tensorflow as tf import keras.backend.tensorflow_backend as KTF #進行配置,使用30%的GPU
config = tf.ConfigProto() config.gpu_options.per_process_gpu_memory_fraction = 0.3 session = tf.Session(config=config) # 設置session KTF.set_session(session )
須要注意的是,雖然代碼或配置層面設置了對顯存佔用百分比閾值,但在實際運行中若是達到了這個閾值,程序有須要的話仍是會突破這個閾值。換而言之若是跑在一個大數據集上仍是會用到更多的顯存。以上的顯存限制僅僅爲了在跑小數據集時避免對顯存的浪費而已。
二、GPU按需使用
import tensorflow as tf import keras.backend.tensorflow_backend as KTF config = tf.ConfigProto() config.gpu_options.allow_growth=True #不所有佔滿顯存, 按需分配
session = tf.Session(config=config) # 設置session KTF.set_session(sess)
3、指定GPU而且限制GPU用量
這個比較簡單,就是講上面兩種狀況連上便可。。
import os import tensorflow as tf import keras.backend.tensorflow_backend as KTF # 指定第一塊GPU可用 os.environ["CUDA_VISIBLE_DEVICES"] = "0"
config = tf.ConfigProto() config.gpu_options.allow_growth=True #不所有佔滿顯存, 按需分配
sess = tf.Session(config=config) KTF.set_session(sess)
參考連接: