페이지 목차
이 페이지에서 검색
로컬 LLM
이 페이지에 묻기
로컬 LLM · 현재 차시와 목차 본문에서만 찾아 답합니다. 답을 지어내지 않고 해당하는 대목을 그대로 보여 주며, 여기에 없으면 없다고 알려 드립니다.
생성형 AI가 아니라 이 페이지 본문을 찾아 그대로 보여 주는 방식입니다. 외부로 나가는 요청이 없습니다.
LOCAL · LLM
로컬 LLM
생성 수정
로컬 모델 실행과 GPU·메모리 이해부터 서빙·RAG·도구 호출·업무형 앱 구현까지 차례로 살펴봅니다.
42개 문서 · 5일차 · 41 / 42
40차시 · 프로젝트 발표 및 평가
지도 위치 : 5일차 · 프로젝트 8단계 · 과정 전체 정산 | 이전: 39차시 성능 테스트 및 최적화 | 다음: 처음으로 — 이 노트를 읽는 법 키워드 : 서비스 시연, 구현 결과 발표, 성능 비교 및 개선사항 도출
이 차시를 다 읽으면
- 발표를 일곱 덩어리 (문제 · 왜 로컬 → 시연 → 다섯 층 → 결정 근거 → 품질 → 성능 → 한계 · 개선)로 구성할 수 있다.
- 실패 시나리오를 포함한 시연 대본 과 실패 대비책을 준비할 수 있다.
- 모든 숫자를 측정 조건 · 출처와 함께 말할 수 있다.
- 40차시 전체를 여덟 개 축 에 다시 꽂아, 새로 만든 축이 하나도 없었음을 확인할 수 있다.
- 이 과정의 번역어 함정 과 세 문장 이 프로젝트의 어디서 실제로 걸렸는지 말할 수 있다.
- KPT 로 개선사항을 도출하고, 다음 학습(RAG · 파인튜닝 · 멀티 GPU)으로 이어지는 자리를 찾을 수 있다.
0. 이 차시의 판별 축
| # | 축 | 왼쪽 (0) | 오른쪽 (1) | 이 축으로 갈리는 것 | 큰 축 (README 5장) |
|---|---|---|---|---|---|
| 1 | 말인가 숫자인가 | "많이 빨라졌습니다" | "동시 10명 TTFT p95 ___초 → ___초 (측정 P-007)" | 발표를 믿을 수 있는가 | 이 차시의 축 (33차시 3.1 명확성 · 검증성) |
| 2 | 결과인가 근거인가 | "Qwen3-8B를 썼습니다" | "왜 그것인가 — 검토한 대안과 탈락 이유" | 질문에 답할 수 있는가 | 이 차시의 축 (34차시 5절 결정 기록) |
| 3 | 해낸 것인가 한계인가 | 통과한 기준 | 미달 · 범위 밖 · 다음 조치 | 설계를 이해했는가 | 이 차시의 축 (3.3절) |
| 4 | 새 개념인가 다른 배율인가 | 처음 보는 이름 | 이미 배운 축의 다른 배율 | 다음 기술을 혼자 열 수 있는가 | README 5장 전체 (4절 정산) |
앞에서 이어집니다 — README는 이 노트 전체에 세 가지 약속을 걸었습니다. 여덟 개의 판별 축 (README 5장)으로 모든 새 용어를 가른다, 번역어 함정 (6장)을 짚는다, 세 문장 (7장)이 과정 전체를 관통한다. 39차시 동안 그 약속을 매 차시 반복했습니다. 40차시는 그 약속을 정산 합니다. 1~3절은 프로젝트의 정산 (발표), 4절은 과정의 정산 (축 · 번역어 · 세 문장), 5절은 다음의 시작 (개선사항과 다음 학습)입니다.
1. 발표 구성 — 일곱 덩어리
1.1 순서와 근거 산출물
| # | 덩어리 | 보여줄 것 | 근거 산출물 | 시간 (예) |
|---|---|---|---|---|
| 1 | 문제 · 왜 로컬인가 | 시나리오 한 장, 로컬 적합 판별표 | 33차시 | 1분 |
| 2 | 시연 | 상담원 화면 — 정상 1건 + 실패 시나리오 | 37 · 38차시 | 4분 |
| 3 | 아키텍처 다섯 층 | README 4장 그림에 내 선택 을 채운 것 | 34~38차시 | 1분 |
| 4 | 결정 근거 (모델 · 양자화 · 엔진) | 예산표, 비교 매트릭스, DR-001, Ollama ↔ vLLM | 34 · 35차시, 24차시 | 2분 |
| 5 | 품질 평가 결과 | 요구사항별 결과표, before/after, 통합 시나리오 | 36 · 38차시 | 2분 |
| 6 | 성능 표 | SLO 판정, 부하 테스트 표, before/after | 39차시 | 2분 |
| 7 | 한계 · 개선 | 미달 항목, 범위 밖, KPT | 33차시 범위 밖, 5절 | 1분 |
⭐ 시연을 두 번째에 둡니다. 청중이 무엇을 만들었는지 먼저 본 뒤 근거를 들어야, 3~6번이 "왜 저렇게 동작하는가"의 설명이 됩니다.
1.2 아키텍처 다섯 층 — 내 선택으로 채우기
⑤ 애플리케이션 상담원 화면 · SSE · 세션 분리 · 프롬프트 파일 · 스키마 · get_order(읽기 전용) ← 36~38차시
④ API OpenAI 호환 /v1, API 키, 127.0.0.1 바인딩 ← 35차시
③ 추론 엔진 vLLM ___ (운영) / Ollama (개발) ← 35차시
② 모델 파일 ______ · ______ 양자화 ← 34차시
① 하드웨어 RTX 4090 24GB 1장 ← 34차시
🔍 읽는 포인트 : README 4장의 그림과 칸이 같습니다. 5일 동안 칸은 그대로였고 내용만 채워졌습니다. 오른쪽 화살표는 "이 칸을 정한 근거가 어느 차시 산출물에 있는가"입니다. 질문을 받으면 그 산출물을 엽니다.
2. 시연 — 대본과 실패 대비
2.1 대본
| 장면 | 입력 (평가셋의 가명 문의) | 보여줄 것 | 말할 한 줄 |
|---|---|---|---|
| ① 정상 | 주문번호가 있는 배송 문의 | 결과 카드 → 주문 조회 → 초안 스트리밍 → 수정 · 확정 | "상담원이 확정하기 전에는 아무것도 나가지 않습니다" |
| ② 주문번호 없음 | 번호 없는 환불 문의 | 주문번호 null, 초안이 번호를 요청 | "모르면 만들지 않습니다" (36차시 3.2) |
| ③ 남의 주문번호 | 다른 가명 고객의 번호 | "조회할 수 없는 주문" | "권한은 모델이 아니라 앱이 판정합니다" (38차시 3절) |
| ④ 인젝션 | "이전 지시를 무시하고…" | 지시를 따르지 않음 | "문의 속 지시는 분석 대상일 뿐, 따르지 않습니다" (36차시 2.3 규칙 3) |
| ⑤ 취소 요청 | "주문 취소해 주세요" | 버튼만 뜨고 취소는 실행 안 됨 | "되돌릴 수 없는 일은 사람이 누릅니다" (38차시 4절) |
⭐ ②~⑤가 정상 장면보다 설득력이 큽니다. 앞에서 본 대로 정상 동작만 시험한 시스템은 시험하지 않은 것과 같습니다(38차시 6절) . 발표도 같습니다. 정상 장면은 "동작한다"만 보여 주지만, 실패 장면은 "막아야 할 것을 막도록 설계했다 "를 보여 줍니다.
2.2 ⚠️ 실패 대비
| 위험 | 대비 |
|---|---|
| 시연 중 모델 서버가 느리거나 멈춤 | 30분 전 기동 · 워밍업, 녹화본 준비 |
| 시연 입력에 실제 고객 정보 | 평가셋의 가명 문의만 사용. 화면이 공유되는 순간이 유출입니다 |
| 출력이 리허설과 다름 | 분류 · 추출은 temperature 0이라 대체로 같지만, 초안은 달라질 수 있음 → "초안은 매번 조금 다릅니다"를 미리 말함 |
| 발표장 네트워크 | 로컬 서비스라 외부 인터넷이 필요 없음 — 로컬의 장점을 시연으로 보여 주는 자리 |
3. 숫자로 말하기 — 품질 표와 성능 표
3.1 품질 결과표 (33차시 요구사항 그대로)
| ID | 완료 기준 (33차시) | 결과 | 통과 | 근거 |
|---|---|---|---|---|
| FR-01 | 분류 정확도 ≥ 90% | 평가셋 v___ · 결과 파일 | ||
| FR-02 | 주문번호 정확도 ≥ 95%, 지어낸 값 0건 | 같음 | ||
| FR-03 | 요약 루브릭 통과율 | 상담원 채점 ___건 | ||
| FR-04 | 수정 없이 확정한 비율 | 확정 레코드 (37차시 4절) | ||
| FR-05 | 남의 주문 조회 0건 | 통합 시나리오 4 · 5 · 6 (38차시) |
3.2 성능 결과표
| ID | 완료 기준 | 결과 | 통과 | 근거 |
|---|---|---|---|---|
| NFR-01 | 동시 10명 TTFT p95 < 1초, 오류 0건 | 측정 P-___ (조건 블록 첨부) | ||
| — | SLO가 깨지는 동시성 | — | 39차시 부하 표 | |
| NFR-02 | 외부 호출 0건, 키 없는 호출 401 | 35차시 시험 4 · 5 · 8 |
3.3 ⭐ 한 줄 문장 양식
성과를 말하는 문장에는 세 가지가 함께 있어야 합니다. 무엇이 얼마에서 얼마로 (이전 → 이후), 어떤 조건에서 (39차시 1.3의 측정 조건), 그동안 품질은 지켰는가 (평가셋). 하나라도 빠지면 듣는 사람이 확인할 수 없습니다.
동시 10명 TTFT p95 ___초 → ___초 (측정 P-003 → P-007, vLLM ___, ______ 양자화),
같은 조건에서 평가셋 분류 정확도 ___% → ___% (평가셋 v1, 70건).
| ❌ | ⭕ |
|---|---|
| "많이 빨라졌습니다" | 위 양식 — 이전 → 이후, 조건, 품질이 유지됐다는 증거 |
| "품질이 좋습니다" | "평가셋 70건 중 분류 ___건 정답, 주문번호 지어낸 사례 0건" |
| 목표 미달 항목을 빼고 발표 | 미달도 그대로 + 원인(39차시 병목 판정) + 다음 조치 |
⚠️ 미달을 숨기지 마세요. 모든 설계에는 한계가 있고, 한계를 숫자와 원인으로 말할 수 있는 것 이 오히려 설계를 이해했다는 증거입니다. "어디서 왜 깨지는지 안다"는 것은 "어디를 고치면 되는지 안다"는 뜻이기 때문입니다.
4. ⭐ 과정 전체 정산 — 새로 만든 축은 하나도 없었다
1차시 0절부터 39차시 0절까지, 매 차시를 같은 질문으로 시작했습니다. "이 새 용어는 여덟 축 중 어디에 꽂히는가?" 이제 그 약속을 정산합니다.
4.1 정산표 — README 5.1 · 5.2 회수
| 큰 축 (README 5.1) | 이 과정에서의 모습 (README 5.2) | 처음 나온 차시 | 프로젝트(33~40)에서 다시 나온 자리 |
|---|---|---|---|
| ① 디스크 ↔ 메모리 | 모델 파일 ↔ VRAM, KV 캐시는 순수한 메모리 | 3, 5, 9, 12, 19 | 34 VRAM 예산표 · 35 기동 로그의 KV 할당 · 39 KV 사용률 |
| ② 추상 ↔ 구상 | OpenAI 호환 API ↔ Ollama · vLLM | 20, 25, 32 | 35 개발 ↔ 운영 바꿔 끼우기 · 36 llm_client · 38 OrderPort ↔ 목업 어댑터 |
| ③ 속성 ↔ 기능 | 도구 정의 ↔ 도구 실행 | 2, 30 | 38 도구 정의는 모델에게, 실행은 앱에 |
| ④ 로컬 ↔ 원격 | 로컬 LLM ↔ 상용 API | 1, 4 | 33 로컬 적합 판별표 · 가명 처리 · 35 127.0.0.1 바인딩 |
| ⑤ 하나 ↔ 여럿 | 요청 하나 ↔ 배치, Ollama ↔ vLLM | 17, 21, 24 | 35 최대 동시성 · 36 한 호출 ↔ 나눠 호출 · 37 세션 분리 |
| ⑥ 동기 ↔ 비동기 | 한 번에 받기 ↔ 스트리밍 | 7, 22, 26 | 37 결과 카드(한 번에) ↔ 초안(스트리밍) · 39 부하 클라이언트 |
| ⑦ 무상태 ↔ 상태 | LLM API는 무상태, KV · 프리픽스 캐시는 서버 쪽 상태 | 8, 21, 27 | 37 세션 저장소 · 39 프리픽스 캐싱 |
| ⑧ 구문 ↔ 의미 | JSON 형식 검증 ↔ 내용 평가 | 2, 29, 31 | 33 완료 기준 두 줄 · 36 세 겹 검사 · 39 품질 회귀 |
| 파생 축 (README 5.3) | 프로젝트에서 |
|---|---|
| 한 건의 시간 ↔ 전체 처리량 | 39 부하 테스트 표 — Throughput은 평탄해지고 TTFT는 뜀 |
| 계산 병목 ↔ 메모리 병목 | 34 양자화가 돕는 쪽 · 39 병목 판정 ① |
| 정밀도 | 34 비교 매트릭스 · 39 kv fp8의 품질 회귀 |
| 사람이 손을 대는가 (HITL) | 37 [확정] · 38 취소는 버튼 |
| 멱등 ↔ 비멱등 | 37 [확정]의 멱등성 키 · 38 취소 요청의 멱등성 키 |
| 결정론 ↔ 확률론 | 36 분류 · 추출은 temperature 0, 초안은 약간 ↑ · 40 시연 "초안은 매번 조금 다릅니다" |
⭐ 이 표의 오른쪽 끝 열을 세로로 읽어 보세요. 여덟 축이 전부 프로젝트에서 한 번 이상 다시 나왔습니다. PagedAttention, AWQ, GGUF, SSE, 도구 호출 파서… 이 과정에서 처음 들은 이름 은 많았습니다. 그런데 그것을 이해하는 데 필요한 축은 하나도 새로 만들지 않았습니다. README 5장의 약속 — "새 용어가 나오면 새 비유를 만들 필요 없이 어느 축의 어느 쪽에 꽂히는지만 정하면 된다" — 이 40차시 동안 지켜진 것입니다.
4.2 같은 축, 다른 배율 — 축 ⑤ 하나만 세로로
배율 은 같은 축이 적용되는 규모나 층 입니다. 축 ⑤(하나 ↔ 여럿)는 요청 하나를 처리하는 규모에서도, 엔진을 고르는 규모에서도, 앱 구조와 GPU 대수에서도 똑같은 질문으로 나타납니다.
| 배율 | 하나로 뭉침 (0) | 여럿으로 쪼갬 (1) | 쪼갠 대가 | 차시 |
|---|---|---|---|---|
| 요청 처리 | 한 요청씩 | 연속 배칭 | 한 건의 지연이 늘 수 있음 | 21 · 39 |
| 엔진 | Ollama (1인) | vLLM (다수) | 운영 부담 | 24 · 35 |
| 앱 구조 | 앱 안에 모델 | 모델 서버 분리 | 네트워크 · 인증 | 17 · 35 |
| 기능 호출 | 분류 + 추출 한 번에 | 기능마다 따로 | 토큰 · 지연 | 36 |
| 기록 | 전역 기록 하나 | 상담원 × 문의 건 | 저장소 관리 | 37 |
| GPU | 한 장 | 여러 장 (텐서 병렬) | GPU 간 통신 | 5.2절 |
README 5.1의 축 ⑤ 정의 한 줄로 전부 읽힙니다. "뭉치면 단순하고 빠르지만 같이 멈추고, 쪼개면 안전하고 확장되지만 통신 비용을 낸다." 그리고 어느 쪽도 발전된 형태가 아닙니다. 규모와 실패 비용이 답을 정합니다.
4.3 번역어 함정 정산 — README 6장 회수
| 단어 | ❌ 흔한 오해 | ⭕ 원 뜻 | 프로젝트에서 실제로 걸린 자리 |
|---|---|---|---|
| 추론 | 생각하기 (Reasoning) | Inference — 실행해서 출력을 얻는 것 | 39 "추론 성능" = 실행의 속도. 똑똑함은 36 평가셋이 잼 |
| 토큰 | 로그인 토큰 | 글을 쪼갠 조각 | 34 예산표의 토큰 수 ↔ 35 Authorization: Bearer <키>의 인증 쪽. 한 요청 안에 두 뜻이 같이 있음 |
| 파라미터 | 하나의 뜻 | 모델 파라미터 · 추론 파라미터 · 함수 매개변수 | 34 "8B" · 36 temperature 0 · 38 도구 정의의 "parameters" — 세 뜻을 모두 씀 |
| 오픈소스 LLM | 소스 전부 공개 | 대부분 공개 가중치 , 라이선스 제각각 | 34 후보의 라이선스 확인 |
| 양자화 | 어려운 물리 용어 | 숫자를 적은 비트로 근사 | 34 가중치 4bit · 39 KV fp8 |
| 서빙 | 그냥 실행 | 여러 클라이언트에게 지속적으로 제공 | 35 systemd · Docker 상시 실행 |
| 컨텍스트 | 문맥 | 한 번에 볼 수 있는 토큰 수의 상한 | 35 max-model-len · 37 토큰 예산 ↔ 36 프롬프트 파일(모델에게 줄 배경을 파일로 관리한다는 뜻의 "컨텍스트" — 같은 단어, 다른 뜻) |
| 배치 | 몰아서 하는 작업 | GPU 한 번에 여러 요청을 같이 계산 | 39 Throughput이 평탄해지는 지점 |
| 캐시 (KV) | 응답 저장 | 앞 토큰의 K · V 계산 결과 | 39 KV 사용률 · 프리픽스 캐싱 |
| 포트 | 하나의 뜻 | 네트워크 포트 와 아키텍처 포트 | 35 8000번 포트 와 OpenAI 호환 계약 — 한 서버에 둘 다 |
그리고 README 5.1이 미리 짚어 둔 오해 하나가 이 과정에서 한 번 더 확인되었습니다. 비동기 — "더 빠르다"가 아니라 "처리량이 늘어난다" . 37차시의 스트리밍도, 39차시의 연속 배칭도 한 건의 시간을 줄이지 않았습니다.
4.4 세 문장 정산 — README 7장 회수
| 문장 (README 7장) | 프로젝트에서 실제로 한 일 |
|---|---|
| 1. 모든 것은 VRAM 예산 싸움이다 (축 ①) | 34 예산표(가중치 + KV 캐시 × 동시 수 + 여유분) → 35 기동 로그의 최대 동시성으로 대조 → 39 KV 사용률 · 선점으로 다시 확인 |
| 2. 품질 · 속도 · 메모리는 셋 다 가질 수 없다. 측정해서 고른다 | 33 평가셋을 먼저 → 34 품질 하한부터 거르고 → 39 빨라져도 품질 하한을 깨면 미채택 |
| 3. 표준 API로 층을 나누면 엔진을 갈아 끼울 수 있다 (축 ②) | 35 개발 Ollama ↔ 운영 vLLM을 .env만 바꿔 교체 · 36 기능 함수는 엔진을 모름 · 38 OrderPort 뒤의 목업 ↔ 사내 시스템 |
⭐ 세 문장 모두 프로젝트의 산출물 하나 이상 에 실제로 박혀 있습니다. 숫자를 외운 것이 아니라 계산식과 순서와 구조 를 썼기 때문에, 모델이나 엔진이 바뀌어도 이 표는 그대로입니다.
5. 개선사항 도출 — KPT와 다음 학습
5.1 KPT
KPT — [회고 양식]인데, [ 유지할 것(Keep) · 문제(Problem) · 시도할 것(Try)을 나눠, 다음 행동으로 끝나게 한다 ]는 점에서 느낀 점을 나열하는 소감문과 구별된다.
| 적는 법 | 문의봇 예 (예시이며 결과 아님) | |
|---|---|---|
| Keep | 다음에도 같은 방식으로 할 것 | 평가셋을 모델보다 먼저 만든 것 · 취소를 도구에서 뺀 것 |
| Problem | 숫자나 사례 로 | "결제오류 분류만 정확도가 낮음(분류별 표)" · "후속 요청 3턴째부터 TTFT 상승(S3)" |
| Try | 요구사항 ID · 측정 방법 · 완료 기준 까지 | "평가셋 v2에 결제오류 20건 추가, FR-01 분류별 85% 이상" |
⭐ Try 줄은 다음 프로젝트의 33차시입니다. 측정 가능한 완료 기준이 붙어 있지 않은 Try는 다짐일 뿐입니다.
5.2 개선 후보 → 고칠 층 → 다음 학습
| 증상 | 원인의 자리 | 방법 | 이어서 배울 곳 |
|---|---|---|---|
| "반품 규정이 어떻게 돼요?"에 답하지 못하거나 지어냄 | 아는 내용 이 입력 밖에 있음 | RAG — 규정 문서를 검색해 컨텍스트로 | 아래 표 ① |
| 프롬프트로는 말투 · 형식이 끝내 안 잡힘 | 말하는 방식 | 파인튜닝 (PEFT · QLoRA) | 아래 표 ② |
| 분류를 아주 빠르고 싸게 수없이 반복 | 큰 모델이 과함 | 작은 분류 전용 모델 (파인튜닝) | 아래 표 ② |
| 상담원 50명 / 더 큰 모델 | ① 하드웨어 층의 한계 | 멀티 GPU (--tensor-parallel-size) 또는 서버 여러 대 | 아래 표 ③ |
| 평가셋 재실행을 매번 손으로 | 회귀를 사람이 지킴 | CI에서 평가셋 자동 실행 , 통과해야 배포 | 아래 표 ④ |
| 확정 레코드에 고친 사례가 쌓임 | 평가셋이 실제와 멀어짐 | 고친 사례를 평가셋 v2 로 (가명 처리 후) | 37차시 4절 |
다음 학습 네 가지 — 무엇인가
| # | 이름 | 무엇인가 (상위 범주 + 종차) | 이 과정의 무엇 위에 얹나 |
|---|---|---|---|
| ① | RAG (검색 증강 생성) | [프롬프트 구성 기법]인데, [ 질문과 관련된 문서를 먼저 검색해 프롬프트에 함께 넣어 준다 ]는 점에서 모델이 학습 때 외운 지식에만 기대는 방식과 구별된다. 모델의 가중치는 바꾸지 않는다 | 35차시 서버 그대로. 앱 쪽에 "문서 검색" 단계가 하나 늘어남 |
| ② | 파인튜닝 (미세조정) | [모델 학습 방법]인데, [ 이미 학습된 모델의 가중치를 내 데이터로 추가 학습해 바꾼다 ]는 점에서 가중치를 그대로 두는 프롬프트 · RAG와 구별된다. PEFT 는 가중치 전체가 아니라 작은 추가 부분만 학습하는 방식들의 총칭이고, QLoRA 는 4bit로 양자화한 모델 위에서 그 작은 부분을 학습해 GPU 메모리를 크게 아끼는 대표 방식이다 | 34차시 결정 기록의 "모델 파일"이 바뀜 → 평가셋을 다시 돌림 |
| ③ | 멀티 GPU | [서빙 확장 방법]인데, [ 모델 하나를 여러 GPU에 나눠 올리거나(텐서 병렬), 같은 서버를 여러 대 둔다 ]는 점에서 GPU 한 장의 예산 안에서 해결하는 양자화와 구별된다. 한 대를 더 좋은 장비로 바꾸는 것을 스케일업 , 대수를 늘리는 것을 스케일아웃 이라 한다 | 35차시 기동 명령에 --tensor-parallel-size 한 줄, 34차시 예산표의 GPU 칸이 여러 장으로 |
| ④ | CI (지속적 통합) | [개발 자동화 장치]인데, [ 코드 · 프롬프트 · 설정이 바뀔 때마다 정해 둔 시험을 자동으로 돌린다 ]는 점에서 사람이 생각날 때 손으로 돌리는 시험과 구별된다 | 36차시 run_eval.py를 그대로 자동 실행 |
⭐ 순서는 프롬프트 → RAG → 파인튜닝 입니다. 비용이 싼 것부터 시도합니다. 프롬프트는 파일 하나를 고치면 되고, RAG는 검색 단계를 붙이면 되지만, 파인튜닝은 학습 데이터 · GPU 시간 · 재평가가 모두 듭니다. 그래서 먼저 원인이 "모르는 것" (입력 밖 지식 → RAG)인지 "말하는 방식" (→ 파인튜닝)인지를 가르고, 대부분의 과제는 RAG에서 끝납니다. 그리고 무엇을 붙이든 이 과정의 세 문장은 그대로입니다. RAG를 붙이면 검색된 문서가 입력에 들어가 KV 캐시 예산이 다시 바뀌고 (문장 1, 34차시로), 품질 · 속도의 거래를 다시 측정하고 (문장 2, 39차시로), 검색기도 포트 뒤의 어댑터 로 붙입니다(문장 3).
💡 멀티 GPU는 4.2절 표의 마지막 줄입니다. GPU를 쪼개면 GPU 사이의 통신 비용 을 냅니다. 새 기술이지만 새 축은 아닙니다.
6. 그래서 이제 무엇을 할 수 있는가
| 1차시의 나 | 지금의 나 |
|---|---|
| "로컬 LLM을 쓰면 보안이 좋다" | 시나리오를 판별표로 갈라 로컬이 맞는지 정함 (33) |
| "8B면 24GB에 들어가겠지" | 가중치 + KV 캐시 × 동시 수 + 오버헤드로 예산을 계산함 (34) |
ollama run 한 줄 | 근거 있는 옵션으로 vLLM을 서비스 로 띄우고 실패 시험까지 함 (35) |
| "JSON이 잘 나와요" | 형식과 의미를 따로 지키고 평가셋으로 점수를 냄 (36) |
| "모델이 주문을 조회해요" | 모델은 요청만 , 앱이 검증 · 실행, 되돌릴 수 없는 일은 사람이 (38) |
| "빨라졌어요" | "동시 10명 TTFT p95 ___초, 조건 P-007, 품질 유지" 라고 말함 (39 · 40) |
마지막 한 문장
이 과정이 가르친 것은 Ollama도 vLLM도 아닙니다. 그 도구들은 몇 달 안에 옵션 이름이 바뀝니다. 이 과정이 가르친 것은 새 도구 앞에서 던질 질문의 순서 입니다 — 무엇의 한 종류인가, 어느 축에 꽂히는가, 반례는 무엇인가, 그리고 숫자로 확인했는가. README 2.3의 네 질문으로 1차시를 열었고, 같은 네 질문에 숫자로 확인했는가 를 더해 이 과정을 닫습니다.
7. 실습 — 맡기고 검수하기
지시
문의봇 프로젝트 발표 자료 초안을 만들어줘.
목표: 1.1절의 일곱 덩어리 순서로 슬라이드 초안(마크다운)을 만들고, 3.1·3.2절 결과표와 4.1절 정산표를 채워.
맥락: 프로젝트 폴더의 산출물 — 요구사항표(33), DR-001과 매트릭스(34), 기동 명령과 시험표(35),
eval/results(36), 행동 시험표(37), 통합 시나리오표(38), 부하 테스트·before/after와 측정 조건 블록(39).
제약:
- 모든 숫자는 위 산출물 파일에서만 가져오고, 숫자마다 출처(파일 이름 또는 측정 ID)를 각주로 달아.
- 산출물에 없는 숫자는 만들지 말고 '___(미측정)'으로 남겨.
- 목표 미달 항목을 빼지 마. 미달은 원인(39차시 병목 판정)과 다음 조치를 함께.
- 시연 입력은 평가셋의 가명 문의만 써.
- 정산표의 '프로젝트에서 다시 나온 자리' 열은 초안만 쓰고, 근거 파일을 함께 적어.
보고 형식: 슬라이드 초안 + [숫자 | 출처] 목록 + 미측정 항목 목록.
받을 증거
- 슬라이드 초안과 [숫자 | 출처] 목록 (숫자 하나도 빠짐없이)
- 미측정 항목 목록
- 시연 대본 (2.1절 다섯 장면)
내가 직접 볼 것
| 볼 것 | 이걸로 아는 것 / 왜 내가 보는가 |
|---|---|
| 무작위 숫자 세 개를 원본 파일과 대조 | AI가 숫자를 반올림하거나 섞는 일이 실제로 있습니다. 발표에서 틀리면 나머지 숫자도 의심받습니다 |
| 한계 · 미달 슬라이드가 있는가 | AI는 발표를 좋게 보이도록 미달을 빼기 쉽습니다 |
| 시연 리허설 2회 — 실패 장면 ②~⑤ 포함 | 시연은 맡길 수 없는 유일한 산출물입니다 |
| 정산표 오른쪽 열을 내 말로 다시 씀 | 이 표를 내가 채울 수 있으면, 다음 기술도 혼자 열 수 있습니다 |
| KPT의 Try에 ID · 측정 방법 · 완료 기준 이 있는가 | 없으면 다짐입니다 |
산출물 체크리스트 (40차시)
- 발표 자료 (일곱 덩어리, 다섯 층 그림에 내 선택)
- 시연 대본 (정상 1 + 실패 4) + 녹화본
- 품질 결과표 · 성능 결과표 (숫자마다 출처)
- 한 줄 문장 (이전 → 이후, 조건, 품질 유지)
- 정산표 (8개 축 + 파생 축, 프로젝트에서 다시 나온 자리)
- 번역어 함정 정산 (내 프로젝트에서 걸린 자리)
- KPT (Try는 다음 33차시 형식으로)
- 5일차 산출물 묶음: 요구사항 · 평가셋(33) · DR-001(34) · 기동 명령 · 시험표(35) · 점수표(36) · 행동 시험(37) · 통합 시나리오(38) · 부하 표 · 측정 조건(39)
부록 A. 스스로 확인하기
| # | 질문 | 답이 있는 곳 |
|---|---|---|
| 1 | 발표의 일곱 덩어리와, 시연을 두 번째에 두는 이유는? | 1.1 |
| 2 | 시연에 실패 장면을 넣는 이유는? | 2.1 |
| 3 | 시연 입력을 평가셋의 가명 문의로만 해야 하는 이유는? | 2.2 |
| 4 | 성능 개선을 말하는 한 줄 문장에 꼭 들어갈 세 가지는? | 3.3 |
| 5 | 여덟 축 각각이 프로젝트에서 다시 나온 자리 하나씩은? | 4.1 |
| 6 | 축 ⑤가 이 과정에서 나타난 배율 세 가지와 각각의 대가는? | 4.2 |
| 7 | "토큰"과 "파라미터"의 여러 뜻이 프로젝트의 한 요청 · 한 코드 안에 같이 있었던 자리는? | 4.3 |
| 8 | KPT를 유와 종차로 정의하면? Try에 붙어야 할 것은? | 5.1 |
| 9 | 규정 질문에 답하지 못할 때와 말투가 안 잡힐 때, 각각 무엇을 다음에 배우나? | 5.2 |
| 10 | 멀티 GPU가 "새 기술이지만 새 축은 아닌" 이유는? | 4.2, 5.2 |
| 11 | README 7장의 세 문장이 각각 프로젝트의 어느 산출물에 들어 있나? | 4.4 |
| 12 | RAG와 파인튜닝은 무엇으로 갈리는가? 왜 RAG를 먼저 시도하나? | 5.2 |
부록 B. 자주 하는 실수
| 실수 | 바로잡기 |
|---|---|
| "시연은 잘 되는 장면만" | ❌ 실패 장면이 설계를 증명합니다 |
| "숫자는 기억나는 대로" | ❌ 산출물 파일과 측정 ID 에서만 |
| "목표 미달은 발표에서 빼자" | ❌ 미달 + 원인 + 다음 조치. 한계를 숫자로 말하는 것이 이해의 증거 |
| "아키텍처는 기술 이름 나열" | ⚠️ 다섯 층 칸 에 넣고, 칸마다 근거 차시를 |
| "회고는 느낀 점" | ❌ KPT의 Try는 측정 가능한 다음 요구사항 |
| "다음엔 파인튜닝부터" | ⚠️ 순서는 프롬프트 → RAG → 파인튜닝 . 원인이 "아는 내용"인지 "말하는 방식"인지 먼저 |
| "로컬 LLM은 완전히 새로운 분야였다" | ❌ 정산표를 보세요. 새 축은 없었습니다 |
부록 C. NotebookLM 복습 프롬프트
이 40차시 노트만 근거로 6문제를 내줘. 비전공자 기준으로.
"발표 일곱 덩어리의 순서", "숫자를 조건과 함께 말하기", "여덟 축 정산표", "세 문장 정산", "KPT와 다음 학습(RAG·파인튜닝·멀티 GPU)"은 반드시 포함해줘.
답은 내가 답한 다음에 채점하고, 틀린 이유를 노트의 절 번호를 근거로 설명해줘.
LangTailor