LLM inference serives 5 disecting model performance
네 가지 종류의 성능 병목 현상
- compute-bound
- memory bandwidth bound
- communications bound
- overhead bound : software-induced limitations
- 대부문의 처리 시간이 작업 일정을 계획하고 이를 HW에 제출하는데 소요
- 런타임에 필요한 모든 정보(텐서 데이터 유형, 장치, 호출할 커널)를 명시적으로 지정할 필요가 없는 유연한 언어(python)이나 프레임워크(pytorch)를 사용할 때 오버헤드 바인딩이 발생할 가능성이 높아짐
병목 현상 유형에 따라 지연 시간을 단축하도록 최적화
- compute-bound
- 높은 peak FLOPS의 칩으로 업그레이드
- CUDA 코어 대신 Tensor 코어 사용
- 필요한 작업 수를 줄임 (더 적은 매개변수. pruning, knowledge distillation 등)
- 더 낮은 precision 사용 (FP16 -> FP8). 이를 위해 모든 입력(weight와 activation을 양자화하고 전용 저정밀도 커널 사용
- memory bandwidth bound
- 더 높은 메모리 BW를 갖춘 칩으로 업그레이드
- 데이터 이동을 줄이기 위해 quantization, pruning, knowledge distillation 사용
- weight 전용 양자화 기술 (GTPQ, AWQ)
- KV cache 양자화 기술
- 메모리 작업 수를 줄임 (kernel fusion)
- communications bound
- 더 높은 네트워크 BW을 갖춘 더 강력하고 더 비싼 칩으로 업그레이드
- 효율적인 분할 및 collective communication 전략을 선택하여 통신량을 줄임
- overhead bound : software-induced limitations
- 더 적은 오버헤드를 가진 C++같은 언어를 사용
- 커널을 그룹으로 제출함
- 모델 컴파일러를 사용하여 그래프를 더욱 최적화
Arithmetic Intensity (산술 강도)
- operator fusion & data quantization (weight, KV cache)를 통해 데이터 전송 횟수와 크기를 모두 줄이면 A.I가 대부분 향상됨
Throughput을 향상시키는 방법
- 연산 강도를 높이는 것
- 하드웨어 리소스를 더 잘 사용하도록 알고리즘을 구현
- FlashAttention: KV cache 시퀀스 길이 차원에 걸쳐 데이터 로드를 병렬화
- FlashDecoding : 디코딩 단계를 최적화
'Daily-Trend-Review' 카테고리의 다른 글
24/04/13: LLM cost vs. Performance (0) | 2024.04.13 |
---|---|
24/03/31: Transformer math 101 (0) | 2024.03.31 |
24/03/10: It is fake AGI, stupid! (0) | 2024.03.10 |
24/03/09: Transformer Alternatives (0) | 2024.03.10 |
24/02/25: OLMo (0) | 2024.02.25 |