千家信息网

如何使用plaidML在具有AMD GPU的macOS上进行机器学习

发表于:2024-12-12 作者:千家信息网编辑
千家信息网最后更新 2024年12月12日,如何使用plaidML在具有AMD GPU的macOS上进行机器学习,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。是否想
千家信息网最后更新 2024年12月12日如何使用plaidML在具有AMD GPU的macOS上进行机器学习

如何使用plaidML在具有AMD GPU的macOS上进行机器学习,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

是否想在Mac的集成AMD GPU或外部图形卡上训练机器学习模型?除了PlaidML,别无所求。

任何尝试在macOS上使用TensorFlow训练神经网络的人都知道该过程很糟糕。由于GPU加速训练需要Nvidia芯片组,因此TensorFlow只能利用Mac上的CPU。大多数大型模型在CPU上的训练时间要比简单的GPU多几个数量级。

更糟糕的是,许多Mac拥有功能强大的谨慎的AMD GPU,它们在训练时被迫闲置。TensorFlow仅支持与macOS不兼容的Nvidia设备。这是plaidML出现的地方。

可以安装PlaidML并将其用于在Mac的图形处理器上训练Keras模型,而无需在基于云的系统上花费时间或购买新机器。

TensorFlow用作Keras的后端,解释Keras的高级Python语法并将其转换为可以在专用硬件(例如GPU)上并行执行的指令。

PlaidML是Keras的替代后端,它支持Nvidia CUDA以外的并行化框架。在Mac上,可以使用PlaidML在CPU,CPU的集成图形,谨慎的AMD图形处理器,甚至是通过Thunderbolt 3连接的外部AMD GPU上训练Keras模型。

首先开始使用PlaidML,因为正在寻找一种在非常大的图像数据集上训练深度卷积神经网络的方法。曾尝试在Google的Colab中执行此操作,但是事实证明,该在线工具对于长期运行的工作非常令人沮丧。有一个 Radeon RX580 eGPU积尘,所以想用一种方法在MacBook上本地训练模型。

经过几个快速步骤,就开始使用PlaidML。这是在系统上使用它的方法。首先通过pip安装PlaidML。强烈建议在此处使用虚拟环境,以将PlaidML安装与系统的其余部分隔离开。

PlaidML的强大功能来自其简单性。安装后,激活GPU就像运行一样简单


plaidml-setup

选择是否要启用实验性功能后,此工具将询问要使用哪种计算设备。应该看到类似以下的列表:

1 : llvm_cpu.0

2 : metal_intel(r)_hd_graphics_530.0

3 : metal_amd_radeon_pro_450.0

4 : metal_amd_radeon_rx_580.0

第一个选择是我的CPU,第二个选择是CPU中的Intel集成显卡,第三个选择是15英寸MacBook Pro中谨慎的AMD GPU,第四个选择是我的RX 580 eGPU。绝对喜欢它的简单性来切换处理器;这使可以使用笔记本电脑的谨慎GPU随时随地训练简单的模型,并使用eGPU进行较重的任务。

唯一需要注意的是,不再有权使用TensorFlow功能(例如TensorFlow数据集)。编写的所有代码都必须使用纯Keras。还没有发现这是一个很大的限制,无论如何它会导致更多的可移植软件。PlaidML还可以与Nvidia GPU一起使用,因此,如果在使用不同GPU架构的团队中工作,PlaidML会使事情变得非常简单。使用PlaidML作为Keras的后端很简单,如下所示:

from os import environenviron["KERAS_BACKEND"] = "plaidml.keras.backend"import keras

就是这样。下面是一个完整的示例,可以在安装PlaidML之后在自己的系统上尝试。它用一个隐藏的层训练一个非常简单的神经网络,对输入向量求和。

import numpy as npfrom os import environenviron["KERAS_BACKEND"] = "plaidml.keras.backend"import kerasfrom keras.layers import Densefrom matplotlib import pyplot as plt # Paramsnum_samples = 100000; vect_len = 20; max_int = 10; min_int = 1; # Generate datasetX = np.random.randint(min_int, max_int, (num_samples, vect_len))Y = np.sum(X, axis=1) # Get 80% of data for trainingsplit_idx = int(0.8 * len(Y))train_X = X[:split_idx, :]; test_X = X[split_idx:, :]train_Y = Y[:split_idx]; test_Y = Y[split_idx:] # Make modelmodel = keras.models.Sequential()model.add(keras.layers.Dense(32, activation='relu', input_shape=(vect_len,)))model.add(keras.layers.Dense(1))model.compile('adam', 'mse') history = model.fit(train_X, train_Y, validation_data=(test_X, test_Y), \                    epochs=10, batch_size=100) # summarize historyplt.plot(history.history['loss'])plt.plot(history.history['val_loss'])plt.title('model loss')plt.ylabel('loss')plt.xlabel('epoch')plt.legend(['train', 'test'], loc='upper left')plt.show()

可以在其他计算设备上尝试此操作。可能会发现,在CPU上训练该模型的速度更快,因为数据集非常小且模型非常简单。但是对于更复杂的模型,会发现速度大大提高。可以在PlaidML GitHub页面上找到一些更重的测试 。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。

0