1
XLA
を有効にした非常に簡単なテンソルフロープログラムを作成しています。基本的な考え方は、XLAは、複数のカーネルの起動を避けるために、一緒にsoftmax
の連鎖を融合できるかどうかを確認することですTensorflow XLAはそれをより遅くしますか?
import tensorflow as tf
def ChainSoftMax(x, n)
tensor = tf.nn.softmax(x)
for i in range(n-1):
tensor = tf.nn.softmax(tensor)
return tensor
config = tf.ConfigProto()
config.graph_options.optimizer_options.global_jit_level = tf.OptimizerOptions.ON_1
input = tf.placeholder(tf.float32, [1000])
feed = np.random.rand(1000).astype('float32')
with tf.Session(config=config) as sess:
res = sess.run(ChainSoftMax(input, 2000), feed_dict={input: feed})
:基本的にはのようなものです。 XLAをオンにすると、上記のプログラムは、GPUカードが搭載されたマシンでXLAを使用しない場合よりも約2倍遅くなります。私のGPUプロファイルでは、XLAが "reduce_xxx
"と "fusion_xxx
"という名前の多数のカーネルを生成していることがわかりました。このカーネルは全体のランタイムを圧倒しています。誰がここで何が起こったのか知っていますか?