이 페이지는 Cloud Translation API를 통해 번역되었습니다.
Switch to English

XLA 용 새 백엔드 개발

이 예비 가이드는 TensorFlow를 효율적으로 하드웨어로 쉽게 재 타겟팅하려는 얼리 어답터를위한 것입니다. 이 가이드는 단계별가 아니며 LLVM , Bazel 및 TensorFlow에 대한 지식이 있다고 가정합니다.

XLA는 새로운 아키텍처 또는 가속기가 TensorFlow 그래프를 실행하기위한 백엔드를 만들기 위해 구현할 수있는 추상 인터페이스를 제공합니다. XLA 리 타게팅은 새로운 하드웨어를 위해 기존의 모든 TensorFlow Op를 구현하는 것보다 훨씬 간단하고 확장 가능해야합니다.

대부분의 구현은 다음 시나리오 중 하나에 해당합니다.

  1. 기존 LLVM 백엔드 유무에 관계없이 XLA에서 아직 공식적으로 지원하지 않는 기존 CPU 아키텍처.
  2. 기존 LLVM 백엔드가있는 비 CPU 유사 하드웨어.
  3. 기존 LLVM 백엔드가없는 비 CPU 유사 하드웨어.

시나리오 1 : XLA에서 아직 공식적으로 지원하지 않는 기존 CPU 아키텍처

이 시나리오에서는 기존 XLA CPU 백엔드를 살펴 보는 것으로 시작합니다. XLA를 사용하면 LLVM을 사용하여 TensorFlow를 다른 CPU로 쉽게 리 타겟팅 할 수 있습니다. CPU 용 XLA 백엔드 간의 주요 차이점은 LLVM에 의해 생성 된 코드이기 때문입니다. Google은 x64 및 ARM64 아키텍처 용 XLA를 테스트합니다.

하드웨어 공급 업체에 하드웨어 용 LLVM 백엔드가있는 경우 백엔드를 XLA로 빌드 된 LLVM과 연결하는 것은 간단합니다. JIT 모드에서 XLA CPU 백엔드는 호스트 CPU에 대한 코드를 내 보냅니다. 사전 컴파일의 경우 xla::AotCompilationOptions 는 LLVM 트리플을 제공하여 대상 아키텍처를 구성 할 수 있습니다.

기존 LLVM 백엔드가 없지만 다른 종류의 코드 생성기가있는 경우 대부분의 기존 CPU 백엔드를 재사용 할 수 있습니다.

시나리오 2 : 기존 LLVM 백엔드가있는 비 CPU 유사 하드웨어

기존 xla::CPUCompilerxla::GPUCompiler 클래스에서 새로운 xla::Compiler 구현을 모델링 할 수 있습니다. 이들은 이미 LLVM IR을 방출하기 때문입니다. 하드웨어의 특성에 따라 많은 LLVM IR 생성 측면을 변경해야 할 수 있지만 많은 코드를 기존 백엔드와 공유 할 수 있습니다.

따라야 할 좋은 예는 XLA의 GPU 백엔드 입니다. GPU 백엔드는 CPU와 유사하지 않은 ISA를 대상으로하기 때문에 코드 생성의 일부 측면은 GPU 도메인에 고유합니다. Hexagon과 같은 DSP (업스트림 LLVM 백엔드가 있음)와 같은 다른 종류의 하드웨어는 LLVM IR 방출 로직의 일부를 재사용 할 수 있지만 다른 부분은 고유합니다.

시나리오 3 : 기존 LLVM 백엔드가없는 비 CPU 유사 하드웨어

LLVM을 사용할 수없는 경우 가장 좋은 방법은 원하는 하드웨어에 대해 XLA 용 새 백엔드를 구현하는 것입니다. 이 옵션은 가장 많은 노력이 필요합니다. 구현해야하는 클래스는 다음과 같습니다.

  • StreamExecutor : 많은 장치에서 StreamExecutor 모든 방법이 필요한 것은 아닙니다. 자세한 내용은 기존 StreamExecutor 구현을 참조하십시오.
  • xla::Compiler :이 클래스는 HLO 계산의 컴파일을 xla::Executable 로 캡슐화합니다.
  • xla::Executable :이 클래스는 플랫폼에서 컴파일 된 계산을 시작하는 데 사용됩니다.
  • xla::TransferManager :이 클래스를 사용하면 백엔드가 지정된 장치 메모리 핸들에서 XLA 리터럴 데이터를 구성하기위한 플랫폼 별 메커니즘을 제공 할 수 있습니다. 즉, 호스트에서 장치로 또는 그 반대로 데이터 전송을 캡슐화하는 데 도움이됩니다.