硬Gpu:配置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了硬Gpu:配置相关的知识,希望对你有一定的参考价值。

我正在运行简单的密集层,但Gpu负载和Cpu负载一直很低。 enter image description here enter image description here print(device_lib.list_local_devices())

2019-02-19 19:06:23.911633:I tensorflow / core / platform / cpu_feature_guard.cc:141]您的CPU支持未编译此TensorFlow二进制文件的指令:AVX AVX2

2019-02-19 19:06:24.231261:Itensorflow / core / common_runtime / gpu / gpu_device.cc:1432]找到具有属性的设备0:名称:GeForce RTX 2080 major:7 minor:5 memoryClockRate(GHz):1.83 pciBusID: 0000:65:00.0 totalMemory:8.00GiB freeMemory:6.55GiB 2019-02-19 19:06:24.237952:I tensorflow / core / common_runtime / gpu / gpu_device.cc:1511]添加可见的gpu设备:0 2019-02-19 19:06:25.765790:I tensorflow / core / common_runtime / gpu / gpu_device.cc:982]具有强度1边缘矩阵的设备互连StreamExecutor:2019-02-19 19:06:25.769303:I tensorflow / core / common_runtime / gpu / gpu_device.cc:988] 0 2019-02-19 19:06:25.771334:I tensorflow / core / common_runtime / gpu / gpu_device.cc:1001] 0:N 2019-02-19 19:06:25.776384:I tensorflow / core / common_runtime / gpu / gpu_device.cc:1115]创建TensorFlow设备(/设备:GPU:0,内存6288 MB) - >物理GPU(设备:0,名称:GeForce RTX 2080,pci总线ID:0000:65: 00.0,计算能力:7.5)[名称:“/ device:CPU:0”device_type:“CPU”memory_limit:26843545 6 locality {}化身:5007262859900510599,名称:“/ device:GPU:0”device_type:“GPU”memory_limit:6594058650 locality {bus_id:1 links {}}化身:16804701769178738279 physical_device_desc:“device:0,name:GeForce RTX 2080 ,pci总线ID:0000:65:00.0,计算能力:7.5“

至少,它正在开发GPU。但我不知道这是否是这个深度学习网在这个GPU中的最大限制。

EDIT2:数据集

https://archive.ics.uci.edu/ml/datasets/combined+cycle+power+plant

它大约有10000个数据点和4个描述变量。

EDIT3:代码,它非常简单。

num_p = 8
model = Sequential()
model.add(Dense(8*num_p, input_dim=input_features, activation='relu'))
model.add(BatchNormalization())
model.add(Dense(16*num_p, activation='relu'))
model.add(BatchNormalization())
model.add(Dense(16*num_p, activation='relu'))
model.add(BatchNormalization())
model.add(Dense(16*num_p, activation='relu'))
model.add(BatchNormalization())
model.add(Dense(16*num_p, activation='relu'))
model.add(BatchNormalization())
model.add(Dense(8*num_p, input_dim=input_features, activation='relu'))
model.add(BatchNormalization())
model.add(Dense(1, activation='linear'))
model.compile(loss='mae', optimizer='adam')

es = EarlyStopping(monitor='val_loss', min_delta=0.0005, patience=200, verbose=0, mode='min')
his = model.fit(x=X_train_scaled, y=y_train, batch_size=64, epochs=10000, verbose=0,
validation_split=0.2, callbacks=[es])

EDIT4:输入数据代码

df = pd.read_csv("dataset")
X_train, X_test, y_train, y_test = 
train_test_split(df.iloc[:, :-1].values, df.iloc[:, -1].values)
scaler = MinMaxScaler()
scaler.fit(X_train)
X_train_scaled = scaler.transform(X_train)
batch_size = 64
dataset = tf.data.Dataset.from_tensor_slices((X_train_scaled, y_train))
print(dataset)
dataset = dataset.cache()
print(dataset)
dataset = dataset.shuffle(len(X_train_scaled))
print(dataset)
dataset = dataset.repeat()
print(dataset)
dataset = dataset.batch(batch_size)
print(dataset)
dataset = dataset.prefetch(batch_size*10)
print(dataset)

<TensorSliceDataset shapes: ((4,), ()), types: (tf.float64, tf.float64)> 
<CacheDataset shapes: ((4,), ()), types: (tf.float64, tf.float64)> 
<ShuffleDataset shapes: ((4,), ()), types: (tf.float64, tf.float64)> 
<RepeatDataset shapes: ((4,), ()), types: (tf.float64, tf.float64)> 
<BatchDataset shapes: ((?, 4), (?,)), types: (tf.float64, tf.float64)> 
<PrefetchDataset shapes: ((?, 4), (?,)), types: (tf.float64, tf.float64)>
答案

您可以通过增加批量大小来提高GPU利用率。但是,考虑到相当小的数据集大小,仍然可以通过使用数据集API来提高性能。它是更具可扩展性的解决方案,能够处理大型数据集。

dataset = tf.data.Dataset.from_tensor_slices((X_train_scaled, y_train))
dataset = dataset.cache() #caches dataset in memory
dataset = dataset.shuffle(len(X_train_scaled)) #shuffles dataset
dataset = dataset.repeat() #with no parameter, repeats indefinitely
dataset = dataset.batch(batch_size)
dataset = dataset.prefetch(batch_size*10) #prefetches data 

然后你只是将没有batch_size的数据集对象传递给model.fit,因为它是先前指定的,并且使用steps_per_epoch让模型知道纪元的大小。

his = model.fit(dataset, steps_per_epoch=7500, epochs=1000)

附:使用这种大小的csv文件很难获得高利用率。您可以轻松地将整个数据集作为一个批次传递,并获得大约60%。更多信息在这里https://www.tensorflow.org/guide/performance/datasets

另一答案

您正在查看错误的显示以查看具有张量流的GPU使用情况。您所看到的是视频卡的3D活动。

如果您注意到3D,视频编码等旁边有一个下拉箭头,请将其中一个设置为Cuda,将另一个设置为“复制”。这允许您查看计算使用情况和复制时间。

我实际上遇到了类似的问题,我在Cuda下的使用率达到了65%,因为数据集非常小。您可以增加批量大小以增加GPU使用率但是您也会因此损害网络,因此对于大多数情况来说,即使您的GPU内存可以运行得更多,在批量大小为32-128的数据集上进行训练也会更好。

如果您能弄清楚如何使其正常工作,那么使用数据集的上述答案应该有效。这是我现在正在努力的事情。

以上是关于硬Gpu:配置的主要内容,如果未能解决你的问题,请参考以下文章

GPU编解码GPU硬解码---DXVA

通过 findById 访问活动布局中的硬编码片段

docker中使用GPU硬解码报错libnvcuvid.so is missing的问题

python常用代码

在 Metal 中,将顶点和片段缓冲区设置为相同的 MTLBuffer 是不是仅将其复制到 GPU 一次?

Caffe:一个深度学习框架