tensorflow protobuf のインポートサイクル

王林
リリース: 2024-02-06 11:09:07
転載
548 人が閲覧しました

张量流 Protobuf 中的导入周期

質問内容

tensorflowサーバーと通信するためのクライアントコードを書こうとしています。 tensorflowtensorflow_serving 用にコンパイルされた golang protobuf が必要です。どれも簡単なことではありませんが、私はこれを乗り越えました。基本的には buf を使用して生成します。これは buf yaml です:

リーリー

正常に実行されましたが、実行中のアプリケーション ログ:

リーリー

tensorflowtensorflow_serving の下にあるものはすべて、元のリポジトリから直接コンパイルされることに注意してください。

tensorflow のように広く使用されているものにインポート サイクルがあるとは驚きですが、おそらくそうでしょう。この問題はどうすれば解決できますか?


正解


tl;dr

根本的な原因は、リポジトリ https://www.php.cn/link/1a16abf2a3149fc7cd6083687cce01c2 が実際には元のファイルを正しく整理していない (または、少なくとも使いやすくしていない) ことです。 )。

次の 2 つのファイルにより、go でインポート ループが発生します (xla->xla/service->xla):

  • tensorflow/compiler/xla/xla.proto

    • インポート「tensorflow/compiler/xla/service/hlo.proto」
  • tensorflow/compiler/xla/service/hlo.proto

    • インポート「tensorflow/compiler/xla/xla_data.proto」

xla_data.proto は他のファイルをインポートしないため、それを独自のパッケージに移動してインポート ループを中断できます。これは、buf の override 関数 を使用して行うことができます。これは最後の buf.gen.yaml ファイルです:

リーリー

buf を使用して tensorflow proto ファイルをコンパイルするための設定を完了する

これは最終的なディレクトリ構造です:

リーリー

buf.gen.yaml: 「tl;dr」セクションを参照してください。

buf.work.yaml:

リーリー

buf.yaml:

リーリー

これは私の環境です:

リーリー

次に、このディレクトリのルート ディレクトリで次のコマンドを実行します。 リーリー

コメント:

    tensorflow リポジトリは
  1. testdata ディレクトリにクローンされるため、go build はそれらを無視します。
  2. インストール プログラムは、
  3. internal ディレクトリにファイルを生成します。 buf.gen.yaml ファイルを変更して、任意の場所に配置できます。
  4. go build ./... はエラーを報告しません。ただし、生成されたファイルが有効かどうかはわかりません。

以上がtensorflow protobuf のインポートサイクルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:stackoverflow.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!