Peak Memory
모델이 순간적으로 최대로 사용한 VRAM
Peak Memory때 OOM가 발생함.
근데, 이미 첫 실행때, 중간 결과를 저장할 공간까지 다 할당된다고 했는데, peak memory때문에 oom이 발생하는 거는 첫번째 실행때만 발생하는 건가 했는데, llm에서는 대화가 길어질수록 메모리가 늘어나기 때문에 oom이 발생할 수 있다. 그래서 항상 동일한 memory를 갖는건 아니다.
llm에서는 입력, 출력 token이 고정되어 있는 경우에만 동일한 메모리를 사용하게 된다.
torch.cuda 메모리 관련 함수
Peak Memory 측정
[INT8 10회 반복 테스트 결과 (동일 input)]
평균 속도 (Avg TPS) : 8.04 tokens/sec
현재 메모리 (Current) : 8.48 GB
피크 메모리 (Peak) : 8.49 GB
[INT4 10회 반복 테스트 결과 (동일 input)]
평균 속도 (Avg TPS) : 14.05 tokens/sec
현재 메모리 (Current) : 5.32 GB
피크 메모리 (Peak) : 5.43 GB
-> 확인해보면, int8->int4로 줄였는데, 메모리도 절반까지 안줄고, 속도도 2배까지 늘진 않았다.
메모리: cuda context, 라이브러리 같은 기본 용량은 줄어들지 않고, 모델 관련 메모리만 절반으로 줄었기 때문에 완벽히 50%로 되진 않음.
속도: 메모리가 줄어서 전송 속도는 빨라졌지만, 압축을 푸는과정이 추가됨 (int4->fp16) 그래서 완벽히 2배로 늘진 않음.
만약에 int4가 지원되는 하드웨어라서 그대로 사용한다면 2배 이상으로 빨라질 수 있음. 전송속도도 빨라지고, 연산 자체도 빨라지기 때문!
npu에서는 변환없이 int4/8연산을 직접 수행함!