机器学习中使用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 用于机器学习之前,您需要先配置它,包括安装必要的驱动程序和库、检查配置,然后才能继续。这将减少运行时间并使代码执行更快。