開發 Python/PyTorch 多執行緒程式在輝達 nVidia CUDA 環境下

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

在安裝實體具有多核 GPU 的環境下,可以透過 Python 「多執行緒的」程式,讓 CPU 及 GPU 依照特性,各自同時進行運算。通常會在 CPU 端處理各種資料處理及人機界面的管理,而在 GPU 端則進行大量數值運算的工作;由於這兩方面的工作都需要同時間進行,因此常會利用「多執行緒」(Thread) 的方式來進行。

  • CPU 端多執行緒程式

假定我們同時在 CPU 端及 GPU 端都要進行多次的矩陣相乘的運算,那麼在 CPU 端的執行緒函數可以這樣撰寫。

import threading
import numpy as np
class cpuThread(threading.Thread):
def __init__(self, x,y,count):
threading.Thread.__init__(self)
self.x=x
self.y=y
self.ans=x
self.count=count
def run(self):
for i in range(self.count):
self.ans=np.matmul(self.x,self.y)

接下來,我們單獨看一下在 CPU 端所花費的執行時間,

import time
np.random.seed(0)
matrixA=np.random.rand(1000,1000).astype('float32')
matrixB=np.random.rand(1000,1000).astype('float32')
beginTime=time.time()
runCPU=cpuThread(matrixA,matrixB,1000)
runCPU.start()
runCPU.join()

# 印出計算所花的時間
print('CPU execution time:',time.time()-beginTime)
  • GPU 端多執行緒程式

另外,在 GPU 端的執行緒則類似於 CPU 的執行緒,主要的差別則是由「numpy」改用「torch」函式庫。

import torch
class gpuThread(threading.Thread):
def __init__(self, x,y,count):
threading.Thread.__init__(self)
self.x=x
self.y=y
self.count=count
self.ans=x
def run(self):
for i in range(self.count):
self.ans=torch.matmul(self.x,self.y)

以及單獨在 GPU 端所花費的時間。

np.random.seed(0)
matrixA=np.random.rand(1000,1000).astype('float32')
matrixB=np.random.rand(1000,1000).astype('float32')
tensorA=torch.tensor(matrixA).to(device)
tensorB=torch.tensor(matrixB).to(device)

beginTime=time.time()
runGPU=gpuThread(tensorA,tensorB,1000)
runGPU.start()
runGPU.join()
# 等所有 GPU 都計算完畢
torch.cuda.synchronize()
# 印出計算所花的時間
print('GPU execution time:',time.time()-beginTime)

在 Jetson Orin Nano 的機器上,GPU 大約是花費 2~3 秒的時間,而 CPU 端相同的計算大約會花費到 15 秒以上的時間。

  • 同時執行 CPU 端及 GPU 端多執行緒

當然,也可以合併以上兩段程式,同時間在 CPU 及 GPU 端來執行,然後透過「jtop」觀查一下在 Jetson Orin Nano 裝置上計算的負荷如何變化。

np.random.seed(0)
matrixA=np.random.rand(1000,1000).astype('float32')
matrixB=np.random.rand(1000,1000).astype('float32')
tensorA=torch.tensor(matrixA).to(device)
tensorB=torch.tensor(matrixB).to(device)

beginTime=time.time()
runCPU=cpuThread(matrixA,matrixB,1000)
runGPU=gpuThread(tensorA,tensorB,1000)
runCPU.start()
runGPU.start()
runCPU.join()
runGPU.join()
# 等所有 GPU 都計算完畢
torch.cuda.synchronize()
# 印出計算所花的時間
print('CPU combined with GPU execution time:',time.time()-beginTime)
raw-image
raw-image
  • 小結語

由於 CPU 及 GPU 的特性以及對不同資料型態的處理能力不同,透過「多執行緒」的程式開發分別對不同資訊在不同晶片機制的邏輯處理,可以充分地應用到算力的資源;進一步開發即時人工智慧相關的程式及研究。

留言
avatar-img
甘果的沙龍
6會員
33內容數
作者從國內主要的半導體公司退休,重回校園唸書;開始第三人生。分享退休投資規劃、科技產業經驗以及校園學習點滴。
甘果的沙龍的其他內容
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
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
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
PyTorch 是一個開源的 Python 機器學習庫,基於 Torch 庫,底層由 C++ 實現,應用於人工智慧領域,如電腦視覺和自然語言處理等。 PyTorch 2.4 引入了多項新功能和改進,包括支援 Python 3.12、AOTInductor 凍結功能、新的高階 Python 自訂運算
Thumbnail
PyTorch 是一個開源的 Python 機器學習庫,基於 Torch 庫,底層由 C++ 實現,應用於人工智慧領域,如電腦視覺和自然語言處理等。 PyTorch 2.4 引入了多項新功能和改進,包括支援 Python 3.12、AOTInductor 凍結功能、新的高階 Python 自訂運算
Thumbnail
神經處理單元(NPU)主要用於加速人工智慧(AI)和機器學習(ML)任務。 以下是一些主要的應用領域和使用者: AI和機器學習:NPU是人工智慧和機器學習領域的直接受益者。這些技術依賴數據而蓬勃發展,NPU擅長消化和解釋大量資料集,使機器能夠以前所未有的速度學習。 智慧型設備和物聯網:在智慧型
Thumbnail
神經處理單元(NPU)主要用於加速人工智慧(AI)和機器學習(ML)任務。 以下是一些主要的應用領域和使用者: AI和機器學習:NPU是人工智慧和機器學習領域的直接受益者。這些技術依賴數據而蓬勃發展,NPU擅長消化和解釋大量資料集,使機器能夠以前所未有的速度學習。 智慧型設備和物聯網:在智慧型
Thumbnail
NVIDIA、Intel、Tenstorrent和RISC-V在AI半導體領域的競爭和合作。Intel在AI領域推出了一系列產品,Tenstorrent和Rapidus合作開發新技術,而RISC-V開放源碼指令集架構也受到了廣泛關注。這些內容都展示了AI半導體市場的技術革新和競爭激烈的情況。
Thumbnail
NVIDIA、Intel、Tenstorrent和RISC-V在AI半導體領域的競爭和合作。Intel在AI領域推出了一系列產品,Tenstorrent和Rapidus合作開發新技術,而RISC-V開放源碼指令集架構也受到了廣泛關注。這些內容都展示了AI半導體市場的技術革新和競爭激烈的情況。
Thumbnail
NVIDIA 黃仁勳 - AI人工智慧時代如何帶動全球新產業革命(個人紀錄用) 🇺🇸Omniverse 就是未來集大成,而加速運算、人工智慧就是兩個最重要的技術核心 🇺🇸CPU效能的擴充速度正在大幅降低,提出「運算通膨」概念
Thumbnail
NVIDIA 黃仁勳 - AI人工智慧時代如何帶動全球新產業革命(個人紀錄用) 🇺🇸Omniverse 就是未來集大成,而加速運算、人工智慧就是兩個最重要的技術核心 🇺🇸CPU效能的擴充速度正在大幅降低,提出「運算通膨」概念
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News