Tensorflow操作和内核不在Windows上使用CMAKE注册

时间:2017-11-15 14:02:49

标签: python c++ tensorflow tensorflow-gpu

我正在使用Tensorflow r1.3在C ++中构建自定义Tensorflow操作和内核实现。我使用建议表单this bug report成功构建并链接了op库。

我的代码几乎是Tensorflow API的样板操作代码。

当我使用tf.load_op_library()加载操作时,我可以在Python中使用ops并使用它们创建图形并将其另存为图形定义。当我随后尝试加载Ops然后在带有TF_LoadLibrary()的C / C ++中时,调用将返回OK状态,但无法找到操作。

我总是得到错误:

  

未找到:操作类型未注册' ...'在二进制运行中...确保操作和内核在此过程中运行的二进制文件中注册。

我知道这篇文章:Understand Op Registration and Kernel Linking in TensorFlow。 Op注册和内核注册代码都可以在op库代码中找到。

我试过了:

  1. 将Op注册码移动到我自己的c ++代码中。这可行,但随后错误发生变化,没有为该操作注册的内核也没有任何帮助。
  2. 将内核注册码移动到我自己的c ++代码中。这不起作用,因为链接器无法找到nvcc编译的运算符。
  3. 将Op和内核注册宏放在DllMain方法中,而不是直接将它们放入代码中。也没帮助。
  4. Procmon.exe和Dependency Walker都显示已加载Op的DLL 正确。所以Tensorflow不会注册Ops 基于cmake的构建设置。建立张量流需要3-4个小时,当我 必须完全建立张量流,因为我的操作变化并不是真的 可行的。
  5. 我正在挖掘Tensorflow代码库并找到我试图直接调用的代码片段Register("MyOp", TF::OpRegistry::Global());
  6. 使用C ++中的Py_Initialize()初始化Python解释器,并使用PyRun_SimpleString
  7. 在C ++中运行python import命令

    任何人都尝试过并已成功了吗?任何输入?我很绝望。

0 个答案:

没有答案