SlideShare a Scribd company logo
3
Most read
4
Most read
9
Most read
The Deep Learning Compiler
Tae Young Lee
DL Framework landscape
● 딥러닝 컴파일러는, 다양한 딥러닝 플랫폼에서 학습된 딥러닝
모델을 입력으로 받아,
● 특정 하드웨어에서 동작 가능한 머신 코드(또는, 백엔드 코드)를
자동으로 생성합니다.
● 최근 제안된 XLA, TVM, Glow 와 같은 딥러닝 컴파일러들은,
● TensorFlow, Pytorch, MxNet, ONNX 등의 프레임워크로 작성된
모델을 입력으로 하여,
● CPU 및 GPU 용 백엔드 코드를 생성하고 있습니다.
○ CPU 용 백엔드 코드 : llvm
○ GPU 용 백엔드 코드 : CUDA, OpenCL, Metal 등
● 계산 그래프 생성기
○ 계산 그래프 생성기는, 다양한 딥러닝 플랫폼에서 생성된 딥러닝 모델을 로딩하여, 그래프
구조로 재구성한 뒤,
○ 모델에서 명시한 연산자들을, 프리미티브 연산자로 변환하여, 계산 그래프를 생성합니다.
○ 이후, 불필요한 노드 제거, 연산자 결합(Operator Fusion), 양자화(Quantization), 상수 폴딩
(constant-folding)과 같은, 그래프 최적화를 기법들을 적용하여,
○ 최종적으로 최적화 된 계산 그래프를 생성합니다.
● IR 생성기
○ 계산 그래프 생성기로부터 생성된 그래프는, 하드웨어에 독립적인 정보만 표현 할 수
있습니다.
■ ex) 연산자 간 입출력 관계, 연산자의 입출력 데이터 값, etc
○ 그러나 컴파일러는, 딥러닝 모델의 실행 성능을 높이기 위해,
○ 모델이 동작할 하드웨어의 아키텍처를 고려한, ‘하드웨어 의존적 최적화’를 필수적으로
수행해야합니다.
○ 따라서, 계산 그래프를 ‘하드웨어 의존적 최적화’에 적용 가능한 형태인,
○ 중간 표현 (IR: Intermediate Representation)으로 변환하는 과정이 필요합니다.
■ 참고로, IR 은 입출력 변수(또는 Tensor)들에 대한 선언과,
■ 변수들을 사용하는 연산식에 대한 정보를 포함하고 있습니다.
○ 컴파일러는, 생성된 IR 을 바탕으로 메모리 할당, 병렬화, 연산식 실행 순서 결정 등의
‘하드웨어 의존적 최적화’ 작업을 수행한 뒤, 코드를 생성합니다.
○ 요약하면, IR 생성기는 컴파일러가 하드웨어 의존적 최적화를 용이하게 수행하도록, 계산
그래프를 IR 로 변환하는 역할을 합니다.
● 백엔드 코드 생성기
○ 백엔드 코드 생성기는, IR 을 기반으로, 딥러닝 모델 워크로드가 배치될 타겟 하드웨어
(CPU, GPU, TPU 등)의 아키텍처에 최적화 된 백엔드 코드를 생성합니다.
○ 즉, 타겟 하드웨어 별로, 병렬로 처리 가능한 데이터의 크기, 캐시 크기, 효율적으로 수행
가능한 딥러닝 오퍼레이터의 타입, 실행 순서 등을 참조하여,
○ 스케쥴 정보를 생성한 뒤, 해당 하드웨어에 최적화 된 백엔드 코드를 생성합니다.
TVM 실행 흐름
● DL framework로부터 생성한 모델을 import 한 뒤, relay 를 통해, 해당
모델을 TVM 의 IRModule 로 변환합니다.
○ IRModule에는 모델을 나타낼 수 있는 다양한 함수들이
포함되어 있습니다.
● IRModule 을 점점 Lowering 하는 Transformation 과정을 거칩니다.
○ IRModule 이 원하는 하드웨어(메모리 구조, 데이터 타입
등)에 알맞게 최적화될 수 있도록 Tensorize 시킵니다.
○ 이를 위해 Quantization, Graph-Packing 등, 다양한
작업들이 포함되며,
○ 이때, AutoTVM 이 사용됩니다.
● 타깃 하드웨어에서 잘 작동하는 코드를 생성하기 위해, Translation
과정을 거칩니다.
○ 예를 들어, 타깃 하드웨어가 GPU 라면
[CUDA/OpenCL/Metal 등], CPU라면 [llvm] 코드를
생성합니다.
○ 이는, TVM 의 runtime.Module 에 encapsulate 되어있고,
○ 이를 통해, 타깃 하드웨어에 쉽게 export / load / execute
시킬 수 있습니다.
● runtime.Module 를 로드하여, 타깃 하드웨어에서 최적화 된 모델을
동작시킵니다 .
TFLite, TensorRT, TVM의 차이
● TFLite
○ TensorFlow(Keras)의 모델만 최적화가 가능합니다.
○ 여러 하드웨어에서 추론이 가능합니다.
○ 타겟 하드웨어에 따른 추가적인 최적화는 없습니다.
● TensorRT
○ 다양한 프레임워크의 모델 최적화가 가능합니다.
○ NVIDIA GPU 만 추론 하드웨어로 사용 가능합니다.
○ 추론에 사용하려는 NVIDIA GPU 종류에 따라 추가적으로 최적화할 수 있습니다.
● TVM
○ 다양한 프레임워크의 모델 최적화가 가능합니다.
○ 여러 하드웨어서 추론이 가능합니다.
○ 추론에 사용하려는 하드웨어 종류에 따라 추가적으로 최적화할 수 있습니다.
XLA 란?
우선 XLA (Accelerated Linear Algebra)는 Tensorflow의 서브 프로젝트로 그래프 연산의 최적화 / 바이너리 사이즈의 최소화
등을 목적으로 하는 컴파일러입니다.
결과를 먼저 말씀드리자면, XLA를 활용하는 것을 통해 그래프 연산 과정에 필요한 임시 버퍼도 덜 사용할 수 있고, 그래프
연산 속도도 단축시킬 수 있습니다. (구글 측 자료에 의하면 Nvidia GPU를 사용할 때 50%까지도 성능 향상이 있었다고
합니다.)
XLA
XLA도 일종의 컴파일러이기 때문에 일반적인 컴파일러 들이 동작하는 것처럼 FrontEnd (Parser) / MiddleEnd (High-level
Optimizer) / BackEnd (Target Code Generator)의 구조를 가지고 있으며, 주어진 타겟 플랫폼에 맞춰 그래프를 최적화 한 후
실행가능한 형태의 무언가를 생성하는 역할을 수행
BackEnd에서는 LLVM을 사용하고 있으며, LLVM과 마찬가지로 JiT compilation과 AoT compilation 모두를 지원하는게
특징입니다. 두가지 중 어떤 방식을 사용하느냐에 따라 실제 사용 시나리오가 달라지게 되며, AoT compilation을 사용하는
경우 아래와 같이 컴파일의 결과로 object file 및 이를 사용하기 위한 helper class에 대한 header file이 생성됩니다.
AOT
tfcompile은 Ahead-of-Time(AOT)이 TensorFlow 그래프를 실행 가능한 코드로 컴파일하는 독립 실행형 도구입니다. 이를 통해
총 바이너리 크기를 줄이고 일부 런타임 오버헤드를 방지할 수 있습니다. tfcompile은 일반적으로, 추론 그래프를 모바일
기기용 실행 코드로 컴파일하는 데 사용됩니다.
실행 바이너리를 만들기 위해 XLA 라이브러리나 Tensorflow 라이브러리 등을 포함할 필요가 없기 때문에 최종 타겟 바이너리
사이즈를 굉장히 작게 만들 수 있으나 기본 CPU backend의 경우 convolution, matmul 등의 연산에 대해 XLA runtime
function을 호출하는 코드를 생성하도록 되어 있기 때문에 일부 XLA runtime function들과 링크되어야 할 수도 있습니다.
JiT compilation을 사용하는 경우는 compile의 결과로 XlaExecutable 데이터가 생성되며, StreamExecutor를 통해 input
parameter를 feeding하고 그래프를 실행시킬 수 있는 형태입니다.
JitCompilation
JitCompilation을 사용하는 경우 런타임에 그래프를 입력으로 받아 실행할
수 있다는 장점이 있으나 애플리케이션이 XLA 런타임을 포함해야하기
때문에 eigen, protobuf, LLVM 등등 의존성들이 줄줄이 엮인다는 단점이
있습니다. (타겟 플랫폼에 해당 라이브러리들을 줄줄이 포팅해야할 수도
있습니다.)
애플리케이션을 배포하기 전 단계에 타겟 플랫폼이나 네트워크 형태에
대해 미리 알고 있는 경우에는 AoT compilation을 활용하는 방안을
고려해볼 수 있으며, 애플리케이션은 네트워크를 모르는 상태로
배포되어야 하는 환경이라면 JiT compilation을 사용해야합니다.
Tensorflow 외에도 다양한 머신러닝 프레임웍의 백엔드로 XLA를 활용할
수 있으며, PyTorch를 위해선 PyTorch XLA, ONNX (Open Neural
Network Exchange )를 위해선 onnx xla 프로젝트가 개발되고 있습니다.
The Deep Learning Compiler
The Deep Learning Compiler
The Deep Learning Compiler
The Deep Learning Compiler
The Deep Learning Compiler
The Deep Learning Compiler
The Deep Learning Compiler
The Deep Learning Compiler

More Related Content

PDF
Magnum IO GPUDirect Storage 最新情報
PPTX
ライブストリーミング低遅延化の取り組み @ DeNA
PDF
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
PDF
第1回 配信講義 計算科学技術特論A (2021)
PDF
JIT のコードを読んでみた
PDF
DeepLearningTutorial
PDF
[論文紹介] LSTM (LONG SHORT-TERM MEMORY)
PDF
Fpgaでの非同期信号の扱い方とvivadoによるサポート(公開用)
Magnum IO GPUDirect Storage 最新情報
ライブストリーミング低遅延化の取り組み @ DeNA
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
第1回 配信講義 計算科学技術特論A (2021)
JIT のコードを読んでみた
DeepLearningTutorial
[論文紹介] LSTM (LONG SHORT-TERM MEMORY)
Fpgaでの非同期信号の扱い方とvivadoによるサポート(公開用)

What's hot (20)

PDF
강좌 03 개발환경 구축
PDF
Cuda tutorial
PPTX
Github Actionsで始めるROS/ROS2のCI
PPTX
MIRU2014 tutorial deeplearning
PPTX
Machine Learning on Your Hand - Introduction to Tensorflow Lite Preview
PDF
Linux kernel debugging
PDF
いまさら聞けない!CUDA高速化入門
PDF
地理学卒論・修論生のためのQGIS講座_座学編
PDF
1076: CUDAデバッグ・プロファイリング入門
PDF
Zynqで始めるUSB開発-FPGAとARMで動く USBオーディオデバイスの実例とともに-
PDF
강좌 개요
PDF
【メタサーベイ】基盤モデル / Foundation Models
PDF
[db tech showcase Tokyo 2016] D13: NVMeフラッシュストレージを用いた高性能高拡張高可用なデータベースシステムの実現方...
PDF
강좌 01 ARM 프로세서 개요
PDF
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
PDF
ARM Trusted FirmwareのBL31を単体で使う!
PDF
[DL輪読会]Decision Transformer: Reinforcement Learning via Sequence Modeling
PDF
Virtualization Support in ARMv8+
PDF
NVIDIA HPC ソフトウエア斜め読み
PDF
Maxwell と Java CUDAプログラミング
강좌 03 개발환경 구축
Cuda tutorial
Github Actionsで始めるROS/ROS2のCI
MIRU2014 tutorial deeplearning
Machine Learning on Your Hand - Introduction to Tensorflow Lite Preview
Linux kernel debugging
いまさら聞けない!CUDA高速化入門
地理学卒論・修論生のためのQGIS講座_座学編
1076: CUDAデバッグ・プロファイリング入門
Zynqで始めるUSB開発-FPGAとARMで動く USBオーディオデバイスの実例とともに-
강좌 개요
【メタサーベイ】基盤モデル / Foundation Models
[db tech showcase Tokyo 2016] D13: NVMeフラッシュストレージを用いた高性能高拡張高可用なデータベースシステムの実現方...
강좌 01 ARM 프로세서 개요
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
ARM Trusted FirmwareのBL31を単体で使う!
[DL輪読会]Decision Transformer: Reinforcement Learning via Sequence Modeling
Virtualization Support in ARMv8+
NVIDIA HPC ソフトウエア斜め読み
Maxwell と Java CUDAプログラミング
Ad

Similar to The Deep Learning Compiler (20)

PPTX
이기종 멀티코어 프로세서를 위한 프로그래밍 언어 및 영상처리 오픈소스
PDF
llvm 소개
PPTX
01. Computer System Basics with C Language
PPT
어플리케이션 성능 최적화 기법
PPTX
Infra as Code with Packer, Ansible and Terraform
PDF
[데브루키] 게임 엔진 아키텍쳐_2장_도구 (Game Engine Architecture Chapter.2-Tools)
PDF
Ch09
PDF
김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)
PDF
Exploring Deep Learning Acceleration Technology Embedded in LLMs
PPTX
[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기
PPTX
System+os study 1
 
PDF
Nvidia architecture
PDF
1st-BE-sideproject-GDGonCampus_KyungHee_Univ.pdf
PDF
V8 engine internal
PDF
강좌 02 ARM 펌웨어 개발 환경 개요
PPTX
파이썬 병렬프로그래밍
PPTX
C++ GUI 라이브러리 소개: Qt & Nana
PDF
나만의 엔진 개발하기
PPTX
가상화된 코드를 분석해보자
PDF
빌드관리 및 디버깅 (2010년 자료)
이기종 멀티코어 프로세서를 위한 프로그래밍 언어 및 영상처리 오픈소스
llvm 소개
01. Computer System Basics with C Language
어플리케이션 성능 최적화 기법
Infra as Code with Packer, Ansible and Terraform
[데브루키] 게임 엔진 아키텍쳐_2장_도구 (Game Engine Architecture Chapter.2-Tools)
Ch09
김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)
Exploring Deep Learning Acceleration Technology Embedded in LLMs
[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기
System+os study 1
 
Nvidia architecture
1st-BE-sideproject-GDGonCampus_KyungHee_Univ.pdf
V8 engine internal
강좌 02 ARM 펌웨어 개발 환경 개요
파이썬 병렬프로그래밍
C++ GUI 라이브러리 소개: Qt & Nana
나만의 엔진 개발하기
가상화된 코드를 분석해보자
빌드관리 및 디버깅 (2010년 자료)
Ad

More from Tae Young Lee (20)

PDF
DeepSeek를 통해 본 Trend (Faculty Tae Young Lee)
PDF
Transitioning from the Era of Big Data to LLMs_Deriving Insights
PDF
Facebook Meta's technical direction in Large Language Models (LLMs)
PDF
MultiModal Embedding integrates various data types, like images, text, and au...
PDF
Review of the Paper on Capabilities of Gemini Models in Medicine
PDF
A future that integrates LLMs and LAMs (Symposium)
PDF
LLMs Service that provides what users want to know
PDF
LLM 모델 기반 서비스 실전 가이드
PDF
Recommendation System History
PDF
검색엔진에 적용된 ChatGPT
PDF
검색엔진에 적용된 딥러닝 모델 방법론
PDF
PaLM Paper Review
PDF
History of Vision AI
PDF
Aws architecture
PDF
Enhanced ai platform
PDF
Ai based on gpu
PDF
Real estate trust solution
PDF
Transfer learning usage
PDF
Create a solution including deep learning models
PDF
Infra as a model service
DeepSeek를 통해 본 Trend (Faculty Tae Young Lee)
Transitioning from the Era of Big Data to LLMs_Deriving Insights
Facebook Meta's technical direction in Large Language Models (LLMs)
MultiModal Embedding integrates various data types, like images, text, and au...
Review of the Paper on Capabilities of Gemini Models in Medicine
A future that integrates LLMs and LAMs (Symposium)
LLMs Service that provides what users want to know
LLM 모델 기반 서비스 실전 가이드
Recommendation System History
검색엔진에 적용된 ChatGPT
검색엔진에 적용된 딥러닝 모델 방법론
PaLM Paper Review
History of Vision AI
Aws architecture
Enhanced ai platform
Ai based on gpu
Real estate trust solution
Transfer learning usage
Create a solution including deep learning models
Infra as a model service

The Deep Learning Compiler

  • 1. The Deep Learning Compiler Tae Young Lee
  • 2. DL Framework landscape ● 딥러닝 컴파일러는, 다양한 딥러닝 플랫폼에서 학습된 딥러닝 모델을 입력으로 받아, ● 특정 하드웨어에서 동작 가능한 머신 코드(또는, 백엔드 코드)를 자동으로 생성합니다. ● 최근 제안된 XLA, TVM, Glow 와 같은 딥러닝 컴파일러들은, ● TensorFlow, Pytorch, MxNet, ONNX 등의 프레임워크로 작성된 모델을 입력으로 하여, ● CPU 및 GPU 용 백엔드 코드를 생성하고 있습니다. ○ CPU 용 백엔드 코드 : llvm ○ GPU 용 백엔드 코드 : CUDA, OpenCL, Metal 등
  • 3. ● 계산 그래프 생성기 ○ 계산 그래프 생성기는, 다양한 딥러닝 플랫폼에서 생성된 딥러닝 모델을 로딩하여, 그래프 구조로 재구성한 뒤, ○ 모델에서 명시한 연산자들을, 프리미티브 연산자로 변환하여, 계산 그래프를 생성합니다. ○ 이후, 불필요한 노드 제거, 연산자 결합(Operator Fusion), 양자화(Quantization), 상수 폴딩 (constant-folding)과 같은, 그래프 최적화를 기법들을 적용하여, ○ 최종적으로 최적화 된 계산 그래프를 생성합니다. ● IR 생성기 ○ 계산 그래프 생성기로부터 생성된 그래프는, 하드웨어에 독립적인 정보만 표현 할 수 있습니다. ■ ex) 연산자 간 입출력 관계, 연산자의 입출력 데이터 값, etc ○ 그러나 컴파일러는, 딥러닝 모델의 실행 성능을 높이기 위해, ○ 모델이 동작할 하드웨어의 아키텍처를 고려한, ‘하드웨어 의존적 최적화’를 필수적으로 수행해야합니다. ○ 따라서, 계산 그래프를 ‘하드웨어 의존적 최적화’에 적용 가능한 형태인, ○ 중간 표현 (IR: Intermediate Representation)으로 변환하는 과정이 필요합니다. ■ 참고로, IR 은 입출력 변수(또는 Tensor)들에 대한 선언과, ■ 변수들을 사용하는 연산식에 대한 정보를 포함하고 있습니다. ○ 컴파일러는, 생성된 IR 을 바탕으로 메모리 할당, 병렬화, 연산식 실행 순서 결정 등의 ‘하드웨어 의존적 최적화’ 작업을 수행한 뒤, 코드를 생성합니다. ○ 요약하면, IR 생성기는 컴파일러가 하드웨어 의존적 최적화를 용이하게 수행하도록, 계산 그래프를 IR 로 변환하는 역할을 합니다. ● 백엔드 코드 생성기 ○ 백엔드 코드 생성기는, IR 을 기반으로, 딥러닝 모델 워크로드가 배치될 타겟 하드웨어 (CPU, GPU, TPU 등)의 아키텍처에 최적화 된 백엔드 코드를 생성합니다. ○ 즉, 타겟 하드웨어 별로, 병렬로 처리 가능한 데이터의 크기, 캐시 크기, 효율적으로 수행 가능한 딥러닝 오퍼레이터의 타입, 실행 순서 등을 참조하여, ○ 스케쥴 정보를 생성한 뒤, 해당 하드웨어에 최적화 된 백엔드 코드를 생성합니다.
  • 4. TVM 실행 흐름 ● DL framework로부터 생성한 모델을 import 한 뒤, relay 를 통해, 해당 모델을 TVM 의 IRModule 로 변환합니다. ○ IRModule에는 모델을 나타낼 수 있는 다양한 함수들이 포함되어 있습니다. ● IRModule 을 점점 Lowering 하는 Transformation 과정을 거칩니다. ○ IRModule 이 원하는 하드웨어(메모리 구조, 데이터 타입 등)에 알맞게 최적화될 수 있도록 Tensorize 시킵니다. ○ 이를 위해 Quantization, Graph-Packing 등, 다양한 작업들이 포함되며, ○ 이때, AutoTVM 이 사용됩니다. ● 타깃 하드웨어에서 잘 작동하는 코드를 생성하기 위해, Translation 과정을 거칩니다. ○ 예를 들어, 타깃 하드웨어가 GPU 라면 [CUDA/OpenCL/Metal 등], CPU라면 [llvm] 코드를 생성합니다. ○ 이는, TVM 의 runtime.Module 에 encapsulate 되어있고, ○ 이를 통해, 타깃 하드웨어에 쉽게 export / load / execute 시킬 수 있습니다. ● runtime.Module 를 로드하여, 타깃 하드웨어에서 최적화 된 모델을 동작시킵니다 .
  • 5. TFLite, TensorRT, TVM의 차이 ● TFLite ○ TensorFlow(Keras)의 모델만 최적화가 가능합니다. ○ 여러 하드웨어에서 추론이 가능합니다. ○ 타겟 하드웨어에 따른 추가적인 최적화는 없습니다. ● TensorRT ○ 다양한 프레임워크의 모델 최적화가 가능합니다. ○ NVIDIA GPU 만 추론 하드웨어로 사용 가능합니다. ○ 추론에 사용하려는 NVIDIA GPU 종류에 따라 추가적으로 최적화할 수 있습니다. ● TVM ○ 다양한 프레임워크의 모델 최적화가 가능합니다. ○ 여러 하드웨어서 추론이 가능합니다. ○ 추론에 사용하려는 하드웨어 종류에 따라 추가적으로 최적화할 수 있습니다.
  • 6. XLA 란? 우선 XLA (Accelerated Linear Algebra)는 Tensorflow의 서브 프로젝트로 그래프 연산의 최적화 / 바이너리 사이즈의 최소화 등을 목적으로 하는 컴파일러입니다. 결과를 먼저 말씀드리자면, XLA를 활용하는 것을 통해 그래프 연산 과정에 필요한 임시 버퍼도 덜 사용할 수 있고, 그래프 연산 속도도 단축시킬 수 있습니다. (구글 측 자료에 의하면 Nvidia GPU를 사용할 때 50%까지도 성능 향상이 있었다고 합니다.)
  • 7. XLA XLA도 일종의 컴파일러이기 때문에 일반적인 컴파일러 들이 동작하는 것처럼 FrontEnd (Parser) / MiddleEnd (High-level Optimizer) / BackEnd (Target Code Generator)의 구조를 가지고 있으며, 주어진 타겟 플랫폼에 맞춰 그래프를 최적화 한 후 실행가능한 형태의 무언가를 생성하는 역할을 수행 BackEnd에서는 LLVM을 사용하고 있으며, LLVM과 마찬가지로 JiT compilation과 AoT compilation 모두를 지원하는게 특징입니다. 두가지 중 어떤 방식을 사용하느냐에 따라 실제 사용 시나리오가 달라지게 되며, AoT compilation을 사용하는 경우 아래와 같이 컴파일의 결과로 object file 및 이를 사용하기 위한 helper class에 대한 header file이 생성됩니다.
  • 8. AOT tfcompile은 Ahead-of-Time(AOT)이 TensorFlow 그래프를 실행 가능한 코드로 컴파일하는 독립 실행형 도구입니다. 이를 통해 총 바이너리 크기를 줄이고 일부 런타임 오버헤드를 방지할 수 있습니다. tfcompile은 일반적으로, 추론 그래프를 모바일 기기용 실행 코드로 컴파일하는 데 사용됩니다. 실행 바이너리를 만들기 위해 XLA 라이브러리나 Tensorflow 라이브러리 등을 포함할 필요가 없기 때문에 최종 타겟 바이너리 사이즈를 굉장히 작게 만들 수 있으나 기본 CPU backend의 경우 convolution, matmul 등의 연산에 대해 XLA runtime function을 호출하는 코드를 생성하도록 되어 있기 때문에 일부 XLA runtime function들과 링크되어야 할 수도 있습니다. JiT compilation을 사용하는 경우는 compile의 결과로 XlaExecutable 데이터가 생성되며, StreamExecutor를 통해 input parameter를 feeding하고 그래프를 실행시킬 수 있는 형태입니다.
  • 9. JitCompilation JitCompilation을 사용하는 경우 런타임에 그래프를 입력으로 받아 실행할 수 있다는 장점이 있으나 애플리케이션이 XLA 런타임을 포함해야하기 때문에 eigen, protobuf, LLVM 등등 의존성들이 줄줄이 엮인다는 단점이 있습니다. (타겟 플랫폼에 해당 라이브러리들을 줄줄이 포팅해야할 수도 있습니다.) 애플리케이션을 배포하기 전 단계에 타겟 플랫폼이나 네트워크 형태에 대해 미리 알고 있는 경우에는 AoT compilation을 활용하는 방안을 고려해볼 수 있으며, 애플리케이션은 네트워크를 모르는 상태로 배포되어야 하는 환경이라면 JiT compilation을 사용해야합니다. Tensorflow 외에도 다양한 머신러닝 프레임웍의 백엔드로 XLA를 활용할 수 있으며, PyTorch를 위해선 PyTorch XLA, ONNX (Open Neural Network Exchange )를 위해선 onnx xla 프로젝트가 개발되고 있습니다.