Во всяком случае работать с Keras в Ma c с AMD GPU? - PullRequest
4 голосов
/ 01 февраля 2020

У меня есть MacBook Pro с процессором AMD, и я хочу запустить Keras (Tensorflow backend) в этом графическом процессоре. Я узнал, что Keras работает только с графическими процессорами NVIDIA. Какой обходной путь (если возможно)?

1 Ответ

3 голосов
/ 01 февраля 2020

Вы можете OpenCL библиотека, чтобы преодолеть это. Я проверил его, и он работает нормально для меня.

Примечание: У меня есть python версия 3.7, и я буду использовать pip3 для установки пакета.

Шаги:

  1. Установите пакет OpenCL с помощью следующей команды

    pip3 install pyopencl

  2. Установка Библиотека PlaidML используя следующую команду

    pip3 install pip install plaidml-keras

  3. Запустите настройку для PlaidML . Во время настройки вы можете получить приглашение выбрать свой графический процессор. Если установка прошла правильно, вы получите сообщение об успешном завершении.

    plaidml-setup

  4. Установка Пледбенч для проверки пледмл на вашем графическом процессоре.

    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
Проверка в реальном коде . Используйте keras вместо tensorflow.keras в своем коде и выполните следующее. (keras устанавливается на шаге 2, который выполняется в графическом процессоре)
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

, который подтверждает, что вы запускаете его в графическом процессоре.

Ссылка: https://towardsdatascience.com/gpu-accelerated-machine-learning-on-macos-48d53ef1b545

...