增量式學習演算法能夠同時學習網路的節點與引數,但是隨著模型結構的增長,計算成本也越來越高,有兩個途徑可以減少計算所需的時間成本:(1)研究模型劃分方法,將比較大的模型劃分成幾個較小的子模型;(2)通過提高計算機的計算能力(gpu或cpu)。tx2能夠利用cuda進行gpu平行計算,pycuda作為python的平行計算庫,可以方便的實現gpu並行加速。本文利用pycuda實現並行加速,並與numpy進行對比。安裝、簡單使用教程請參照pycuda官網。
這段**是c++核心函式,裡面定義的是gpu平行計算的主**。例如:定義兩個向量相加的核心函式import pycuda.autoinit
import pycuda.driver as drv
import numpy as np
import time
from pycuda.compiler import sourcemodule
mod = sourcemodule(
'''__global__ void text_gpu(float *a , float *b, float *k, size_t n)
''')
_shared_ 變數;mod = sourcemodule(
"""__global__ void multiply_them(float *dest, float *a, float *b)
""")
定義同一block下的共享記憶體。
__syncthreads()
同步函式,當以上**在同一block裡都執行完畢後,再執行同步函式下面的**。
blockidx.x與threadidx.x
blockidx.x取block的id,threadidx.x取執行緒的id。
numpy方式一(非for迴圈)
import numpy as np
import time
a = np.random.random(
(1000,20
)).astype(np.float32)
b = np.random.random(
(1000,20
)).astype(np.float32)
tic = time.time(
)dk = a-b
dd =
[np.
sum(a**2)
for a in dk]
k1 = np.exp(
-np.array(dd)
)toc = time.time(
("time cost is:"
+str
(toc-tic)
)
time cost is:0.0174951553345numpy方式二(for迴圈)
import numpy as np
import time
a = np.random.random(
(1000,20
)).astype(np.float32)
b = np.random.random(
(1000,20
)).astype(np.float32)
defguassion_kernel
(x, u)
: d = x-u
dd =
[np.
sum(a**2)
for a in d]
return np.exp(
-sum
(dd)
)tic = time.time(
)phi_x =
for j in
range
(1000):
, b[j]))
toc = time.time(
("time cost is:"
+str
(toc-tic)
(phi_x)
time cost is:0.0264999866486**列出以上三種方式的計算成本。可以看出gpu加速的計算時間成本最低,而帶for迴圈計算的計算時間成本最高。這也只是初步的對比,實際應用中,有時gpu加速並不比cpu快。當資料維度很小,況且gpu加速的預配置也是需要額外的計算量,這導致有時帶gpu加速的計算時間反而比cpu的要長。
types
gpucpu without for loop
cpu with for loop
time cost
0.00536298751831
0.0174951553345
0.0264999866486
最後應用在增量式演算法中,由於節點的個數是慢慢增加的。三種方式的計算每個迭代步的成本如下圖所示。我們發現,執行開始時,節點個較小,gpu計算時間成本比cpu要高,但是後面的,gpu與cpu(…貌似gpu也沒有很大優勢,主要是節點個數還很少,一百多個節點),我相信隨著節點的進一步增加,會更加突現出gpu的有效性。
本文介紹了pycuda,並實現了python的gpu平行計算。
python平行計算 python平行計算
0.基礎並行 發 multiprocessing threading 1.concurrent 2.併發 asynico 3.ipython下的平行計算 使用ipyparallel庫的ipython提供了前所未有的能力,將科學python的探索能力與幾乎即時訪問多個計算核心相結合。系統可以直觀地與本...
平行計算模型
平行計算模型通常指從並行演算法 的設計和分析出發,將各種並行計算機 至少某一類並行計算機 的基本特徵抽象出來,形成乙個抽象的計算模型。從更廣的意義上說,平行計算模型為平行計算提供了硬體和軟體介面 在該介面的約定下,並行系統硬體設計者和軟體設計 者可以開發對並行性 的支援機制,從而提高系統的效能。有幾...
平行計算模型
平行計算指的在同一時刻存在多於乙個計算任務被執行。由於cpu主頻提高的上限,使用多核心處理器進行平行計算早已成為主流。gpu也是乙個多核心的處理器,但它的平行計算模型與多核的cpu有很大區別。我們有必要了解gpu的並計算模型。對平行計算模式進行分類是了解cpu和gpu平行計算區別的有效方式。一種分類...