[경량화 챌린지] 7일차 - VRAM memory 측정

ehghkwl·2025년 11월 21일

Lightweight Challenge

목록 보기
7/22
  • Peak Memory
    모델이 순간적으로 최대로 사용한 VRAM
    Peak Memory때 OOM가 발생함.
    근데, 이미 첫 실행때, 중간 결과를 저장할 공간까지 다 할당된다고 했는데, peak memory때문에 oom이 발생하는 거는 첫번째 실행때만 발생하는 건가 했는데, llm에서는 대화가 길어질수록 메모리가 늘어나기 때문에 oom이 발생할 수 있다. 그래서 항상 동일한 memory를 갖는건 아니다.
    llm에서는 입력, 출력 token이 고정되어 있는 경우에만 동일한 메모리를 사용하게 된다.

  • torch.cuda 메모리 관련 함수

    • 현재 상태 확인 용
      • torch.cuda.memory_allocated(): 현재 텐서가 차지한 순수 용량
      • torch.cuda.memory_reserved(): pytorch가 캐싱한 총 용량 (=nvidia-smi)
        allocated는 실제 모델이 추론하는데에 사용하고 있는 용량이라서 del하면 바로 용량 삭제됨. 반면, reserved는 pytorch에서 미리 확보해둔 공간이라서 del해도 삭제가 안되고 empty_cache를 해야 비워짐. 그래서 del -> gc.collect() -> empty_cache 순으로 clear해야함! gc.colloect는 del했는데도 바로 안지워지는 경우가 있음.
      • torch.cuda.mem_get_info(): (free, Total) 튜플 반환
    • 최대 기록 확인 (reserved 기준이고, 지금 실행하는 프로그램 외에도 gpu 전체 용량과, 남은 용량 값만 나온다. 다른 앱에서 사용할 수 있음)
      • torch.cuda.max_memory_allocated(): 실제로 가장 많이 차지했던 용량 (python test.py를 실행하고 나서부터!)
      • torch.cuda.max_memory_reserved(): 예약된 메모리의 최고점?
    • 제어 및 관리
      • torch.cuda.empty_cache(): Reserved중에 안쓰는 잉여 공간을 OS에 반납.
      • torch.cuda.resetpeak_memory_stats(): max_memory* 기록 0으로 초기화
      • torch.cuda.set_per_process_memory_fraction(rate): 전체 VRAM의 rate만 쓰도록 강제.
    • 심화 분석
      • torch.cuda.memory_summary(): 현재 메모리 상태 출력 (현재 사용량, peak 사용량 등 한번에 볼 수 있음)
      • torch.cuda.memory_stats(): memory_summary의 내용을 딕셔너리 형태로 반환
      • torch.cuda.memory_snapshot(): 메모리 상태를 파일로 저장
  • 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연산을 직접 수행함!

profile
안녕하세요.

0개의 댓글