본문 바로가기

AI Compiler framework

core_v2 Stage 2 : Lowering 생성 + Dump 검증 문서

목표

stage 1 에서 생성한 IRGraph 를 기반으로, 실행 가능한 backend op 리스트를 생성하고 dump 로 검증한다

Stage 2 에서 다루는 op 범위

  • IR op : Linear, ReLU, MseGrad
  • Lowered op : gemm, bias_add, relu, mse_grad

Stage 2 는 실행을 하지 않는다. 

 

Lowering 규칙

Linear

IR

  • Linear(x, W, b?) - y

Lowered

  • gemm(x, W) - y with attrs = {"transB":True}
  • bias_add(y, b) - y (bias 있을 때만, in-place write)

 

ReLU

IR

  • ReLU(x) - y

Lowered

  • relu(x) - y

 

MseGrad

IR

  • MseGrad(pred, target) - dy

Lowered

  • mse_grad(pred, target) - dY
  • IR attrs scale 이 있으면 lowered attrs 로 전달

 

검증 결과

입력 IR (Stage 2)

  • values : 10
  • nodes : 4
  • dataflow : Linear - ReLU - Linear - MseGrad

lowered 출력 (Stage 2)

  • ops : 6
  • gemm(v000, v001) - v003
  • bias_add(v003, v002) - v003
  • relu(v003) - v004
  • gemm(v004, v005) - v007
  • bias_add(v007, v006) - v007
  • mse_grad(v007, v008) - v009

핵심 확인 포인트

  • Linear 의 bias 가 있을 때 bias_add 가 동일 vid 로 in-place write 되는 것 확인
  • IR vid 연결이 lowered 에서도 그대로 유지됨
  • op 개수 / 순서가 예상과 동일

 

제한 사항

  • Backward / optimizer / grad pool / relu_y_saved 등은 아직 포함하지 않음
  • Lowered 가 요구하는 runtime tensor binding 은 Stage 3 에서 설계한다.

 

다음 단계 계획

Binding Plan 을 만들어서

  • 어떤 vid 가 input / param / static-temp 인지 확정
  • statc-temp 는 tuntime 에서 allocate
  • input / param 은 외부에서 주입

을 명시적인 계획으로 저장하는 것

이걸 통해 이전에 문제가 됐던, env 가 꼬인다 / restore 후 stale pointer 류를 구조적 차단 가능

 

파일별 역할 정리

ir.py

IR 데이터 모델

  • IRGraph : values + nodes 보관
  • IRValue : vid + meta ( name / shape / dtype / device )
  • IRNode : op + inputs / outpus + attrs

원칙

  • core_v2 의 모든 상위 레이어는 ir.py 외 구조를 직접 정의하지 않는다.

 

trace.py

Tracing 컨텍스트

  • trracing on/off 상태 관리
  • 객체 / torch 핸들 - IRValue 캐시 제공

stage 2 에서의 핵심

  • SymTensor identity 를 안정적으로 vid 에 매핑
  • Stage 3+ 에서는 torch scalar 매핑을 추가로 활용 가능

 

ops.py

Tracing-only 연산 정의

  • SymTensor : 실행 없는 메타 텐서
  • liner / relu / mse_grad : IR emit 만 수행

원칙

  • Stage 1 ~ 2 에서는 실제 backend 실행 금지
  • shape check / 메타 생성은 여기서 담당

 

compile.py

IR 생성 진입점

  • trace_ir - IRGraph

원칙

  • compile.py 는 lowering / runtime / capture 를 모른다.

 

lower.py

IR - Lowered 변환

  • lower_to_backend_ops(ir) - List[dict]

원칙

  • in-place semantics 은 lowering 에서 표현한다
  • Stage 3 에서 binding plan 을 만들 수 있도록 lowered 스키마는 일관 유지