ML2 @ AsiaLLVM 2025


1. 들어가며

지난 6월 10일 ML2의 박찬연님, 이진명님, 엄의섭님이 Asia LLVM Developers' Meeting에 참석하였습니다.
LLVM Developers' Meeting은 LLVM Foundation과 자원봉사자들이 주최하는 행사로, LLVM 및 관련 하위 프로젝트들에 대한 토론과 네트워킹의 장을 제공합니다.
이번 행사는 32번째 LLVM Developer Meeting이자 아시아에서 처음 개최된 회의라는 점에서 특별한 의미가 있었습니다. 무엇보다 많은 개발자,연구자 분들과 즐거운 대화를 나누며 좋은 인사이트를 얻을 수 있어서 이렇게 참여 후기를 남기게 되었습니다.

이번 글에서는 LLVM과 LLVM Developers' Meeting을 먼저 소개하고, MLIR, IREE 등 LLVM의 주요 하위 프로젝트들 과, LLVM이 백엔드로 지원하는 관련 기술인 WASM 까지 함께 살펴본 뒤, 발표 하이라이트와 Chris Lattner 와의 대화를 통해 느낀 오픈소스 개발 철학을 공유하고자 합니다.

2. 아시아에서 열린 첫 LLVM Developers' Meeting

2-1. LLVM(Low Level Virtual Machine) 소개

LLVM(Low Level Virtual Machine) 은 2000년 Chris Lattner 가 University of Illinois에서 박사과정 연구를 수행하는 중에 탄생하게 되었습니다. 최초의 목적은 범용 중간 표현(Intermediate Representation)을 이용해 컴파일 단계(compile-time), 링크 단계(link-time), 런타임(runtime) 단계에서 각각 코드를 최적화할 수 있는 모듈러한 컴파일러 구조 를 제안하는 것이었습니다.
LLVM에서 제안된 프론트엔드와 백엔드로 나누어진 설계는 당시에도 그리고 지금도 그 자리를 굳건히 지키고 있는 gcc 컴파일러 같은 전통 컴파일러와 차별점이자, LLVM 프로젝트의 성공을 가져다준 핵심 아이디어입니다.

eighty

https://aosabook.org/en/v1/llvm.html

LLVM 프로젝트는 최초에 중간 표현(IR) 정의와, 각 중간표현을 최적화 하는 optimizer, 그리고 몇몇 CPU 에 대응되는 backend 로만 이루어져 있었습니다. Clang 이라는 frontend(Lexer, Parser, Semantic Analyzer 등으로 이루어진 체인)가 2007년에 소개되었고, 이와 함께 LLVM IR 이 다양한 최신 최적화 기법들을 지원하면서 gcc에 버금가는 컴파일러로 자리매김하게 되었습니다.

이후 정적 분석기(2008), NVIDIA PTX 백엔드 (2009), LLDB(2010), LLD 링커(2012), AArch64 백엔드(2012) 등이 프로젝트에 추가되며, LLVM의 생태계는 급속도로 확장되었고 근래에는 XLA(2017)와 MLIR(2019) 를 통해 domain specific 한 최적화 를 지원하기 위한 인프라가 확충되면서 인공지능의 시대를 맞아 최고의 활약을 보여주고 있습니다.

최초에 중간 표현(IR)에 대한 정의로 시작했던 LLVM 프로젝트는 컴파일러를 거쳐 인공지능 시대에 들어 새롭게 발생하는 여러 도메인에서의 니즈를 충족하는 유연하면서도 빠르게 대응할 수 있는 하나의 프레임워크 로 자리매김하고 있습니다.

2-2. LLVM Developers' Meeting 소개

LLVM은 기술적 발전뿐만 아니라 커뮤니티 구축의 중요성도 강조하고 있습니다. LLVM Developers' Meeting은 LLVM 생태계의 모든 개발자와 연구자에게 열려 있으며, 기술 발표와 패널 토론 등을 통해 지식을 공유하고 네트워킹할 수 있는 기회를 제공합니다.

1년에 2번의 미팅을 원칙으로 하여 LLVM Foundation은 지난 10여 년간 미국과 유럽에서 Developers' Meeting을 꾸준히 개최해왔습니다. LLVM-FLOW 프로젝트를 발표했던 euroLLVM 역시 스코틀랜드에서 진행되었는데요, 이처럼 행사가 주로 미국과 유럽에서만 열리다 보니 아시아 지역 개발자들의 접근성에는 한계가 있었습니다.

이러한 지역적 편중을 해결하고 아시아 LLVM 커뮤니티의 성장을 촉진하기 위해 LLVM Foundation은 새로운 시도를 결정했습니다. 올해 처음으로 일본 도쿄에서 개최된 이번 Asia LLVM Developers' Meeting은 아시아 지역 LLVM 커뮤니티 성장을 위한 중요한 전환점이 될 것으로 기대됩니다.

3. MLIR, IREE, WASM 소개

Asia LLVM Developers' Meeting은 Chris Lattner의 키노트 발표로 시작되어 다양한 기술 발표로 구성되었습니다.
그중에서도 MLIR, IREE,WASM 을 중심으로 한 프로젝트들을 소개해드리고자 합니다. 발표 내용을 소개하기에 앞서, 각 프로젝트의 개요와 어떠한 구조적 접근을 취하고 있는지 간단히 살펴보겠습니다.

3-1. MLIR (Multi-Level Intermediate Representation)

MLIR(Multi-Level Intermediate Representation) 은 2019년에 구글에 의해 제안되었습니다(Chris Lattner 또한 논문의 1저자로 참여했습니다). 이번 Asia LLVM 미팅에서 만났던 Chris Lattner의 표현을 빌리자면, "하나의 공통된 IR을 사용하고자 했던 LLVM IR의 방향이 틀렸다는 것을 인정하고 다음 단계로 넘어가고자 하는" 시도입니다.
MLIR은 각 Domain의 특성을 반영한 Dialect 라는 이름의 중간표현(IR)들을 새롭게 정의하고 여기에 각 도메인에 특화된 Optimization 기법들(Lowering)을 보다 쉽게 적용할 수 있도록 해주는 일종의 generic framework입니다. 여기에 dialect 마다 적용할 수 있는 optimization이 비슷한 경우가 많기 때문에 shared optimization layer 를 둘 수도 있습니다. 2019년에 MLIR이 제안된 이후, tensorflow, triton, torch-mlir, onnx-mlir 등에서 활용되면서 Machine Learning 모델의 컴파일러 체인들에서 MLIR이 적용되기 시작했습니다.

eighty

http://lastweek.io/notes/MLIR/

MLIR의 목표는 여러 도메인(ONNX, pytorch, tensorflow)에서 각각 별도의 IR을 만들거나, Frontend 단에서 과도한 최적화 및 transformation을 거치지 않고 MLIR 이라는 추상화된 레이어 안에서 재사용성을 높이면서도, modular 한 컴파일 체인 디자인을 유지하는 것이었습니다.
궁극적으로 원래 Frontend - llvm ir - Backend 로 이루어진 LLVM의 구조를 한단계 더 추상화해서, Domain Framework - MLIR - Backend' 로 만들었다고 볼 수도 있겠습니다. 이를 위해 Dialect 라는 개념을 도입했고 Lowering(예: tensor dialect => llvm dialect) 과정에서 적용되는 optimization들 중 공통되는 것들은 공유할 수 있도록 함(shared optimization)으로서 컴파일러 체인을 확장시키는데 드는 비용을 획기적으로 낮출 수 있었습니다.

3-2. IREE (Intermediate Representation Execution Environment)

LLVM의 Frontend-Optimizer-Backend 구조는 heterogeneous 한 언어들이 heterogenous 한 CPU들에서 돌아갈 수 있도록 하는 compiler chain을 쉽게 만들 수 있도록 했습니다. 그렇기 때문에 현재 llvm은 c/c++/c#/fortran/rust/go/haskell 등의 다양한 언어를 지원하면서 동시에 x86, Aarch64, Risc-V 등의 여러 백엔드를 지원하고 있고 gcc 이후로 가장 많이 사용되고 또 새로운 프로젝트들에 적용되고 있는 컴파일러 체인이 되었습니다.

이 구조를 그대로 Machine Learning 도메인에 적용한다면 다양한 ML Framework(Tensorflow, Pytorch, Onnx)를 여러 heterogenous 한 머신(CPU, Nvidia GPU, AMD GPU)에서 돌아갈 수 있게 하면서 동시에 최적화 과정을 공유 하는 프레임워크를 상상해 볼 수 있지 않을까요?

정확히 같은 접근법으로 문제를 풀고 있는 프레임워크가 바로 IREE(Intermediate Representation Execution Environment) 입니다. IREE 또한 구글에서 제안되어 IREE 컴파일러 하나로 여러 머신에서 돌아갈 수 있는 바이너리를 생성하는것을 목표로 합니다.
IREE 컴파일러에서 생성된 프로그램은 IREE Runtime에 로드됩니다. IREE Virtual Machine이 타깃 머신을 추상화하는 레이어로 존재하기 때문에 IREE 컴파일러에서 컴파일이 되기만 한다면, IREE Runtime 이 지원하는 가속기에서 쉽게 추론을 돌릴 수 있도록 도와줍니다.

3-3. WebAssembly

WebAssembly(Wasm) 은 C/C++/Rust 등 언어를 플랫폼 독립적이고 이식 가능한 바이너리 형식으로 컴파일하여 실행할 수 있는 저수준 스택 기반 바이트코드입니다. WASM은 웹 브라우저 상에서 JavaScript보다 빠르고 안전하게 다양한 언어로 작성된 코드를 실행하기 위해 만들어 졌습니다. 이후 WASI(WebAssembly System Interface) 와 같은 표준 시스템 인터페이스가 개발되면서, Wasm은 단순한 브라우저 실행 환경을 넘어 서버, 클라우드, 엣지, IoT 등 웹 브라우저 이외의 타겟에 대한 런타임에도 널리 적용되고 있습니다

LLVM 역시 WASM을 정식 백엔드로 지원합니다.[1] LLVM은 IR을 wasm32/64 바이트코드로 컴파일해 .wasm 모듈을 생성할 수 있으며, 이를 통해 Emscripten, WASI-SDK 등 여러 도구 체인을 통해 AOT(Ahead-Of-Time) 또는 JIT(Just-In-Time) 방식으로 다양한 환경에 배포 가능합니다.

Wasm을 native binary로 변환하는 다양한 컴파일 툴이 존재하는데요, 그중 Wasker 는 LLVM을 기반으로 하고 있습니다. Wasker는 Wasm을 LLVM IR로 변경 후, LLVM을 이용해 최종적으로 ELF 바이너리로 변환하는 컴파일러입니다. Wasker는 표준화된 ELF 포맷으로 생성하여 다양한 WASI 구현체와 호환될 수 있다는 점이 특징입니다.
이렇게 Wasker가 생성한 ELF 오브젝트를 별도 수정없이 Mewz 라는 runtime에서 실행시킬 수 있습니다. Mewz는 각 Wasm 모듈을 전용 경량 유니커널(Unikernel) 기반 VM 안에서 실행해, 호스트 커널을 공유하는 일반 Wasm 런타임보다 훨씬 강력한 격리성과 낮은 오버헤드를 제공합니다. 해당 프로젝트는 Kubecon Japan 2025 에서도 소개되었습니다.

4. 발표 하이라이트

이번 Asia LLVM Developers' Meeting에 참석하여 흥미롭게 들었던 발표 몇가지를 소개합니다.
전체 발표 목록과 자료는 https://llvm.org/devmtg/2025-06/ 에서 확인하실 수 있습니다.

4-1. ONNX-MLIR: An MLIR-based Compiler for ONNX AI models

eighty
[2]

MLIR이 2019년 등장한 직후 함께 발전해온 ONNX-MLIR 프로젝트에 대해 소개하는 발표였습니다.
ONNX-MLIR은 ONNX(Open Neural Network Exchange) 모델을 다양한 플랫폼(x86, IBM Power, IBM Z 등)에서 효율적으로 실행할 수 있도록 MLIR을 기반으로 컴파일하는 오픈소스 프로젝트입니다.

해당 컴파일러는 ONNX 모델을 MLIR로 변환한 후, 여러 단계의 변환과 최적화를 거쳐 LLVM IR이나 다른 백엔드 타깃으로 변환해 네이티브 코드를 생성합니다. ONNX-MLIR은 IBM 가속기들(IBM Z machines)을 백엔드로 염두에 두고 만들어졌습니다. ONNX-MLIR 프로젝트는 MLIR을 이용해 Machine Learning 프레임워크를 컴파일하고자 한다는 점에서 다음 섹션에서 설명할 IREE 프로젝트와 맥락을 공유합니다.

4-2. Data-Tiling in IREE: Achieving High Performance Through Compiler Design

eighty
[2]

해당 발표에서는 data-tiling을 통해 IREE의 성능을 높인 경험을 공유하였습니다.
전통적인 ML 컴파일러는 MatMul을 외부 라이브러리에 의존해 처리하는데, 이 방식은 호스트‑디바이스 간 호출 비용이 발생하고, 라이브러리에 최적화를 맡겨야 하기 때문에 확장성과 일관된 성능 사이에서 한계가 있습니다.
반면 IREE는 MLIR 내부에서 직접 레이아웃 변환을 수행하며, tensor에 encoding을 지정해 타겟별 최적화 최종 경로를 확보합니다. 이를 가능하게 하는 핵심 기술이 바로 data‑tiling입니다.

IREE의 data-tiling은 다음 세단계를 따릅니다 :

  1. 우선 tensor type에 verbose encoding을 지정합니다. 이 encoding에는 블록의 레이아웃 뿐 아니라 operand_index, iteration_sizes 등 최적화를 위한 메타 정보가 포함됩니다.
  2. verbose encoding을 serialized encoding으로 materialize하고, 이후 원본 형식으로 풀어주는 형태로 변환합니다.
  3. serialized된 encoding을 기반으로 physical layout과 native연산으로 전환하여 최적화를 진행합니다.

이러한 구조 덕분에 hybrid/heterogeneous 시스템에서의 MatMul 체인도 효율적으로 처리할 수 있으며 데모로 확인하실 수 있습니다.

4-3. A technology for lifting machine code to high-performance LLVM IR

eighty
[2]

elfconv라는 Linux/ELF 바이너리를 WASM, AArch64/x86-64 ELF 등 다양한 타겟 플랫폼에서 실행 가능한 파일로 변환하는 AOT 바이너리 트랜스레이터를 소개하는 발표였습니다.
특히 해당 발표에서는 Linux/AArch64 ELF 바이너리를 WASM 실행 파일로 AOT 변환 가능함을 보여주었습니다. 기존 컴파일러 없이도 빌드된 ELF 바이너리를 사용해 WASM 모듈을 생성할 수 있다는 점이 장점입니다.

elfconv는 내부적으로는 REMILL 기반의 lifter가 ELF에서 LLVM IR로 기계어를 변환시키고, 이 IR을 Emscripten(브라우저 대상)이나 WASI-SDK(서버 대상)로 AOT 컴파일하여 WASM 바이너리를 생성합니다.
elfconv로 생성한 WASM코드는 Emscripten로 직접 컴파일한 결과와 비교해보아도 77.7%~ 94.8% 수준의 성능을 보여주고 있습니다.

4-4. Wanco: WASM AOT Compiler

eighty
[2]

Wanco이라는 WebAssembly용 AOT 컴파일러에 대해 소개하는 발표였습니다.
Wanco는 WASM AOT 컴파일러로서, WASM 모듈을 Linux ELF 실행 파일로 변환하고, 이를 통해 다양한 CPU 아키텍처 간 실행 상태의 라이브 마이그레이션(live migration)을 지원합니다. Wanco는 LLVM 기반 백엔드에 IR instrumentation을 더하여 checkpoint/restore 지점을 삽입하고, call stack과 지역 상태 값을 중립적인 JSON 형태로 직렬화하여 저장할 수 있게 합니다.

Wanco는 최대 50%의 오버헤드를 발생 시키면서도 CPU 및 OS에 독립적인 형태로 상태 복원(snapshot)이 가능하도록 합니다. 이를 통해 WASM 바이너리를 여러 플랫폼에서 실행할 수 있는 수준을 넘어, 실행 상태를 포함한 전체 환경을 플랫폼 간에 '이동'할 수 있도록 지원할 수 있다는 점에서 의미 있는 프로젝트였습니다.

5. Chris Lattner와의 대화에서 찾은, 오픈소스 혁신의 시작

eighty

LLVM 창시자인 Chris Lattner 와 직접 대화를 나눌 수 있었던 것은 이번 LLVM 컨퍼런스에서 가장 뜻깊은 경험 중 하나였습니다. 오픈소스 생태계를 오랫동안 이끌어 온 그에게 "어떻게 이처럼 거대한 프로젝트가 시작되었고, 지금까지 진화할 수 있었는가" 라는 질문을 드렸을 때, 의외로 그의 답변은 담백했습니다.

오늘날 수많은 산업 분야에서 사용되고 있는 LLVM은 작은 불편함을 해결하려는 실험 에서 시작되었다고 합니다. 당시 널리 사용되던 JVM의 구조적 제약—JIT 한계, 불완전한 최적화, C/C++과의 거리감—을 개선하기 위한 프로토타입이 출발점이었습니다. (👋🏻 Fun Fact: 이름이 Low Level Virtual Machine인 이유는 프로젝트 초기에Java Virtual Machine 에서 돌아가는 ByteCode를 생성할 때, 보다 더 최적화를 하려는 시도에서 프로젝트가 시작되었기 때문이라고 합니다.)
이후 Apple에서 OpenGL 실시간 그래픽 렌더링에 적용되며 실전에 배치되었고, Clang 프로젝트와 Xcode 통합을 통해 메인스트림 컴파일러로 자리잡았습니다.

주목할 점은 LLVM이 처음부터 거대한 아키텍처로 설계된 것이 아니라는 사실입니다. 기존 gcc보다 유연하고 모듈화된 구조 덕분에 기술 변화에 빠르게 대응하며 지속적으로 진화할 수 있었습니다. 그 결과 단순한 컴파일러를 넘어 25년에 걸쳐 범용 컴파일러 프레임워크로 성장했고, 현재는 GPU 코드 생성, 디바이스 추상화, AI 가속 등 다양한 영역에서 핵심 인프라 역할을 하고 있습니다.

Chris Lattner는 2022년 부터 Modular 를 창업하며 인공지능 시대에 적극적으로 뛰어들었습니다. Modular 은 대규모 AI 모델 추론을 위한 쿠버네티스 기반의 오케스트레이션 툴 Mammoth, 파이썬 기반의 인공지능용 프로그래밍 언어인 Mojo, 모델 서빙 프레임워크인 Max 를 출시했습니다. 마침 LLVM 개발자 미팅 당일, Modular Platform의 AMD GPU 지원 기능이 발표되었고 [3] , Apple silicon을 타겟팅하는 작업도 진행중이라는 흥미로운 소식이 있었습니다.
LLVM 개발자 미팅에서도 알 수 있었듯, 기존에 잘 구축된 기술을 다시 만드는 일을 피하려는(Do not reinvent the wheel) 노력이 지속적으로 이뤄지고 있습니다. 특히 CUDA, ROCm과 같은 각 회사별 병렬 프로그래밍 프레임워크의 한계를 넘어, 다양한 액셀러레이터를 효율적으로 구동하려는 움직임이 활발합니다.

최근 머신러닝 모델들이 일정 수준 이상 성숙기에 접어들면서, 더 효율적인 실행환경 구축에 대한 요구가 증가하고 있습니다. 이에 따라 각 회사 및 하드웨어 아키텍처별로 다양한 접근법들이 개별적으로 발전하고 있으며, 동시에 이러한 다양한 접근법들을 통합하여 표준화된 실행환경을 구축하려는 노력 또한 활발히 이루지고 있습니다. 앞서 설명한 IREE 프로젝트 또한 그러한 노력의 일환이라고 볼 수 있습니다.

Chris Lattner와의 대화를 통해 ML2의 방향성에 대해서도 생각해보게 되었습니다. 저희도 실제 사용자들이 느끼는 불편함을 기술로 해결하는 오픈소스를 만들고자 합니다. 최근에는 IREE나 WASM을 활용하여 on-device ML 실행 환경 구축 프로젝트를 구상하고 있습니다. 미래에 어떤 결과로 이어질지는 알 수 없지만, "큰 변화는 작고 구체적인 문제 해결에서 시작된다" 는 점은 분명해 보입니다.

6. 한국인 커뮤니티와의 네트워킹

sixty
이번 Asia LLVM Developers' Meeting은 여러모로 의미 있는 행사였습니다.
무엇보다 아시아에서 처음 열린 LLVM 공식 미팅이였고, 그것도 한국과 가까운 도쿄에서 개최되어 직접 참여할 수 있어 더욱 뜻깊었습니다.
행사 내내 한국에서 오신 많은 분들을 만나뵐 수 있었는데, 개인적으로 관심을 갖고 공부 중이신 분들부터 NSHC의 LLVM 연구소 팀원분들까지, 다양한 배경의 참가자들과 교류할 수 있어 매우 반가웠습니다. NSHC는 이미 2017년부터 LLVM 컴파일러 기반 iOS용 앱보호 솔루션 개발을 시작해왔고, 현재도 LLVM을 활용한 다양한 프로젝트를 진행하고 계신다고 합니다.
행사 기간 동안 AI chip이나 컴파일러 최적화에 머신러닝을 적용하는 MLGO(Machine Learning Guided Optimization) 등 흥미로운 주제들에 대해 많은 분들과 재미있는 대화를 나눌 수 있었습니다. 이러한 활발한 교류와 논의가 앞으로 국내 LLVM 커뮤니티의 성장으로 이어지길 진심으로 기대하며, ML2 역시 밋업 개최와 오픈소스 기여를 통해 커뮤니티 발전에 기여하고자 합니다.

7. 정리하며

전체 참석자 수는 약 150명으로 비교적 소규모였지만, 그 덕분에 오히려 발표자와 참석자 간의 거리감이 없고, 자유롭게 질문하고 토론할 수 있는 분위기가 만들어졌습니다. 발표 세션이 끝난 후에도 주제를 더 깊게 이야기하거나, 서로의 아이디어를 공유하는 모습이 인상적이었습니다.

이번 Asia LLVM Developers' Meeting을 통해 LLVM이라는 기술만이 아니라, 그 기술을 중심으로 연결되는 커뮤니티와 사람들, 그리고 오픈소스 문화를 경험할 수 있었습니다. 이번 경험이 ML2의 방향에도 긍정적인 동력이 될 것이라 믿습니다.


Reference

[1] https://llvm.org/doxygen/dir_794e483eb1cc7921d35fd149d9cc325b.html
[2] https://llvm.org/devmtg/2025-06/
[3] https://www.modular.com/blog/modular-x-amd-unleashing-ai-performance-on-amd-gpus
cc
members

박찬연

Chan. Y. PARK

Principal Research Scientist

github   github
members

이진명

Jinmyoung LEE

Research Engineer

github   github
members

엄의섭

Uiseop EOM

Research Resident

github   github