温馨提示:本文翻译自stackoverflow.com,查看原文请点击:tensorflow2.0 - Anyway to work with Keras in Mac with AMD GPU?
keras tensorflow2.0 pyopencl amd-gpu plaidml

tensorflow2.0 - 是否可以在Mac和AMD GPU上与Keras一起使用?

发布于 2020-04-10 23:34:07

我有一台带AMD处理器的MacBook Pro,我想在此GPU中运行Keras(Tensorflow后端)。我知道Keras仅适用于NVIDIA GPU。解决方法是什么(如果可能)?

查看更多

提问者
Bikram
被浏览
518
Bikram 2020-02-02 15:45

您可以使用OpenCL库来克服此问题。我已经对其进行了测试,并且对我来说效果很好。

注意:我的python版本是3.7,我将使用pip3进行软件包安装。

脚步:

  1. 使用以下命令安装OpenCL软件包

    pip3 install pyopencl

  2. 使用以下命令安装PlaidML

    pip3 install pip install plaidml-keras

  3. 运行PlaidML的安装程序在设置过程中,您可能会提示您选择GPU。如果安装正确,您将在最后收到一条成功消息。

    plaidml-setup

  4. 安装plaidbench以在GPU上测试plaidml。

    pip3 install plaidbench

  5. 测试一下。如果一切顺利,到此为止,您将获得基准分数。

    plaidbench keras mobilenet

  6. 现在我们必须设置环境路径。将其放在代码的顶部。

import os
os.environ["KERAS_BACKEND"] = "plaidml.keras.backend"

os.environ["RUNFILES_DIR"] = "/Library/Frameworks/Python.framework/Versions/3.7/share/plaidml"
# plaidml might exist in different location. Look for "/usr/local/share/plaidml" and replace in above path

os.environ["PLAIDML_NATIVE_PATH"] = "/Library/Frameworks/Python.framework/Versions/3.7/lib/libplaidml.dylib"
# libplaidml.dylib might exist in different location. Look for "/usr/local/lib/libplaidml.dylib" and replace in above path
  1. 用实际代码测试在代码中使用keras代替,tensorflow.keras然后运行以下命令。(安装在GPU中的第2步中安装了keras)
import os

# IMPORTANT: PATH MIGHT BE DIFFERENT. SEE STEP 6
os.environ["KERAS_BACKEND"] = "plaidml.keras.backend"
os.environ["RUNFILES_DIR"] = "/Library/Frameworks/Python.framework/Versions/3.7/share/plaidml"
os.environ["PLAIDML_NATIVE_PATH"] = "/Library/Frameworks/Python.framework/Versions/3.7/lib/libplaidml.dylib"

# Don't use tensorflow.keras anywhere, instead use keras
import keras
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense, Dropout, Flatten
from keras.layers import Conv2D, MaxPooling2D
from keras import backend as K
batch_size = 128
num_classes = 10
epochs = 12
# input image dimensions
img_rows, img_cols = 28, 28
# the data, split between train and test sets
(x_train, y_train), (x_test, y_test) = mnist.load_data()
if K.image_data_format() == 'channels_first':
    x_train = x_train.reshape(x_train.shape[0], 1, img_rows, img_cols)
    x_test = x_test.reshape(x_test.shape[0], 1, img_rows, img_cols)
    input_shape = (1, img_rows, img_cols)
else:
    x_train = x_train.reshape(x_train.shape[0], img_rows, img_cols, 1)
    x_test = x_test.reshape(x_test.shape[0], img_rows, img_cols, 1)
    input_shape = (img_rows, img_cols, 1)
x_train = x_train.astype('float32')
x_test = x_test.astype('float32')
x_train /= 255
x_test /= 255
print('x_train shape:', x_train.shape)
print(x_train.shape[0], 'train samples')
print(x_test.shape[0], 'test samples')
# convert class vectors to binary class matrices
y_train = keras.utils.to_categorical(y_train, num_classes)
y_test = keras.utils.to_categorical(y_test, num_classes)
model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3),
                 activation='relu',
                 input_shape=input_shape))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(num_classes, activation='softmax'))
model.compile(loss=keras.losses.categorical_crossentropy,
              optimizer=keras.optimizers.Adadelta(),
              metrics=['accuracy'])
model.fit(x_train, y_train,
          batch_size=batch_size,
          epochs=epochs,
          verbose=1,
          validation_data=(x_test, y_test))
score = model.evaluate(x_test, y_test, verbose=0)
print('Test loss:', score[0])
print('Test accuracy:', score[1])

当你运行这个你会得到

Using plaidml.keras.backend backend.
INFO:plaidml:Opening device "metal_intel(r)_iris(tm)_graphics_6100.0"
# or whatever GPU you selected in step 3

确认您正在GPU中运行它。

参考:https//towardsdatascience.com/gpu-accelerated-machine-learning-on-macos-48d53ef1b545