Sparse Transformers 소개
NimbleEdge에서 공개한 sparse_transformers는 LLM의 추론 속도를 2배 가까이 향상시키고, 메모리 사용량을 26%까지 절감하는 기술입니다. Apple의 “LLM in a Flash”와 Deja Vu 논문을 기반으로 개발된 이 프로젝트는, MLP 레이어의 연산을 최적화하여 효율적인 추론을 가능하게 합니다.
대형 언어 모델(LLM)의 추론 비용은 여전히 높은 편입니다. 특히, MLP(feedforward) 레이어는 전체 연산의 상당 부분을 차지하며, 많은 메모리와 연산 자원을 소모합니다. sparse_transformers는 이러한 문제를 해결하기 위해, 중요하지 않은 뉴런의 연산을 생략하는 “구조적 컨텍스트 희소성(structured contextual sparsity)“을 적용합니다. 이를 통해, 불필요한 연산을 줄이고, 메모리 사용을 최적화하여, 더 빠르고 효율적인 추론을 실현합니다.
기존의 LLM 추론 최적화 기법으로는 양자화(Quantization), 지연 로딩(Lazy Loading), 모델 압축 등이 있습니다:
- 양자화: 모델의 정밀도를 낮추어 연산량을 줄이는 방법입니다. 하지만, 정확도 손실이 발생할 수 있습니다.
- 지연 로딩: 필요한 부분만 메모리에 로딩하여 메모리 사용을 줄이는 방법입니다. 그러나, I/O 병목이 발생할 수 있습니다.
- 모델 압축: 모델의 크기를 줄여서 연산량과 메모리 사용을 줄이는 방법입니다. 하지만, 성능 저하가 발생할 수 있습니다.
반면, sparse_transformers는 연산 자체를 줄이는 접근 방식으로, 정확도 손실 없이 성능을 향상시킬 수 있습니다. Sparse LLM의 추론 파이프라인은 다음과 같습니다:
┌─────────────────────────────────────────────────────────────────┐
│ Sparse LLM 추론 파이프라인 │
├─────────────────────────────────────────────────────────────────┤
│ 희소성 선택 │
│ ├─ Hidden States → LoRA 프로젝션 (중요도 스코어링) │
│ ├─ 이진 마스크 생성: (스코어 > 임계값) │
│ └─ 마스크 정규화: 배치 차원 전체에 대해 합집합 처리 │
├─────────────────────────────────────────────────────────────────┤
│ 차등 가중치 캐싱 │
│ ├─ 마스크 변화 감지: 이전 마스크와 XOR 연산 │
│ ├─ 페어드 치환: 직접 치환 알고리즘 │
│ └─ 제로-카피 텐서 뷰: torch::from_blob 참조 사용 │
├─────────────────────────────────────────────────────────────────┤
│ 희소 계산 │
│ ├─ Gate+Up 프로젝션 결합 (연산 통합) │
│ ├─ 요소별 활성화: σ(gate) ⊙ up │
│ └─ 희소 다운 프로젝션: 활성화된 중간 차원만 계산 │
└─────────────────────────────────────────────────────────────────┘
Sparse Transformers의 주요 특징
- MLP 레이어 희소화: 중요하지 않은 뉴런의 연산을 생략하여, MLP 레이어의 연산량을 줄입니다.
- 로우랭크 가중치 활성화: MLP 레이어의 업/다운 프로젝션을 로우랭크 방식으로 결합하여 연산을 최적화합니다.
- 차등 가중치 캐싱(Differential Weight Caching): 이전 마스크와의 차이를 기반으로 가중치를 업데이트하여, 캐시 업데이트 속도를 6.7배 향상시킵니다.
- 성능 향상: LLaMA 3.2 3B 모델 기준으로, 첫 토큰 생성 시간(TTFT)이 1.51배 빨라지고, 전체 추론 속도는 1.78배 향상됩니다. 메모리 사용량은 26.4% 감소합니다.
사용 방법
설치
# 저장소 복제
git clone https://github.com/NimbleEdge/sparse_transformers.git
cd sparse_transformers
# 의존성 설치
pip install -r requirements.txt
# sparse_transformers 설치
pip install -e .
벤치마크 실행
python run_benchmark.py \
--device cpu \
--config configs/llama_skip_causal_3b.json \
--num_runs 50 \
--verbose True
라이선스
sparse_transformers 프로젝트는 Apache-2.0 License로 공개되어 있으며, 상업적 사용에 제한이 없습니다.
Sparse Transformers GitHub 저장소
이 글은 GPT 모델로 정리한 글을 바탕으로 한 것으로, 원문의 내용 또는 의도와 다르게 정리된 내용이 있을 수 있습니다. 관심있는 내용이시라면 원문도 함께 참고해주세요! 읽으시면서 어색하거나 잘못된 내용을 발견하시면 덧글로 알려주시기를 부탁드립니다.
파이토치 한국 사용자 모임
이 정리한 이 글이 유용하셨나요? 회원으로 가입하시면 주요 글들을 이메일
로 보내드립니다! (기본은 Weekly지만 Daily로 변경도 가능합니다.)
아래
쪽에 좋아요
를 눌러주시면 새로운 소식들을 정리하고 공유하는데 힘이 됩니다~