currybab's devlog

A friendly introduction to machine learning compilers and optimizers 요약

최근에 내 분야와 정말 다르지만 ml comiler에 대한 관심이 정말 많아졌다. 가능하다면 다음 직업으로 삼아보고 싶은…

Chip Huyen의 A friendly introduction to machine learning compilers and optimizers를 읽고 정리해 보았다.

아마도 시기가 좀 된 글이여서 업데이트가 필요할 수 있겠지만 전체적으로는 여전히 좋은 글일거라고 생각한다.


1. 컴파일러의 중간자, IR(Intermediate Representation)이란?

컴파일러의 핵심에는 ‘중간자’ 역할을 하는 **IR(Intermediate Representation, 중간 표현)**이 있습니다.
이 IR은 소스 코드(고수준)의 연산 그래프에서 하드웨어가 이해할 수 있는 코드(저수준)로 번역될 때 거치는 형태입니다.
머신러닝 모델에선 주로 연산(옵레이션) 그래프가 고수준 IR로 사용됩니다.

2. 컴파일러의 주요 기능

컴파일러가 하는 일은 크게 두 가지로 요약할 수 있습니다.

  1. Lowering : 여러분의 모델을 특정 하드웨어에서 실행할 수 있도록 하드웨어 네이티브 코드로 변환(codegen)합니다.
  2. Optimizing : 특정 하드웨어에서 더 빠르고 효율적으로 동작하도록 모델을 최적화합니다.

3. 최적화의 두 가지 방법

대표적인 로컬 최적화 기법

4. 글로벌 최적화: 구조적 융합

이처럼 연산자 수준을 넘어 그래프 전체 구조를 활용하는 최적화가 더 큰 성능 향상을 가져올 수 있습니다.

5. 수작업 규칙의 한계

컴파일러가 사용하는 핸드메이드(Hand-designed) 최적화 규칙에는 다음과 같은 한계가 있습니다.

6. 머신러닝 기반 컴파일러의 등장

이런 한계를 극복하기 위해, 최근에는 머신러닝 기반 컴파일러가 등장했습니다.

하지만 전체 연산 그래프 전체에 대한 실행시간을 정확히 예측하기는 매우 어렵고, 현재 기술로는 부분 그래프, 즉 ‘서브그래프(subgraph)’ 수준에서 예측하는 것이 현실적입니다.

7. autoTVM: 실제 예시

autoTVM은 아래와 같은 방식으로 최적화를 진행합니다.

  1. 전체 연산 그래프를 여러 개의 서브그래프로 분해
  2. 각 서브그래프의 크기를 예측
  3. 각 서브그래프별로 최적 경로 탐색에 할당할 시간을 배분
  4. 각각의 서브그래프에 대해 최적 실행 경로를 찾아 전체 그래프 실행 계획을 만듦

autoTVM은 각 경로에서 실제로 실행에 걸린 시간을 측정하여, 이 데이터를 바탕으로 **코스트 모델(cost model)**을 학습시킵니다. 이 접근법의 장점은, 런타임에 수집된 데이터로 학습하기 때문에 어떤 하드웨어에서든 빠르게 적응할 수 있다는 점입니다. 단점은, 코스트 모델이 유의미하게 개선되기까지 시간이 조금 더 걸린다는 것입니다.

8. 오토 튜닝의 현실

자동 튜닝(오토튜닝) 결과는 매우 인상적이지만, 한 가지 함정이 있습니다.
예를 들어, TVM의 탐색 과정은 모든 가능한 경로를 시도하며 최적을 찾기 때문에, 복잡한 대형 모델에선 이 과정만 수 시간, 심지어 수 일이 걸릴 수 있습니다.

하지만,

따라서 대규모 모델을 실제 배포(프로덕션)에 적용할 때, 그리고 목표 하드웨어가 분명할 때 가장 이상적이라는 평가를 받고 있습니다.

#Ml Compiler #Ml Optimizer