tensorflowサーバーと通信するためのクライアントコードを書こうとしています。 tensorflow
と tensorflow_serving
用にコンパイルされた golang protobuf が必要です。どれも簡単なことではありませんが、私はこれを乗り越えました。基本的には buf を使用して生成します。これは buf yaml です:
正常に実行されましたが、実行中のアプリケーション ログ:
リーリー tensorflow
と tensorflow_serving
の下にあるものはすべて、元のリポジトリから直接コンパイルされることに注意してください。
tensorflow のように広く使用されているものにインポート サイクルがあるとは驚きですが、おそらくそうでしょう。この問題はどうすれば解決できますか?
根本的な原因は、リポジトリ 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.gen.yaml: 「tl;dr」セクションを参照してください。
buf.work.yaml:
リーリーbuf.yaml:
リーリーこれは私の環境です:
リーリー次に、このディレクトリのルート ディレクトリで次のコマンドを実行します。 リーリー
コメント:
ディレクトリにクローンされるため、
go build はそれらを無視します。
ディレクトリにファイルを生成します。
buf.gen.yaml ファイルを変更して、任意の場所に配置できます。
はエラーを報告しません。ただし、生成されたファイルが有効かどうかはわかりません。
以上がtensorflow protobuf のインポートサイクルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。