Chr*_*sen 5 ruby macos swig bazel tensorflow
我试图帮助建立一个围绕一个Ruby包装Tensorflow使用痛饮.目前,我坚持做一个共享构建.so,并将其C/C++头部暴露给Ruby.所以问题是:如何libtensorflow.so构建包含完整Tensorflow库的共享构建,以便它可以作为OSX El Capitan上的共享库使用(注意:/usr/lib/在El Capitan上是只读的)?
在这个ruby-tensorflow项目中,我需要打包一个Tensorflow .bundle文件,但每当我irb -Ilib -rtensorflow或者尝试运行规范时rspec,我得到的错误是基本数字类型没有定义,但是这里明确定义了它们.
我猜这是因为我的.so文件未正确创建或某些内容未按预期链接.C++/Swig/Bazel不是我强大的一面,我想专注于学习Tensorflow并在Ruby中构建一个好的包装器,但是我很难在这一点上找到那个有趣的部分!
我做了什么:
git clone --recurse-submodules https://github.com/tensorflow/tensorflowcd tensorflowbazel build //tensorflow:libtensorflow.so (在我的机器上等待10-15分钟)libtensorflow.so(166.6 MB)复制到/ext-folderruby extconf.rb,make以及make install 在项目描述rspec无奈之下,我也经历了几次来自源代码的官方安装,但我不知道是不是,最后的步骤sudo pip install /tmp/tensorflow_pkg/tensorflow-0.9.0-py2-none-any.whl甚至创建了一个共享版本,或者只是暴露了一个Python界面.
制作原始存储库并发出我所遵循的指令的阿拉法特说,他的Linux机器上的数据libtensorflow.so是4.5 GB - 所以我的OSX机器上的共享版本大小超过20倍.UPDATE1:他说他的libtensorflow.so-build是302.2 MB,4.5GB是整个tensorflow文件夹的大小.
非常感谢任何帮助或替代方法!
经过更多的挖掘、发现otool(感谢克里斯蒂娜)并更好地理解什么.so是 -file 后,该解决方案不需要对我的设置进行太多更改:
# Clone source files
git clone --recurse-submodules https://github.com/tensorflow/tensorflow
cd tensorflow
# Build library
bazel build //tensorflow:libtensorflow.so
# Copy the newly shared build/library to /usr/local/lib
sudo cp bazel-bin/tensorflow/libtensorflow.so /usr/local/lib
Run Code Online (Sandbox Code Playgroud)
按照此处的步骤https://github.com/chrhansen/ruby-tensorflow#install-ruby-tensorflow运行 Swig,创建 Makefile 并make
当你运行时,make你应该看到一行:
$ make
$ linking shared-object libtensorflow.bundle
Run Code Online (Sandbox Code Playgroud)
如果您的共享构建不可访问,您将看到类似以下内容的内容:
$ ld: library not found for -ltensorflow
Run Code Online (Sandbox Code Playgroud)
对于那些开始这次冒险、在 Ruby 中使用 C/C++ 库的人来说,这篇文章对我来说是一个很好的教程:http ://engineering.gusto.com/simple-ruby-c-extensions-with-swig/
| 归档时间: |
|
| 查看次数: |
1263 次 |
| 最近记录: |