2017-12-19 9 views
2

私は新しいTensorflowオペレーションを作成しました。私はコンパイルしてローカルでテストしました。Tensorflow新しいオペレーションgoogle cloud mlエンジン

クラウド内の各マシンでopをコンパイルする必要があるGoogle Cloud MLエンジンで使用したいと考えています。

私はsetup.pyを使用して配布してC++ファイルおよびコンパイラのスクリプトを含めるために管理している:

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 

Pythonコードからsubprocess.Popen()を使用しているので問題ありません。

問題は、ディレクトリツリーがGoogleクラウド内でどのように構成されているかわからないため、このスクリプトをどこで実行するのかわかりません。後でその出力にアクセスして新しいオペ。

答えて

1

opをローカルに構築し、GCSバケットにアップロードし、VM(コンテナ)にコピーし、tf.load_op_library経由で使用するのが最も簡単な方法です。 プリインストールされたgsutil cliまたはGCS pythonクライアントを使用してコピーを実行できます。戻る元の質問に

: 我々は、ユーザジョブを起動すると、我々が最初にrootとしてユーザーコードのパッケージをインストールする、のpython 2.7の場合には、それは /root/.local/lib/python2.7/にありますので、サイトパッケージ/ YOUR_PACKAGE_NAME

+0

私が間違っていると私を修正しますが、私がローカルでopをコンパイルすると、gcloudマシンでは実行されません。右?私はmacOSを使い、gcloudはLinuxを使います。 – Miguel

+0

はい、私たちはLinuxを使用していて、macで動作するopsは動作しないかもしれません。私が最初に提案したものを試したいなら、GCEのLinux VMでopをビルドすることができます。 –

+0

さて、私はそれを試してみましょう。あなたはこれを前にしたことがありますか? (GCEのVMに組み込み、次にopを使用します)。 – Miguel

0

ここに私の解決策があります。 私はパッケージをクラウドにデプロイされたときに動的にオペアンプを構築するためにsetupからExtensionモジュールを使用:

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ファイルは、ソースであるため、とにかく含まれている必要があります。
  • クラウドで使用されるコンパイラは、を使用するgccです。 Tensorflowの公式ドキュメントはg++を使用しています。私はパフォーマンスの面でどのような影響があるのか​​分かりません...
関連する問題