본문 바로가기

AI Compiler framework

compile 파이프 라인과 lower_ir_cuda 에서의 registry 탐색 ( b.ops 와 사전 정의한 registry 와의 매칭

compile 파이프라인에서 각 단계가 보는 것

1) b0 = m.b

Layer.emit 으로 쌓인 IR 의 원본

 

2) b1 = optimize_ir(b0)

아직 identity 

 

3) lowerd = lower_ir_cuda(b1, registry)

핵심 IR - 실행 가능 단위 변환

  • b1.ops 순회
  • op.kind 를 registry 에서 탐색
  • op.attrs 를 kernel ABI 가 요구하는 attr_blob 로 패킹
  • lop 같은 lowered op 리스트 생성 

 

4) plan = make_exec_plan_cuda(b1, lowered)

여기서 plan 의 생성 메모리 / alias / workspace / 실행 순서

이걸 executor 가 실행

 

5) plan = optimize_plan(plan)

이것도 아직 identity

 

compiler 에서 하는 불변 가공을 줄여서 emit 단계에서 더 많은 걸 준비하는 것에 대해

여기서 emit 된 정보에 대해서 op.kind, reigistry 등의 가공들이 추가됨, 이는 근데 변경되지 않는 정보로, 처음 model.builder 에 전달 될 때,  아예 다 추가, 가공된 정보를 emit 하는 것에 대해 고민, 

 

cuda_exec 에서의

  • run
  • compile_cached
  • compile
    • compile_cuda 
    • optimize_ir
    • lower_ir_cuda
    • make_exec_plan_cuda
    • optimize_plan

해당 과정에서 lower_ir_cuda 부분에서의

  • lower_ir_cuda
    • registry.lookup
    • pack_attrs

해당 부분의 emit 정보를 통한 데이터 가공, 추가 부분이 존재, 이걸 초기 emit 단계에 포함시키는 것에 대해 고민