텐서플로우 서버와 통신하기 위한 클라이언트 코드를 작성하려고 합니다. tensorflow
和 tensorflow_serving
용으로 컴파일된 golang protobuf가 필요합니다. 이 중 어느 것도 쉽지 않습니다. 나는 이것을 통해 해냈습니다. 기본적으로 buf를 사용하여 생성합니다. 이것은 buf yaml입니다:
성공적으로 실행되었지만 실행 중인 애플리케이션 로그:
으아아아 tensorflow
和 tensorflow_serving
아래의 모든 항목은 원본 저장소에서 직접 컴파일된다는 점에 유의하세요.
Tensorflow처럼 널리 사용되는 것에도 가져오기 주기가 있어야 한다는 사실이 놀랍지만 어쩌면 그럴 수도 있습니다. 이 문제를 어떻게 해결할 수 있나요?
근본 원인은 저장소 https://www.php.cn/link/1a16abf2a3149fc7cd6083687cce01c2가 실제로 원본 파일을 올바르게 구성하지 않거나 적어도 친숙하게 만들지 않기 때문입니다.
다음 두 파일은 go에서 가져오기 루프를 발생시킵니다(xla
->xla/service
->xla
):
tensorflow/compiler/xla/xla.proto
import "tensorflow/compiler/xla/service/hlo.proto"
tensorflow/compiler/xla/service/hlo.proto
import "tensorflow/compiler/xla/xla_data.proto"
xla_data.proto
는 다른 파일을 가져오지 않으므로 자체 패키지로 이동하여 가져오기 루프를 끊을 수 있습니다. buf의 오버레이 기능xla_data.proto
不导入任何其他文件,我们可以将其移动到自己的包中以打破导入循环。我们可以利用 buf 的 覆盖功能做这个。这是最终的 buf.gen.yaml
을 사용하여 이를 수행할 수 있습니다. 이것이 최종 buf.gen.yaml
파일입니다:
최종 디렉터리 구조는 다음과 같습니다.
으아아아buf.gen.yaml: "tl;dr" 섹션을 참조하세요.
buf.work.yaml:
으아아아buf.yaml:
으아아아내 환경은 다음과 같습니다.
으아아아이제 이 디렉터리의 루트에서 다음 명령을 실행하세요.
으아아아Notes:
testdata
目录中,以便 go build
tensorflow 저장소는 이를 무시합니다. internal
目录中生成文件。您可以修改 buf.gen.yaml
파일을 원하는 위치에 배치합니다. go build ./...
오류는 보고되지 않습니다. 하지만 생성된 파일이 유효한지 확실하지 않습니다. 위 내용은 tensorflow protobuf의 가져오기 주기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!