无论如何要在带有 AMD GPU 的 Mac 中使用 Keras? [英] Anyway to work with Keras in Mac with AMD GPU?

查看:35
本文介绍了无论如何要在带有 AMD GPU 的 Mac 中使用 Keras?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一台配备 AMD 处理器的 MacBook Pro,我想在这个 GPU 中运行 Keras(Tensorflow 后端).我开始知道 Keras 只适用于 NVIDIA GPU.解决方法是什么(如果可能)?

I have a MacBook Pro with AMD processor and I want to run Keras (Tensorflow backend) in this GPU. I came to know Keras only works with NVIDIA GPUs. What is the workaround (if possible)?

推荐答案

您可以OpenCL 库来克服这个问题.我已经对其进行了测试,它对我来说运行良好.

You can OpenCL library to overcome this. I have tested it and it is working fine for me.

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

  1. Install OpenCL package with the following command

pip3 安装pyopencl

  • 使用以下命令安装 PlaidML

    pip3 install pip install plaidml-keras

  • 运行 PlaidML 的设置.设置时,您可能会收到选择 GPU 的提示.如果设置正确,您将在最后收到一条成功消息.

  • Run setup for PlaidML. While setup you might get a prompt to select your GPU. If setup went correctly, you will get a success message at the end.

    plaidml-setup

  • 安装 plaidbench 以在您的 GPU 上测试 plaidml.

  • Install plaidbench to test plaidml on your GPU.

    pip3 安装 plaidbench

  • 测试一下.如果一切顺利,您将获得基准分数.

  • Test it. If everything went well till here you will get benchmark scores.

    plaidbench keras mobilenet

  • 现在我们必须设置一个环境路径.把它放在你的代码的顶部.

  • Now we have to set an environment path. Put this at the top of your code.

    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 并运行以下命令.(keras 在第 2 步中安装,在 GPU 中运行)
    1. Test in actual code. Use keras instead of tensorflow.keras in your code and run the following. (keras is installed in step 2 which runs in GPU)

    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

    这篇关于无论如何要在带有 AMD GPU 的 Mac 中使用 Keras?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

  • 查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆