半日ほどハマってましたが、
解決しましたのでメモとして残しておきます。
調査日:2020年7月11日
現象
TF2.2が出たので、
Windows10+VS2019で、ソースコードからTensorFlow2.2を新規ビルドした時の話。
ビルドの最後の方で該当のエラーが発生。
”–define=no_tensorflow_py_deps=true” のオプションは付けていたので、
それ関係のエラーではなさそうです。
bazel build --define=no_tensorflow_py_deps=true --config=opt //tensorflow/tools/pip_package:build_pip_package
エラーメッセージ
tensorflow/python/lib/core/bfloat16.cc(643): error C2664:
「’PyUFuncGenericFunction’ へ変換できません。」
が特徴的なメッセージです。
tensorflow/python/lib/core/bfloat16.cc(635): error C2664: 'bool tensorflow::`anonymous-namespace'::Initialize::<lambda_02b7287176caec052fc5413410f17d41>::operator ()(const char *,PyUFuncGenericFunction,const std::array<int,3> &) const': 引 数 2 を 'void (__cdecl *)(char **,npy_intp *,npy_intp *,void *)' から 'PyUFuncGenericFunction' へ変換できません。 tensorflow/python/lib/core/bfloat16.cc(635): note: スコープ内でこの名前を指定された関数でターゲット型に一致するものはあ りません。 tensorflow/python/lib/core/bfloat16.cc(636): note: 'operator __surrogate_func' の宣言を確認してください tensorflow/python/lib/core/bfloat16.cc(639): error C2664: 'bool tensorflow::`anonymous-namespace'::Initialize::<lambda_02b7287176caec052fc5413410f17d41>::operator ()(const char *,PyUFuncGenericFunction,const std::array<int,3> &) const': 引 数 2 を 'void (__cdecl *)(char **,npy_intp *,npy_intp *,void *)' から 'PyUFuncGenericFunction' へ変換できません。 tensorflow/python/lib/core/bfloat16.cc(639): note: スコープ内でこの名前を指定された関数でターゲット型に一致するものはあ りません。 tensorflow/python/lib/core/bfloat16.cc(640): note: 'operator __surrogate_func' の宣言を確認してください tensorflow/python/lib/core/bfloat16.cc(643): error C2664: 'bool tensorflow::`anonymous-namespace'::Initialize::<lambda_02b7287176caec052fc5413410f17d41>::operator ()(const char *,PyUFuncGenericFunction,const std::array<int,3> &) const': 引 数 2 を 'void (__cdecl *)(char **,npy_intp *,npy_intp *,void *)' から 'PyUFuncGenericFunction' へ変換できません。 tensorflow/python/lib/core/bfloat16.cc(643): note: スコープ内でこの名前を指定された関数でターゲット型に一致するものはあ りません。 tensorflow/python/lib/core/bfloat16.cc(643): note: 'operator __surrogate_func' の宣言を確認してください tensorflow/python/lib/core/bfloat16.cc(646): error C2664: 'bool tensorflow::`anonymous-namespace'::Initialize::<lambda_02b7287176caec052fc5413410f17d41>::operator ()(const char *,PyUFuncGenericFunction,const std::array<int,3> &) const': 引 数 2 を 'void (__cdecl *)(char **,npy_intp *,npy_intp *,void *)' から 'PyUFuncGenericFunction' へ変換できません。 tensorflow/python/lib/core/bfloat16.cc(646): note: スコープ内でこの名前を指定された関数でターゲット型に一致するものはあ りません。 tensorflow/python/lib/core/bfloat16.cc(647): note: 'operator __surrogate_func' の宣言を確認してください tensorflow/python/lib/core/bfloat16.cc(650): error C2664: 'bool tensorflow::`anonymous-namespace'::Initialize::<lambda_02b7287176caec052fc5413410f17d41>::operator ()(const char *,PyUFuncGenericFunction,const std::array<int,3> &) const': 引 数 2 を 'void (__cdecl *)(char **,npy_intp *,npy_intp *,void *)' から 'PyUFuncGenericFunction' へ変換できません。 tensorflow/python/lib/core/bfloat16.cc(650): note: スコープ内でこの名前を指定された関数でターゲット型に一致するものはあ りません。 tensorflow/python/lib/core/bfloat16.cc(651): note: 'operator __surrogate_func' の宣言を確認してください tensorflow/python/lib/core/bfloat16.cc(654): error C2664: 'bool tensorflow::`anonymous-namespace'::Initialize::<lambda_02b7287176caec052fc5413410f17d41>::operator ()(const char *,PyUFuncGenericFunction,const std::array<int,3> &) const': 引 数 2 を 'void (__cdecl *)(char **,npy_intp *,npy_intp *,void *)' から 'PyUFuncGenericFunction' へ変換できません。 tensorflow/python/lib/core/bfloat16.cc(654): note: スコープ内でこの名前を指定された関数でターゲット型に一致するものはあ りません。 tensorflow/python/lib/core/bfloat16.cc(655): note: 'operator __surrogate_func' の宣言を確認してください Target //tensorflow/tools/pip_package:build_pip_package failed to build
解決手段
公式のissuesに乗っていました。
どうやらnumpy1.19に入った変更が引き起こしているらしく、
今のところ解決手段は、
「とりあえず numpyを1.19より前のものにダウングレードせよ」
との事です。
$ pip install numpy==1.18
あるいは
$ pip install "numpy<1.19"
など。
ただ、bazelの差分ビルドで同じエラーになったので、
結局 bazel clean した後、
bazel build することでリビルドかけました。
(約1時間かかりましたが、確実だと思います)
この変更後、無事ビルド成功しています。
INFO: Build completed successfully, 10223 total actions
なお色々な人が同様の症状で困っていたようで。
Ubuntuや、TF1系でも起こるらしいです。numpy起因ですからねぇ。。。
調査時の検索キーワード
※どういう検索キーワードでたどり着いたか、参考までに
“‘PyUFuncGenericFunction’ へ変換できません” で検索
→ 有用な情報無し
“PyUFuncGenericFunction tensorflow” で検索
“tensorflow/python/lib/core/bfloat16.cc(635): error C2664:” で検索
→ いずれも公式issuesが引っかかる
ちなみに差分ビルドで解決せず。リビルドで解決
お役に立てれば幸いでございます。
そいではまたー
最後まで読んでいただき、ありがとうございます!
ブックマーク登録、
ツイッターフォロー、
よろしくお願いいたします!🙇♂️🙇♂️