開發 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
留言分享你的想法!
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
TOMICA第一波推出吉伊卡哇聯名小車車的時候馬上就被搶購一空,一直很扼腕當時沒有趕緊入手。前陣子閒來無事逛蝦皮,突然發現幾家商場都又開始重新上架,價格也都回到正常水準,估計是官方又再補了一批貨,想都沒想就立刻下單! 同文也跟大家分享近期蝦皮購物紀錄、好用推薦、蝦皮分潤計畫的聯盟行銷!
Thumbnail
TOMICA第一波推出吉伊卡哇聯名小車車的時候馬上就被搶購一空,一直很扼腕當時沒有趕緊入手。前陣子閒來無事逛蝦皮,突然發現幾家商場都又開始重新上架,價格也都回到正常水準,估計是官方又再補了一批貨,想都沒想就立刻下單! 同文也跟大家分享近期蝦皮購物紀錄、好用推薦、蝦皮分潤計畫的聯盟行銷!
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
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效能的擴充速度正在大幅降低,提出「運算通膨」概念
Thumbnail
這是我最近在『網路安全停看聽』Podcast企劃的一集,文末會提供podcast單集連結,想讓眼睛休息的格友們也可點選收聽喔! 今年NVIDIA輝達這家公司在世界掀起了旋風,不管你之前有沒有購買這家公司的股票,當執行長黃仁勳先生訪台,台灣各家媒體爭相報導下,你總應該注意到這家厲害的公司了。Go
Thumbnail
這是我最近在『網路安全停看聽』Podcast企劃的一集,文末會提供podcast單集連結,想讓眼睛休息的格友們也可點選收聽喔! 今年NVIDIA輝達這家公司在世界掀起了旋風,不管你之前有沒有購買這家公司的股票,當執行長黃仁勳先生訪台,台灣各家媒體爭相報導下,你總應該注意到這家厲害的公司了。Go
Thumbnail
(2023/4/16) 聽完‎在 Apple Podcasts 上的《財報狗 - 掌握台股美股時事議題》:205.【財經時事放大鏡】NVIDIA GTC 與美國晶片法 Q: 為何語言要大量訓練深度學習不是用擅長複雜運算/電晶體密度也較高的CPU? 其實也不了解GPU/CPU的差異關鍵在哪? A:(f
Thumbnail
(2023/4/16) 聽完‎在 Apple Podcasts 上的《財報狗 - 掌握台股美股時事議題》:205.【財經時事放大鏡】NVIDIA GTC 與美國晶片法 Q: 為何語言要大量訓練深度學習不是用擅長複雜運算/電晶體密度也較高的CPU? 其實也不了解GPU/CPU的差異關鍵在哪? A:(f
Thumbnail
「下好離手,說一句話之前不好決定,但說出口就一定是這樣。」Andy說。 我都說,Andy有三顆CPU。 中央處理器(英語:CentralProcessingUnit,縮寫:CPU)是電腦的主要裝置之一,功能主要是解釋電腦指令以及處理電腦軟體中的資料。電腦的可程式化性主要是指對中央處理器的編程。 E
Thumbnail
「下好離手,說一句話之前不好決定,但說出口就一定是這樣。」Andy說。 我都說,Andy有三顆CPU。 中央處理器(英語:CentralProcessingUnit,縮寫:CPU)是電腦的主要裝置之一,功能主要是解釋電腦指令以及處理電腦軟體中的資料。電腦的可程式化性主要是指對中央處理器的編程。 E
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News