Вы можете OpenCL библиотека, чтобы преодолеть это. Я проверил его, и он работает нормально для меня.
Примечание: У меня есть python версия 3.7, и я буду использовать pip3 для установки пакета.
Шаги:
Установите пакет OpenCL с помощью следующей команды
pip3 install pyopencl
Установка Библиотека PlaidML используя следующую команду
pip3 install pip install plaidml-keras
Запустите настройку для PlaidML . Во время настройки вы можете получить приглашение выбрать свой графический процессор. Если установка прошла правильно, вы получите сообщение об успешном завершении.
plaidml-setup
Установка Пледбенч для проверки пледмл на вашем графическом процессоре.
pip3 install plaidbench
Проверьте его. Если до этого все прошло хорошо, вы получите результаты тестов.
plaidbench keras mobilenet
Теперь нам нужно указать путь к среде. Поместите это в верхней части вашего кода.
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