TVM ์์ธ
๊ฐ์
Apache TVM(Tensor Virtual Machine)์ ๋ค์ํ ํ๋์จ์ด ๊ฐ์๊ธฐ์์ ๊ณ ์ฑ๋ฅ ๋จธ์ ๋ฌ๋ ์คํ์ ๊ฐ๋ฅํ๊ฒ ํ๋ ์คํ์์ค ๋ฅ ๋ฌ๋ ์ปดํ์ผ๋ฌ ์คํ์ด๋ค. 2017๋ ์ ์๊ฐ๋ ์ดํ Apache ์ํํธ์จ์ด ์ฌ๋จ ์ฐํ์์ ํ๋ฐํ ๊ฐ๋ฐ๋๊ณ ์์ผ๋ฉฐ, GPU(CUDA, OpenCL), CPU(LLVM), TPU, NPU ๋ฑ ๊ด๋ฒ์ํ ํ๋์จ์ด๋ฅผ ์ง์ํ๋ค. TVM์ ํ๋ ์์ํฌ ๋ ๋ฆฝ์ ์ธ IR(Intermediate Representation)์ ํตํด PyTorch, TensorFlow, ONNX ๋ฑ ๋ค์ํ ML ํ๋ ์์ํฌ์ ๋ชจ๋ธ์ ์์ฉํ๊ณ , ํ๋์จ์ด์ ํนํ๋ ๊ณ ์ฑ๋ฅ ์ปค๋์ ์๋์ผ๋ก ์์ฑํ๋ค.
TVM์ ํต์ฌ ์ค๊ณ ์ฒ ํ์ "์๋ํฌ์๋ ์ต์ ํ(end-to-end optimization)"์ด๋ค. ๋ชจ๋ธ ์์ค์ ๊ทธ๋ํ ์ต์ ํ๋ถํฐ ์ปค๋ ์์ค์ ๋ฃจํ ํ์ผ๋ง, ๋ฒกํฐํ, ์ค๋ ๋ ๋ฐ์ธ๋ฉ๊น์ง ํ๋์ ํตํฉ ํ์ดํ๋ผ์ธ์์ ์ฒ๋ฆฌํ๋ค. ์ต๊ทผ TVM์ ๊ณ ์์ค ๊ทธ๋ํ ์ถ์ํ๋ฅผ ๋ด๋นํ๋ Relax์ ์ ์์ค ํ ์ ํ๋ก๊ทธ๋จ์ ๋ด๋นํ๋ TensorIR์ ์ด์ค IR ๊ตฌ์กฐ๋ฅผ ์ฑํํ์ฌ, ๊ทธ๋ํ-์ปค๋ ์์ค ๊ต์ฐจ ์ต์ ํ๋ฅผ ์ง์ํ๋ค.
ํต์ฌ ๊ฐ๋
TVM ์คํ ์ํคํ ์ฒ
TVM ์คํ์ ํฌ๊ฒ ๋ค ๊ฐ์ง ๊ณ์ธต์ผ๋ก ๊ตฌ์ฑ๋๋ค:
| ๊ณ์ธต | ๋ชจ๋ | ์ค๋ช |
|---|---|---|
| ํ๋ก ํธ์๋ | Relax Frontend | ONNX, PyTorch, TensorFlow ๋ชจ๋ธ ์ํฌํธ |
| ๊ณ ์์ค IR | Relax | ๊ทธ๋ํ ์์ค ์ถ์ํ, ์ฐ์ฐ ์ตํฉ, ์์ ํด๋ฉ |
| ์ ์์ค IR | TensorIR (tirx/s_tir) | ๋ฃจํ ํ์ผ๋ง, ์ค์ผ์ค๋ง, ๋ฒกํฐํ |
| ๋ฐฑ์๋ | Target/Codegen | LLVM, CUDA, OpenCL ๋ฑ ํ๋์จ์ด๋ณ ์ฝ๋ ์์ฑ |
IRModule: ํต์ฌ ๋ฐ์ดํฐ ๊ตฌ์กฐ
TVM์ ๋ชจ๋ ๋ณํ์ IRModule์ ์ค์ฌ์ผ๋ก ์ด๋ฃจ์ด์ง๋ค. IRModule์ ๋ ์ข ๋ฅ์ ํจ์๋ฅผ ํฌํจํ๋ค:
- relax.Function: ๊ณ ์์ค ํจ์ํ ํ๋ก๊ทธ๋จ ํํ. ๊ทธ๋ํ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋ฉฐ, ์ ์ด ํ๋ฆ๊ณผ ๋ณต์กํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ง์ํ๋ค. ๋ชจ๋ธ์ด๋ ์๋ธ๊ทธ๋ํ์ ๋์ํ๋ค.
- tirx.PrimFunc: ์ ์์ค ํ ์ ํ๋ก๊ทธ๋จ ํํ. ๋ฃจํ ์ค์ฒฉ, ๋ค์ฐจ์ ๋ก๋/์คํ ์ด, ์ค๋ ๋ฉ, ๋ฒกํฐ/ํ ์ ๋ช ๋ น์ด๋ฅผ ํฌํจํ๋ค. ์ตํฉ๋ ์ปค๋ ํ๋๋ฅผ ๋ํ๋ธ๋ค.
์ปดํ์ผ ๊ณผ์ ์์ ๋ชจ๋ relax ์ฐ์ฐ์ tirx.PrimFunc์ด๋ TVM PackedFunc์ผ๋ก ๋ก์ด๋ง(lowering)๋๋ฉฐ, relax ์ฐ์ฐ ํธ์ถ์ ์ ์์ค ํจ์ ํธ์ถ(์: R.call_tir)๋ก ๋ณํ๋๋ค.
TVMScript
TVMScript๋ Python ๊ธฐ๋ฐ DSL๋ก, TVM IR๋ฅผ ๊ธฐ์ ํ ์ ์๊ฒ ํ๋ค. @I.ir_module, @T.prim_func, @R.function ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ Python ๋ฌธ๋ฒ์ผ๋ก IRModule์ ์ ์ํ๋ฉฐ, ํ์ด์ฌ ์ธํฐํ๋ฆฌํฐ๊ฐ ์๋ ํ์๋ฅผ ํตํด TVM IR๋ก ๋ณํ๋๋ค. ๋ชจ๋ IRModule์ TVMScript๋ก ์ญ์ง๋ ฌํ(roundtrip)๊ฐ ๊ฐ๋ฅํ๋ค.
TensorIR (tirx + s_tir)
TensorIR์ ํ ์ ํ๋ก๊ทธ๋จ์ ์ํ ์ ์์ค ์ถ์ํ์ด๋ฉฐ, ๋ ๋ชจ๋๋ก ๋๋๋ค:
- tirx (Tensor IR eXtensions): PrimFunc, Buffer, SBlock, ํํ์, ๋ฌธ์ฅ ๋ฑ ์ฝ์ด IR ์ ์์ ๋ก์ด๋ง ํจ์ค๋ฅผ ๋ด๋นํ๋ค.
- s_tir (Schedulable TIR): ์ค์ผ์ค ํ๋ฆฌ๋ฏธํฐ๋ธ, MetaSchedule, DLight, ํ ์ ์ธํธ๋ฆฐ์ํฌ๋ฅผ ๋ด๋นํ๋ค.
TensorIR์ ํต์ฌ ์์๋ Block์ด๋ค. Block์ ๋ฐ๋ณต๋ฌธ ๊ฒน์นจ(loop nest) ๋ด์์์ ๊ณ์ฐ ๋จ์๋ฅผ ๋ํ๋ด๋ฉฐ, read/write region, ๋ฐ๋ณต๋ฌธ ์ถ(axis) ์์ฑ, ๊ณ์ฐ ์ฐจ์ ๋ฑ ์ค์ผ์ค๋ง์ ํ์ํ ๊ตฌ์กฐ์ ์ ๋ณด๋ฅผ ๋ช ์์ ์ผ๋ก ํฌํจํ๋ค.
Relax
Relax๋ ML ๋ชจ๋ธ์ ๊ทธ๋ํ ์์ค ์ถ์ํ๋ฅผ ๋ด๋นํ๋ ๊ณ ์์ค IR์ด๋ค. ํต์ฌ ํน์ง:
- Dataflow Pattern Language (DPL): ํจํด ๋งค์นญ๊ณผ ์ฌ์์ฑ์ ์ํ ์ธ์ด. ์ฐ์ฐ ์ตํฉ, ๊ทธ๋ํ ๋ ์ด์์ ์ต์ ํ ๋ฑ์ ํ์ฉ๋๋ค.
- Graph-level Optimizations: Constant Folding, Dead Code Elimination, Operator Fusion
- Cross-level Optimization: Relax์ TensorIR ๊ฐ์ ๊ต์ฐจ ์ต์ ํ. LegalizeOps ํจ์ค๋ก Relax ์ฐ์ฐ์ TensorIR PrimFunc์ผ๋ก ๋ก์ด๋งํ๊ณ , FuseOps + FuseTIR๋ก ์ฌ๋ฌ ์ฐ์ฐ์ ํ๋์ ์ปค๋๋ก ์ตํฉํ๋ค.
๋น๊ต/๋ถ์
TVM vs ๋ค๋ฅธ AI ์ปดํ์ผ๋ฌ
| ํญ๋ชฉ | TVM | XLA | TensorRT | Glow |
|---|---|---|---|---|
| ๊ฐ๋ฐ์ฌ | Apache | NVIDIA | Meta | |
| ๋ผ์ด์ ์ค | Apache 2.0 | Apache 2.0 | ๋ ์ | BSD |
| ์ง์ ํ๋์จ์ด | ๋ฒ์ฉ (GPU/CPU/NPU/TPU) | TPU, GPU | NVIDIA GPU | GPU, NPU |
| ์๋ ํ๋ | MetaSchedule | ์์ | ์์ | ์์ |
| ํ๋ ์์ํฌ ์ง์ | ONNX, PyTorch, TF, MXNet | TensorFlow, JAX | TensorRT ํ์ | PyTorch, Caffe2 |
| LLM ์ง์ | Relax + TIRx | StableHLO | TensorRT-LLM | ์ ํ์ |
| ๋ถ์ฐ ์คํ | Disco (NCCL/RCCL) | TPU Pod | ๋ด์ฅ | ์ ํ์ |
TVM ๋ด๋ถ ๋ชจ๋ ๋น๊ต
| ๋ชจ๋ | ์ถ์ํ ์์ค | ์ญํ | ๋์ |
|---|---|---|---|
| Relax | ๊ณ ์์ค | ๊ทธ๋ํ ๊ตฌ์กฐ, ์ฐ์ฐ ์๋ฏธ | ์๋ํฌ์๋ ๋ชจ๋ธ |
| TensorIR | ์ ์์ค | ํ ์ ์ปค๋, ๋ฃจํ/๋ฉ๋ชจ๋ฆฌ ์ต์ ํ | ๊ฐ๋ณ ์ฐ์ฐ/์ตํฉ ์ปค๋ |
| MetaSchedule | ์ค์ผ์ค๋ง | ๊ฒ์ ๊ธฐ๋ฐ ์๋ ํ๋ | TensorIR ์ปค๋ |
| DLight | ์ค์ผ์ค๋ง | ๊ท์น ๊ธฐ๋ฐ GPU ์ค์ผ์ค๋ง | TensorIR ์ปค๋ |
| TOPI | ๋๋ฉ์ธ | ์ฌ์ ์ ์ ํ ์ ์ฐ์ฐ | ์ปค๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ |
์ ๋ฐ๋ ์ง์ ๋น๊ต
| ์ ๋ฐ๋ | TVM ์ง์ | ์ค๋ช |
|---|---|---|
| FP32 | O | ๊ธฐ๋ณธ ์ ๋ฐ๋ |
| FP16 | O | ํ์ด๋ธ๋ฆฌ๋ ์ ๋ฐ๋, Mixed Precision |
| BF16 | O | Brain Floating Point, LLM ํ์ต |
| FP8 | O | H100/H200 ์ง์, E4M3/E5M2 |
| INT8 | O | ์์ํ ์ถ๋ก |
| INT4 | O | 2๋นํธ/4๋นํธ ์์ํ |
| FP4 | O | NVIDIA Blackwell ์ง์ |
๋์ ์๋ฆฌ
TVM ์ปดํ์ผ๋ฌ ํ์ดํ๋ผ์ธ
-
๋ชจ๋ธ ์ํฌํธ ๋จ๊ณ:
- ํ๋ ์์ํฌ๋ณ ํ๋ก ํธ์๋(Frontend)๊ฐ ๋ชจ๋ธ์ ๋ก๋ํ๋ค
- ONNX:onnx.load()โrelax.frontend.onnx.from_onnx()
- PyTorch:torch.jit.trace()โrelax.frontend.torch.from_fx()
- ํ๋ ์์ํฌ ์ค๊ฐ ํํ์ Relax IR๋ก ๋ณํํ๋ค -
Relax ๊ทธ๋ํ ์ต์ ํ ๋จ๊ณ:
- Constant Folding: ์ปดํ์ผ ์์ ์ ์์ ์ฐ์ฐ ์ํ
- Dead Code Elimination: ๋ถํ์ํ ์ฐ์ฐ ์ ๊ฑฐ
- ** FuseOps: ์ฐ์ฐ์ ํจํด ๊ธฐ๋ฐ์ผ๋ก ์ตํฉ ๋จ์๋ก ๋ถ๋ฆฌ
- LegalizeOps**: Relax ์ฐ์ฐ์ TensorIR PrimFunc์ผ๋ก ๋ก์ด๋ง -
TensorIR ์ค์ผ์ค๋ง ๋จ๊ณ:
- DLight (๊ท์น ๊ธฐ๋ฐ): ๋ฏธ๋ฆฌ ์ ์๋ ๊ณ ์ฑ๋ฅ ์ค์ผ์ค ๊ท์น ์ ์ฉTiling: ๋ฃจํ๋ฅผ ํ์ผ๋ก ๋ถํ ํ์ฌ ์บ์ ์ ๊ทผ ์ต์ ํ- Vectorization: SIMD ๋ช ๋ น์ด ํ์ฉ
- Thread Binding: GPU ์ค๋ ๋ ํ ๋น
- MetaSchedule (๊ฒ์ ๊ธฐ๋ฐ): ์ค์ ์ฑ๋ฅ ์ธก์ ๊ธฐ๋ฐ ์ต์ ์กฐํฉ ํ์
- ๊ณต๊ฐ ํ์(Space Explorer) + ์ฑ๋ฅ ์์ธก(Performance Model)
-
TensorIR ๋ก์ด๋ง ๋จ๊ณ:
- ๋ฉํฐ์ฐจ์ ์ ๊ทผ์ 1์ฐจ์ ํฌ์ธํฐ ์ ๊ทผ์ผ๋ก ํํํ
- ํ๋์จ์ด ํนํ ์ธํธ๋ฆฐ์ํฌ๋ก ๋ณํ
- ๋ฐํ์ ํธ์ถ ๊ท์ฝ ์ถฉ์กฑ ํจ์ ์ํธ๋ฆฌ ๋ฐ์ฝ๋ ์ด์ -
๋์ ๋ฒ์ญ(Target Translation) ๋จ๊ณ:
- LLVM IRBuilder๋ฅผ ์ฌ์ฉํ์ฌ x86/ARM ๊ธฐ๊ณ์ด ์์ฑ
- CUDA C, OpenCL ์์ค ์ฝ๋ ์์ฑ
- BYOC(Bring Your Own Codegen)๋ก cuBLAS, CUTLASS, cuDNN ๋ฑ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋์คํจ์น -
๋ฐํ์ ์คํ ๋จ๊ณ:
-runtime.Module์ผ๋ก ์ปดํ์ผ ๊ฒฐ๊ณผ๋ฅผ ์บก์ํ
-PackedFunc์ผ๋ก ํ์ ์ ๊ฑฐ๋ ํจ์ ์ธํฐํ์ด์ค ์ ๊ณต
- Python, C++, Rust, Go, Java, JavaScript ๋ฑ ๋ค์ํ ์ธ์ด์์ ํธ์ถ ๊ฐ๋ฅ
๋ฐํ์ ์ํคํ ์ฒ
TVM ๋ฐํ์์ ๋ค์ ํต์ฌ ๊ตฌ์กฐ๋ก ๊ตฌ์ฑ๋๋ค:
| ๊ตฌ์กฐ | ์ค๋ช |
|---|---|
| runtime.Module | ์ปดํ์ผ ๊ฒฐ๊ณผ๋ฌผ์ ์บก์ํ. .so, .dll, .dylib ๋ฑ์ผ๋ก ๋ด๋ณด๋ด๊ธฐ |
| PackedFunc | ํ์ ์ ๊ฑฐ๋ ํจ์ ์ธํฐํ์ด์ค. POD ํ์ , ๋ฌธ์์ด, Tensor, Module, Function์ ์ธ์๋ก ๋ฐ์ |
| runtime.Tensor | ํ๋์จ์ด ๋ฉ๋ชจ๋ฆฌ์ ์์นํ ํ ์ ๋ํผ |
| Relax VM | ๋ ์ง์คํฐ ๊ธฐ๋ฐ ์ธํฐํ๋ฆฌํฐ. Call, Ret, Goto, If ๋ค ๊ฐ์ง ์ต์ฝ๋๋ก ์ ์ด ํ๋ฆ ์ฒ๋ฆฌ |
| Disco | ๋ถ์ฐ ์คํ ๋ฐํ์. NCCL/RCCL์ ํตํ allreduce, allgather ๋ฑ ์งํฉ ์ฐ์ฐ ์ง์ |
Disco ๋ถ์ฐ ๋ฐํ์
Disco๋ ๋ชจ๋ธ์ด ๋จ์ผ GPU์ ๋ค์ด๊ฐ์ง ์์ ๋ ์ฌ์ฉ๋๋ ๋ถ์ฐ ์คํ ๋ฐํ์์ด๋ค. ํต์ฌ ๊ฐ๋ :
- Session: ์์ปค ๊ทธ๋ฃน์ ์์ ํ๊ณ SPMD ์คํ์ผ ํ๋ก๊ทธ๋๋ฐ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ค
- DRef: ์์ปค์ ์์ฃผํ๋ ๋ถ์ฐ ์ฐธ์กฐ. ๊ฐ ์์ปค์ ๋ก์ปฌ ์ค๋์ ๋์ํ๋ค
- ์ธ ๊ฐ์ง ์ธ์ ๋ฐฑ์๋:
ThreadedSession: ๋จ์ผ ๋จธ์ ๋ฉํฐGPU ์ถ๋ก ์ฉ (๊ฐ์ฅ ์ผ๋ฐ์ )ProcessSession: ํ๋ก์ธ์ค ๊ฒฉ๋ฆฌ๊ฐ ํ์ํ ๊ฒฝ์ฐSocketSession: ๋ฉํฐ๋ ธ๋ ํด๋ฌ์คํฐ์ฉ TCP ์์ผ ์ฐ๊ฒฐ
MetaSchedule ์๋ ํ๋
MetaSchedule์ TensorIR ์ปค๋์ ์ต์ ์ค์ผ์ค์ ๊ฒ์ ๊ธฐ๋ฐ์ผ๋ก ์ฐพ๋ ํ๋ ์์ํฌ์ด๋ค.
์๋ ๋ฐฉ์:
1. ํ๋ ๊ฐ๋ฅํ ์์
(Tunable Task) ์ถ์ถ
2. ํ์ ๊ณต๊ฐ(Space) ์ ์: Tiling ํฌ๊ธฐ, ๋ฒกํฐํ ๊ธธ์ด, ์ค๋ ๋ ๋ฐฐ์น ๋ฑ
3. ์ํ๋ง ๋ฐ ์ฑ๋ฅ ์ธก์ : ํ๋ณด ์ค์ผ์ค์ ์ค์ ํ๋์จ์ด์์ ์คํ
4. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ์ฅ: ์ต์ ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ํํ๋ก ์ ์ฅ
DLight vs MetaSchedule:
- DLight: ๊ท์น ๊ธฐ๋ฐ. ๋น ๋ฅด๊ณ ์์ ์ ์ด๋ฉฐ, ๋ฒ์ฉ GPU ์ค์ผ์ค์ ์ ํฉํ๋ค
- MetaSchedule: ๊ฒ์ ๊ธฐ๋ฐ. ๋๋ฆฌ์ง๋ง ๋ ๋์ ์ฑ๋ฅ์ ์ฐพ์ ์ ์์ผ๋ฉฐ, ํน์ ํ๋์จ์ด/์ํฌ๋ก๋์ ์ต์ ํํ ๋ ์ ์ฉํ๋ค
์ฅ๋จ์
TVM ์ฅ๋จ์
| ์ฅ์ | ๋จ์ |
|---|---|
| ๋ฒ์ฉ ํ๋์จ์ด ์ง์ (GPU, CPU, NPU, TPU) | ํ์ต ๊ณก์ ์ด ๋์ |
| ์คํ์์ค ์ปค๋ฎค๋ํฐ (Apache ์ฌ๋จ) | ๋๊ท๋ชจ ๋ชจ๋ธ ์ง์ ์ ์ปดํ์ผ ์๊ฐ ๊น |
| MetaSchedule ์๋ ํ๋ | ๋ณต์กํ ๋๋ฒ๊น ํ์ |
| BYOC๋ก ๋ฒค๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํตํฉ | ์ผ๋ถ ์ต์ ํ๋์จ์ด ์ง์ ์ง์ฐ |
| TVMScript๋ก ์ง๊ด์ IR ๊ธฐ์ | ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ๋ง์ |
| ๋ถ์ฐ ์คํ ์ง์ (Disco) | ๋ฐํ์ ์ฑ๋ฅ์ด ์๋ ์ต์ ํ ๋๋น ์ด์ธ ๊ฐ๋ฅ |
| Relax + TensorIR ๊ต์ฐจ ์ต์ ํ | ์ปค๋ฎค๋ํฐ ๊ธฐ์ฌ ๊ฐ์ด๋๊ฐ ๋ณต์กํจ |
| MLIR ํธํ์ฑ ์ถ๊ตฌ | ์ํฐํ๋ผ์ด์ฆ ์ง์ ๋ถ์กฑ |
TVM ์ฌ์ฉ ์ ๊ณ ๋ ค์ฌํญ
| ์ํฉ | ๊ถ์ฅ ์ ํ |
|---|---|
| ๋ค์ํ ํ๋์จ์ด ํ๊ฒ์ด ํ์ํ ๊ฒฝ์ฐ | TVM |
| NVIDIA GPU ์ถ๋ก ๋ง ํ์ํ ๊ฒฝ์ฐ | TensorRT |
| TensorFlow/JAX + TPU ์ฌ์ฉ ์ | XLA |
| ์ค์๊ฐ ์ถ๋ก ์ฑ๋ฅ์ด ์ต์ฐ์ ์ธ ๊ฒฝ์ฐ | TensorRT ๋๋ ์๋ ์ต์ ํ |
| ์ฐ๊ตฌ์ฉ ํ๋กํ ํ์ดํ | TVM (MetaSchedule ํ์ฉ) |
| ์ฃ์ง ๋๋ฐ์ด์ค ๋ฐฐํฌ | TVM (ํฌ๋ก์ค ์ปดํ์ผ + RPC) |
๊ด๋ จ ๊ธฐ์
๊ด๋ จ ๋ฌธ์
- AI ์ปดํ์ผ๋ฌ ๊ฐ์: AI ์ปดํ์ผ๋ฌ ์ ์ฒด ์งํ
- CUDA ์์ธ: TVM CUDA ๋ฐฑ์๋์ ๊ด๋ จ๋ CUDA ์ํคํ ์ฒ
- ROCm ์์ธ: AMD GPU ๊ฐ๋ฐ ํ๋ซํผ, TVM ROCm ๋ฐฑ์๋
- TPU ์ํํธ์จ์ด ์คํ: JAX, XLA, TPU ๋ฐํ์๊ณผ TVM ๋น๊ต
- AI ๊ฐ์๊ธฐ ๊ฐ์: TVM์ด ์ง์ํ๋ ํ๋์จ์ด ๊ฐ์๊ธฐ ๋น๊ต
์ฐธ๊ณ ๋ฌธํ
- Chen et al., "TVM: An Automated End-to-End Optimizing Compiler for Deep Learning," OSDI 2018
- Chen et al., "Learning to Optimize Tensor Programs," NeurIPS 2018
- Shen et al., "A Flexible Approach to Autotuning for Deep Learning Compiler," MLSys 2021
- Apache TVM Documentation: https://tvm.apache.org/docs/
- Apache TVM GitHub Repository: https://github.com/apache/tvm
- Relax Deep Dive: https://tvm.apache.org/docs/deep_dive/relax/index.html
- TensorIR Deep Dive: https://tvm.apache.org/docs/deep_dive/tensor_ir/index.html
- TIRx Overview: https://tvm.apache.org/docs/tirx/overview.html
ํต์ฌ ์ ๋ฆฌ
- Apache TVM์ ์คํ์์ค ๋ฅ ๋ฌ๋ ์ปดํ์ผ๋ฌ ์คํ์ผ๋ก, ๋ค์ํ ํ๋์จ์ด(GPU, CPU, NPU, TPU)์์ ๊ณ ์ฑ๋ฅ ML ์คํ์ ๊ฐ๋ฅํ๊ฒ ํ๋ฉฐ Apache ์ฌ๋จ ์ฐํ์์ ํ๋ฐํ ๊ฐ๋ฐ๋๊ณ ์๋ค
- ์ต์ TVM์ Relax(๊ณ ์์ค ๊ทธ๋ํ IR)์ TensorIR(์ ์์ค ํ ์ IR)์ ์ด์ค IR ๊ตฌ์กฐ๋ฅผ ์ฑํํ์ฌ ์๋ํฌ์๋ ๊ต์ฐจ ์ต์ ํ๋ฅผ ์ง์ํ๋ฉฐ, TVMScript๋ก ์ง๊ด์ ์ธ IR ๊ธฐ์ ์ด ๊ฐ๋ฅํ๋ค
- MetaSchedule(๊ฒ์ ๊ธฐ๋ฐ)์ DLight(๊ท์น ๊ธฐ๋ฐ) ์๋ ํ๋์ ํตํด ํ๋์จ์ด ํนํ ์ต์ ํ๋ฅผ ์๋ํํ๋ฉฐ, BYOC๋ก cuBLAS, CUTLASS ๋ฑ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํตํฉํ ์ ์๋ค
- Disco ๋ถ์ฐ ๋ฐํ์์ NCCL/RCCL ๊ธฐ๋ฐ ๋ฉํฐGPU/๋ฉํฐ๋ ธ๋ ์คํ์ ์ง์ํ๋ฉฐ, Relax VM์ ๋ ์ง์คํฐ ๊ธฐ๋ฐ ์ธํฐํ๋ฆฌํฐ๋ก ์๋ํฌ์๋ ๋ชจ๋ธ ์คํ์ ๋ด๋นํ๋ค
- TVM์ ์ฃผ์ ๊ฐ์ ์ ๋ฒ์ฉ ํ๋์จ์ด ์ง์๊ณผ ์๋ ํ๋ ๊ธฐ๋ฅ์ด๋ฉฐ, ๋จ์ ์ ํ์ต ๊ณก์ ๊ณผ ์ปดํ์ผ ์๊ฐ์ด๋ค