본문 바로가기

AI Compiler framework

IR / Plan / PlanCache / GraphExec 각각의 역할

ir.hpp / ir.cpp 

역할 : IR 컨테이너

  • Node 리스트 : op kind + input value ids + outpus value ids + attrs
  • value 리스트 : 각 텐서의 메타
    • 여기서 중요한 포인트 : IR 은 보통 실제 data pointer 는 안 들고 형상 / 타입 / 연결 관계만 들고 있음
  • 목표 : 이 모델 / 스텝을 어떤 op 들의 그래프로 표현하는 것
  • op fusion / constant folding / scheduling / memory planning 같은 컴파일러 기능이 붙음

 

lowering.hpp / lowering.cpp

역할 : IR - RuntimeGraph 로 변환

  • IR 은 추상적이고
  • Runtime 실행 단위는 더 구체적
  • lowering 은 그 추상 - 구체 변환기
  • IR Node 를 실행 가능한 커맨드로 바꾸끼
  • TensorDesc 의 data pointer 는 나중에 valueTable 로 채우게 설계

 

plan.hpp / plan.cpp

역할 : ExecutionPlan 정의

IR 을 그대로 실행하지 않고 실행에 필요한 정보만ㅇ 따로 묶은 것이 Plan

  • GraphKey : dtype / shape / attrs / op sequence 등을 해시한 값
  • nodes : 실행 순서대로 OpCall 목록
  • 메모리 계획 : intermediate buffer 할당 계획 등
  • IR : 의미 중심
  • Plan 실행 중심 + 캐싱 중심

 

plan_cache

역할 : Plan - 결과 캐싱

같은 graphkey 로 반복 실행할 때 한 번 만들어둔 graphexec 를 재사용하려고