한 줄 정의
--kv-cache-dtype bfloat16은 vLLM에서 KV 캐시를 bfloat16, 즉 BF16 16비트 형식으로 저장하라고 지정하는 실행 플래그야. 모델 가중치를 BF16으로 바꾸는 옵션이 아니라, 생성 중 다시 읽는 key/value 캐시의 저장 형식을 고르는 설정이야.
다만 모든 모델에 마음대로 붙일 수 있는 일반 스위치로 보면 안 돼. vLLM v0.20.1 문서는 일부 FP8 기본 모델에서 bfloat16 캐시로 되돌리는 경로를 설명하면서, FP8을 기본값으로 쓰지 않는 모델에는 이 선택이 유효하지 않다고 제한해. 그래서 이 플래그가 보이면 먼저 현재 vLLM 버전과 모델 조합이 그 값을 실제로 받는지 확인해야 해.
로그에 kv cache dtype bfloat16처럼 풀어 적혀도 같은 설정을 가리키는 경우가 많아. 여기서 dtype은 값을 어떤 자료형으로 저장할지 고르는 말이야. 이 플래그가 눈에 띄는 이유는 Qwen3.6 27B FP8 같은 이름과 같이 나올 때 헷갈리기 때문이야. 모델 카드는 FP8로 양자화된 가중치를 말할 수 있고, 실행 명령은 캐시를 bfloat16으로 고정할 수 있어. 그러면 가중치는 FP8로 줄였지만, 긴 문맥에서 계속 재사용하는 캐시는 BF16으로 남긴 구성이 된다.
그래서 이 항목은 BF16 KV라는 개념보다 더 좁아. BF16 KV가 “캐시를 16비트로 남기는 운영 선택”이라면, 이 CLI 표기는 그 선택을 vLLM 서버에서 실제로 켜는 플래그 이름이야.
어떻게 작동하나
vLLM v0.20.1의 Engine Arguments 문서는 KV 캐시 저장 형식 옵션을 따로 설명해. 선택지는 auto, bfloat16, float16, fp8, fp8_e4m3, fp8_e5m2 같은 값들이고, auto는 모델 자료형을 쓴다고 적혀 있어. 그러니까 bfloat16을 직접 쓰는 건 “기본값에 맡기지 않고 캐시를 16비트 BF16으로 저장하겠다”는 뜻이야.
여기서 중요한 경계가 하나 더 있어. 같은 문서는 bfloat16 값을 일부 FP8 기본 모델의 되돌림 경로로 설명하고, FP8이 기본값이 아닌 모델에는 유효하지 않다고 적어. 실제 운영에서는 서버가 기동되는지, 로그에 어떤 캐시 형식이 찍히는지, 같은 모델에서 auto와 bfloat16 값이 어떻게 해석되는지 먼저 봐야 해.
캐시 메모리는 문맥 길이와 같이 커져. 모델은 이미 읽은 토큰의 key/value를 저장해 두었다가 다음 토큰을 만들 때 다시 읽어. BF16은 원소 하나가 2바이트고, FP8은 1바이트라 저장 바이트 폭만 보면 BF16 캐시가 더 무겁다. 대신 캐시를 더 낮은 정밀도로 줄였을 때 생길 수 있는 긴 문맥 품질 회귀를 피하려는 이유가 생겨.
LocalLLaMA 게시글의 명령 조각은 이 차이를 그대로 보여 줘. 작성자는 --max-model-len 196608 다음에 bfloat16 캐시 저장 형식과 프리픽스 캐싱 플래그를 붙였어. 여기서 196,608은 서버가 잡은 문맥 길이이고, bfloat16은 그 문맥을 처리하며 쌓이는 KV 캐시 자료형이야.
왜 중요한가
이 플래그가 중요한 이유는 로컬 추론 재현성이 모델 파일 하나로 끝나지 않는다는 걸 보여 주기 때문이야. Hugging Face의 Qwen/Qwen3.6-27B-FP8 모델 카드는 이 배포본이 FP8로 양자화된 가중치와 block size 128 설정을 담는다고 적어. 같은 카드의 모델 개요에는 27B 파라미터, 64개 레이어, 은닉 차원 5120, 기본 문맥 길이 262,144 tokens가 나온다.
그런데 공식 vLLM 예시는 보수적으로 텐서 병렬 8과 문맥 길이 262144를 함께 써. 반면 Reddit 사례는 RTX PRO 5000 Blackwell 48GB 카드 한 장에서 196,608 문맥과 BF16 KV 캐시를 쓴 별도 커뮤니티 레시피야. 같은 모델명이어도 GPU 수, 문맥 길이, 캐시 저장 형식, 어텐션 계산 경로가 바뀌면 다른 실험이 된다.
하드웨어 숫자도 같이 읽어야 해. NVIDIA 공식 사양은 RTX PRO 5000 Blackwell을 48GB 또는 72GB GDDR7 ECC, 1,344 GB/sec 메모리 대역폭, 300 W 최대 전력으로 적어. TechPowerUp GPU Database는 48GB GDDR7, 384-bit 메모리 버스, 약 1.34 TB/s 대역폭으로 같은 급의 숫자를 보여 줘. 이 숫자는 캐시를 담고 읽는 조건이지, 캐시 저장 형식 플래그 하나로 얻는 성능값은 아니야.
BF16 KV와 어디서 갈리나
BF16 KV는 캐시를 BF16으로 남기는 운영 개념이고, 이 항목의 CLI 표기는 vLLM에서 그 개념을 지정하는 방법이야. 글이나 로그에서 BF16 KV라고만 나오면 어떤 런타임인지 모를 수 있지만, 이 플래그가 보이면 최소한 vLLM 실행 인자라는 단서가 생겨. 다만 vLLM 문서의 호환성 제한 때문에, “개념상 BF16 KV가 가능하다”와 “이 모델에서 이 플래그가 유효하다”는 같은 말이 아니야.
FP8 KV와 비교하면 실제로 줄이는 대상이 달라. FP8 KV는 캐시 저장량과 출력 생성 중 메모리를 읽는 부담을 줄이고, BF16 KV는 캐시 값을 16비트로 남겨 정밀도 손실 가능성을 낮춘다. 짧은 챗봇이나 동시 요청이 많은 서버에서는 FP8 KV가 더 실용적일 수 있고, 긴 코딩 에이전트나 긴 문서 분석처럼 앞 문맥의 작은 차이가 뒤 답변에 계속 영향을 주는 작업에서는 BF16 KV를 기준선으로 삼을 만해.
또 --kv-cache-memory-bytes와도 역할이 달라. 그 옵션은 KV 캐시에 얼마만큼의 메모리를 쓸지 더 직접 지정하고, bfloat16 캐시 값은 그 메모리 안에 값을 어떤 형식으로 저장할지 정해. 한쪽은 예산 크기, 다른 한쪽은 저장 형식에 가깝다.
실무 확인 기준
이 플래그가 포함된 벤치마크를 보면 아래 항목을 같은 표에 넣어야 해.
- vLLM 버전과 모델이 bfloat16 캐시 저장 형식을 허용하는지
- 모델 가중치 형식과 KV 캐시 저장 형식
- 모델 길이 설정, 실제 프롬프트 토큰 수, 출력 토큰 예산
- 첫 토큰 전 입력 처리 시간, 출력 생성 속도, 최대 GPU VRAM
- 어텐션 계산 경로, 프리픽스 캐싱, 다중 토큰 예측(MTP) 설정
- 같은 프롬프트 묶음에서 BF16 KV와 FP8 KV의 품질 회귀 비교
이 플래그는 좋은 장문맥 신호가 될 수 있어. 대신 메모리를 아끼는 플래그는 아니야. 가중치를 FP8로 줄인 뒤에도 캐시를 BF16으로 남기면 200K 근처 문맥에서 VRAM이 빠르게 찰 수 있으니, 서버 실행 명령과 로그, VRAM 표를 같이 봐야 해.