Tensorflow TPU踩坑心得(二)
Nov 24, 2020
Google的TPU到底支不支援LayerNormalization?
答案:支援,但是在資料維度為3的時候會出錯
錯誤訊息是UnavailableError: Socket closed
而且之後那台TPU就連不上了(我猜是當掉https://github.com/tensorflow/tensorflow/issues/41106
答案:支援,但是BatchSize必須為32的倍數
要注意的是TPU會把資料分散在8個不同的運算核心上路
所以在一個核心上的BatchSize=32
代表餵給TPU的BatchSize=32*8=256
實際上在TPU的BatchSize必須要是256的倍數
https://github.com/tensorflow/tensorflow/issues/42228
無效的做法:把tf.int64改成tf.int32
但是TPU的確不支援tf.int64
https://github.com/tensorflow/tensorflow/issues/36996
注意tf.train.Example只支援tf.int64,不支援tf.int32
所以型別轉換是必要的
為什麼不改用BatchNormalization?
因為在BatchSize小和輸入長度不一的時候, 使用BatchNormalization的效果不好
https://zhuanlan.zhihu.com/p/54530247