我目前正在运行一个简单的脚本来训练mnist数据集。
通过Tensorflow通过我的CPU运行培训将给我49us/sample和一个3e时代,使用以下代码:-
# CPU
import tensorflow as tf
mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train = tf.keras.utils.normalize(x_train, axis=1)
x_test = tf.keras.utils.normalize(x_test, axis=1)
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(128, activation=tf.nn.relu))
model.add(tf.keras.layers.Dense(128, activation=tf.nn.relu))
model.add(tf.keras.layers.Dense(10, activation=tf.nn.softmax))
model.compile(optimizer='adam', loss="sparse_categorical_crossentropy", metrics=["accuracy"])
model.fit(x_train, y_train, epochs=3)当我使用opencl_amd_radeon_pro_580_compute_engine通过plaidml安装程序运行数据集时,我使用以下代码获得了具有15s时间的249us/sample结果:
# GPU
import plaidml.keras
plaidml.keras.install_backend()
import keras
from keras.datasets import mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train = keras.utils.normalize(x_train, axis=1)
x_test = keras.utils.normalize(x_test, axis=1)
model = keras.models.Sequential()
model.add(keras.layers.Flatten())
model.add(keras.layers.Dense(128, activation='relu'))
model.add(keras.layers.Dense(128, activation='relu'))
model.add(keras.layers.Dense(10, activation='softmax'))
model.compile(optimizer='adam', loss="sparse_categorical_crossentropy", metrics=["accuracy"])
model.fit(x_train, y_train, epochs=3)我可以看到我的CPU为CPU测试而启动,而我的GPU正在为GPU测试而最大化,但我非常困惑为什么CPU会以5的倍数执行GPU。
这应该是预期的结果吗?
我的代码做错了什么吗?
发布于 2019-09-29 15:52:02
我认为观察到的情况有两个方面:
发布于 2020-04-19 14:05:19
看来我已经找到了正确的解决方案,至少对macOS/Keras/AMD GPU的安装是这样的。
TL;DR:
*metal代替H 211F 212以下是详细信息:
运行plaidml-setup和拾取金属这是很重要的!
...
Multiple devices detected (You can override by setting PLAIDML_DEVICE_IDS).
Please choose a default device:
1 : llvm_cpu.0
2 : metal_intel(r)_uhd_graphics_630.0
3 : metal_amd_radeon_pro_560x.0
Default device? (1,2,3)[1]:3
...确保保存了更改:
Save settings to /Users/alexanderegorov/.plaidml? (y,n)[y]:y
Success!现在运行MNIST示例,您应该会看到如下内容:
INFO:plaidml:Opening device "metal_amd_radeon_pro_560x.0"就是这个。我用plaidbench keras mobilenet做了一个比较
metal_amd_radeon_pro_560x.0最快!
opencl_amd_amd_radeon_pro_560x_compute_engine.0
llvm_cpu.0
https://stackoverflow.com/questions/58156573
复制相似问题