之前伺服器環境使用的是NVIDIA的Tesla P4的環境,程式運作沒有問題,但是換成Tesla M40,程式就算就出現較大的偏差。
大緻原因是M40是單精度的浮點數的運算,P4是雙精度,在雙精度上的計算結果用在單精度上運作,運算精度不一樣,是以計算偏差比較大,導緻的結果不一緻。特别是乘除法的矩陣運算,結果運算偏差會很大。
解決方式是模型訓練時,指明單精度運算做訓練:
如:
改寫為:
參考:
- CUDA 中 單精度浮點操作和 雙精度浮點操作
- Different results for CUDA addition on host and on GPU