>  기사  >  백엔드 개발  >  tensorflow protobuf의 가져오기 주기

tensorflow protobuf의 가져오기 주기

王林
王林앞으로
2024-02-06 11:09:07531검색

张量流 Protobuf 中的导入周期

질문 내용

텐서플로우 서버와 통신하기 위한 클라이언트 코드를 작성하려고 합니다. tensorflowtensorflow_serving용으로 컴파일된 golang protobuf가 필요합니다. 이 중 어느 것도 쉽지 않습니다. 나는 이것을 통해 해냈습니다. 기본적으로 buf를 사용하여 생성합니다. 이것은 buf yaml입니다:

으아아아

성공적으로 실행되었지만 실행 중인 애플리케이션 로그:

으아아아

tensorflowtensorflow_serving 아래의 모든 항목은 원본 저장소에서 직접 컴파일된다는 점에 유의하세요.

Tensorflow처럼 널리 사용되는 것에도 가져오기 주기가 있어야 한다는 사실이 놀랍지만 어쩌면 그럴 수도 있습니다. 이 문제를 어떻게 해결할 수 있나요?


정답


tl;dr

근본 원인은 저장소 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를 사용하여 tensorflow proto 파일을 컴파일하기 위한 전체 설정

최종 디렉터리 구조는 다음과 같습니다.

으아아아

buf.gen.yaml: "tl;dr" 섹션을 참조하세요.

buf.work.yaml:

으아아아

buf.yaml:

으아아아

내 환경은 다음과 같습니다.

으아아아

이제 이 디렉터리의 루트에서 다음 명령을 실행하세요.

으아아아

Notes:

  1. 에 복제된 testdata 目录中,以便 go buildtensorflow 저장소는 이를 무시합니다.
  2. 설치 프로그램은 internal 目录中生成文件。您可以修改 buf.gen.yaml파일을 원하는 위치에 배치합니다.
  3. go build ./... 오류는 보고되지 않습니다. 하지만 생성된 파일이 유효한지 확실하지 않습니다.

위 내용은 tensorflow protobuf의 가져오기 주기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제