01
사용률은 시간의 비율입니다.
사용률은 얼마나 많은 연산 자원을 쓰고 있는지가 아니라, 최근 짧은 구간 동안 무언가 실행 중이었던 시간의 비율입니다. 그래서 아주 작은 계산 하나만 계속 돌아도 100% 로 보일 수 있고, 반대로 메모리를 가득 채운 채 아무 요청도 처리하지 않으면 0% 가 됩니다. 이 정의를 알기 전에는 두 숫자가 어긋나는 것이 고장처럼 보입니다.
인터랙티브 과학 · GPU 메모리 vs 사용률
VRAM이 꽉 찬 것과 GPU가 일하는 것은 다른 지표입니다. 모델을 올려두면 메모리는 가중치·KV·예약으로 차지만, GPU-Util은 ‘지금 커널이 도는가’만 보므로 놀고 있으면 0%입니다. 아래에서 직접 눌러 보세요.
모델 프리셋: 7B · fp16 · 24GB GPU
프레임워크가 KV 풀을 미리 확보해 메모리는 거의 가득 찼지만, GPU-Util은 여전히 0% — 예약은 만석인데 손님은 없는 상태입니다.
단순화한 시뮬레이션이며 실제 GPU 측정값이 아닙니다. GPU-Util(NVML)은 샘플 구간에 커널이 실행된 시간 비율이라, 단순 메모리 전송만으로는 오른다는 보장이 없고 추론 92%도 설명용 부하 예시입니다. KV 캐시는 GQA/MQA에서 KV 헤드 수로 줄며, vLLM의 gpu_memory_utilization(예: 0.9, 기본값 단정 아님)은 가중치에 더하는 게 아니라 전체 목표 상한으로 시작 시 설정합니다.
참고: NVIDIA NVML(GPU-Util 정의), vLLM 메모리 설정, Hugging Face KV 캐시
이 데모에 대하여
이 화면은 처음 열릴 때부터 메모리가 거의 다 차 있고 사용률은 0% 인 상태로 시작합니다. 제목이 말하는 현상을 바로 보여주기 위해서입니다. 두 숫자가 서로 다른 것을 재고 있기 때문에 생기는 일인데, 메모리는 미리 잡아 둔 자리를 포함해 세고 사용률은 지금 계산이 돌고 있는지만 보기 때문입니다.
01
사용률은 시간의 비율입니다.
사용률은 얼마나 많은 연산 자원을 쓰고 있는지가 아니라, 최근 짧은 구간 동안 무언가 실행 중이었던 시간의 비율입니다. 그래서 아주 작은 계산 하나만 계속 돌아도 100% 로 보일 수 있고, 반대로 메모리를 가득 채운 채 아무 요청도 처리하지 않으면 0% 가 됩니다. 이 정의를 알기 전에는 두 숫자가 어긋나는 것이 고장처럼 보입니다.
02
메모리는 세 부분으로 나뉩니다.
화면의 막대는 모델 가중치, 지금 요청이 실제로 쓰는 부분, 그리고 미리 잡아 둔 여유 자리로 나뉩니다. 이 셋을 합친 값이 점유율로 표시되기 때문에, 요청이 하나도 없어도 앞의 둘 때문에 점유율이 높게 나옵니다. 막대를 색으로 나눠 두지 않았다면 무엇 때문에 가득 찬 것인지 알 수 없었을 것입니다.
03
가중치는 파라미터 수 곱하기 자료형 크기입니다.
모델을 올리는 순간 차지하는 메모리는 파라미터 개수에 자료형 하나당 바이트 수를 곱한 값입니다. 계산이 단순해서 화면에서도 그대로 곱합니다. 이 값은 요청이 있든 없든 변하지 않으므로, 모델을 올려 둔 것만으로 메모리의 상당 부분이 이미 사라진다는 점이 첫 화면에서 확인됩니다.
04
요청이 쓰는 메모리는 따로 계산합니다.
요청을 처리하는 동안 필요한 추가 메모리는 층 수와 처리할 길이, 동시에 처리하는 개수 등을 곱해 구합니다. 화면은 이 계산을 실제로 수행해서, 요청이 커지면 필요한 자리가 얼마나 늘어나는지를 값으로 보여줍니다. 이 부분이 남은 자리를 넘어서면 메모리 부족이 발생합니다.
05
미리 잡아 두는 이유가 있습니다.
요청이 들어올 때마다 메모리를 새로 확보하면 그 자체로 시간이 걸리고 조각이 나서 나중에 큰 덩어리를 못 잡게 됩니다. 그래서 실행 환경은 시작할 때 큰 덩어리를 미리 잡아 두고 그 안에서 나눠 씁니다. 예약을 끄고 켤 수 있게 만든 것은 이 선택이 점유율 표시에 어떤 영향을 주는지 직접 확인하라는 뜻입니다.
06
초과분을 감추지 않습니다.
필요한 메모리가 남은 자리를 넘어서면 화면은 값을 최대치로 잘라 보여주지 않고 초과한 양을 그대로 노출합니다. 막대를 꽉 찬 상태로만 표시하면 얼마나 부족한지 알 수 없기 때문입니다. 실제 환경에서도 얼마나 모자라는지가 설정을 얼마나 줄여야 하는지를 정해 줍니다.
07
수치는 흔한 값으로 골랐습니다.
화면의 용량과 모델 크기는 특정 장비나 특정 모델을 측정한 값이 아니라 자주 보이는 조합으로 정한 예시입니다. 계산식은 실제로 쓰이는 것과 같지만 넣은 숫자는 예시이므로, 화면의 결과를 특정 장비의 예상 동작으로 읽으면 안 됩니다.
08
모델을 내려야 메모리가 돌아옵니다.
요청이 끝나는 것과 모델이 내려가는 것은 다릅니다. 요청이 없어도 가중치는 그대로 올라가 있어서, 다른 작업을 위해 자리를 비우려면 모델 자체를 내려야 합니다. 장비를 공유해 쓸 때 아무도 요청을 보내지 않는데 메모리가 비지 않는 상황이 이렇게 생기고, 화면에서 내리기와 올리기를 직접 눌러 확인할 수 있습니다.
09
화면은 결정론으로 시작합니다.
첫 상태를 무작위로 두면 서버에서 만든 화면과 브라우저가 처음 그리는 화면이 어긋납니다. 그래서 시작 상태를 모델이 올라가 있고 예약이 켜진 조합으로 고정해 두었습니다. 제목이 말하는 현상을 첫 화면에서 바로 보여준다는 목적과도 맞아떨어지는 선택이었습니다.
10
단위는 십진 기가바이트를 씁니다.
1 기가바이트를 10 의 9 제곱 바이트로 계산합니다. 2 의 30 제곱으로 세는 방식과는 약 7% 차이가 나기 때문에, 어느 쪽으로 셌는지에 따라 같은 메모리가 다른 숫자로 보입니다. 도구마다 표기가 달라 값이 어긋나 보이는 일이 흔해서, 화면이 어느 기준을 쓰는지 밝혀 두었습니다.
단순화한 시뮬레이션입니다.
이 화면은 어떤 장비도 조회하지 않으며 모든 값은 계산해 만든 것입니다. 사용률 그래프에 섞인 작은 흔들림도 실제 측정이 아니라 보기 좋게 넣은 것입니다. 실제 환경에는 여기 없는 요소가 많은데, 실행 환경이 자체적으로 쓰는 메모리, 조각화 때문에 실제로는 쓸 수 없는 자리, 여러 요청을 묶어 처리할 때의 동작, 요청 길이가 제각각일 때의 자리 배분, 그리고 메모리 대역폭이 병목이 되는 상황이 모두 빠져 있습니다. 또한 사용률이라는 지표 자체가 실제로 얼마나 효율적으로 쓰고 있는지를 알려주지 않으므로, 성능을 판단하려면 처리량과 응답 시간을 따로 측정해야 합니다. 이 화면의 목적은 두 숫자가 어긋나는 이유를 이해하는 것 하나입니다. 실제 장비에서 같은 현상을 만났을 때 무엇을 먼저 확인해야 하는지의 순서를 얻어 가는 정도가 적절한 기대입니다.
참고 자료NVIDIA — nvidia-smi 문서 ↗NVIDIA — 사용률 지표 정의(NVML) ↗Hugging Face — KV 캐시 문서 ↗
실험을 마쳤다면