nvidia-docker tensorflow-gpu cuda踩过的坑

从tensorflow官网直接pull的一个镜像,并用代码测试,是可以使用的。

需要说明以下重点:血的教训啊,花了我2周啊。

一开时,我从官网直接下载了一个可以支持GPU tensorflow的镜像,但是后来,经过测试,C++代码可以加速,但是python的tensorflow-gpu代码始终显存只有大概114M,gpu利用率更是低的可怜。后来一想,这根本就是没有调用到GPU啊,然后没办法,又去tensorflow官网拉了个镜像,可以使用,但是我只要更新tensorflow-gpu版本就不行,原来tensorflow-gpu对于系统的版本和cuda\cudnn的版本都有要求。

而且官网拉的1.15以后的都是ubunt18.04,没有16.04的。所以大家就需要自己更新cuda\cudnn来支持tensorflow-gpu1.15.0了。

所以

系统版本-cuda-cudnn-驱动-tensorflow版本之间是有要求的

而且tensorflow官网只有去年之前的才有ubuntu16.04的版本,今年所有的镜像全部基于18.04了。cuda版本倒是都有,所以你不用想着去找ubuntu16.04-tensorflow-gpu=1.15的版本了,不存在的,除非自己build一个。

import tensorflow as tf
import numpy as np
#注意:allow_soft_placement=True表明:计算设备可自行选择,如果没有这个参数,会报错。
#因为不是所有的操作都可以被放在GPU上,如果强行将无法放在GPU上的操作指定到GPU上,将会报错。
sess = tf.compat.v1.Session(config=tf.compat.v1.ConfigProto(allow_soft_placement=True,log_device_placement=True))
#sess = tf.compat.v1.Session(config=tf.ConfigProto(log_device_placement=True))
#g = tf.Graph()
#with g.as_default():
#        sess = tf.compat.v1.Session(graph=g) # session is run on graph g
sess.run(tf.compat.v1.global_variables_initializer()) # run session
#tf.compat.v1.global_variables_initializer())
N=100000
with tf.device('/cpu:0'):
        a_random = np.random.rand(N)
        b_random = np.random.rand(N)
        a = tf.constant(a_random,shape=[N],name='a')
        b = tf.constant(b_random,shape=[N],name='b')
j=0
with tf.device('/gpu:1'):
        while(j<=10000):
                c = a+b
                print(sess.run(c))
                j=j+1

你可能感兴趣的:(nvidia-docker tensorflow-gpu cuda踩过的坑)