赞
踩
参考博客:https://blog.csdn.net/lscelory/article/details/83579062
服务器中有多个GPU,选择特定的GPU运行程序可在程序运行命令前使用:CUDA_VISIBLE_DEVICES=0命令。0为服务器中的GPU编号,可以为0, 1, 2, 3等,表明对程序可见的GPU编号。
设置示例: 在python程序中,
import os
os.environ["CUDA_VISIBLE_DEVICES"] = "1"
CUDA_VISIBLE_DEVICES=1 # 只有编号为1的GPU对程序是可见的,在代码中gpu[0]指的就是这块儿GPU
CUDA_VISIBLE_DEVICES=0,2,3 # 只有编号为0,2,3的GPU对程序是可见的,在代码中gpu[0]指的是第0块儿,
# gpu[1]指的是第2块儿,gpu[2]指的是第3块儿
CUDA_VISIBLE_DEVICES=2,0,3 # 只有编号为0,2,3的GPU对程序是可见的,但是在代码中gpu[0]指的是第2块儿,
# gpu[1]指的是第0块儿,gpu[2]指的是第3块儿
---------------------
临时设置:
Linux: export CUDA_VISIBLE_DEVICES=1
windows: set CUDA_VISIBLE_DEVICES=1
如果只是单纯设置机器识别到GPU的话,并不能真正利用GPU加速,反而只是白白占用GPU资源。keras在使用GPU有个特点,就是默认占满全部内存。假如机器有多个GPU,这里比如这里有两张显卡,开始训练后,在命令行输入nvidia-smi,就会当前显卡使用情况,

可以看到两张GPU都被占满了,但是只用了第一片GPU计算,第二片白白浪费掉(如果是租的,那可是白花花的银子啊)。
没有指定keras默认会选择所有的GPU,如果你并没有配置多GPU的训练,那么实际上keras占了所有的GPU但是实际上只在一个GPU上运行。
利用多个GPU同时训练分数据并行和模型并行两种:
————————————————————————————————————————————
这里只介绍数据并行。用到的方法是multi_gpu_model函数
model = KerasModel()
par_model = kerasCopyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。