(一)tensorflow-gpu2.0学习笔记之开篇(cpu和gpu计算速度比较)
摘要:
1.以動(dòng)態(tài)圖形式計(jì)算一個(gè)簡(jiǎn)單的加法
2.cpu和gpu計(jì)算力比較(包括如何指定cpu和gpu)
3.關(guān)于gpu版本的tensorflow安裝問題,可以參考另一篇博文:https://www.cnblogs.com/liuhuacai/p/11684666.html
正文:
1.在tensorflow中計(jì)算3.+4.
##1.創(chuàng)建輸入張量
a = tf.constant(2.)
b = tf.constant(4.)
##2.計(jì)算結(jié)果
print('a+b=',a+b)
輸出:a+b= tf.Tensor(7.0, shape=(), dtype=float32)
總結(jié):20版本在加法實(shí)現(xiàn)過程中簡(jiǎn)單了不少,所見即所得。(1.x的實(shí)現(xiàn)過程相對(duì)復(fù)雜)據(jù)說動(dòng)態(tài)的實(shí)現(xiàn)也是后端轉(zhuǎn)化成靜態(tài)圖實(shí)現(xiàn)的。
2.cpu和gpu計(jì)算力比較
說明:通過計(jì)算不同大小的矩陣乘法,獲得計(jì)算時(shí)間。
1.指定cpu或gpu通過 with tf.device('/cpu:0'):或 with tf.device('/gpu:0'):指定,在需要加速的操作前添加即可(此處生成隨機(jī) 數(shù)和矩陣乘法都加速)
2.統(tǒng)計(jì)計(jì)算時(shí)間的函數(shù)timeit.timeit需要導(dǎo)入import timeit【timeit.timeit(需計(jì)時(shí)的函數(shù)或語句,計(jì)算次數(shù))】
3.計(jì)算量的大小與cpu和gpu計(jì)算時(shí)間的關(guān)系,計(jì)算量通過改變矩陣大小實(shí)現(xiàn)
import tensorflow as tf
import timeit
以矩陣A[10,n]和矩陣B[n,10]的乘法運(yùn)算(分別在cpu和gpu上運(yùn)行)來測(cè)試,
'''
with tf.device('/cpu:0'): ##指定操作用cpu計(jì)算
cpu_a = tf.random.normal([10,n]) ##生成符合高斯分布的隨機(jī)數(shù)矩陣,通過改變n大小,增減計(jì)算量
cpu_b = tf.random.normal([n,10])
print(cpu_a.device,cpu_b.device)
with tf.device('/gpu:0'):
gpu_a = tf.random.normal([100n])
gpu_b = tf.random.normal([n,10])
print(gpu_a.device,gpu_b.device)
def cpu_run():
with tf.device('/cpu:0'): ##矩陣乘法,此操作采用cpu計(jì)算
c = tf.matmul(cpu_a,cpu_b)
return c
def gpu_run():
with tf.device('/gpu:0'): ##矩陣乘法,此操作采用gpu計(jì)算
c = tf.matmul(gpu_a,gpu_b)
return c
##第一次計(jì)算需要熱身,避免將初始化時(shí)間計(jì)算在內(nèi)
cpu_time = timeit.timeit(cpu_run,number=10)
gpu_time = timeit.timeit(gpu_run,number=10)
print('warmup:',cpu_time,gpu_time)
##正式計(jì)算10次,取平均值
cpu_time = timeit.timeit(cpu_run,number=10)
gpu_time = timeit.timeit(gpu_run,number=10)
print('run_time:',cpu_time,gpu_time)
通過改變矩陣大小,增加矩陣乘法的計(jì)算量:計(jì)算結(jié)果如下
結(jié)論:1.在計(jì)算量較小的情況下,cpu的計(jì)算速度比gpu計(jì)算速度快,但是都是微量級(jí)別的差異
2.隨著計(jì)算量的增加,cpu的計(jì)算時(shí)間逐步增加,而gpu的計(jì)算時(shí)間相對(duì)平緩,在計(jì)算量達(dá)到一定程度之后,gpu的優(yōu)勢(shì)就出來了。
實(shí)現(xiàn)過程的完整代碼:
import tensorflow as tf
import timeit
import matplotlib.pyplot as plt
'''
以矩陣A[10,n]和矩陣B[n,10]的乘法運(yùn)算(分別在cpu和gpu上運(yùn)行)來測(cè)試,
'''
def cpu_gpu_compare(n):
with tf.device('/cpu:0'): ##指定操作用cpu計(jì)算
cpu_a = tf.random.normal([10,n]) ##生成符合高斯分布的隨機(jī)數(shù)矩陣,通過改變n大小,增減計(jì)算量
cpu_b = tf.random.normal([n,10])
print(cpu_a.device,cpu_b.device)
with tf.device('/gpu:0'):
gpu_a = tf.random.normal([10,n])
gpu_b = tf.random.normal([n,10])
print(gpu_a.device,gpu_b.device)
def cpu_run():
with tf.device('/cpu:0'): ##矩陣乘法,此操作采用cpu計(jì)算
c = tf.matmul(cpu_a,cpu_b)
return c
def gpu_run():
with tf.device('/gpu:0'): ##矩陣乘法,此操作采用gpu計(jì)算
c = tf.matmul(gpu_a,gpu_b)
return c
##第一次計(jì)算需要熱身,避免將初始化時(shí)間計(jì)算在內(nèi)
cpu_time = timeit.timeit(cpu_run,number=10)
gpu_time = timeit.timeit(gpu_run,number=10)
print('warmup:',cpu_time,gpu_time)
##正式計(jì)算10次,取平均值
cpu_time = timeit.timeit(cpu_run,number=10)
gpu_time = timeit.timeit(gpu_run,number=10)
print('run_time:',cpu_time,gpu_time)
return cpu_time,gpu_time
n_list1 = range(1,2000,5)
n_list2 = range(2001,10000,100)
n_list = list(n_list1)+list(n_list2)
time_cpu =[]
time_gpu =[]
for n in n_list:
t=cpu_gpu_compare(n)
time_cpu.append(t[0])
time_gpu.append(t[1])
plt.plot(n_list,time_cpu,color = 'red',label='cpu')
plt.plot(n_list,time_gpu,color='green',linewidth=1.0,linestyle='--',label='gpu')
plt.ylabel('耗時(shí)',fontproperties = 'SimHei',fontsize = 20)
plt.xlabel('計(jì)算量',fontproperties = 'SimHei',fontsize = 20)
plt.title('cpu和gpu計(jì)算力比較',fontproperties = 'SimHei',fontsize = 30)
plt.legend(loc='upper right')
plt.show()
總結(jié)
以上是生活随笔為你收集整理的(一)tensorflow-gpu2.0学习笔记之开篇(cpu和gpu计算速度比较)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [数学]点、线、面分割问题
- 下一篇: .NET WinForm下StatusS