初步尝试 Keras (基于 Tensorflow 后端)深度框架时, 发现其对于 GPU 的使用比较神奇, 默认竟然是全部占满显存, 1080Ti 跑个小分类问题, 就一下子满了. 而且是服务器上的两张 1080Ti.
服务器上的多张 GPU 都占满, 有点浪费性能.
因此, 需要类似于 Caffe 等框架的可以设定 GPU ID 和显存自动按需分配.
实际中发现, Keras 还可以限制 GPU 显存占用量.
这里涉及到的内容有:
GPU ID 设定
GPU 显存占用按需分配
GPU 显存占用限制
GPU 显存优化
1. GPU ID 设定
#! -- coding: utf-8 --*-- import os os.environ["CUDA_VISIBLE_DEVICES"] = "1"
这里将 GPU ID 设为 1.
GPU ID 从 0 开始, GPUID=1 即表示第二块 GPU.
2. GPU 显存占用按需分配
#! -- coding: utf-8 --*-- import tensorflow as tf import keras.backend.tensorflow_backend as ktf # GPU 显存自动调用 config = tf.ConfigProto() config.gpu_options.allow_growth=True session = tf.Session(config=config) ktf.set_session(session)
3. GPU 显存占用限制
#! -- coding: utf-8 --*-- import tensorflow as tf import keras.backend.tensorflow_backend as ktf # 设定 GPU 显存占用比例为 0.3 config = tf.ConfigProto() config.gpu_options.per_process_gpu_memory_fraction = 0.3 session = tf.Session(config=config) ktf.set_session(session )
这里虽然是设定了 GPU 显存占用的限制比例(0.3), 但如果训练所需实际显存占用超过该比例, 仍能正常训练, 类似于了按需分配.
设定 GPU 显存占用比例实际上是避免一定的显存资源浪费.
4. GPU ID 设定与显存按需分配
#! -- coding: utf-8 --*-- import os import tensorflow as tf import keras.backend.tensorflow_backend as ktf # GPU 显存自动分配 config = tf.ConfigProto() config.gpu_options.allow_growth=True #config.gpu_options.per_process_gpu_memory_fraction = 0.3 session = tf.Session(config=config) ktf.set_session(session) # 指定GPUID, 第一块GPU可用 os.environ["CUDA_VISIBLE_DEVICES"] = "0"
5. 利用fit_generator最小化显存占用比例/数据Batch化
#! -- coding: utf-8 --*-- # 将内存中的数据分批(batch_size)送到显存中进行运算 def generate_arrays_from_memory(data_train, labels_train, batch_size): x = data_train y=labels_train ylen=len(y) loopcount=ylen // batch_size while True: i = np.random.randint(0,loopcount) yield x[i*batch_size:(i+1)*batch_size],y[i*batch_size:(i+1)*batch_size] # load数据到内存 data_train=np.loadtxt("./data_train.txt") labels_train=np.loadtxt('./labels_train.txt') data_val=np.loadtxt('./data_val.txt') labels_val=np.loadtxt('./labels_val.txt') hist=model.fit_generator(generate_arrays_from_memory(data_train, labels_train, batch_size), steps_per_epoch=int(train_size/bs), epochs=ne, validation_data=(data_val,labels_val), callbacks=callbacks )
5.1 数据 Batch 化
#! -- coding: utf-8 --*-- def process_line(line): tmp = [int(val) for val in line.strip().split(',')] x = np.array(tmp[:-1]) y = np.array(tmp[-1:]) return x,y def generate_arrays_from_file(path,batch_size): while 1: f = open(path) cnt = 0 X =[] Y =[] for line in f: # create Numpy arrays of input data # and labels, from each line in the file x, y = process_line(line) X.append(x) Y.append(y) cnt += 1 if cnt==batch_size: cnt = 0 yield (np.array(X), np.array(Y)) X = [] Y = [] f.close()
补充知识:Keras+Tensorflow指定运行显卡以及关闭session空出显存
Step1: 查看GPU
watch -n 3 nvidia-smi #在命令行窗口中查看当前GPU使用的情况, 3为刷新频率
Step2: 导入模块
导入必要的模块
import os import tensorflow as tf from keras.backend.tensorflow_backend import set_session from numba import cuda
Step3: 指定GPU
程序开头指定程序运行的GPU
os.environ['CUDA_VISIBLE_DEVICES'] = '1' # 使用单块GPU,指定其编号即可 (0 or 1or 2 or 3)
os.environ['CUDA_VISIBLE_DEVICES'] = '1,2,3' # 使用多块GPU,指定其编号即可 (引号中指定即可)
Step4: 创建会话,指定显存使用百分比
创建tensorflow的Session
config = tf.ConfigProto() config.gpu_options.per_process_gpu_memory_fraction = 0.1 # 设定显存的利用率 set_session(tf.Session(config=config))
Step5: 释放显存
确保Volatile GPU-Util显示0%
程序运行完毕,关闭Session
K.clear_session() # 方法一:如果不关闭,则会一直占用显存 cuda.select_device(1) # 方法二:选择GPU1 cuda.close() #关闭选择的GPU
以上这篇Keras - GPU ID 和显存占用设定步骤就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]