5

Swigを使用して、 Tensorflowの周りに Ruby ラッパーを構築する手助けをしようとしています。現在、私は共有ビルドを作成し、その C/C++ ヘッダーを Ruby に公開することに行き詰まっています。問題は、OSX El Capitan で共有ライブラリとして利用できるように、完全な Tensorflow ライブラリを含む共有ビルドをビルドするにはどうすればよいですか(注: El Capitan では読み取り専用です)。.solibtensorflow.so/usr/lib/

バックグラウンド

このruby​​-tensorflowプロジェクトでは、 Tensorflow.bundleファイルをパッケージ化する必要がありますirb -Ilib -rtensorflowが、スペックを実行しようとすると、基本的な数値型が定義されていないというエラーが表示されますが、ここでrspec明確に定義されています。

.soファイルが正しく作成されていないか、何かが適切にリンクされていないために、これが発生すると推測しています。C++/Swig/Bazel は私の得意分野ではありません。Tensorflow の学習と Ruby での優れたラッパーの構築に集中したいと思っていますが、この時点でその楽しい部分に到達するのにかなり行き詰まっています。

私がやったこと:

  1. git clone --recurse-submodules https://github.com/tensorflow/tensorflow
  2. cd tensorflow
  3. bazel build //tensorflow:libtensorflow.so(私のマシンで10〜15分待ちます)
  4. 生成されlibtensorflow.soた (166.6 MB) を/ext-folderにコピーしました
  5. プロジェクトに記述されているruby extconf.rbmake、および を実行します。make install
  6. 走るrspec

必死になって、ソースからの公式インストールsudo pip install /tmp/tensorflow_pkg/tensorflow-0.9.0-py2-none-any.whlも何度か行いましたが、最後のステップで共有ビルドが作成されるのか、Python インターフェイスが公開されるだけなのかはわかりません。

元のリポジトリを作成し、私が従った指示を作成した Arafat という男は、彼の Linux マシンで 4.5 GBlibtensorflow.soだと言っています。UPDATE1:彼は、彼の-build は302.2 MBで、4.5GB は tensorflow フォルダー全体のサイズであると言います。libtensorflow.so

任意のヘルプまたは代替アプローチは非常に高く評価されています!

4

2 に答える 2

4

さらに掘り下げて発見しotool(Kristina に感謝)、 -file とは何かをよりよく理解した.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すると、次の行が表示されます。

$ 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/

于 2016-07-07T05:50:40.787 に答える
3

あなたが実際に .so を必要としているとは思いませんが、.dylib が必要だと思います ( OSX での .so と .dylib の違いは何ですか? を参照してください)。ターゲットとして指定することにより、Bazel に .so をビルドするように強制しています。libtensorflow.so代わりにこれをビルドします。

bazel build //tensorflow

(//tensorflowは、「テンソルフロー ターゲットをビルドする」の省略形です//tensorflow:tensorflow。必要な正確なファイルを指定すると、可能な場合、Bazel はそのファイルを強制的にビルドします。)

.dylib を取得したら、次のコマンドでその内容を確認できますotool

 otool -L bazel-bin/tensorflow/libtensorflow.dylib

これですべての問題が解決するかどうかはわかりませんが、試してみる価値はあります。

于 2016-07-06T22:33:35.480 に答える