在看别人的代码的时候出现了下面两行代码,不知道是什么意思,看了https://www.cnblogs.com/helloyy/p/7878201.html的博客我知道了是什么意思!
代码如下:
import os
def selectGpuById(id):
os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID"
os.environ["CUDA_VISIBLE_DEVICES"] = "{}".format(id)
这个函数的主要作用就是通过id来选择被使用的GPU,这里的id怎么查看呢?
上面的博客里面讲到了一个命令,那就是
nvidia-smi
我在我们实验室的服务器上输入这个命令,出现了下面的结果:很显然,你可以看到第一列出现了0,1,2,3,这样的序号,这个就是GPU的id号!
之后,我们选中哪个,就可以来调用了.
比如我现在需要运行的文件的名字是haha.py,我希望使用1号GPU,那么直接在命令行下输入:
CUDA_VISIBLE_DEVICES=1 python haha.py
import os
os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID"
os.environ["CUDA_VISIBLE_DEVICES"] = "1"
这个代码和上面的命令都是希望1号GPU参与代码的运行!
CUDA_VISIBLE_DEVICES=""
补充:今天又看了一个代码,里面出现了这样的语句:
这个代码下面会介绍,为了限制代码GPU的使用,要多少拿多少,不是全部占有,详见6.
config = tf.ConfigProto()
config.gpu_options.allow_growth = True
self.sess=tf.Session(config=config)
于是上网查了一下这个的用途,下面的内容主要参考https://www.jianshu.com/p/5d47f152ff62
tf.ConfigProto()这个用来在创建session的时候对其进行参数的配置,下面将详细的介绍一些参数配置。
这样在运行的时候,可以获取我们的操作或者是张量在哪个设备上运行,在终端输出指派的情况
tf可用自动的选择适合的能用的设备进行运行,无需我们自己指派。
tensorflow为了加速代码的运行速率,在运行的时候会占用一切能用的GPU资源,导致别人无法使用GPU。我们需要限制代码的GPU使用,存在下面两种限制的第一种是代码在运行的时候动态的申请资源,需要多少拿多少,第二种是限制GPU的使用率。
方法一:这个会使用最小的GPU资源
config = tf.ConfigProto()
config.gpu_options.allow_growth = True
self.sess=tf.Session(config=config)
方法二:
config = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.4 # 占用GPU40%的显存
session = tf.Session(config=config)