機器學習中使用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 用於機器學習之前,您需要先配置它,包括安裝必要的驅動程式和庫、檢查配置,然後才能繼續。這將減少執行時間並使程式碼執行更快。
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP