본문으로 건너뛰기
페이지 목차
이 페이지에서 검색

로컬 LLM

이 페이지에 묻기

로컬 LLM · 현재 차시와 목차 본문에서만 찾아 답합니다. 답을 지어내지 않고 해당하는 대목을 그대로 보여 주며, 여기에 없으면 없다고 알려 드립니다.

생성형 AI가 아니라 이 페이지 본문을 찾아 그대로 보여 주는 방식입니다. 외부로 나가는 요청이 없습니다.

LOCAL · LLM

로컬 LLM

생성 수정

로컬 모델 실행과 GPU·메모리 이해부터 서빙·RAG·도구 호출·업무형 앱 구현까지 차례로 살펴봅니다.

42개 문서 · 2일차 · 14 / 42

13차시 · LLM 추론 파라미터 최적화

지도 위치 : 2일차 · ③추론 엔진의 설정 손잡이 | 이전: 12차시 GGUF와 경량 LLM | 다음: 14차시 LLM 추론 성능 측정 키워드 : Context Length, Batch Size, KV Cache, Sampling Parameter, GPU Memory 설정

이 차시를 다 읽으면

  1. 추론 파라미터를 품질 파라미터 ↔ 자원 파라미터 두 무리로 가를 수 있다.
  2. 각 자원 파라미터가 9차시 VRAM 예산식의 어느 항 을 건드리는지 표로 말할 수 있다.
  3. 같은 손잡이가 Ollama · llama.cpp · vLLM · OpenAI API에서 어떤 이름으로 불리는지 대응표에서 찾을 수 있다.
  4. 문의봇의 업무별(분류 · 추출 · 요약 · 초안) 시작값 을 정하고, 그것이 "정답"이 아니라 "출발점"인 이유를 말할 수 있다.
  5. 파라미터를 바꿀 때 한 번에 하나만 바꿔야 하는 이유를 말할 수 있다.

0. 이 차시의 판별 축

#축왼쪽 (0)오른쪽 (1)이 축으로 갈리는 것큰 축 (README 5장)
1⭐ 무엇을 바꾸는가출력의 내용 (품질 파라미터)메모리 · 속도 (자원 파라미터)temperature · top_p ↔ num_ctx · 병렬 수 · KV 타입— (이 차시에서 세우는 축)
2누가 값을 정하는가학습이 정함 (모델 파라미터)사람이 실행 전에 정함 (추론 파라미터)8B의 가중치 ↔ 이 차시의 모든 손잡이누가 값을 정하는가 (파생 축)
3어디에 거는가요청마다 (options)서버 전체에 (환경변수 · 기동 옵션)num_ctx ↔ OLLAMA_NUM_PARALLEL— (이 차시에서 세우는 축)
4결정론 ↔ 확률론temperature 0temperature > 0분류 · 추출 ↔ 초안결정론 ↔ 확률론 (파생 축)

앞에서 이어집니다 — README 6장의 번역어 함정에서 "파라미터"는 세 가지였습니다. 이 차시는 그중 ② 추론 파라미터 만 다룹니다. 6차시에서 temperature · top_p를 품질의 눈 으로 만졌다면, 이번에는 같은 목록에 섞여 있던 자원 손잡이들을 분리 해 9차시 예산식에 연결합니다.


1. ⭐ 두 무리로 가르기

엔진 문서의 파라미터 목록은 한 줄로 쭉 나열되어 있어서 다 같은 종류처럼 보입니다. 0절 축 1로 가르면 이렇게 나뉩니다.

품질 파라미터 — [추론 파라미터]인데, [ 다음 토큰을 고르는 방식과 생성의 끝을 정해 출력 내용을 바꾼다 ]는 점에서 자원 파라미터와 구별된다.

자원 파라미터 — [추론 파라미터]인데, [ 메모리를 얼마나 잡고 몇 개를 함께 계산할지 정해 VRAM과 속도를 바꾼다 ]는 점에서 품질 파라미터와 구별된다.

무리파라미터바꾸면 달라지는 것걸리는 곳 (0절 축 3)
품질temperature, top_p, top_k, repeat_penalty답의 다양성 · 반복요청마다
품질num_predict / max_tokens답의 최대 길이 (잘림)요청마다
품질seed같은 설정에서 재현 가능성요청마다
품질stop생성을 멈출 문자열요청마다
자원num_ctx / max-model-len (컨텍스트 길이)KV 캐시 크기 , 긴 입력 잘림 여부요청마다 또는 서버
자원num_parallel / max-num-seqs (동시 요청 수)KV 캐시 배수 , 처리량서버
자원batch (num_batch / max-num-batched-tokens)Prefill 속도, 활성값 메모리서버
자원KV 캐시 타입 (f16 / q8_0 / fp8)KV 캐시 바이트서버
자원GPU 메모리 비율 (vLLM)엔진이 미리 잡는 전체 예산서버

⚠️ 경계에 걸친 것이 하나 있습니다. num_predict 는 품질(잘림)이지만, 길게 생성할수록 KV 캐시가 자라고 시간이 늘어나 자원에도 영향 을 줍니다. 그래서 "넉넉히 4096"이 아니라 업무에 맞게 짧게 잡습니다(4절).

1.1 품질 파라미터 — 6차시 회수

6차시에서 다룬 내용이라 한 줄씩만 정리합니다.

파라미터한 줄문의봇에서
temperature확률 분포를 뾰족하게(0) ↔ 평평하게(↑)분류는 0, 초안은 약간 ↑
top_p / top_k후보를 상위 몇 %/몇 개로 자름대개 모델 카드 권장값 유지
repeat_penalty이미 나온 토큰에 벌점같은 문장 반복이 보일 때만 조금 ↑
seed난수 고정평가 · 측정 때 고정 (14차시)
stop이 문자열이 나오면 멈춤분류 답 뒤 군더더기 방지

⚠️ 반례 — 품질 파라미터는 VRAM을 거의 바꾸지 않습니다. "temperature를 낮췄더니 메모리가 줄었다"는 일어나지 않습니다. 메모리 문제가 생기면 2절의 손잡이를 봅니다.


2. ⭐ 자원 파라미터 ↔ VRAM 예산식

9차시 3절의 예산식입니다.

필요한 VRAM ≈ 가중치  +  KV 캐시(토큰당 크기 × 컨텍스트 × 동시 요청)  +  나머지(활성값 · CUDA 컨텍스트 …)
자원 파라미터예산식의 어느 항올리면내리면
컨텍스트 길이KV 캐시의 × 컨텍스트긴 문의 메일을 받을 수 있음, 메모리 ↑⚠️ 긴 입력이 조용히 잘림
동시 요청 수KV 캐시의 × 동시 요청처리량 ↑, 메모리 ↑, 한 건 지연은 늘 수 있음줄 서서 기다림
KV 캐시 타입KV 캐시의 토큰당 크기(바이트)(f16) 기준(q8_0 · fp8) KV 약 절반, 품질 소폭 손실 가능
batch 크기나머지 (활성값)긴 입력의 Prefill이 빨라질 수 있음, 순간 메모리 ↑Prefill 느려짐
GPU 메모리 비율엔진이 쓰는 전체 예산의 상한KV 캐시 자리 ↑같은 GPU의 다른 프로세스에 자리 양보
(참고) 양자화가중치—10~12차시

⭐ 이 표 하나로 "메모리가 부족하다"는 증상을 어느 손잡이로 풀지 고를 수 있습니다. 9차시 3.1의 문의봇 계산(FP16, 8K, 약 5명)을 예로 들면 다음 조합이 가능합니다.

조합계산 방향 (계산값, 측정 아님)
KV 캐시를 q8_0으로토큰당 144KB → 약 72KB. 같은 6GB에 약 10개
컨텍스트를 8K → 4K로요청당 1.1GB → 0.56GB. 단, 긴 메일이 잘림 → 평가셋의 긴 메일로 확인 필수
가중치를 Q8로16GB → 약 8.5GB. KV에 쓸 자리 약 14GB (24 − 8.5 − 1.5)

2.1 ⚠️ "배치"라는 단어의 두 뜻

README 6장의 번역어 함정입니다. 이 차시에서는 같은 단어가 두 가지로 쓰입니다.

한 요청 안의 배치여러 요청의 배치
무엇을 묶나긴 입력의 토큰들 을 몇 개씩 묶어 Prefill할지여러 사람의 요청 을 GPU 한 번에 같이 계산
이름 예Ollama num_batch, llama.cpp -bvLLM --max-num-seqs, Ollama OLLAMA_NUM_PARALLEL
영향TTFT, 순간 메모리처리량, KV 캐시 총량

vLLM의 --max-num-batched-tokens는 한 스텝에 처리할 토큰 총량 이라 두 뜻에 걸쳐 있습니다. 21차시 연속 배칭에서 정확히 봅니다.


3. 엔진별 이름 대응표

같은 손잡이가 엔진마다 다른 이름입니다. ⚠️ 이름과 기본값은 버전에 따라 바뀌니 공식 문서로 확인합니다.

3.1 품질 파라미터

손잡이Ollama (options / Modelfile)llama.cppvLLM (SamplingParams)OpenAI 호환 API
온도temperature--temptemperaturetemperature
상위 확률top_p--top-ptop_ptop_p
상위 개수top_k--top-ktop_k(표준에 없음, 엔진별 확장)
반복 벌점repeat_penalty--repeat-penaltyrepetition_penalty(frequency_penalty · presence_penalty는 다른 방식 )
최대 생성num_predict-nmax_tokensmax_tokens
시드seed--seedseedseed
멈춤stop(요청 시 지정)stopstop

3.2 자원 파라미터

손잡이Ollamallama.cppvLLM (서버 옵션)
컨텍스트 길이num_ctx (요청 options 또는 Modelfile PARAMETER)-c--max-model-len
동시 요청 수환경변수 OLLAMA_NUM_PARALLEL-np (llama-server)--max-num-seqs
KV 캐시 타입환경변수 OLLAMA_KV_CACHE_TYPE=q8_0 + OLLAMA_FLASH_ATTENTION=1-ctk · -ctv (+ 플래시 어텐션 옵션)--kv-cache-dtype fp8
batchnum_batch-b--max-num-batched-tokens
GPU 메모리(자동)-ngl (층 단위, 12차시)--gpu-memory-utilization 0.9

앞으로 다시 만납니다 — vLLM 열은 19차시(서버 구축)에서 처음 켜고, 23차시(성능 최적화)에서 이 표의 손잡이를 하나씩 돌립니다.

3.3 Ollama 쪽에서 조심할 것

systemd — [리눅스의 서비스 관리자]인데, [ 프로그램을 백그라운드 서비스로 상시 실행하고, 꺼지면 다시 띄우고, 부팅 때 자동으로 켠다 ]는 점에서 사람이 터미널에서 직접 실행하는 방식과 구별된다. 리눅스에 Ollama를 설치하면 대개 ollama라는 systemd 서비스로 등록됩니다. 서비스는 사람이 연 터미널(셸)과 따로 돌기 때문에, 셸에서 정한 환경변수를 보지 못합니다.

설정주의
num_ctx⚠️ 기본값이 모델 최대치보다 훨씬 작을 수 있음 (버전에 따라 다름). 긴 문의가 조용히 잘림 (2차시 3절). 요청마다 또는 Modelfile에 명시
OLLAMA_NUM_PARALLEL병렬 수만큼 KV 자리를 더 잡을 수 있음 → ollama ps SIZE가 커지고 CPU 분할 이 생기면 줄임 (12차시 4.4)
OLLAMA_KV_CACHE_TYPE플래시 어텐션이 켜져 있어야 적용. 둘을 같이 설정
환경변수 전반systemd 서비스라면 systemctl edit ollama로 Environment= 추가 후 재시작. 셸에서 export만 하면 서비스에는 안 먹음
# systemctl edit ollama 로 여는 파일
[Service]
Environment="OLLAMA_NUM_PARALLEL=4"
Environment="OLLAMA_FLASH_ATTENTION=1"
Environment="OLLAMA_KV_CACHE_TYPE=q8_0"

🔍 읽는 포인트 : 세 줄 모두 서버 전체 에 걸리는 자원 파라미터입니다(0절 축 3). 품질 파라미터는 여기에 없습니다.


4. 업무별 시작값 — 문의봇

⚠️ 아래는 출발점 입니다. 정답이 아니라 "여기서 시작해 평가셋으로 조정할 값"입니다. 먼저 모델 카드의 권장 샘플링 값 을 확인하세요. Qwen3처럼 생각 모드 여부에 따라 권장값을 따로 적어 둔 모델도 있고, 생각 모드에서 온도 0(greedy)을 권하지 않는 경우도 있습니다(모델 카드 확인).

업무temperaturenum_predict그 밖에근거
분류0짧게 (수십 토큰)stop, 형식 강제 (29차시)같은 문의 → 같은 분류여야 함 (결정론)
정보 추출0필드 수에 맞게JSON 스키마 (29차시)주문번호에 "창의성"은 필요 없음
요약0 ~ 0.3요약 길이 규칙 + 여유사실 보존 우선
답변 초안0.5 ~ 0.7초안 길이 + 여유top_p는 모델 카드 값표현이 약간 다양해도 됨. 사람 검토 전제
(공통 자원)——num_ctx는 평가셋에서 가장 긴 메일 토큰 수 + 출력 + 여유2차시 5절 실습에서 잰 토큰 수

💡 컨텍스트 길이를 정하는 순서: ① 평가셋 메일의 토큰 수 분포를 잰다 → ② 상위 몇 %까지 받을지 정한다 → ③ 시스템 프롬프트 + 그 길이 + num_predict + 여유 → ④ 9차시 예산식에 넣어 동시 요청 수가 나오는지 본다. "넉넉히 32K"는 예산식을 무시한 선택 입니다.


5. ⭐ 한 번에 하나만 바꾸기

❌⭕
"temperature 0.2, num_ctx 16384, KV q8_0, 병렬 4로 바꿨더니 좋아졌습니다""기준 → KV q8_0 만 바꿈 → 평가셋 · 메모리 · 속도 기록 → 다음 하나"
무엇 덕분인지, 무엇이 품질을 깎았는지 모름손잡이마다 효과와 대가가 따로 기록 됨

AI에게 맡길 때도 마찬가지입니다(README 9장). AI가 "최적화했습니다"라고 말해도, 판정은 측정 숫자와 평가셋 이 합니다. 한 번에 하나만 바꾸게 해야 그 숫자가 어느 손잡이의 효과인지 읽을 수 있습니다. 변경 기록은 14차시 측정표에 조건 한 줄 로 남깁니다.

5.1 비유 (기억 보조)

품질 파라미터는 요리사의 간 맞추기 , 자원 파라미터는 주방의 화구 수와 냉장고 크기 입니다. 간을 바꿔도 주방이 넓어지지 않고, 화구를 늘려도 음식 맛이 좋아지지 않습니다. 둘을 동시에 바꾸면 맛이 변한 이유를 모릅니다.


6. 실습 — 맡기고 검수하기

지시

목표: 문의봇용 Ollama 모델의 자원 파라미터를 하나씩 바꾸며 메모리 변화를 기록하고, 업무별 품질 파라미터 시작값을 Modelfile로 고정한다.
맥락: ollama.com의 Ollama 문서(Modelfile 파라미터, FAQ의 환경변수)와 Qwen3-8B 모델 카드의 권장 샘플링 값을 먼저 인용해.
      설치된 Ollama 버전과 기본 num_ctx 값을 확인해서 보고해.
작업:
 1. 기준: qwen3:8b, num_ctx 4096, 병렬 1, KV f16. 
 2. 한 번에 하나만 바꾸기: (a) num_ctx 8192 (b) num_ctx 16384 (c) OLLAMA_KV_CACHE_TYPE=q8_0 + FLASH_ATTENTION=1 (d) OLLAMA_NUM_PARALLEL=4
    환경변수는 systemctl edit ollama로 설정하고 재시작(실행 전 변경 내용을 나에게 보여줘).
 3. 각 단계에서 같은 프롬프트로 한 번 요청 후 ollama ps, nvidia-smi 기록.
 4. 분류용/초안용 Modelfile 두 개를 만들어 ollama create (temperature, num_predict, num_ctx 포함).
보고 형식:
| 단계 | 바꾼 것 하나 | ollama ps SIZE | PROCESSOR | nvidia-smi used | 9차시 계산과 비교 |
추측하지 말고 실행 명령과 출력 원문을 붙여.

받을 증거

  • Ollama 버전, 기본 num_ctx 확인 출력
  • 단계별 ollama ps, nvidia-smi 출력 원문
  • systemctl edit 내용, 두 Modelfile 원문, ollama show --modelfile 출력

내가 직접 볼 것

볼 것이걸로 아는 것
단계마다 바꾼 것이 정말 하나인가5절 — 둘 이상이면 그 행은 해석 불가
num_ctx를 두 배로 할 때 SIZE 증가량 ≈ 9차시 계산의 KV 증가량인가예산식의 둘째 항이 실제로 움직임
q8_0 적용 후 KV 몫이 대략 절반 으로 줄었는가환경변수가 서비스에 실제로 적용됐는가 (FLASH_ATTENTION 누락 시 안 줄 수 있음)
병렬 4에서 PROCESSOR가 CPU 분할로 바뀌는가이 GPU에서 감당할 동시 수의 한계 → 3일차 vLLM로 이어지는 이유
분류용 Modelfile의 temperature가 0인가업무와 설정이 맞는가

부록 A. 스스로 확인하기

#질문답이 있는 곳
1품질 파라미터와 자원 파라미터를 유와 종차로 가르면?1
2num_predict가 두 무리의 경계에 걸치는 이유는?1
3temperature를 바꾸면 VRAM이 바뀌는가?1.1
4컨텍스트 · 동시 요청 · KV 타입 · batch는 예산식의 어느 항인가?2
5"배치"의 두 뜻은?2.1
6Ollama의 num_ctx, OLLAMA_NUM_PARALLEL에 해당하는 vLLM 이름은?3.2
7OLLAMA_KV_CACHE_TYPE이 적용되지 않는 흔한 이유 두 가지는?3.3
8분류와 답변 초안의 temperature 시작값과 그 근거는?4
9컨텍스트 길이를 정하는 네 단계는?4
10파라미터를 한 번에 하나만 바꿔야 하는 이유는?5

부록 B. 자주 하는 실수

실수바로잡기
메모리가 부족해서 temperature를 조정❌ 품질 파라미터는 VRAM과 무관. 자원 파라미터 를 봄
"num_ctx는 넉넉히 32K"❌ KV 캐시 × 동시 요청. 평가셋의 최장 메일 기준 으로
셸에서 export OLLAMA_NUM_PARALLEL=4 후 효과 없다고 판단⚠️ systemd 서비스는 systemctl edit ollama로 설정
KV q8_0만 설정하고 플래시 어텐션은 안 켬⚠️ 둘 다 필요
여러 손잡이를 한꺼번에 바꿈❌ 무엇이 효과였는지 모름. 하나씩
4절 시작값을 정답으로 고정⚠️ 출발점일 뿐. 모델 카드 권장값 + 평가셋 으로 조정

부록 C. NotebookLM 복습 프롬프트

이 13차시 노트만 근거로 6문제를 내줘. 비전공자 기준으로.
"품질 파라미터 vs 자원 파라미터", "각 자원 파라미터가 VRAM 예산식의 어느 항인가", "Ollama와 vLLM 이름 대응", "한 번에 하나만 바꾸기"는 반드시 포함해줘.
답은 내가 답한 다음에 채점하고, 틀린 이유를 노트의 절 번호를 근거로 설명해줘.