机器学习中使用GPU


机器学习最近吸引了越来越多的关注。GPU,有时被称为“图形处理单元”,是能够持续管理海量数据的专用计算系统。因此,GPU 是机器学习应用的理想平台。本文将解释如何入门,同时探讨 GPU 在机器学习中的诸多优势。

使用GPU的优势

由于以下因素,GPU 成为加速机器学习工作负载的有效工具:

  • 并行处理 - GPU 同时处理多任务的能力使得大规模机器学习方法的并行化成为可能。因此,可以将复杂的模型训练时间从几天缩短到几小时甚至几分钟。

  • 高内存带宽 - 与 CPU 相比,GPU 的内存带宽更高,因此数据可以在 GPU 内存和主内存之间以更快的速度传输。这导致机器学习模型的训练时间更短。

  • 经济高效 - 价格合理的 GPU 能够完成原本需要多个 CPU 才能完成的工作。

您可以选择几种方法来访问专用的 GPU。您可以立即使用配备专用 GPU 的本地计算机来执行机器学习任务。但是,如果您更愿意使用基于云的解决方案,那么 Google Cloud、Amazon AWS 或 Microsoft Azure 等服务提供易于设置的 GPU 实例,并且可以从任何地方使用。

设置GPU

在使用 GPU 进行机器学习之前,需要设置一些内容:

GPU 硬件 - 要开始使用它进行机器学习,需要一个 GPU。由于其卓越的性能以及与 TensorFlow、PyTorch 和 Keras 等知名机器学习框架的互操作性,NVIDIA GPU 在机器学习社区中得到最广泛的使用和青睐。如果您还没有 GPU,云服务公司(如 AWS、Google Cloud 或 Azure)提供 GPU 租赁服务。

驱动程序和库 - 获取硬件后,需要安装相应的驱动程序和库。NVIDIA 提供的 CUDA 工具包包含机器学习 GPU 加速所需的驱动程序和库。您还需要安装所需机器学习框架的 GPU 版本。

验证设置 - 安装完成后,运行一个简单的机器学习程序并确保 GPU 用于计算,就可以验证您的配置。

使用GPU进行机器学习

配置好 GPU 后,它就可以用于机器学习。您应该执行以下操作:

导入必要的库 - 要使用 GPU 进行机器学习,需要导入允许 GPU 加速的相应库。例如,在使用 TensorFlow 时,使用 tensorflow-gpu 库而不是标准的 Tensorflow 库。

定义模型 - 导入必要的库后,您需要定义机器学习模型。模型可以使用神经网络、决策树或其他允许 GPU 加速的机器学习算法。

编译模型 - 建立模型后,您需要通过定义指标、优化器和损失函数来编译它。此外,在此阶段还需要指定输入形状、输出形状以及模型隐藏层的数量。

拟合模型 - 建立模型后,您可以通过确定批大小、时期数和验证分割来拟合您的数据。此外,您还需要说明使用 CPU 或 GPU 进行计算。通过将“use_gpu”选项设置为“True”来使用 GPU。

评估模型 - 模型拟合后,计算准确率、精确率、召回率和 F1 分数可以评估其性能。还可以使用 matplotlib 和 sea born 等几个绘图库来可视化结果。

在Google Colab中使用GPU的代码示例

Google Colab 提供了选择 CPU 或 GPU 来训练机器学习模型的功能。您可以在运行时部分找到它并更改运行时。因此,您可以在运行时中选择 GPU。

在Google Colab中选择GPU

机器学习中的GPU

import tensorflow as tf
from tensorflow.keras import datasets, layers, models

# Load the CIFAR-10 dataset
(train_images, train_labels), (test_images, test_labels) = datasets.cifar10.load_data()

# Normalize pixel values to be between 0 and 1
train_images, test_images = train_images / 255.0, test_images / 255.0

# Define the model architecture
model = models.Sequential([
   layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)),
   layers.MaxPooling2D((2, 2)),
   layers.Conv2D(64, (3, 3), activation='relu'),
   layers.MaxPooling2D((2, 2)),
   layers.Conv2D(64, (3, 3), activation='relu'),
   layers.Flatten(),
   layers.Dense(64, activation='relu'),
   layers.Dense(10)
])

# Compile the model
model.compile(optimizer='adam', loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
   metrics=['accuracy'])

# Train the model using the GPU
with tf.device('/GPU:0'):
   history = model.fit(train_images, train_labels, epochs=10,
   validation_data=(test_images, test_labels))

输出

Downloading data from https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz
170498071/170498071 [==============================] - 5s 0us/step
Epoch 1/10
1563/1563 [==============================] - 74s 46ms/step - loss: 1.5585 - accuracy: 0.4281 - val_loss: 1.3461 - val_accuracy: 0.5172
Epoch 2/10
1563/1563 [==============================] - 73s 47ms/step - loss: 1.1850 - accuracy: 0.5775 - val_loss: 1.1289 - val_accuracy: 0.5985
Epoch 3/10
1563/1563 [==============================] - 72s 46ms/step - loss: 1.0245 - accuracy: 0.6394 - val_loss: 0.9837 - val_accuracy: 0.6557
Epoch 4/10
1563/1563 [==============================] - 73s 47ms/step - loss: 0.9284 - accuracy: 0.6741 - val_loss: 0.9478 - val_accuracy: 0.6640
Epoch 5/10
1563/1563 [==============================] - 72s 46ms/step - loss: 0.8537 - accuracy: 0.7000 - val_loss: 0.9099 - val_accuracy: 0.6844
Epoch 6/10
1563/1563 [==============================] - 75s 48ms/step - loss: 0.7992 - accuracy: 0.7182 - val_loss: 0.8807 - val_accuracy: 0.6963
Epoch 7/10
1563/1563 [==============================] - 73s 47ms/step - loss: 0.7471 - accuracy: 0.7381 - val_loss: 0.8739 - val_accuracy: 0.7065
Epoch 8/10
1563/1563 [==============================] - 76s 48ms/step - loss: 0.7082 - accuracy: 0.7491 - val_loss: 0.8840 - val_accuracy: 0.6977
Epoch 9/10
1563/1563 [==============================] - 72s 46ms/step - loss: 0.6689 - accuracy: 0.7640 - val_loss: 0.8708 - val_accuracy: 0.7096
Epoch 10/10
1563/1563 [==============================] - 75s 48ms/step - loss: 0.6348 - accuracy: 0.7779 - val_loss: 0.8644 - val_accuracy: 0.7147

借助 with tf.device('/GPU:0') 上下文管理器,计算在 GPU 上完成。

结论

将 GPU 用于机器学习可以显著提高模型的性能,并将训练时间从几天缩短到几小时甚至几分钟。在将 GPU 用于机器学习之前,您需要先配置它,包括安装必要的驱动程序和库、检查配置,然后才能继续。这将减少运行时间并使代码执行更快。

更新于: 2023年7月31日

3K+ 阅读量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告