2017-12-07 4 views
0

MacOS high sierra、MBP 2016、in terminal。テンソルフロー: "フリーズしたオブジェクトを突然変異させる"、bazel

私はここの指示に従っています: https://github.com/tensorflow/models/tree/master/research/syntaxnet ./configureのすべてのオプションがデフォルトとして選択されています(すべてのPythonディレクトリはダブルチェックされています)。

bazel test ... 
# On Mac, run the following: 
bazel test --linkopt=-headerpad_max_install_names \ 
    dragnn/... syntaxnet/... util/utf8/... 

私は後者の行( "bazel test --linkopt"など)を実行することになっていると仮定します。しかし、私は興味深いことにどちらの方法でも同じ結果を得ます。

「フリーズしたオブジェクトを突然変異させようとしている」という同じタイプのエラーが約10回発生し、テストが実行されない、dragnn/protosパッケージのロード中にエラーが発生し、ビルドを開始できないと判断します。

これは、エラーの一般的な形式です:

syntaxnet>> bazel test --linkopt=-headerpad_max_install_names dragnn/... syntaxnet/... util/utf8/...

.

ERROR: /Users/XXX/Desktop/NLP/syntaxnet/models/research/syntaxnet/dragnn/protos/BUILD:35:1: Traceback (most recent call last): File "/Users/XXX/Desktop/NLP/syntaxnet/models/research/syntaxnet/dragnn/protos/BUILD", line 35 tf_proto_library_py(name = "data_py_pb2", srcs = ["dat..."]) File "/Users/XXX/Desktop/NLP/syntaxnet/models/research/syntaxnet/syntaxnet/syntaxnet.bzl", line 53, in tf_proto_library_py py_proto_library(name = name, srcs = srcs, srcs_versi...", <5 more arguments>) File "/private/var/tmp/_bazel_XXX/f74e5a21c3ad09aeb110d9de15110035/external/protobuf_archive/protobuf.bzl", line 374, in py_proto_library py_libs += [default_runtime] trying to mutate a frozen object ERROR: package contains errors: dragnn/protos


... [同じエラーのために様々な '名前=」... PB2" ' ファイル] ...

INFO: Elapsed time: 0.709s FAILED: Build did NOT complete successfully (17 packages loaded) ERROR: Couldn't start the build. Unable to run tests

これを行うにはどうすればよいですか?ありがとう。

+0

を得ましたか。どのようにインストールしましたか? – hansaplast

+0

[この問題](https://github.com/bazelbuild/BUILD_file_generator/pull/30)がありましたので訂正しました。Nov 1 2017 – hansaplast

+0

brew install bazel – sstrasburg

答えて

3

このエラーは、py_proto_libraryルール実装のバグを示しています。

tf_proto_library_pyは、syntaxnet.bzlで定義されます。 tf_workspaceマクロのprotobuf_archiveルールで定義されているpy_proto_libraryのラッパーです。バギーpy_proto_libraryルールの実装で//:protobuf.bzlが含まれてい

「protobuf_archive」のダウンロードいるProtobuf 3.3.0、:ライン#374で、それは不変オブジェクトpy_libsを変異しようとします。

最新のBazelバージョン(現在は0.8.1)を使用してください。

問題はまだ、その後、解決しない場合:

  • 私はバグを提出勧め:に自分のいるProtobufのバージョンを更新するために、py_proto_libraryルール

  • TensorFlowを修正するために、

    • いるProtobuf tf_workspaceおよび
    • Syntaxnetは//research/syntaxnetのTFサブモジュールの参照をバグ修正版に更新します。
  • 回避策として、恐らくprotobuf.bzlにパッチを当てることができます。これらの

    373 if default_runtime and not default_runtime in py_libs + deps: 
        374  py_libs += [default_runtime] 
        375 
        376 native.py_library(
        377  name=name, 
        378  srcs=outs+py_extra_srcs, 
        379  deps=py_libs+deps, 
        380  imports=includes, 
        381  **kargs) 
    

    373 if default_runtime and not default_runtime in py_libs + deps: 
        374  py_libs2 = py_libs + [default_runtime] 
        375 else: 
        376  py_libs2 = py_libs 
        377 
        378 native.py_library(
        379  name=name, 
        380  srcs=outs+py_extra_srcs, 
        381  deps=py_libs2+deps, 
        382  imports=includes, 
        383  **kargs) 
    

    免責事項:

パッチは、これらの行を変更することがあり、これは "ブラインド" 修正です。私はそれが動作するかどうか試していない。

+0

私は最後の夜に0.8.1の新しいバイナリをコンパイルし、同じエラーが発生したので、今晩この「ブラインド修正」を試してみます。提案をありがとう! – sstrasburg

+0

それは私にそのバグを越えさせた。 cc_libs + = [default_runtime]に続いて、apple_cc_toolchain Xcodeバージョン、次に "execvp(external/local_config_cc/wrapped_clang、...)"に関する以下のほぼ同じバグがありました:パーミッションが拒否されました。ちょうどウサギの穴。 – sstrasburg

+0

あなたはどれくらい取得しましたか? –

0
Tried same pattern patch for cc_libs. 

    if default_runtime and not default_runtime in cc_libs: 
    cc_libs2 = cc_libs + [default_runtime] 
    else: 
    cc_libs2 = cc_libs 
    if use_grpc_plugin: 
    cc_libs += ["//external:grpc_lib"] 

    native.cc_library(
     name=name, 
     srcs=gen_srcs, 
     hdrs=gen_hdrs, 
     deps=cc_libs2 + deps, 
     includes=includes, 
     **kargs) 

新しいエラーを表示しますが、コンパイルを続けます。 (Linux用WindowsシステムのUbuntu 16 - ネイティブテンソルフロー1.4 winx64は動作しますが、syntaxnetは必要ありません)。

グレッグ@ FX11:を/ mnt/C /コード/モデル/研究/ syntaxnet $ bazelテスト... ERROR:/home/greg/.cache/bazel/_bazel_greg/adb8eb0eab8b9680449366fbebe59ec2/external/org_tensorflow/tensorflow/core /カーネル/ビルド:451:1:_transitive_hdrsルール@ org_tensorflow //テンソルフロー/コア/カーネル:bounds_check_lib_gather: トレースバック(最新のコール最後): ファイル "/home/greg/.cache/bazel/_bazel_greg/adb8eb0eab8b9680449366fbebe59ec2/外部/ org_tensorflow/tensorflow /コア/カーネル/ BUILD "行451 _transitive_hdrs(名= 'bounds_check_lib_gather') ファイル" /home/greg/.cache/bazel/_bazel_greg/adb8eb0eab8b9680449366fbebe59ec2/external/org_tensorflow/tensorflow/tensorflow.bzl "、869行、_transitive_hdrs_impl set()

set()をdepset()に変更しただけで、エラーが回避されたようです。

0

短いストーリーにする。私はsstrasburgのコメントに触発されました。

まず、新しいバージョンのbazelをアンインストールします。

brew uninstall bazel 

ダウンロードbazel 0.5.4 from here。その後

chmod +x bazel-0.5.4-without-jdk-installer-darwin-x86_64.sh 
./bazel-0.5.4-without-jdk-installer-darwin-x86_64.sh 

、再び

bazel test --linkopt=-headerpad_max_install_names dragnn/... syntaxnet/... util/utf8/... 

を実行して最後に、私はあなたのbazelのバージョンは何ですか

Executed 57 out of 57 tests: 57 tests pass.

関連する問題