使用 PyTorch/CUDA 在 GPU 上撰寫反饋類神經網路程式

甘果-avatar-img
發佈於程式
更新於 發佈於 閱讀時間約 7 分鐘

我們在輝達 nVidia Jetson Orin Nano 的裝置上,可以透過 PyToch 以及 CUDA 來使得反饋類神經網路的運算,不透過 CPU 而交由 GPU 來作運算執行;它與原來在 CPU 上執行 PyTorch 的反饋類神經網路的撰寫程式差異不大,這也是我們使用 PyTorch 的好處;絕大部份在 GPU 的平行運算的工作,都由 PyTorch 來解決掉了,程式撰寫只需要專注在程式邏輯的開發。

在同時有 CPU 及 GPU 的運算上,因為所有的人機界面;包括文字輸出入、檔案輸出入以及繪圖,都是直接由 CPU 來負責,而 GPU 只能執行數值計算的部份。因此在使用 CUDA 作 GPU 的運算時,就必須要將資料以及變數在 CPU 及 GPU 之間搬移;這樣才能有效地使用 CUDA/GPU 加速運算的好處。

raw-image


  • 模型學習目標

首先,我們還是先以「墨西帽」的模型作為例子來作說明。

raw-image
import numpy as np
import matplotlib.pyplot as plt
x=np.arange(-2*np.pi,2*np.pi,0.1)
y=np.sin(x)*x
plt.xlabel('x')
plt.ylabel('y')
plt.plot(x,y,'b.')
plt.grid()
plt.show()
  • 建立類神經網路類別

再來按照原來在 CPU 環境上,同樣建立類神經網路類別;這一部份也沒有改變。

import torch
from torch import nn

class classNeural(nn.Module):
def __init__(self,n_input,n_hidden,n_output):
super().__init__()
self.n_input=n_input
self.n_hidden=n_hidden
self.n_output=n_output
#--------
self.layer1=nn.Linear(n_input,n_hidden)
self.layer2=nn.Linear(n_hidden,n_output)
self.active=nn.Sigmoid()
#--------
def forward(self,x):
x=self.active(self.layer1(x))
return self.layer2(x)


  • 確認 CUDA/GPU 裝置準備完備

接下來必需要詢問 PyTorch,目前的裝置是否支援 CUDA 的 GPU 運算。

device=torch.device('cpu')
if torch.cuda.is_available():
device=torch.device('cuda')
  • 資料搬移到 GPU

然後,我們要把訓練資料透過「to(‘cuda’)」這個函數,將資料從 CPU 搬到 GPU 上。

X_train=torch.tensor(x.astype('float32')).unsqueeze(dim=1).to(device)
Y_train=torch.tensor(y.astype('float32')).unsqueeze(dim=1).to(device)
  • 類神經網路搬移到 GPU

再來,創建類神經網路變數,並且透過「to(‘cuda’)」,將類神經網路也搬到 GPU 上。

torch.manual_seed(13)
neural=classNeural(1,10,1).to(device)
  • 在 GPU 進行類神經網路訓練

一般來說,最花費運算時間及資源的,就是訓練類神經網路,也是最需要使用 GPU 的部份;這一段程式的寫法其實與在 CPU 上的寫法是一樣的,但是因為訓練資料以及類神經網路變數都在 GPU 上,所以整個運算也就會在 GPU 上面執行。

neural.train()
n_epoche=5000
mae_x=[]
mae_y=[]

for epoche in range(n_epoche):
Y_pred=neural(X_train)
loss=loss_fn(Y_pred,Y_train)
optimizer.zero_grad()
loss.backward()
optimizer.step()
  • 輸出在 GPU 訓練好的模型的預測數值

最後,在輸出訓練好的類神經網路模型的預測值的時候,要注意所有的輸出到人機界面的數值,包括文字顯示或繪圖或檔案的資料,都必須要透過函數「to(‘cpu’)」由 GPU 搬到 CPU 上,才能進行。

neural.eval()
with torch.inference_mode():
Y_pred=neural(X_train)
y_pred=Y_pred.to("cpu").numpy()
#—————————————————
plt.plot(x,y,'b.',label='training data')
plt.plot(x,y_pred,'r-',label='prediction')
plt.grid()
plt.legend(fontsize=12)
plt.xlabel('x')
plt.ylabel('y')
plt.show()
raw-image
  • 觀察並確認類神經網路在 GPU 上運算

在執行類神經網路訓練時,我們可以同時透過 Jetson Orin Nano 的「jtop」指令,觀察在 Jetson Orin Nano 裝置上 GPU 的執行狀態,可以確認主要的計算都在 GPU 上面執行。

raw-image




留言
avatar-img
留言分享你的想法!
avatar-img
甘果的沙龍
4會員
25內容數
作者從國內主要的半導體公司退休,重回校園唸書;開始第三人生。分享退休投資規劃、科技產業經驗以及校園學習點滴。
甘果的沙龍的其他內容
2025/04/26
本文章說明如何在已安裝 Python 3.9 的 iMac mini 上設定 Python 虛擬環境,以及如何使用 venv 工具、安裝常用函式庫(如 numpy、pyTorch 等),並設定 Jupyter 連動不同 Python 虛擬環境。
Thumbnail
2025/04/26
本文章說明如何在已安裝 Python 3.9 的 iMac mini 上設定 Python 虛擬環境,以及如何使用 venv 工具、安裝常用函式庫(如 numpy、pyTorch 等),並設定 Jupyter 連動不同 Python 虛擬環境。
Thumbnail
2025/04/19
這篇文章說明如何在iMac mini M4上設定Jupyter Notebook作為遠端程式設計伺服器,方便使用iPad進行程式開發。文章涵蓋Jupyter Notebook的安裝、設定遠端連線以及建立可執行的shell script,讓伺服器能持續運作。
Thumbnail
2025/04/19
這篇文章說明如何在iMac mini M4上設定Jupyter Notebook作為遠端程式設計伺服器,方便使用iPad進行程式開發。文章涵蓋Jupyter Notebook的安裝、設定遠端連線以及建立可執行的shell script,讓伺服器能持續運作。
Thumbnail
2025/04/10
本文介紹如何將蘋果iMac mini作為CP值最高的人工智慧程式設計伺服器,搭配 iPad 進行遠端程式設計工作。文章說明瞭啟動遠端服務、連接SSH伺服器、使用外接硬碟及連接FTP伺服器等步驟,並推薦了相關應用 app。
Thumbnail
2025/04/10
本文介紹如何將蘋果iMac mini作為CP值最高的人工智慧程式設計伺服器,搭配 iPad 進行遠端程式設計工作。文章說明瞭啟動遠端服務、連接SSH伺服器、使用外接硬碟及連接FTP伺服器等步驟,並推薦了相關應用 app。
Thumbnail
看更多
你可能也想看
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
CUDA(Compute Unified Device Architecture) 是由 NVIDIA公司開發的並行計算平台 和 程式設計模型,主要用於利用 GPU(圖形處理器)的強大運算能力來加速通用計算任務。以下是其核心概念與應用: 一、核心概念 GPU 加速計算: 傳統上 G
Thumbnail
CUDA(Compute Unified Device Architecture) 是由 NVIDIA公司開發的並行計算平台 和 程式設計模型,主要用於利用 GPU(圖形處理器)的強大運算能力來加速通用計算任務。以下是其核心概念與應用: 一、核心概念 GPU 加速計算: 傳統上 G
Thumbnail
CUDA Core(通用計算單元) 是 NVIDIA GPU(圖形處理器)中的基本計算單元,專門設計用來執行並行計算任務。它們是 NVIDIA CUDA 平台的核心部分,用來處理圖形渲染和一般計算任務,特別是那些需要大規模數據運算的應用,例如遊戲圖形、科學模擬和人工智慧(AI)。 1. CUD
Thumbnail
CUDA Core(通用計算單元) 是 NVIDIA GPU(圖形處理器)中的基本計算單元,專門設計用來執行並行計算任務。它們是 NVIDIA CUDA 平台的核心部分,用來處理圖形渲染和一般計算任務,特別是那些需要大規模數據運算的應用,例如遊戲圖形、科學模擬和人工智慧(AI)。 1. CUD
Thumbnail
本文說明在安裝實體具有多核 GPU 的環境下,可以透過 Python 「多執行緒的」程式,讓 CPU 及 GPU 依照特性,各自同時進行運算,得到最好的算力配置。
Thumbnail
本文說明在安裝實體具有多核 GPU 的環境下,可以透過 Python 「多執行緒的」程式,讓 CPU 及 GPU 依照特性,各自同時進行運算,得到最好的算力配置。
Thumbnail
本文介紹如何在 nVidia Nano Python/CUDA 伺服器,遠端使用 Jupyter Notebook 編輯和執行程式。包括Jupyter Notebook 的安裝過程及其配置文件的修改,和遠端存取的機制。本文藉由接近大型公司使用的資訊安全環境的架設,期待相關學生縮短進入業界的學習曲線。
Thumbnail
本文介紹如何在 nVidia Nano Python/CUDA 伺服器,遠端使用 Jupyter Notebook 編輯和執行程式。包括Jupyter Notebook 的安裝過程及其配置文件的修改,和遠端存取的機制。本文藉由接近大型公司使用的資訊安全環境的架設,期待相關學生縮短進入業界的學習曲線。
Thumbnail
本文介紹如何在 nVidia Jetson Orin Nano 裝置上安裝 PyTorch,並運用其 Python 及 CUDA 環境進行機器學習和人工智慧的開發。提供詳細步驟。適合希望在該平臺上開展研究與開發的使用者。
Thumbnail
本文介紹如何在 nVidia Jetson Orin Nano 裝置上安裝 PyTorch,並運用其 Python 及 CUDA 環境進行機器學習和人工智慧的開發。提供詳細步驟。適合希望在該平臺上開展研究與開發的使用者。
Thumbnail
輝達的 Jetson Orin Nano 是一款小型、平價但功能強大的電腦,擁有完整的平行運算與人工智慧能力;對學術或教學用途非常適合。本文將介紹如何安裝 Python 和 CUDA 環境,並探討其在遠端伺服器替代方案的優勢,是學習與研究 AI 和平行運算的理想選擇。
Thumbnail
輝達的 Jetson Orin Nano 是一款小型、平價但功能強大的電腦,擁有完整的平行運算與人工智慧能力;對學術或教學用途非常適合。本文將介紹如何安裝 Python 和 CUDA 環境,並探討其在遠端伺服器替代方案的優勢,是學習與研究 AI 和平行運算的理想選擇。
Thumbnail
要使用 CUDA(Compute Unified Device Architecture)來加速計算,首先需要在你的系統上設置和安裝相關的工具。CUDA 是由 NVIDIA 開發的平行計算框架,用於加速大量數據的運算,尤其在圖像處理、機器學習、科學計算等領域很有應用。 可以參考官方的安裝方式 以
Thumbnail
要使用 CUDA(Compute Unified Device Architecture)來加速計算,首先需要在你的系統上設置和安裝相關的工具。CUDA 是由 NVIDIA 開發的平行計算框架,用於加速大量數據的運算,尤其在圖像處理、機器學習、科學計算等領域很有應用。 可以參考官方的安裝方式 以
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News