我已经在我的ubuntu 16.04中使用第二个答案在 ubuntu的内置apt cuda安装中安装了tensorflow .
现在我的问题是如何测试tensorflow是否真的使用gpu?我有一个gtx 960m gpu.当我import tensorflow
这是输出
I tensorflow/stream_executor/dso_loader.cc:105] successfully opened CUDA library libcublas.so locally
I tensorflow/stream_executor/dso_loader.cc:105] successfully opened CUDA library libcudnn.so locally
I tensorflow/stream_executor/dso_loader.cc:105] successfully opened CUDA library libcufft.so locally
I tensorflow/stream_executor/dso_loader.cc:105] successfully opened CUDA library libcuda.so.1 locally
I tensorflow/stream_executor/dso_loader.cc:105] successfully opened CUDA library libcurand.so locally
Run Code Online (Sandbox Code Playgroud)
这个输出是否足以检查tensorflow是否正在使用gpu?
我有计划使用分布式TensorFlow,我看到TensorFlow可以使用GPU进行培训和测试.在群集环境中,每台计算机可能有0个或1个或更多GPU,我想在尽可能多的计算机上运行我的TensorFlow图形到GPU.
我发现在运行tf.Session()
TensorFlow时会在日志消息中提供有关GPU的信息,如下所示:
I tensorflow/core/common_runtime/gpu/gpu_init.cc:126] DMA: 0
I tensorflow/core/common_runtime/gpu/gpu_init.cc:136] 0: Y
I tensorflow/core/common_runtime/gpu/gpu_device.cc:838] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GTX 1080, pci bus id: 0000:01:00.0)
Run Code Online (Sandbox Code Playgroud)
我的问题是如何从TensorFlow获取有关当前可用GPU的信息?我可以从日志中获取加载的GPU信息,但我希望以更复杂的程序化方式完成.我也可以故意使用CUDA_VISIBLE_DEVICES环境变量限制GPU,所以我不想知道从OS内核获取GPU信息的方法.
简而言之,如果机器中有两个可用的GPU ,我希望这样的函数tf.get_available_gpus()
将返回['/gpu:0', '/gpu:1']
.我该如何实现呢?
我知道在安装tensorflow时,您要么安装GPU版本,要么安装CPU版本.如何检查安装了哪一个(我使用的是linux).
如果安装了GPU版本,如果GPU不可用,它会自动在CPU上运行还是会抛出错误?如果GPU可用,是否需要设置特定字段或值以确保它在GPU上运行?
我在 Paperspace 云基础架构上创建了虚拟笔记本,后端使用 Tensorflow GPU P5000 虚拟实例。当我开始训练我的网络时,它比使用纯 CPU 运行时引擎的 MacBook Pro 慢 2 倍。我如何确保 Keras NN 在训练过程中使用 GPU 而不是 CPU?
请在下面找到我的代码:
from tensorflow.contrib.keras.api.keras.models import Sequential
from tensorflow.contrib.keras.api.keras.layers import Dense
from tensorflow.contrib.keras.api.keras.layers import Dropout
from tensorflow.contrib.keras.api.keras import utils as np_utils
import numpy as np
import pandas as pd
# Read data
pddata= pd.read_csv('data/data.csv', delimiter=';')
# Helper function (prepare & test data)
def split_to_train_test (data):
trainLenght = len(data) - len(data)//10
trainData = data.loc[:trainLenght].sample(frac=1).reset_index(drop=True)
testData = data.loc[trainLenght+1:].sample(frac=1).reset_index(drop=True)
trainLabels = trainData.loc[:,"Label"].as_matrix()
testLabels = testData.loc[:,"Label"].as_matrix() …
Run Code Online (Sandbox Code Playgroud) 我的计算机安装了以下软件:Anaconda (3)、TensorFlow (GPU) 和 Keras。Anaconda 虚拟环境有两种,一种是 TensorFlow for Python 2.7,一种是 3.5,都是 GPU 版本,按照 TF 指令安装。(我之前在单独的环境中安装了 CPU 版本的 TensorFlow,但我已将其删除。)
当我运行以下命令时:
source activate tensorflow-gpu-3.5
python code.py
Run Code Online (Sandbox Code Playgroud)
并检查nvidia-smi
它仅显示 Python 的 GPU 内存使用量为 3MiB,因此看起来 GPU 并未用于计算。(code.py
是一个用 Keras 实现的简单深度 Q 学习算法)
有什么想法可能会出问题吗?
我手动安装了CUDA v9.2和相应的cuDNN以安装tensorflow gpu,但我意识到tensorflow 1.8.0需要CUDA 9.0,所以我运行了
pip install tensorflow-gpu
Run Code Online (Sandbox Code Playgroud)
从anaconda提示(基本环境)中自动安装CUDA 9.0和相应的cuDNN。我从同一命令提示符启动了Spyder。所以这是我在Python 3.6中的代码,其中我正在使用keras和tensorflow来训练8000个奇数图像-
# Convolutional Neural Networks
# Part 1 - Building the CNN
# Not important
# Part 2- Fitting the CNN to the images -
from keras.preprocessing.image import ImageDataGenerator
train_datagen = ImageDataGenerator(
rescale=1./255,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True)
test_datagen = ImageDataGenerator(rescale=1./255)
training_set = train_datagen.flow_from_directory(
'dataset/training_set',
target_size=(64, 64),
batch_size=32,
class_mode='binary')
test_set = test_datagen.flow_from_directory(
'dataset/test_set',
target_size=(64, 64),
batch_size=32,
class_mode='binary')
with tf.device("/gpu:0"): # Notice THIS
classifier.fit_generator(
training_set,
steps_per_epoch=8000,
epochs=25,
validation_data=test_set,
validation_steps=2000)
Run Code Online (Sandbox Code Playgroud)
注意,在最后拟合数据集之前,我将其放入
with tf.device("/gpu:0"):
Run Code Online (Sandbox Code Playgroud)
我认为这应该确保它使用GPU进行训练?我不确定,因为将“ …