AMD plaidml 与 CPU Tensorflow - 意外结果

2024-04-29

我目前正在运行一个简单的脚本来训练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)

当我使用 AMD Pro 580 运行数据集时opencl_amd_radeon_pro_580_compute_engine通过 plaidml 设置我得到以下结果249us/sample使用 15 秒的纪元,使用以下代码:-

# 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 的性能是 GPU 的 5 倍。

这应该是预期的结果吗?

我的代码中做错了什么吗?


看来我至少为 macOS/Keras/AMD GPU 设置找到了正确的解决方案。

TL;DR:

  • Do not使用 OpenCL,使用*metal反而。
  • Do not使用Tensorflow 2.0,仅使用Keras API

详细信息如下:

Run plaidml-setup和接送metal????????这很重要!

...
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最快的!

  • 示例完成,耗时:0.435s(编译),8.057s(执行)

opencl_amd_amd_radeon_pro_560x_compute_engine.0

  • 示例完成,耗时:3.197s(编译),14.620s(执行)

llvm_cpu.0

  • 示例完成,耗时:3.619s(编译),47.837s(执行)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AMD plaidml 与 CPU Tensorflow - 意外结果 的相关文章

随机推荐