最近在看資料時發現寫着使用float16 半精度類型的數據計算速度要比float32的單精度類型數據計算要快,因為以前沒有考慮過數據類型對計算速度的影響,只知道這個會影響最終的計算結果精度。於是,好奇的使用TensorFlow寫了些代碼,試試看看是否有很大的區別,具體代碼如下:
import tensorflow as tf import time x = tf.Variable(tf.random.normal([64,3000,3000], dtype=tf.float32)) y = tf.Variable(tf.random.normal([64,3000,3000], dtype=tf.float32))
#x = tf.Variable(tf.random.normal([64,3000,3000], dtype=tf.float16))
#y = tf.Variable(tf.random.normal([64,3000,3000], dtype=tf.float16))
init = tf.global_variables_initializer() with tf.Session() as sess: sess.run(init) a = time.time() for _ in range(500): sess.run(tf.matmul(x,y)) b = time.time() print(b-a)
上述代碼,分別使用單精度或半精度類型的x,y來進行計算。
分別使用RTX titan 和 RTX 2060super 兩個類型的顯卡分別測試:
RTX titan 顯卡環境下:
Float32 , 單精度數據類型的x, y:
RTX titan 顯卡環境下:
Float16 , 半精度數據類型的x, y:
-------------------------------------------------------------------------
RTX 2060super 顯卡環境下:
Float32 , 單精度數據類型的x, y:
RTX 2060super 顯卡環境下:
Float16 , 半精度數據類型的x, y:
======================================================
說下個人的結論:
1. 如果任務需要的計算能力在家用級別顯卡的計算能力之下(顯卡利用率在100%以內,不考慮顯存的前提),那么家用級顯卡計算時間不會比服務器級別顯卡運算時間長。或者說,如果你的任務使用家用級別顯卡可以應付,那么運行時間不會比使用服務器級別顯卡的時間長。
2. 服務器級別的顯卡運行效率受多方面的條件影響,同一任務多次運行的時間會有一定波動;而家用級別的顯卡一般所受影響的方面較少,同一任務多次運行的時間也比較一致。
3.同一個任務可能使用服務器顯卡,顯卡的利用率可能只有40%,但是使用家用級別的顯卡利用率可能就有99%了,證明服務器顯卡的性能上限要遠高於家用級別顯卡。但是如果你的計算任務並沒有那么高的計算性能要求,可能使用家用級別的顯卡(此時,如果你在超個頻啥的,oc版顯卡)運算時間很可能要短於服務器級別顯卡的運算時間的。
======================