본문 바로가기

operator 의 연산 의미 분석

AdamStep Emitter 변경 문서

1) 변경 요약

Before

  • AdamStep 의 의미가 암묵적
  • constraints = {"inplace_ok":True} 같은 힌트는 있었지만
    • 백엔드 / 패스가 이 Op 가 optimizer 이며 상태를 바꾸고 그래프 말단이다를 신뢰 가능한 정적 신호로 받지 못함

After

  • OpFlags 를 도입해 AdamStep 의 성질을 정적 비트로 선언한다
  • constraints.inplace_ok 가 켜져 있으면 OpFlags.INPLACE_PREF 까지 포함시켜
    • 가능한 inplace 로 가라를 policy-level 로 승격시킴
  • 결과적으로 AdamStep 은 다음 의미를 갖는 노드로 명시적 태깅됨
    • Optimizer
    • Stateful
    • Terminal
    • Inplace 선호

 

2) 코드 레벨 변경 포인트

임포트 변경

from .base import emit_resolved, OpFlags
  • emitter 에서 직접 OpFlags 를 사용해 정적 의미를 구성함

 

정적 플래그 구성

static = OpFlags.IS_OPTIMIZER | OpFlags.HAS_STATE | OpFlags.TERMINAL
  • AdamStep 의 불변 성질을 비트로 표현

 

constraints - static_flags 로 반영

final_constraints = constraints or {"inplace_ok": True}
if final_constraints.get("inplace_ok"):
    static |= OpFlags.INPLACE_PREF
  • constraints 는 여전히 runtime / plan 제약으로 남기되
  • 인플레이스 선혼느 플래그로도 올려서 패스들이 더 쉽게 결정하게 함

 

emit_resolved 에 static_flags 전달

emit_resolved(..., static_flags=static)
  • 통합 엔트리에서 Op 객체에 정적 메타를 주입하는 구조에 맞춰, AdamStep 도 해당 계약을 따르게 됨