✅ 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) 방식
🔸 연산 흐름 해석 방법:
- conn_matrix로부터 실행 순서 도출
→ topological sort or 레벨 기반 스케줄링 - 각 노드 실행 시:
- 입력 노드들의 출력값을 수집:
- 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만으로도 완전한 모델 저장 가능 |
'dev_AI_framework' 카테고리의 다른 글
기존 컴퓨터에선 행렬 연산을 어떻게 처리하는가?? ( 결과 누적 방식 ) (0) | 2025.05.18 |
---|---|
비선형 연산의 행렬 내 선형 연산의 조합으로 구현 (0) | 2025.05.18 |
왜 이러한 IR 표현이 필요한가. (0) | 2025.05.17 |
IR 구성 요소별 matrix 정의 - (sparse matrix 사용) (0) | 2025.05.17 |
IR (Intermediate Representation, 중간 표현) (0) | 2025.05.17 |