查看完整版本 : TensorFlow.js 或者近期有隱藏大 bug

xianrenb 2018-11-7 08:02 PM

TensorFlow.js 或者近期有隱藏大 bug

最近自己玩玩 TensorFlow.js 。
發現有些自己寫的 model train 極都不正常, loss 落不到, predict 數字時幾乎全錯。

後來試過, tfjs 版本到 0.13.1 都正常, 0.13.2 就出問題。
但神奇的是,完全無 error message 的, console output 都無異常。

暫時都不知問題在那裏。

xianrenb 2018-11-8 07:29 PM

[quote]原帖由 [i]xianrenb[/i] 於 2018-11-7 08:02 PM 發表 [url=https://computer.discuss.com.hk/redirect.php?goto=findpost&pid=490179601&ptid=27835287][img]https://computer.discuss.com.hk/images/common/back.gif[/img][/url]
最近自己玩玩 TensorFlow.js 。
發現有些自己寫的 model train 極都不正常, loss 落不到, predict 數字時幾乎全錯。

後來試過, tfjs 版本到 0.13.1 都正常, 0.13.2 就出問題。
但神奇的是,完全無 error message 的, console output 都無異常。

暫時都不知問題在那裏。 ... [/quote]

雖然不肯定,但有可能是關以下的 bug 事:
[url=https://github.com/tensorflow/tfjs/issues/834]https://github.com/tensorflow/tfjs/issues/834[/url]

看來都幾大件事,因為應該是 TensorFlow.js 唯一一個 label 為 P0 的 bug 。
以我的理解,似是改良程式過程中出現的 bug 。
用家程式用過 reshape 的話,有機會是內部存 tensor 的方式不正確地更改。

無論如何,這使我發現,原來 neural network 工具(硬件或軟件)出現錯誤時,有機會是“運作完全正常”的!
例如,如果程式開發者用其他工具 train 好一個 neural network ,然後改用 TensorFlow.js 實作應用的話。
前述的 bug 的存在應該會對這個實作產生的 prediction 有非常大的影響而產生錯誤預測,但使用者不會知!
例如以下的圍棋 AI ,就可能是受害程式了:
[url=http://fluxml.ai/experiments/go/]http://fluxml.ai/experiments/go/[/url]

[[i] 本帖最後由 xianrenb 於 2018-11-8 07:30 PM 編輯 [/i]]

東邊日出西邊雨 2018-11-9 04:13 PM

[quote]原帖由 [i]xianrenb[/i] 於 2018-11-8 07:29 PM 發表 [url=https://computer.discuss.com.hk/redirect.php?goto=findpost&pid=490232292&ptid=27835287][img]https://computer.discuss.com.hk/images/common/back.gif[/img][/url]


雖然不肯定,但有可能是關以下的 bug 事:
[url=https://github.com/tensorflow/tfjs/issues/834]https://github.com/tensorflow/tfjs/issues/834[/url]

看來都幾大件事,因為應該是 TensorFlow.js 唯一一個 label 為 P0 的 bug 。
以我的理解,似是改良程式過程中出現的 bug 。
用家程式用過 reshape 的話,有機會是內部存 tensor 的方式不正確地更改。
... [/quote]

我用的是 tensorflow,python版,version1.11.0.
暫時沒有看到training Loss 唔 converge 狀態。

input data 有用 reshape, CNN modeling.

xianrenb 2018-11-15 09:30 PM

[quote]原帖由 [i]東邊日出西邊雨[/i] 於 2018-11-9 04:13 PM 發表 [url=https://computer.discuss.com.hk/redirect.php?goto=findpost&pid=490276740&ptid=27835287][img]https://computer.discuss.com.hk/images/common/back.gif[/img][/url]


我用的是 tensorflow,python版,version1.11.0.
暫時沒有看到training Loss 唔 converge 狀態。

input data 有用 reshape, CNN modeling. [/quote]

雖然名稱近似,但大部份實作應該不一樣。

xianrenb 2018-11-15 09:43 PM

最新版的 tfjs-core 也試過了,還是有問題。
雖然到現在也不知是什麼相關改動使我的程式產生問題。
但我好像發現了另一個大 bug :
[url=https://github.com/tensorflow/tfjs-core/blob/master/src/ops/matmul.ts]https://github.com/tensorflow/tfjs-core/blob/master/src/ops/matmul.ts[/url][code]...
const grad = (dy: Tensor3D) => {
    if (!transposeA && !transposeB) {
      return {
        $a: () => dy.matMul(b3D.toFloat(), false, true),
        $b: () => a3D.toFloat().matMul(dy, true, false)
      };
...[/code]以我的理解,如果 A * B = Y ,

ΔA * B = ΔY
A * ΔB = ΔY
但看了:
[url=https://en.wikipedia.org/wiki/Inverse_element#Matrices]https://en.wikipedia.org/wiki/Inverse_element#Matrices[/url]
B^(-1)_right 應該是 B^T * (B * B^T)^(-1)
A^(-1)_left 應該是 (A^T * A)^(-1) * A^T

ΔA = ΔY * B^T * (B * B^T)^(-1)
ΔB = (A^T * A)^(-1) * A^T * ΔY

我有無理解錯?

[[i] 本帖最後由 xianrenb 於 2018-11-15 09:45 PM 編輯 [/i]]

xianrenb 2018-11-16 06:43 AM

[quote]原帖由 [i]xianrenb[/i] 於 2018-11-15 09:43 PM 發表 [url=https://computer.discuss.com.hk/redirect.php?goto=findpost&pid=490596408&ptid=27835287][img]https://computer.discuss.com.hk/images/common/back.gif[/img][/url]
最新版的 tfjs-core 也試過了,還是有問題。
雖然到現在也不知是什麼相關改動使我的程式產生問題。
但我好像發現了另一個大 bug :
[url=https://github.com/tensorflow/tfjs-core/blob/master/src/ops/matmul.ts...]https://github.com/tensorflow/tfjs-core/blob/master/src/ops/matmul.ts...[/url]
const grad = (dy: Tensor3D) => {
    if (!transpose ... [/quote]

記得看過 [url=https://en.wikipedia.org/wiki/Delta_rule]https://en.wikipedia.org/wiki/Delta_rule[/url] ,有點不對勁。
看來是 dy 這個 variable 名改得不好,讓我又記錯了。
dy 應該是存 ∂E/∂Y 這個值的。
其實類似改為 dedy 會比較好,不會弄錯。
return output 的 $a 也是應該是存 ∂E/∂a 的。

不過 E 應該是 scalar ,∂E/∂Y 應該是 element-wise division 。
原來 code 寫的算法,又是否正確呢?
如果不正確,又應該如何算?

xianrenb 2018-11-16 07:08 AM

[quote]原帖由 [i]xianrenb[/i] 於 2018-11-16 06:43 AM 發表 [url=https://computer.discuss.com.hk/redirect.php?goto=findpost&pid=490608446&ptid=27835287][img]https://computer.discuss.com.hk/images/common/back.gif[/img][/url]


記得看過 [url=https://en.wikipedia.org/wiki/Delta_rule]https://en.wikipedia.org/wiki/Delta_rule[/url] ,有點不對勁。
看來是 dy 這個 variable 名改得不好,讓我又記錯了。
dy 應該是存 ∂E/∂Y 這個值的。
其實類似改為 dedy 會比較好,不會弄錯。
return output 的 $a 也是應該是存 ∂E/∂a 的。

不過 E ... [/quote]

或者這樣算,如果 Y 是 m x n matrix 的話:
m > n , ∂E/∂Y 可以以 (ΔY)^(-1)_left * ΔE 來代表。
m < n , ∂E/∂Y 可以以 ΔE * (ΔY)^(-1)_right 來代表。

同理 ∂E/∂A 也可以以 (ΔA)^(-1)_left * ΔE 及 ΔE * (ΔA)^(-1)_right 來代表。

無論如何,看來原來的 code 有問題?

[[i] 本帖最後由 xianrenb 於 2018-11-16 09:35 AM 編輯 [/i]]

xianrenb 2018-11-16 07:35 AM

[quote]原帖由 [i]xianrenb[/i] 於 2018-11-16 07:08 AM 發表 [url=https://computer.discuss.com.hk/redirect.php?goto=findpost&pid=490608748&ptid=27835287][img]https://computer.discuss.com.hk/images/common/back.gif[/img][/url]


或者這樣算,如果 Y 是 m x n matrix 的話:
m >= n , ∂E/∂Y 可以以 (ΔY)^(-1)_left * ΔE 來代表。
m < n , ∂E/∂Y 可以以 ΔE * (ΔY)^(-1)_right 來代表。

同理 ∂E/∂A 也可以以 (&Del ... [/quote]

如果 M = (ΔY)^(-1)_left * ΔE
M = ΔE * (ΔY)^(-1)_left
M * ΔY = ΔE * (ΔY)^(-1)_left * ΔY
M * ΔY = ΔE * I_n
M^(-1)_left * M * ΔY = M^(-1)_left * ΔE * I_n
ΔY = M^(-1)_left * ΔE * I_n

那麼若 ∂E/∂A 以 (ΔA)^(-1)_left * ΔE 代表:
(ΔA)^(-1)_left * ΔE
= (ΔY * B^T * (B * B^T)^(-1))^(-1)_left * ΔE
= (M^(-1)_left * ΔE * I_n * B^T * (B * B^T)^(-1))^(-1)_left * ΔE

再 normalize ,設 ΔE = 1 來代表,應該就可以了。

其他情況類似。

不過這樣看的話,原來的 code 與這個算法非常不同。

xianrenb 2018-11-16 09:36 AM

[quote]原帖由 [i]xianrenb[/i] 於 2018-11-16 07:35 AM 發表 [url=https://computer.discuss.com.hk/redirect.php?goto=findpost&pid=490609275&ptid=27835287][img]https://computer.discuss.com.hk/images/common/back.gif[/img][/url]


如果 M = (ΔY)^(-1)_left * ΔE
M = ΔE * (ΔY)^(-1)_left
M * ΔY = ΔE * (ΔY)^(-1)_left * ΔY
M * ΔY = ΔE * I_n
M^(-1)_left * M * ΔY =  ... [/quote]

想清楚些,原來不行。
如果 M = (ΔY)^(-1)_left * ΔE , Y 是 m x n matrix 而 m > n 。
則 M 會是 n x m matrix !
換言之,根本算不出 M^(-1)_left 的。

xianrenb 2018-11-16 10:33 AM

[quote]原帖由 [i]xianrenb[/i] 於 2018-11-16 09:36 AM 發表 [url=https://computer.discuss.com.hk/redirect.php?goto=findpost&pid=490613303&ptid=27835287][img]https://computer.discuss.com.hk/images/common/back.gif[/img][/url]


想清楚些,原來不行。
如果 M = (ΔY)^(-1)_left * ΔE , Y 是 m x n matrix 而 m > n 。
則 M 會是 n x m matrix !
換言之,根本算不出 M^(-1)_left 的。 [/quote]

前面錯錯錯。

A * B = Y
Σ_{k=1..n} A_(i,k) * B_(k,j) = Y_(i,j)
ΔA_(i,k) * B_(k,j) = ΔY_(i,j)
ΔE/(ΔA_(i,k) * B_(k,j)) = ΔE/ΔY_(i,j)
ΔE/ΔA_(i,k) = ΔE/ΔY_(i,j) * B_(k,j)
ΔE/ΔA_(i,k) = ΔE/ΔY_(i,j) * B^T_(j,k)
ΔE/ΔA_(i,j) = ΔE/ΔY_(i,k) * B^T_(k,j)
ΔE/ΔA_(i,j) = Σ_{k=1..n} ΔE/ΔY_(i,k) * B^T_(k,j)
ΔE/ΔA = (ΔE/ΔY) * B^T

另外
A_(i,k) * ΔB_(k,j) = ΔY_(i,j)
ΔE/(A_(i,k) * ΔB_(k,j)) = ΔE/ΔY_(i,j)
ΔE/ΔB_(k,j) = A_(i,k) * ΔE/ΔY_(i,j)
ΔE/ΔB_(k,j) = A^T_(k,i) * ΔE/ΔY_(i,j)
ΔE/ΔB_(i,j) = A^T_(i,k) * ΔE/ΔY_(k,j)
ΔE/ΔB_(i,j) = Σ_{k=1..n} A^T_(i,k) * ΔE/ΔY_(k,j)
ΔE/ΔB = A^T * (ΔE/ΔY)

即是我一直理解錯誤。
原 code 看來是正確的。

xianrenb 2018-11-16 08:23 PM

[quote]原帖由 [i]xianrenb[/i] 於 2018-11-7 08:02 PM 發表 [url=https://computer.discuss.com.hk/redirect.php?goto=findpost&pid=490179601&ptid=27835287][img]https://computer.discuss.com.hk/images/common/back.gif[/img][/url]
最近自己玩玩 TensorFlow.js 。
發現有些自己寫的 model train 極都不正常, loss 落不到, predict 數字時幾乎全錯。

後來試過, tfjs 版本到 0.13.1 都正常, 0.13.2 就出問題。
但神奇的是,完全無 error message 的, console output 都無異常。

暫時都不知問題在那裏。 ... [/quote]

再做多些測試,這次直接改用了 tfjs-core 來試。
發現問題 commit 應在 tfjs-core 0.13.2 ~ 0.13.3 之間出現。
最大機會是這個:
[url=https://github.com/tensorflow/tfjs-core/commit/5a4c4fd99eacfee454222e080d5cd422b61265f1]https://github.com/tensorflow/tfjs-core/commit/5a4c4fd99eacfee454222e080d5cd422b61265f1[/url]

估計是我的電腦規格差再加 hardware 有 bug , fragment shader 用不到 highp float 卻又無報 error 。
結果原來用 integer 計會 ok 的數,用 float 經 dot() 計就計錯。
[url=https://en.wikipedia.org/wiki/Half-precision_floating-point_format]https://en.wikipedia.org/wiki/Half-precision_floating-point_format[/url]
[quote]...
Integers between 0 and 2048 can be exactly represented (and also between −2048 and 0)
Integers between 2048 and 4096 round to a multiple of 2 (even number)
Integers between 4096 and 8192 round to a multiple of 4
...[/quote]
即是大過 2048 都已經可數錯數。

Susan﹏汪汪 2018-11-16 08:42 PM

[quote]原帖由 [i]xianrenb[/i] 於 2018-11-16 08:23 PM 發表 [url=https://www.discuss.com.hk/redirect.php?goto=findpost&pid=490642278&ptid=27835287][img]https://www.discuss.com.hk/images/common/back.gif[/img][/url]


再做多些測試,這次直接改用了 tfjs-core 來試。
發現問題 commit 應在 tfjs-core 0.13.2 ~ 0.13.3 之間出現。
最大機會是這個:
https://github.com/tensorflow/tfjs-core/commit/5a4c4fd99eacfee454222e080d5cd422b61265f1

估計是我的電腦規格差再加 hard ... [/quote]
正常而家的GPU應該有float同half兩種
係咪只是佢無啦啦改晒float 做half??

xianrenb 2018-11-17 09:34 AM

[quote]原帖由 [i]Susan﹏汪汪[/i] 於 2018-11-16 08:42 PM 發表 [url=https://computer.discuss.com.hk/redirect.php?goto=findpost&pid=490643115&ptid=27835287][img]https://computer.discuss.com.hk/images/common/back.gif[/img][/url]

正常而家的GPU應該有float同half兩種
係咪只是佢無啦啦改晒float 做half?? [/quote]

前面的都只是我的估計,因為在兩個 version 之間的改動/commit 其實不太多。
除了這個解釋之外,都想不出合於科學的解釋了。
唔通真是有鬼作怪?

好似話 WebGL1 只要求有 mediump ,未必有 highp 。
兩者大概等於 Float16 及 Float32 的條件。
另外好似話 WebGL2 必有 highp 。
亦有見過網上有人說, d 硬件/driver 會有報錯資料的情況,報有 highp 但其實無的是有可能的。

[[i] 本帖最後由 xianrenb 於 2018-11-17 09:35 AM 編輯 [/i]]

xianrenb 2018-11-17 09:38 AM

[quote]原帖由 [i]xianrenb[/i] 於 2018-11-17 09:34 AM 發表 [url=https://computer.discuss.com.hk/redirect.php?goto=findpost&pid=490660825&ptid=27835287][img]https://computer.discuss.com.hk/images/common/back.gif[/img][/url]


前面的都只是我的估計,因為在兩個 version 之間的改動/commit 其實不太多。
除了這個解釋之外,都想不出合於科學的解釋了。
唔通真是有鬼作怪?

好似話 WebGL1 只要求有 mediump ,未必有 highp 。
兩者大概等於 Float16 及 Float32 的條件。
另外好似話 WebGL2 必有 highp 。
亦有見過網上有人說, d 硬件/dri ... [/quote]

因為我看過的都是網上非官方人士說的資料,所以說“好似話”、“聽說”等等。

xianrenb 2018-11-17 12:43 PM

試了用最新版本的 tfjs ,加上 tf.setBackend('cpu') ,是無問題的。
所以應該真的是 GPU 計數不準確產生。

看過了有關的官方文件:
[url=https://www.khronos.org/registry/OpenGL/specs/es/3.0/GLSL_ES_Specification_3.00.pdf]https://www.khronos.org/registry/OpenGL/specs/es/3.0/GLSL_ES_Specification_3.00.pdf[/url]
p. 128,
[quote]...
12.5 Precision Qualifiers
Should the precisions be specified as float16, float32 etc.? This would help portability. It implies
different types rather than hints. It will require all implementations to use the same or similar algorithms
and reduces the scope for innovation.
RESOLUTION: No, the precision should not specify a format. Standardized arithmetic is not (yet) a
requirement for graphics.
...[/quote]
文件版本為: [quote]...
Language Version: 3.00
Document Revision: 6
29 January 2016
...[/quote]
即是到較近期,(一般) GPU 都不是設計來計正常/規式化的算術的。
其實都合理的,本來 GPU 是設計用來顯示 3D video/image 的。
根本不用考慮正確性。

[[i] 本帖最後由 xianrenb 於 2018-11-17 12:45 PM 編輯 [/i]]

Susan﹏汪汪 2018-11-17 01:06 PM

之前煙民的post有講過

GPU有所謂的fast math
但fast math之下float32都會保持準確至十進制的9位有效數

Susan﹏汪汪 2018-11-17 01:10 PM

汪汪呢個post
裡面所有gpu shader都是用float32

[url=https://www.discuss.com.hk/viewthread.php?tid=27821096&utm_source=copy&utm_campaign=ios&utm_medium=share]https://www.discuss.com.hk/viewthread.php?tid=27821096&utm_source=copy&utm_campaign=ios&utm_medium=share[/url]

汪汪output的image 尺寸是500x500
但因為做左5倍的Supersampling

所以中間是render緊2500x2500大的圖
而呢個情況下坐標計算冇發現過有異常

xianrenb 2018-11-17 01:54 PM

[quote]原帖由 [i]Susan﹏汪汪[/i] 於 2018-11-17 01:10 PM 發表 [url=https://computer.discuss.com.hk/redirect.php?goto=findpost&pid=490669285&ptid=27835287][img]https://computer.discuss.com.hk/images/common/back.gif[/img][/url]
汪汪呢個post
裡面所有gpu shader都是用float32

[url=https://www.discuss.com.hk/viewthread.php?tid=27821096&utm_source=copy&utm_campaign=ios&utm_medium=share]https://www.discuss.com.hk/viewthread.php?tid=27821096&utm_source=copy&utm_campaign=ios&utm_medium=share[/url]

汪汪output的image 尺寸是500x500
但因為做左5倍的Supersampling
所以中間是rende ... [/quote]

我說的問題有個根本性不同。
就是一般用 floating-point number 計數,錯了也只是一個小誤差。
但是前面提到的 TensorFlow.js 的 commit ,是相等於用 floating-point number 計一個 array 的 index 出來用。
錯了就一般不是一個小誤差,而會是無相關的兩個數值之差。

Susan﹏汪汪 2018-11-17 02:05 PM

[quote]原帖由 [i]xianrenb[/i] 於 2018-11-17 01:54 PM 發表 [url=https://www.discuss.com.hk/redirect.php?goto=findpost&pid=490671186&ptid=27835287][img]https://www.discuss.com.hk/images/common/back.gif[/img][/url]


我說的問題有個根本性不同。
就是一般用 floating-point number 計數,錯了也只是一個小誤差。
但是前面提到的 TensorFlow.js 的 commit ,是相等於用 floating-point number 計一個 array 的 index 出來用。
錯了就一般不是一個小誤差,而會是無相關的兩個數值之差。 ... [/quote]
其實一樣

計算個坐標之後都是最終搵返個2D pixel buffer的index
計錯的話會變成咁
[attach]9011921[/attach]

呢張圖係因為x坐標計少一格像素的結果

[[i] 本帖最後由 Susan﹏汪汪 於 2018-11-17 02:11 PM 編輯 [/i]]

xianrenb 2018-11-17 02:22 PM

[quote]原帖由 [i]Susan﹏汪汪[/i] 於 2018-11-17 02:05 PM 發表 [url=https://computer.discuss.com.hk/redirect.php?goto=findpost&pid=490671624&ptid=27835287][img]https://computer.discuss.com.hk/images/common/back.gif[/img][/url]

其實一樣

計算個坐標之後都是最終搵返個2D pixel buffer的index
計錯的話會變成咁
9011921

呢張圖係因為x坐標計少一格像素的結果 [/quote]

看來原理不同,但一樣是精度不足可以引至明顯大問題。

或者要等下一代 GPU 規格/API 出現,保證計算有一定的準則/正確性,GPGPU 才可以當正當通用方法。
否則,現在搞 GPGPU (配任意硬件),出錯了也未必知。

[[i] 本帖最後由 xianrenb 於 2018-11-17 02:34 PM 編輯 [/i]]

Susan﹏汪汪 2018-11-17 02:36 PM

[quote]原帖由 [i]xianrenb[/i] 於 2018-11-17 02:22 PM 發表 [url=https://www.discuss.com.hk/redirect.php?goto=findpost&pid=490672286&ptid=27835287][img]https://www.discuss.com.hk/images/common/back.gif[/img][/url]


看來原理不同,但一樣是精度不足可以引至明顯大問題。

或者要等下一代 GPU 規格/API 出現,保證計算有一定的準測/正確性,GPGPU 才可以當正當通用方法。
否則,現在搞 GPGPU (配任意硬件),出錯了也未必知。 ... [/quote]
汪汪果個係汪汪計float轉int用錯floor同ceil
而家的GPU應該個精度係足夠

不過WebGL應該同OpenGL 一樣
過多幾年就會被棄

蘋果提交的WebGPU應該會係下一代API
google chrome 都打算implement WebGPU了

xianrenb 2018-11-17 02:46 PM

[quote]原帖由 [i]Susan﹏汪汪[/i] 於 2018-11-17 02:36 PM 發表 [url=https://computer.discuss.com.hk/redirect.php?goto=findpost&pid=490672836&ptid=27835287][img]https://computer.discuss.com.hk/images/common/back.gif[/img][/url]

汪汪果個係汪汪計float轉int用錯floor同ceil
而家的GPU應該個精度係足夠

不過WebGL應該同OpenGL 一樣
過多幾年就會被棄

蘋果提交的WebGPU應該會係下一代API
google chrome 都打算implement WebGPU了 ... [/quote]

良好設計的新硬件無問題是正常的。
但是照現有規格,例如用我的電腦上的 GPU 來計算,就有機會會出問題。
所以現時 GPGPU 計算是否準確,還是要看是用什麼軟硬件組合。
不像 CPU 計算那樣,基本上用什麼組合都只會出唯一正確的結果。

Susan﹏汪汪 2018-11-17 02:51 PM

[quote]原帖由 [i]xianrenb[/i] 於 2018-11-17 02:46 PM 發表 [url=https://www.discuss.com.hk/redirect.php?goto=findpost&pid=490673197&ptid=27835287][img]https://www.discuss.com.hk/images/common/back.gif[/img][/url]


良好設計的新硬件無問題是正常的。
但是照現有規格,例如用我的電腦上的 GPU 來計算,就有機會會出問題。
所以現時 GPGPU 計算是否準確,還是要看是用什麼軟硬件組合。
不像 CPU 計算那樣,基本上用什麼組合都只會出唯一正確的結果。 ... [/quote]
你個gpu係幾多年前?
其實可以試vulkan

WebGPU其實都是基於新一代GPU API如vulkan、metal
都是講求更貼近hardware 的library
支援vulkan 的話可以會準確D知道個GPU的規格

Susan﹏汪汪 2018-11-17 03:01 PM

或者OpenCL 都可以
OpenCL 同Metal 差不多

之前煙民用呢個去攞GPU 規格
[url=https://www.khronos.org/registry/OpenCL/sdk/1.0/docs/man/xhtml/clGetDeviceInfo.html]https://www.khronos.org/registry/OpenCL/sdk/1.0/docs/man/xhtml/clGetDeviceInfo.html[/url]

主要是
CL_DEVICE_SINGLE_FP_CONFIG
CL_DEVICE_HALF_FP_CONFIG

Double type用唔著的話唔洗理CL_DEVICE_DOUBLE_FP_CONFIG

[[i] 本帖最後由 Susan﹏汪汪 於 2018-11-17 03:13 PM 編輯 [/i]]

xianrenb 2018-11-17 03:34 PM

[quote]原帖由 [i]Susan﹏汪汪[/i] 於 2018-11-17 03:01 PM 發表 [url=https://computer.discuss.com.hk/redirect.php?goto=findpost&pid=490673874&ptid=27835287][img]https://computer.discuss.com.hk/images/common/back.gif[/img][/url]
或者OpenCL 都可以
OpenCL 同Metal 差不多

之前煙民用呢個去攞GPU 規格
[url=https://www.khronos.org/registry/OpenCL/sdk/1.0/docs/man/xhtml/clGetDeviceInfo.html]https://www.khronos.org/registry/OpenCL/sdk/1.0/docs/man/xhtml/clGetDeviceInfo.html[/url]

主要是
CL_DEVICE_SINGLE_FP_CONFIG
CL_DEVICE_HALF_FP_CONFIG

Double ty ... [/quote]

其實都只是想試下用 TensorFlow.js 。
因為它是用 WebGL 的,我也用 [url=http://webglreport.com/]http://webglreport.com/[/url] 檢查過。
WebGL1/2 兩個版本的 fragment shader float/int precision 顯示都是 highp/highp 的。
但是前面都說過了,實際計算,用 GPU 做 backend 會計錯數的。
換成 CPU 就無問題。

其實都不重要,我都只是玩玩 TensorFlow.js 而已,不是要做產品。

Susan﹏汪汪 2018-11-17 03:42 PM

[quote]原帖由 [i]xianrenb[/i] 於 2018-11-17 03:34 PM 發表 [url=https://www.discuss.com.hk/redirect.php?goto=findpost&pid=490675019&ptid=27835287][img]https://www.discuss.com.hk/images/common/back.gif[/img][/url]


其實都只是想試下用 TensorFlow.js 。
因為它是用 WebGL 的,我也用 http://webglreport.com/ 檢查過。
WebGL1/2 兩個版本的 fragment shader float/int precision 顯示都是 highp/highp 的。
但是前面都說過了,實際計算,用 GPU 做 backend 會計錯數的。
換成 CPU 就無問題 ... [/quote]
汪汪都只是好奇為何會出錯
正常應該唔會有問題

至少float32的精度係應該夠用的
除非個buffer超過1000000000個elements

也或者其實唔關hardware 事
你都講係自從某個版本就開始出問題
即是其實之前的版本都是冇問題的
大概只是有人寫錯code

[[i] 本帖最後由 Susan﹏汪汪 於 2018-11-17 03:45 PM 編輯 [/i]]

xianrenb 2018-11-26 12:03 PM

原來一早有人發覺 TensorFlow.js 配 Intel GPU 用會有問題:

[url=https://github.com/tensorflow/tfjs/issues/510]https://github.com/tensorflow/tfjs/issues/510[/url]

看來只是近來的改動使問題突顯出來而已。
頁: [1]
查看完整版本: TensorFlow.js 或者近期有隱藏大 bug