〔程式教學〕PyTorch 支援 Apple Silicon GPU (Mac M1)

緯緯道來
·
·
IPFS
·
pytorch

前言

在 2022 年 5 月18 日的這一天,PyTorch 在 Official Blog 中宣布:在 PyTorch 1.12 版本中將可以使用 Apple Silicon 中的 GPU,也就是說如果你的 MacBook Air 或 MacBook Pro 的處理器是使用 M1 晶片而非 Intel 晶片,那麼你利用 PyTorch 框架所建立的 Neural Network,將可以使用 GPU 進行訓練 (過去只有 TensorFlow 可以)!

在本篇文章中,我們介紹如何安裝支援 M1 GPU 的 PyTorch,並透過一個簡單的分類問題,來測試 CPU 與 GPU 的效能。

確認 MacOS 版本

在安裝 PyTorch 之前,必須先確保 MacOS 版本大於或等於 12.3,因為最新版的 PyTorch 底層使用 Apple’s Metal Performance Shaders (MPS) 。

打開 Terminal 並輸入以下指令,查看自己的 MacOS 版本:

sw_vers

安裝 Miniconda

在進行 Python 程式的開發時,不同專案需要不同的套件,比較好的做法是替每一個專案建立一個虛擬環境,讓專案與專案之間的套件彼此不受影響。

在 Python 中,管理套件的輔助工具有很多種,我們選擇使用 Anaconda 來管理我們的套件。但是在 Anaconda 中包含太多其他的工具,我們選擇安裝簡化版的 Anaconda —— Miniconda

Miniconda 在許多作業系統中都可以使用,我們要安裝支援 MacOS M1 的版本,也就是 Miniconda3 macOS Apple M1 ARM 64-bit bash

下載完成之後,開啟 Terminal 找到這個 script 檔案:

miniconda installer

透過 chmod 確保這個檔案能夠被執行:

sudo chmod +x Miniconda3-py38_4.12.0-MacOSX-arm64.sh

接著,執行這個 script:

./Miniconda3-py38_4.12.0-MacOSX-arm64.sh

跟著指令操作完成 Miniconda 的安裝。

建立 PyTorch 虛擬環境

一樣打開 Terminal,建立一個名為「pytorch-m1」的虛擬環境,並指定 Python 版本為 3.8。

conda create --name pytorch-m1 python=3.8

接著,啟用這個虛擬環境:

conda activate pytorch-m1

透過 pip 安裝所需要的套件:

pip3 install --pre torch torchvision --extra-index-url https://download.pytorch.org/whl/nightly/cpu

等待大約 1 分鐘完成所有套件的安裝後,就大功告成囉!

在 PyTorch 中使用 M1 GPU

過去我們在 PyTorch 中如果要使用 Nvidia 的 GPU 時,可以透過:

device = torch.device("cuda")

如果要使用 M1 GPU 只需要將 cuda 改為 mps,剩下的操作都和原本是一樣的 (將 Tensor 與 Model 移動到 Device 上):

device = torch.device("mps")

M1 CPU vs M1 GPU (1)

接著,我透過一個簡單的分類問題 —— MNIST Digit Classification,來比較使用 MacBook Air 2020 上 M1 CPU 與 M1 GPU 所需要的訓練時間。

我使用 GitHub 上 pytorch/examples 所提供的程式碼,分別使用 CPU 與 GPU 對模型進行訓練。皆訓練 5 個 Epochs 且 Batch Size 設為 64。

下圖為兩者的時間差異:

Training Time of M1 CPU vs M1 GPU on MNIST

M1 CPU 一個 Epoch 大約花了 28.96 秒,M1 GPU 一個 Epoch 約花了 18.26 秒,時間上減少了 36.95%

M1 CPU vs M1 GPU (2)

上面透過一個很簡單的模型與資料集來比較 CPU 與 GPU 的效能,sebastianraschka 在其部落格上還比較了不同硬體裝置使用 CIFAR-10 資料集訓練 VGG16 模型的效能:

VGG16 on CIFAR10 [source: sebastianraschka.com]

若單純比較 M1 Pro CPU 與 M1 Pro GPU 可以發現 GPU 的時間比 CPU 減少了 44.54%

結語

本文說明如何在 PyTorch 中使用 M1 GPU,並比較 M1 CPU 與 M1 GPU 的效能差異。然而,儘管 PyTorch 可以支援 M1 GPU,但是使用筆電 (MacBook Air 或 MacBook Pro) 作為訓練神經網路的主要裝置,仍然是個不切實際的想法!畢竟訓練大型的神經網路,所需要的訓練時間更長,將會使得筆電長時間過熱,而造成壽命減短。


👣 👣 👣 我喜歡撰寫程式開發、資料科學領域相關的文章,希望可以透過簡單的文字解釋複雜的觀念!如果你也有興趣可以到我的其他平台逛逛哦!
👉🏻 DataSci Ocean
👉🏻 YouTube
👉🏻 Instagram


CC BY-NC-ND 2.0 授权

喜欢我的作品吗?别忘了给予支持与赞赏,让我知道在创作的路上有你陪伴,一起延续这份热忱!

緯緯道來研究所學生,主修資訊工程,熱衷於深度學習與機器學習。初期先以基本的程式教學為主,希望我的文章能夠幫助到你!(https://linktr.ee/johnnyhwu)
  • 来自作者
  • 相关推荐

Python 中 if __name__ == “__main__” 有什麼用處

近期的心情寫照

Python Module 觀念解析