관심있는 NLP 논문을 읽어보고 간단히 정리했습니다.
혹시 부족하거나 잘못된 내용이 있다면 댓글 부탁드립니다 🙇♂️
- 많은 LoRA adapters를 scalable하게 serving할 수 있도록 designed된 system, S-LoRA
- Unified Paging, custom CUDA kernels를 도입
1. Introduction
- "pretrain-then-finetune" 패러다임이 성행함에 따라 수많은 variants가 생성됨
- Low-Rank Adaptation (LoRA)와 같은 parameter-efficient fine-tuning (PEFT) method가 발전됨
- 원조 LoRA는 adapter의 파라미터를 기존 모델의 파라미터와 merge하는 방식을 취함
- 여러 adapter를 사용하고자 하는 경우 기존 모델의 파라미터를 동일하게 여러 번 복사해야 하는 문제가 발생
2. Realted Work
- Low-Rank Adaptation (LoRA)
- pre-trained large language model을 새로운 태스크에 adapt하기 위해 도입된 parameter-efficient fine-tuning 기법
- low intrinsic dimensionality of model updates during adaptation
- Serving Large Language Models
- 대부분의 LLM들은 transformer 아키텍쳐를 기반으로 삼고 있음
- 이에 따라 많은 양의 computational & memory demands가 발생
- Orca에서 token-level에서의 batch를 제안
- PagedAttention을 이용하여 메모리 효율성을 확보
3. Contributions
- scalable LoRA serving system, S-LoRA를 도입
- memory fragmentation을 줄이고 batch size를 키우기 위해 unified memory pool 방식을 제안
- Heterogeneous Batching을 도입하여 over-head latency를 최소화
- novel tensor parellelism strategy, S-LoRA TP를 도입
4. Batching and Scheduling
4.1. Batching
- 여러 개의 adapter를 이용할 때 각 additional xAB에 대해 padding을 추가하지 않고 효율적으로 연산을 수행할 수 있도록 custom CUDA kernel을 이용
- 모든 LoRA adapter를 main memory에 저장하고 현재 running batch에 필요한 것만 GPU RAM으로 가져오는 방식을 적용
- Orca의 iteration-level scheduling batching strategy를 채택
4.2. Adapter Clustering
- running batch에 active adapters의 숫자를 줄이는 것이 strategy
- batch size를 늘리는 것이 higher throughput으로 이어짐
4.3. Admission Control
- admission control 전략을 사용하여 traffic이 더 높을 때 good attainment를 유지할 수 있도록 함
- service level objective (SLO)를 특징으로 삼음
5. Memory Management
S-LoRA는 main memory에 모든 adapter를 저장하고 현재 runnning batch에 필요한 adapter weight를 dynamic하게 load.
이때 memory fragmentation & latency overhead 문제가 발생
5.1. Unified Paging
- Variable sizes and operations: adapter weights가 각 request마다 loaded & cleared
- Dimensionality: LoRA weight (R, H) with R standing for the rank
5.2. Prefetching and Overlapping
- dynamic prediction mechanism을 사용
- 필요한 adapter를 예측하여 prefetch하고 available memory에 미리 저장
5.3. Custom Kernels for heterogeneous LoRA batching on Non-Contiguous Memory
- Multi-size Batched Gather Matrix-Matrix Multiplication (MBGMM)
- Multi-size Batched Gather Matrix-Vector Multiplication (MBGMV)
6. Tensor Parallelism
6.1. Partition Strategy
- 2-layer MLP를 feed-forward module로 사용하여 parition strategy에 활용
- 첫 번째 weight matrix (W1)는 column-partitioned
- 두 번째 weight matrix (W2)는 row-partitioned
- all-gather operation은 intermediate result를 합치는 데 사용됨
6.2. Communication and Memory Cost Analysis
- base 모델의 communication cost는 one all-reduce로 표현됨
- 추가적인 communication cost는 무시할만한 수준임. 왜냐하면 rank r이 h보다 훨씬 작기 때문
- 중복되는 weight matrix는 없음
7. Evaluation
- Model & Baseline
- Llama model series, GPT-3, PaLM
- Baselines: HuggingFace PEFT, vLLM m-packed, S-LoRA, S-LoRA-no-unify-mem, S-LoRA-bmm
- Metrics
- throughput, average request latency, average first token latency, SLO attainment
- Results
- own variant와 비교했을 때도 탁월한 성능이 확인됨
- End-to-end results on real workloads
8. Insights
역시나 하드웨어 관련 내용은 너무나도 어렵다는 생각이..
attention 구조를 개선한 것이 아니라서 이해하기가 너무 빡세다는 생각이 들었습니다.
예전부터 adapter가 아니어도 상황에 맞는 모델을 분류기를 통해 파악하고 이를 활용하는 구조에 대해 관심이 많았습니다.
예를 들어 HuggingGPT와 같은 구조도 사실 태스크에 맞는 모델이 무엇인지 파악하는 것이 먼저인데, adapter도 유사한 방식으로 활용될 가능성이 높다고 생각했습니다.
생각으로는 되게 단순한 것 같은데 왜 실제로 구현되지 않았을까 싶기도 했으나,
중복되는 weight를 저장해야 된다는 문제점을 잘 해결한 점이 가장 주목할만한 포인트라고 생각됩니다.
출처 : S-LoRA: Serving Thousands of Concurrent LoRA Adapters