Google Cloud ML引擎中的TensorFlow新OP
Tensorflow new op in google cloud ml engine
我创建了一个新的TensorFlow OP,我已经在本地进行了编译并进行了测试。
我现在想与Google Cloud ML引擎一起使用,该发动机需要在云中的每台机器中编译OP。
我设法使用setup.py
:
from setuptools import setup, find_package
setup(
name='trainer',
version='0.1',
packages=find_packages(),
package_data={'CPP': ['*.cc', '*.h', 'compile.sh']},
description = 'Package discription'
)
现在我必须运行包含:
的compile.sh
TF_INC=$(python -c 'import tensorflow as tf; print(tf.sysconfig.get_include())')
g++ -std=c++11 -D_GLIBCXX_USE_CXX11_ABI=0 -shared target.cc dependency_1.cc -o taget.so -fPIC -I$TF_INC -I$TF_INC/external/nsync/public -O2
可以使用subprocess.Popen()
从Python代码运行脚本,因此这不是问题。
问题是我不知道目录树在Google Cloud中是如何构造的,因此我不知道该脚本在哪里运行,或者以后如何访问其输出以利用新OP。
最简单的方法是在本地构建OP,上传到您的GCS存储桶,将其复制到VM(容器),然后通过TF.Load_op_library使用它。您可以使用预装的GSUTIL CLI或GCS PYTHON客户端执行副本。
回到原始问题:当我们启动用户作业时,我们首先将用户代码包作为根,因此在Python 2.7的情况下,它位于/root/.local/lib/python2.7/site-packages/your_package_name
这是我的解决方案。我使用setup
的Extension
模块在云中部署软件包时动态构建OP:
import tensorflow as tf
from setuptools import setup, find_packages, Extension
TF_INC = tf.sysconfig.get_include()
TF_LIB = tf.sysconfig.get_lib()
module1 = Extension('op_name',
define_macros=[('_GLIBCXX_USE_CXX11_ABI', 0)],
include_dirs=[TF_INC, TF_INC + '/external/nsync/public', 'Op/cpp'],
sources=['Op/cpp/op_name.cc',
'Op/cpp/source_2.cc'],
extra_compile_args=['-O2', '-std=c++11', '-fPIC', '-shared'],
library_dirs=[TF_LIB],
libraries=['tensorflow_framework'],
extra_link_args=[],
language='c++')
setup(
name='trainer',
version='0.1',
packages=find_packages(),
package_data={'Op': ['cpp/*.cc', 'cpp/*.h']},
ext_modules=[module1],
)
一些笔记:
- 如果您有标题文件,则必须在
include_dirs
中包含这些文件的目录。在这种情况下,我将标题文件与源文件相同的目录(Op/cpp
)。 - 但是,这并不意味着
.h
文件已包装。为此必须使用package_data={'Op': ['cpp/*.cc', 'cpp/*.h']},
,以便.h
文件包含在清单中。.cc
文件无论如何都应包括在内,因为它们是来源,我只是在这里,因为。 - 云中使用的编译器是使用
c1plus
的gcc
。TensorFlow官方文档使用g++
。我不知道这对性能有什么影响...
相关文章:
- 基于树莓pi的tensorflow lite量化ssd目标检测
- 在使用GPU支持编译Tensorflow时,会遇到CUDA_TOOLKIT_PATH未绑定变量
- 如何阻止TensorFlow的多线程
- Tensorflow c++ api undefined reference to 'tflite::D efaultErrorReporter()'
- Tensorflow对象检测在Python和C++(OpenCV)之间有不同的结果
- 在 c++ 中使用 Tensorflow Lite 在边缘 TPU 上运行"mobilenet_ssd_v2_coco_quant_postprocess_edgetpu.tflite"时出现问题
- Tensorflow Hub in C++
- cmsis_compiler.h:在为 Arduino Due 编译 Arduino Tensorflow lite 库
- 分段错误(核心转储) - 使用 SavedModel 的 Tensorflow C++ API 进行推断
- 构建 TensorFlow r1.14 C++文件时缺少文件"tensorflow/core/framework/types.pb.h"
- constexpr 使用 clang 编译 TensorFlow 时出错
- MatMul op 在 tensorflow 中是如何工作的?
- 如何从C++代码运行自定义 GPU tensorflow::op?
- 编译CUDA的自定义TensorFlow OP
- 在Python中编写和注册自定义TensorFlow OP
- 如何在 Tensorflow C++ 中定义变量的自定义有状态 Op 保存值
- 可以在CUDA速度计算中实现TensorFlow自定义OP梯度
- Google Cloud ML引擎中的TensorFlow新OP
- 添加使用malloc()并具有状态的TensorFlow OP
- 理解TensorFlow中的Op注册和内核链接