加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在OSX El Capitan上构建和链接共享Tensorflow库,从Ruby通过Swig

发布时间:2020-12-17 03:33:03 所属栏目:百科 来源:网络整理
导读:我正在尝试使用 Swig在 Tensorflow左右帮助构建一个Ruby包装器.目前,我一直在制作共享版本,.so,并将其C/C++头部暴露给Ruby.所以问题是:我如何构建一个包含完整Tensorflow库的libtensorflow.so共享版本,以便它可以作为OSX El Capitan上的共享库使用(注意:/u
我正在尝试使用 Swig在 Tensorflow左右帮助构建一个Ruby包装器.目前,我一直在制作共享版本,.so,并将其C/C++头部暴露给Ruby.所以问题是:我如何构建一个包含完整Tensorflow库的libtensorflow.so共享版本,以便它可以作为OSX El Capitan上的共享库使用(注意:/usr/lib /在El Capitan上是只读的)?

背景

在这个ruby-tensorflow项目中,我需要打包一个Tensorflow .bundle文件,但每当我使用irb -Ilib -rtensorflow或尝试运行规范rspec时,我得到的错误是基本数字类型没有定义,但它们是明确定义的here .

我猜这是因为我的.so文件没有正确创建或者某些东西没有按照它应该链接. C / Swig / Bazel不是我强大的一面,我想专注于学习Tensorflow并在Ruby中构建一个好的包装器,但是我很难在这一点上找到那个有趣的部分!

我做了什么:

> git clone –recurse-submodules https://github.com/tensorflow/tensorflow
> cd tensorflow
> bazel build //tensorflow:libtensorflow.so(在我的机器上等待10-15分钟)
>将生成的libtensorflow.so(166.6 MB)复制到/ext-folder
>运行ruby extconf.rb,make和make install described in the project
>运行rspec

无奈之下,我也经历过几次官方installation from source,但我不知道是不是,最后一次sudo pip安装/tmp/tensorflow_pkg/tensorflow-0.9.0-py2-none-any.whl-step甚至创建共享构建或公开Python接口.

制作original repository并发出我所遵循的指示的阿拉法特人说他的libtensorflow.so在他的Linux机器上是4.5 GB – 所以超过我的OSX机器上共享版本的20倍. UPDATE1:他说他的libtensorflow.so-build是302.2 MB,4.5GB是整个tensorflow文件夹的大小.

非常感谢任何帮助或替代方法!

解决方法

经过更多的挖掘,发现otool(感谢Kristina)并更好地理解 .so文件是什么,解决方案在我的设置中不需要太多改变:

共享构建

# 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

使用Swig从Ruby调用

按照此处的步骤https://github.com/chrhansen/ruby-tensorflow#install-ruby-tensorflow运行Swig,创建一个Makefile并制作

当你运行make时,你应该看到一行说:

$make
$linking shared-object libtensorflow.bundle

如果您的共享版本无法访问,您会看到以下内容:

$ld: library not found for -ltensorflow

简单的教程

对于那些从这个冒险开始,使用Ruby中的C/C++库的人来说,这篇文章对我来说是一个很好的教程:http://engineering.gusto.com/simple-ruby-c-extensions-with-swig/

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读