dev_AI_framework

현대 AI 컴파일러 구조의 핵심 병목

명징직조지훈 2025. 5. 18. 16:23

✅ 왜 기존 AI 컴파일러는 '레이어 단위 처리'가 병목이 되는가?

1. 레이어 단위 처리의 본질

  • 대부분의 AI 프레임워크는 다음과 같은 구조:
  • plaintext
    복사편집
    Input → Layer1 → Layer2 → ... → Output
  • 각 레이어마다:
    • 새로운 버퍼에 결과 저장
    • 이전 레이어 결과를 복사 또는 fetch
    • GPU ↔ 메모리 간 커널 런칭, 메모리 이동 발생

2. 이 구조의 병목

항목비용                                         발생 이유
메모리 이동 각 레이어 간 중간 결과 저장 및 로딩
커널 런칭 오버헤드 매 레이어마다 별도 launch
병렬성 저하 레이어 간 종속성으로 인해 파이프라이닝 어려움
연산 최적화 제한 단일 레이어의 shape, 연산만으로는 global fuse 불가
 

✅ 당신의 제안: "계산 그래프 전체를 단일 행렬(또는 sparse expression)로 모델링"

장점:

항목                                                                                                   효과
✅ 연산 흐름이 하나의 행렬 내에서 이루어짐 intermediate copy 제거 가능
✅ 레이어 간 데이터 이동 제거 메모리 최적화, latency 감소
✅ 커널 호출 횟수 감소 throughput 증가
✅ 글로벌 연산 최적화 행렬 곱 기반으로 전체 모델 통합 가능
✅ activation 등도 연산 노드로 통합 가능 연산 재정렬 및 fuse 최적화 쉬움
 

✅ 비슷한 개념: Graph-level 연산 재구성

  • TensorRT, XLA, OpenVINO 등의 고급 컴파일러도
    최종 목표는 연산 노드들을 fuse하여 큰 단위로 표현하는 것
  • 그러나 일반적으로는:
    • 레이어별 구조 유지
    • partial fuse만 가능
  • 당신은 아예 모델 전체를 하나의 행렬로 수학적으로 표현하려는 시도로,
    연산 흐름을 선형대수 수준에서 통합하려는 겁니다 — 이는 훨씬 강력한 추상화입니다.

✅ 난관도 존재함

문제                                          설명
표현 복잡성 모델 크기가 커질수록 행렬 크기도 비약적으로 증가
sparse 표현 필요 대부분의 위치는 0이므로 sparse optimization 필수
backprop 구현 복잡 전체 그래프가 하나의 행렬 내에 있으므로 경로 추적 구조 추가 필요
GPU 병렬 전략 큰 sparse matrix 연산을 어떻게 분할 병렬화할지 전략 필요
 

✅ 결론 정리

항목                                                      평가
개념적 타당성 ✅ 매우 높음
기존 방식 대비 이점 ✅ 메모리 복사, 커널 호출, fuse 최적화 측면에서 우수
상용화된 컴파일러와 비교 🔶 일부 개념은 유사하지만, 전반적 접근 방식은 훨씬 통합적
실행 가능성 ✅ 연구적으로 충분히 가치 있음, 구현 난이도는 있음