본문 바로가기

dev_AI_framework

요약 정리 : 행렬 기반 계산 그래프 IR

✅ 1. 핵심 구성 요소

🔹 1.1 conn_matrix (연결 행렬)

  • 노드 간 연결 관계를 표현 (인접 행렬 형태)
  • conn[i][j] = 1 이면, i → j 방향의 엣지 존재
  • 정방 행렬 (n × n), 0/1로만 구성

🔹 1.2 op_type_list

  • 각 노드가 수행할 연산자의 타입을 정의한 리스트
  • 연산자는 가장 **기본 연산 단위(primitive ops)**까지 분해되어 있음
  • 예: add, mul, neg, exp, div, max, load_const, noop, ...

🔹 1.3 param_list

  • 각 노드가 사용하는 상수값, 가중치, 바이어스 등의 값 (필요 시)
  • 예: param_list[0] = 1.0 (load_const 노드일 경우)

🔹 1.4 data_list

  • 각 노드의 출력값을 저장 (forward 실행 중 생성)
  • backward 시에는 gradient 값으로도 재사용 가능

 

✅ 2. 해석 (Interpretation) 방식

🔸 연산 흐름 해석 방법:

  1. conn_matrix로부터 실행 순서 도출
    topological sort or 레벨 기반 스케줄링
  2. 각 노드 실행 시:
    • 입력 노드들의 출력값을 수집:
       
    • op_type_list[current]에 따라 primitive 연산 수행
    • 결과를 data_list[current]에 저장
inputs = [data[i] for i in range(n) if conn[i][current] == 1]

 

✅ 3. 재조합 (Optimization & Transformation) 방식

최적화                                                                   방법 설명
Operator Fusion 자주 등장하는 연산 패턴 (예: sigmoid) → 하나의 fused 연산자로 치환
Dead Code Elimination 출력 노드에 도달하지 않는 노드 제거
Static Const Folding 상수만으로 구성된 노드의 결과를 미리 계산하여 치환
Level-based Scheduling 병렬 실행 가능한 노드들을 한 그룹으로 묶어서 처리
Pattern Matching + Subgraph Rewriting 연산자 집약/변환을 위해 서브그래프를 감지하고 치환
Backend-Specific Codegen IR을 기반으로 CUDA / Metal / WebGPU 등 타겟 커널 코드 생성
 

 

✅ 4. 이 구조의 목적/장점

목적                                                설명
CUDA 호출 최소화 여러 연산을 하나의 커널로 실행하기 위한 구조 기반
사용자 정의 연산 대응 새로운 연산도 primitive 연산 조합으로 해석 가능
구조 해석 및 시각화 모델의 구조를 conn_matrix + op_type_list만으로 복원 가능
플랫폼 독립성 확보 IR → 다양한 하드웨어로 트랜스파일 가능
자동 최적화 기반 확보 fusing, scheduling, dead code 제거 등 도구화 가능

 

✅ 5. 이 구조는 어디까지 확장될 수 있는가?

확장 가능성                        설명
자동 미분 각 연산에 대해 역전파 연산 정의 시 backpropagation 가능
JIT 컴파일 이 구조를 바탕으로 실행 가능한 GPU 커널 코드 자동 생성 가능
추론 엔진 IR만 주어지면 실행 환경 없이도 추론 결과 재현 가능
학습 엔진 optimizer, loss 등도 연산 노드로 분해하면 학습 전체 통합 가능
모델 저장 포맷 conn_matrix + op_type_list만으로도 완전한 모델 저장 가능