GPU服务器最近加了一个用户使用。产生了一些新的问题。之前因为一个人用,所以基本就默认让贪心的tensorflow占满了所有GPU的内存。
每次通过 watch -n 2 nvidia-smi 查看两块gpu内存全部占满。所以当别人使用时候,就直接会拒绝掉,同时如果想在小数据上做实验,也没有办法开启多个线程来训练。
可以通过以下方式解决:
1、代码限制gpu内存使用率
# 假如有12GB的显存并使用其中的4GB:
gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.333)
sess = tf.Session(config=tf.ConfigProto(gpu_options=gpu_options))
2、设置为按需增长
config = tf.ConfigProto()
config.gpu_options.allow_growth=True
sess = tf.Session(config=config)
3、运行程序之前,先运行export CUDA_VISIBLE_DEVICES=1,仅显卡设备1GPU可见,tensorflow 算是一个比较贪心的工具了就算用device_id指定gpu 也会占用别的GPU的显存资源 必须在执行程序前执行
export CUDA_VISIBLE_DEVICES=n(n为可见的服务器编号)
另外今天还遇到InternalError: Dst tensor is not initialized.的错误,原因是将1548个特征总计近万的样本,处理成时序训练数据后,在最后画图的时候全量载入内存,造成内存不足。
领取专属 10元无门槛券
私享最新 技术干货