[SRAM-PIM Core Circuit] TranCIM (Study Paper)
"TranCIM: Full-Digital Bitline-Transpose CIM-based Sparse Transformer Accelerator With Pipeline/Parallel Reconfigurable Modes"
1. Introduction
Transformer Model은 자연어 처리, 컴퓨터 비전, 생물 정보학 등 다양한 분야에서 뛰어난 성능
But, Transformer Model은 엄청난 데이터 이동과 연산을 유발하는 다수의 행렬 곱셈 연산 수행 = 연산량↑
→ 기존 HW(CPU, GPU 등)로는 처리가 느리고 전력 소모가 커서 Transformer Model 전용 가속기 설계 필요
일반적인 Transformer Model은 다수의 Attention Layer와 Fully-Connected Layer를 쌓아 구성
정확도를 높이는데 사용되는 Attention Mechanism은 Transformer Model의 Attention Layer에서 수행
But, Attention Mechanism은 메모리 접근 및 연산 측면 모두에서 기존에 쓰이던 CIM 기술을 그대로 적용하기 어려움
※ Attention Mechanism : 입력된 데이터 전체를 훑어보고, 현재 처리 중인 데이터와 연관성이 높은 데이터들에 높은 Weight 부여
과거의 AI 모델은 데이터가 길어지면 앞부분의 내용을 잊어버리거나 데이터 간의 관계를 놓치는 문제 존재
→ Attention Mechanism은 데이터 간의 물리적 거리에 상관없이 중요한 정보에 직접 연결되므로 데이터 이해도 상승
→ Transformer Model의 정확도↑
※ Attention Layer : Attention Mechanism을 실제로 수학적인 행렬 연산을 통해 수행하는 인공 신경망 내부의 Layer
① 현재 데이터가 어떤 데이터와 연관성이 높은지 점수 부여
② 점수 비율만큼 각 단어의 의미를 섞어서 현재 데이터의 최종 의미를 Update
위 계산 과정이 메모리 접근을 엄청나게 발생시키는 동적 행렬 곱셈
[기존 CIM 사용 시 문제점]
⑴ 메모리 접근
· 기존 NN Layer와 Transformer의 FC Layer : 사전 학습된 Weight가 추론 과정에서 변하지 않는 정적 행렬 곱셈
· Attention Layer : Weight과 입력 값이 모두 실행 시간 중에 생성되는 동적 행렬 곱셈
→ 중간 데이터에 대한 불필요한 Off-Chip 메모리 접근을 유발
기존 CIM 가속기는 행렬 곱셈을 차례로 계산하며, Weight를 CIM에 한 번만 저장해 계속 재사용
But, 동적 행렬 곱셈은 입력과 Weight가 모두 동적으로 생성
→ 기존 방식 사용 시 중간 계산 결과를 칩 외부(Off-Chip) 메모리로 내보냈다가 다시 CIM으로 불러옴 = 불필요한 메모리 접근 발생
(2) 메모리 접근
CIM을 Pipeline Architecture와 연결하면 (1) 문제를 해결할 수 있지만, QKT 연산을 처리할 때 새로운 문제 발생
행렬 K가 생성되는 방향이 기존 CIM의 쓰기 방향과 일치하지 않아 이를 정렬하기 위해 QKT Pipeline에 Transpose Buffer가 필요
→ 추가적인 Overhead 발생
(3) 연산
FC Layer와 비교 시, Attention Layer는 Transformer의 연산량 대부분을 차지하며 정확도 유지를 위해 8-bit 초과의 정밀도를 요구
But, 기존 아날로그 CIM은 신호 유도 및 공정 편차와 같은 비이상적인 물리적 문제로 인해 8-bit 이하의 정밀도만 지원 가능
[TranCIM 사용으로 문제 해결]
(1) 외부 메모리 접근 (Global Buffer)
TranCIM은 변경 가능한 스트리밍 네트워크(RSN)를 통해 CIM 엔진들을 연결
※ RSN(Reconfigurable Streaming Network) : Transformer Model의 각기 다른 Layer에 맞춘 전용 모드 보유
정적 연산 : FC Layer에서 모든 엔진이 독립적으로 작동하는 병렬 모드로 동작
동적 연산 : Attention Layer에서 1번째 엔진 출력이 외부 메모리를 거치지 않고 2번째 엔진으로 직접 전달되는 Pipeline 모드로 동작
(2) 외부 메모리 접근 (Transpose Buffer)
입력 공급 방향과 Weight 쓰기 방향을 HW적으로 일치시키기 위해 Bitline-Transpose 구조로 CIM Macro를 설계
→ Pipeline Mode에서 추가적인 Buffer 메모리 접근 없이 행렬 K의 Transpose 연산 즉시 구현 가능
(3) 연산
· Full Digital 회로 설계 = 아날로그 CIM의 오차 문제를 완전히 회피
· Attention Layer = INT16 정밀도 / FC Layer = INT8 정밀도를 안정적으로 지원
· 연산량을 줄이기 위해 불필요한 연산을 건너뛰는 Block Sparse Pattern 적용
→ HW에서 효율적으로 처리하기 위해 Sparse Attention Scheduler 설계
→ 입력 토큰(N) 길이에 따라 기하급수적으로 늘어나던 연산 복잡도가 O(N2)에서 O(N)으로 크게 감소
2. Background & Motivation
일반적인 Transformer Model
① Attention Layer의 입력은 N개의 토큰으로 이루어진 Sequence(X)이며, 각 토큰은 dmodel 길이를 가지는 벡터
② 입력 데이터(X)를 해당하는 Weight 행렬(WQ, WK, WV)과 곱하여 N x dk 크기를 가진 Q, K, V 행렬을 얻음
② 입력 데이터(X)를 해당하는 Weight 행렬(WQ, WK, WV)과 곱하여 N x dk 크기를 가진 Q, K, V 행렬을 얻음
③ Q · KT = A : 출력에 대한 각 입력 토큰의 중요도
④ A' = softmax(A/√dk) : A의 값이 너무 커지는 것을 방지하기 위해 √dk로 나눈 후, 확률처럼 총합이 1이 되도록 softmax 함수 적용
⑤ Att = A' · V : 최종 출력
→ 모든 입력 토큰(N)이 서로 다른 모든 토큰과 각각 관계 계산 = 문장의 길이(N)가 길어질수록 계산량(N2)이 폭발적으로 증가
→ Sparsity를 도입하여, 각 토큰이 전체 토큰 중 일부하고만 Attention을 수행하여 계산 복잡도 낮춤
Sparsity
(b) Fixed Pattern : 알고리즘으로 정의하여 미리 고정해 둔 특정 위치 + 자신의 바로 옆에 있는 데이터(Local)만 골라서 연산
(c) Devlin : 핵심 데이터(Global) + 자신의 바로 옆에 있는 데이터(Local)만 골라서 연산 → 연산 복잡도 O(N)
(c) Devlin : 핵심 데이터(Global) + 자신의 바로 옆에 있는 데이터(Local)만 골라서 연산 → 연산 복잡도 O(N)
Block Sparsity는 Quantization 기법보다 정확도에 미치는 악영향↓
∴ TranCIM에 Block Sparsity Attention 기법 사용
NN Accelerator & Computing-In-Memory
(a) Von Neumann : 연산을 담당하는 MAC Unit과 데이터를 저장하는 메모리가 물리적으로 분리
→ MAC Unit과 메모리 사이의 막대한 데이터 이동 = 에너지 효율↓
(b) Analog CIM : 데이터를 저장하는 메모리 내부에서 연산까지 한 번에 처리하여 데이터 이동 최소화
→ DAC/ADC 회로 필요 + Noise와 공정 오차에 의해 고정밀도 지원 불가(정확도↓)
(c) Digital CIM : 메모리 내부 연산을 통한 데이터 이동 최소화 + Digital을 사용하여 높은 정확도 보장Motivation of TranCIM
기존 CIM : CIM Macro 내부 설계에 초점을 맞춰 데이터를 처리할 때는 단순히 여러 블록에 일을 똑같이 나눠주는 병렬 연산만 수행
TranCIM : Layer 특성에 맞춰 Pipeline/병렬 모드 변경 + 유연한 HW 연결망을 통한 Sparsity 연산을 동적으로 할당하여 처리
3. TranCIM Accelerator Architecture
· 각 Engine은 데이터를 16x256 크기의 배열로 저장하고 처리하는 'Bitline-Transpose-CIM Macro' x16 + CIM 출력값을 하나로 합치기 위한 Engine Accumulator 존재
▣ DEngine
· DEngine(동적) = SEngine(정적) + 추가 회로 + 제어 기능
① 유연한 출력 집계 : 결과를 하나로 합쳐 출력하거나, 다음 연산을 위해 결과를 합치지 않고 독립적으로 출력
② Data Source 선택 : 데이터를 어디서 받아올지(입력 통로)를 상황에 맞게 변경 가능
③ SAS(Sparse Attention Scheduler)와 실시간 연동 : 0이 많아서 계산할 필요가 없는 데이터를 건너뛰고, 필요한 연산만 하도록 Workload를 동적으로 재구성
▣ TranCIM
Feature 1)
Transformer Model의 Attention Layer와 FC Layer 중 상황에 맞춰 2가지 연산에 최적화된 형태로 HW 구조를 스스로 재구성 가능
· Parallel Mode
기존의 CIM 기반 가속기들의 작동 방식과 유사(동시 다발적 연산 방식)
3개의 CIM Engine 모두 FC Layer의 Weight를 나누어 저장하고 동시에 계산 진행
· Pipeline Mode
Attention Layer 내의 2가지 동적 행렬 곱셈, Q · KT = A → A · V 연산을 연속된 작업으로 순차적 처리
① QKT Pipeline의 1단계에서 SEngine 2개가 각각 Q와 K를 만들어내고, 2단계에서는 DEngine이 Q, K를 넘겨 받아 곱셈 수행
② 칩에 내장된 SIMD Processor(Digital 연산기)가 넘겨받아 값을 Scaling하고, 0 ~ 1 사이의 확률값으로 만들어주는 Softmax 적용
③ Softmax가 적용된 A'을 Global Buffer에 저장
④ A'V Pipeline : 2번째 단계의 입력인 A가 1단계의 출력이 아니라 이미 완성되어 Global Buffer에 저장된 A'을 Load
→ SEngine 2개가 행렬 V를 계산하고, DEngine은 Buffer에서 가져온 A'과 방금 만든 V를 곱해 Attention Layer의 최종 출력 계산
(Att = A' · V)
Feature 2)
Transpose를 위한 Buffer 사용 시 면적과 전력 소모↑ → TranCIM 사용 시 데이터가 입력되는 방향 자체를 HW적으로 정렬
Feature 3)
Attention 연산 시 값이 0에 가까워 계산할 필요가 없는 부분들(희소성)을 SAS(Scheduler)가 실시간으로 파악해, 동적 엔진이 필요한 연산만 하도록 배분하여 동적 엔진의 CIM 작업 부하를 동적으로 구성
4. Pipeline/Parallel Reconfigurable Modes (Global Buffer)
Parallel Mode
· 3개의 CIM 엔진은 독립적으로 작동하며 FC Layer의 Weight 행렬(W)을 각각의 내장 메모리에 저장
· SEngine의 입력 데이터는 Input Buffer에 저장 / DEngine의 입력 데이터는 Global Buffer에 저장
· Parallel Mode에서는 각 엔진이 독립적으로 동작하기 때문에 엔진들끼리 데이터를 주고받을 필요 X
∴ RSN은 엔진 간의 연결을 비활성화, 대신 DEngine이 GB로부터 연산할 데이터를 입력받을 수 있도록 GB와의 연결을 활성화
· Engine들의 출력 결과는 모두 GB에 저장
※ RSN(Reconfigurable Spatial Network) : Buffer Port, Input/Weight Bus/Selector 등을 통해 DEngine을 SEngine, GB에 연결
※ GB : Global Buffer
· Weight가 고정되어 있는 정적 행렬 곱셈 : 엔진들을 독립적으로 굴리는 방식이 성능과 효율 면에서 아주 좋음
· Attention Layer에서의 동적 행렬 곱셈 : 중간 데이터를 위해 칩 외부(Off-Chip) 메모리에 대한 불필요한 중복 접근 유발
① 병렬 모드에서 Q와 K를 각각 계산
② 서로 곱할 구조가 되지 않아 Q, K를 칩 외부의 메모리에 저장
③ Q, KT 곱하여 A 행렬을 만들기 위해 칩 안으로 다시 데이터를 Load
Pipeline Mode
① QKT Pipeline에서 2개의 SEngine에 각각 WQ와 WK를 저장
② Input Buffer로부터 입력 데이터(X)를 받아 각각의 Weight와 곱해 Q, K 행렬을 동시에 생성
③ RSN이 동적으로 변경되어 2단계 엔진(DEngine)으로 Q, K 행렬을 전송하여 A 행렬 생성
연산량을 줄이기 위해 Global + Local Sparse Attention을 적용한 QKT Pipeline
· Block Sparsity 크기는 b → 입력 Sequence의 매 b개 토큰이 함께 처리되어 Attention 행렬 A의 b x b Block을 계산
(CIM Macro의 크기에 맞추기 위해 b = 16으로 설정)
· b개의 토큰은 Bit-Serial 방식으로 엔진에 전송되어 한 Block을 계산하는 데 b x p 사이클(= Block Cycle) 소요 (p = 데이터 정밀도)
· RSN은 Input/Weight Bus를 동적으로 활성화하여 SEngine과 DEngine 사이에 2단계 Pipeline 구성
· DEngine은 RSN을 통해 qi와 kjT Block을 수신하고, 이를 CIM Macro에서 곱하여 행렬 A의 한 Block ai, j(= qi · kjT)를 계산
① Block Cycle 0 SE1 : WK 저장
② Block Cycle 1 SE1 : x0를 받아 생성하고, CIM0로 전송
② Block Cycle 1 SE0 : WQ 저장
③ Block Cycle 2 SE0 : x0를 받아 q0를 생성하고, CIM0로 전송하여 CIM0에 미리 저장된 k0와 q0를 곱하여 a0,0 생성
③ Block Cycle 2 SE1 : x1을 받아 k1을 생성하고, CIM1로 전송
** Q, KT를 곱하려면 Weight가 먼저 기록되어 있고 입력은 그 위로 흘려 보내 연산되어야 함
→ 만약 Q, K를 동시에 저장하기 시작해서 q0와 k0가 DEngine에 동시에 도착 시 k0를 아직 기록하지 못하여 q0와 곱셈 불가
** CIM0은 Global 토큰 자리로 덮어쓰기 불가 / CIM1~3은 Local 토큰 자리로 덮어쓰기 가능
Technique Evaluation (기존 CIM의 Parallel Mode vs TranCIM의 Pipeline Mode)
<Parallel Mode>
① X를 Load하여 3개의 엔진이 각자 할당받은 MAC 연산을 수행하여 K 계산 후, 칩 외부 메모리에 임시 저장
② X를 다시 Load하여 3개의 엔진이 각자 할당받은 MAC 연산을 수행하여 Q 계산 후, 칩 외부 메모리에 임시 저장
③ 외부 메모리에 저장해 두었던 Q와 K를 칩 내부로 Load하여 곱셈 연산 수행
→ 입력 데이터(X)를 중복해서 Load하고, 칩 외부 메모리 접근 발생
<Pipeline Mode>
① SE0에 WQ, SE1에 WK 저장
② Input Buffer에서 데이터 X를 딱 한 번만 꺼내어 SE0/SE1에 동시에 입력
· 입력 Sequence(X)는 단 한 번만 Load되어 Q와 K를 동시에 계산
· Q, K는 칩 외부에 기록될 필요 없이 바로 RSN을 통해 DEngine으로 전송시켜 즉각적으로 재사용 가능
∴ 칩 외부 메모리 접근 횟수 & 전력 소모↓
5. Bitline-Transpose-CIM Macro (Transpose Buffer)
Wordline-Feeding CIM vs Bitline-Transpose CIM
→ 각 Block은 b x dk 크기의 행렬
· 2개의 SEngine은 b 방향을 따라 Block 생성
· 2개의 SEngine은 b 방향을 따라 Block 생성
· DEngine에서 q0 · k0T의 행렬 곱 연산을 하기 위해 (b x dk) x (dk x b) 형식이 되어야 함
→ 행렬 A = b x b
<기존 CIM>
WL으로 데이터를 입력하기 때문에 가로 방향으로만 데이터 작성 가능 → But, (dk x b) 형식을 가진 k0T 필요
∴ 우측 상단과 같이 k0를 저장한 후, CIM0에 Transpose하여 쓰기 위해 CIM0와 동일한 크기의 추가적인 Transpose Buffer 필요
→ 면적 & 전력 소모 & Latency ↑
BLT-CIM Macro Architecture
→ 입력 데이터가 BL으로 직접 흘러들어가면서 내부 데이터와 곧바로 연산 가능
· TranCIM의 3개의 엔진은 최상위 Controller로부터 정적 모드 설정을 수신
(Pipeline/Parallel Mode, Layer Parameter, Sparse Attention Pattern)
· Pipeline Mode에서 DEngine의 CIM Controller는 SAS로부터 동적 CIM Workload 설정을 수신
(앞선 고정 세팅과 달리, 칩이 작동하는 중간중간 SAS로부터 실시간으로 변하는 작업 지시를 받아 유연하게 대처)
· TranCIM의 Full-Digital CIM은 배열을 100% 활용하기 위해 모든 행을 동시에 활성화 가능
[CIM Controller]
· DS(1-bit) : Data Source MUX를 제어하여 Weight/Input Port 중 데이터 출처를 선택
· CWS(2-bit) : 작업 상태를 결정
① 01(Weight 쓰기 상태) : Data Source가 Weight Port가 됨.
→ 주소 Counter가 작동하여 해당 WL Open(메모리 데이터 저장)
② 10(Input 공급/연산 상태) : Data Source가 Input Port가 됨.
→ CIM Logic이 활성화되며, 입력 bit들이 BL로 전송되어 Weight들과 즉시 곱해짐
[Full-Digital Memory Cell Design]
· Analog 방식 : 전류 간섭 등의 문제를 막기 위해 8T/10T SRAM 필요 → 면적↑
· TranCIM의 SRAM 배열 : 완전 Digital 메모리 내 연산 Logic으로 설계
· 6T SRAM을 적용하여 Weight를 저장하고, bit 단위 곱셈을 위해 각 SRAM 셀에 4T NOR Gate 연결
· CIM 연산은 WL이 비활성화된 상태(대기 상태)에서만 작동 → SRAM의 정상적인 메모리 접근(R/W)과 충돌 X = 안전하게 분리
[4Step Macro Accumulator]
· 16x256 SRAM-CIM 배열에서 16개의 열마다 Macro Accumulator가 하나씩 배치되어 4단계 Pipeline으로 동작
① 부분 곱 덧셈 : 16개 행의 부분 곱들에 대해 세로 방향으로 1차 합산(2개의 16-입력 8-bit 덧셈기 사용)
② Bit 직렬 누산 : Bit 단위로 순차적으로 들어오는 직렬 입력에 대해 Shift-Accumulation을 수행(2개의 누산기 사용)
③ INT8/INT16 융합 : 연산 정밀도에 따라 병합 제어
→ INT8 Mode : 두 누산기의 합을 각각 직접 출력 / INT16 Mode : 두 누산기의 합을 융합하여 하나의 출력 생성
④ 최종 출력을 위한 양자화 : 덧셈으로 커진 결과값을 다음 연산에 쓰기 좋게 다시 적절한 bit 수로 축소
Technique Evaluation (Wordline-Feeding CIM vs Bitline-Transpose CIM)
· 행렬 곱 연산을 하기 위해 Transpose Buffer에 먼저 저장하여 Transpose 수행 후, 연산용 메모리에 다시 저장한 후 곱셈 연산 수행
→ Pipeline 지연 발생 + 이중 데이터 이동으로 인한 비효율
<Bitline-Transpose CIM>
· BL을 가로로 눕혀, 데이터가 들어오는 즉시 추가 Buffer 없이 직접 메모리에 쓰면서 동시에 곱셈 연산 수행
∴ 면적 & 전력 소모 & CIM에 쓰기 작업할 때마다의 SRAM 접근 에너지 소비↓
6. Sparse Attention Scheduler
Sparse Attention Pattern
· 기존 Transformer Model의 가장 큰 단점 : 입력 데이터 길이가 길어질수록 연산량과 메모리 사용량이 기하급수적으로 증가
∴ 모든 데이터(8 x 8)를 연산하지 않고 필요한 부분만(파란색으로 색칠된 부분) 선택적으로 계산하는 기법 도입
→ 모델의 예측에 중요한 전체 정보(Global)와 인접 정보(Local)에 해당하는 패턴만을 선별하여 행렬 곱 수행
SAS Architecture & Work Flow
· Sparse Attention은 전체 데이터 중 일부만 선택해서 곱 연산 진행 → 매번 계산해야 하는 데이터의 위치나 양이 불규칙적
∴ 상황에 맞춰 HW 자원을 분배+제어해서 DEngine의 CIM Workload를 동적으로 구성하기 위해 Sparse Attention Scheduler 설계
∴ 상황에 맞춰 HW 자원을 분배+제어해서 DEngine의 CIM Workload를 동적으로 구성하기 위해 Sparse Attention Scheduler 설계
▣ 준비 단계
· Binary Attention Pattern : 1(파란색) = 계산 / 0(흰색) = 건너뜀
· Weight Block Lifetime : HW 메모리가 제한적이므로, 한 번 들어온 데이터를 몇 번 재사용하고 버릴지 정해둔 사용 횟수 수치
▣ Workflow
① Search : 데이터가 어떤 데이터와 곱셈 연산을 해야 하는지 확인
q1, k2 도착 → q1은 k0, k1과 곱셈, k2는 q2, q3와 곱셈
② Match : 곱셈해야 하는 데이터가 DEngine의 메모리에 존재하는지 확인
q1 : k0, k1가 이미 들어와서 CIM0, CIM1에 대기 중 → Matching 성공
k2 : q2, q3가 아직 DEngine에 도착 X → Matching 실패
③ Determine & Update : 연산할 지, 보관할 지 결정
q1 : 곱셈할 데이터가 있으니 CIM0, CIM1에 넣어 즉시 곱셈 연산 시행 후, k0, k1의 Lifetime 감소
k2 : 곱셈할 데이터가 없으니 CIM2에 저장 후, k2의 Lifetime 초기화
④ Configure : 최종 판단에 따라 Switch On/Off
CIM0, CIM1 : "110" 신호를 보내 q1을 받아들여 연산하게 함
CIM2 : "001" 신호를 보내 k2를 저장하게 함
** CIM이 꽉 찬 경우 : Pipeline을 잠시 멈추고 앞단에서 나오는 데이터들은 최대 64개까지 들어가는 임시 대기열에 줄을 세워두고 자리가 날 때까지 대기
Technique Evaluation
· SAS는 밀집된 필수 Workload만 DEngine에 할당함으로써 Attention 연산량↓
→ 토큰 수가 증가할수록(= 데이터 길이가 길어질수록) SAS 적용 시 효율↑
∴ 토큰이 4096개인 경우 연산 속도 = 약 17배↑ & 소모 전력 = 약 11배↓
7. Experimental Results
Chip Micrograph & Summary
· BERT-Base & BERT-Large와 같은 Transformer Model 사용
· 동작 환경 : 전압 0.6 ~ 1.0V / 주파수 : 80 ~ 240MHz
· 소비 전력 : 27.04mW ~ 118.21mW
· Sparse Attention을 지원하기 위해 DEngine에 부착되는 SAS Module 역시 비중↓
Test Platform Setup
· AI Model의 Weight 또는 많은 입력 데이터는 크기가 작게 설계된 TranCIM 칩 내부에 모두 담기 불가능
→ 외부(FPGA)에 장착된 넉넉한 용량의 DDR3 메모리 활용
→ 칩이 연산하는 도중에 발생하는 임시 데이터를 잠시 저장해두는 칩 외부 공간으로도 사용
· FPGA는 PC와 칩 사이에서 다리 역할을 하며, 고속 데이터 통신을 지원하는 표준 연결 규격(FMC)을 이용
→ 칩에 어떤 연산을 언제 할지 필요한 제어 신호와 연산에 필요한 데이터를 전달
· DC 전원 공급 장치는 테스트 칩에 0.6~1.0V의 Core 전압을 공급
· 칩에서 AI 연산 완료 시, 최종 결과값은 다시 FPGA를 거쳐 Host Computer로 전달
Evaluation on Transformer Models
1) 종합 평가
· 높은 정확도 유지 : 무거운 연산을 8/16-bit로 가볍게 양자화했음에도, 원래의 AI Model 대비 정확도 하락이 1% 안팎에 불과
· 속도 및 에너지 효율 극대화 : Pipeline Mode + Sparse Attention 적용 결과, 속도 2.63배, 에너지 절감 2.39배 향상
· GPU와 비교 : 체급이 비슷한 상용 GPU와 비교 시 속도는 조금 느리지만, 전력 소모를 약 80배 감소
2) Layer별 분석
· 기존 방식은 처리할 데이터가 많아질수록 Attention 연산이 전체 Delay의 최대 76% 차지
· TranCIM 적용 시 Attention 연산의 비중을 30% 수준으로 감소되어 큰 데이터 처리에도 부하 방지 가능
3) 적용 기술별 기여도 분석
· Sparse Attention : Attention 에너지 2.36배 절약
· Pipeline Mode : 위 기술에 추가로 적용 시 Attention 에너지 7.99배 절약
4) 확장성 분석
· TranCIM 칩을 1개에서 8개로 늘려가며 Benchmark Test 진행
→ 칩을 8배로 늘리면 연산 Delay와 에너지 소모 모두 약 1/6 수준으로 감소
= 여러 개의 칩을 이어 붙여도 내부 통신 병목 없이 성능이 선형적으로 증가
Comparison with State-of-the-Art Works
1) 종합 결과
· 압도적인 실전 에너지 효율 : 가장 무거운 AI Model(BERT-Base) 구동 시 TranCIM이 기존 칩들보다 12~36배 이상 전력 소모↓
2) vs 기존 Analog CIM
· Analog CIM : 미세한 Noise에 의해 오차가 쌓여 연산기를 한 번에 100% 켤 수 없고, 억지로 전력을 낮출 시 속도가 5.5배 이상 ↓
· TranCIM : 100% Digital 방식이므로 오차 없이 전체 연산기 구동 가능 & 같은 면적/조건 대비 성능은 3.5배, 속도는 5.5배 ↑
3) vs 기존 Digital CIM
· Digital CIM : 무작정 Clock 속도를 높여 단순 계산은 빠르지만, 전력 소모↑
· TranCIM : Pipeline 등을 추가하면서 칩 면적 대비 기본 성능은 조금 낮아졌지만, 외부 메모리에 접근하는 시간 제거
→ 실제 AI Model 구동 속도는 4.5배 ↑ & 전력 소모는 12배 ↓
8. Conclusion
Motivation
Transformer Model은 정확도 향상을 위해 Attention Mechanism을 사용
→ Attention Mechanism은 데이터 간의 관계를 파악하기 위해 메모리 접근이 매우 빈번하고 Pattern이 불규칙
→ 기존 CIM으로는 한계가 있어 Transformer Model 전용 가속기인 TranCIM 설계
TranCIM 특징
· Full-Digital : Analog 방식을 사용하여 Noise에 취약한 기존 CIM과 달리 100% Digital 회로로 구현하여 연산 정확도↑
· Bitline-Transpose : 행렬 연산을 할 때, 메모리의 데이터 입출력 선(Bitline) 방향을 동적으로 바꿔 데이터 R/W 효율↑
· Sparsity : 인공지능 연산 중 결과값이 '0'이 되어 굳이 계산할 필요가 없는 부분을 건너뛰어 효율↑
· Reconfigurable Modes : 상황에 맞춰 Pipeline/Parallel Mode로 HW를 유연하게 바꿔 효율↑
기존 CIM 연구와 차별점
· 기존 CIM 연구 : 하나의 내부 회로 설계에 집중
· TranCIM 연구 : 여러 개의 CIM Macro Block들을 배치하고, Block들 사이를 어떻게 효율적이고 유연하게 연결할 것인가에 집중
9. Thinking
TranCIM 한계점
· Full-Digital 회로로 연산 정밀도가 INT8(FC Layer), INT16(Attention Layer)로 고정
→ 추론 단계에서는 효율적이지만, 미세한 소수점 단위의 Weight Update가 필수적인 학습 단계에서는 비효율적일 수 있음
· SAS는 시스템 제어기가 사전에 입력해둔 Attention Pattern 기반으로 작동
→ 불규칙한 Sparsity이거나 실시간으로 Pattern이 변한다면 Latency & 전력 소모↓ 효과를 얻지 못할 수 있음
10. Reference
"TranCIM: Full-Digital Bitline-Transpose CIM-based Sparse Transformer Accelerator With Pipeline/Parallel Reconfigurable Modes"
댓글
댓글 쓰기