Ich versuche, eine benutzerdefinierte Tensorflow Op. Ich habe einige Ops zu Arbeiten mit https://www.tensorflow.org/versions/master/how_tos/adding_an_op/index.html und normalen C++ bekommen.Eigen Summe in benutzerdefinierten Tensorflow C++ op mit Eigen :: half auf GPUDevice
Das Problem tritt auf, wenn das Eigen C++ - Framework und sein .sum
Reducer verwendet werden. Es funktioniert für die CPU mit den Typen double
, float
und Eigen::half
, aber auf der GPU bricht es bei der Verwendung Eigen::half
, zur Kompilierzeit.
Ich habe das Problem auf eine Kopie der l2loss_op
von https://github.com/tensorflow/tensorflow/tree/master/tensorflow/core/kernels reduziert, wo ich L2Loss
zu CustomL2Loss
umbenannt (sonst ich Namenskonflikte zu bekommen). Siehe: https://gist.github.com/AndreasMadsen/4335215cd4293daad3cad745bbeae82a
Der Fehler ist ziemlich lang: https://gist.github.com/AndreasMadsen/5cd0579267f0bc3e5a1c21f2341d9ad6
Da es für alle anderen Fälle funktioniert, aber <GPUDevice, Eigen::half>
(bestätigt durch die Zeile aus in l2loss_op.cu.cc
Kommentierung) Ich erwäge, ob dies ein tensorflow Problem. Aber ich kann Tensorflow selbst kompilieren.
Können Sie versuchen, nvcc mit -arch compute_35 aufzurufen? Die Tatsache, dass nvcc nichts über __shfl_down weiß, scheint darauf hinzudeuten, dass Sie auf eine Architektur abzielen, die 16-Bit-Floats nicht unterstützt. –
Danke, '-arch compute_35' behebt es. Könnten Sie es als Antwort hinzufügen, damit ich es akzeptieren kann? – AndreasMadsen
Ich habe eine Antwort hinzugefügt. –