📊 한눈에 보는 흐름 다이어그램 → — 21개 문서를 3레인 9단계 프로세스로 압축
관통하는 3가지 원칙
Transformer가 이긴 이유는 어느 한 항목이 최강이어서가 아니라 세 문제를 동시에 풀었기 때문이다: 장거리 의존성 · 병렬 계산 · 규모화 학습.
| RNN | CNN | Transformer | |
|---|---|---|---|
| 장거리 의존 | 약 (정보 층층이 감쇠) | 층 쌓기 필요 (층수↑ 비용↑) | 강 (임의의 두 단어 직결) |
| 병렬 계산 | ✗ (앞뒤 강결합) | ✓ | ✓ (문장 전체 동시 계산) |
| 규모화 | ✗ (GPU를 못 채움) | 중 | ✓ |
| 강점 | 시퀀스 직관이 단순 | 국소 특징 추출 | 범용 계산 프레임워크 |
Tips: 새 아키텍처 평가 3문 — 장거리 의존을 만드는가 / 병렬화되는가 / 규모화되는가. CNN은 도태되지 않았다(국소 특징 추출에선 여전히 우선). 시퀀스 길이가 Transformer의 비용 급소.
정의를 외우지 말고 그것들이 함께 푸는 하나의 문제를 기억할 것: 한 단어가 어떤 단어들을 참조해야 하며, 참조한 뒤 무엇을 가져오는가.
| 기호 | 비유 | 책임 |
|---|---|---|
| Q (Query) | 내 손의 질문 | 무엇을 찾는가 |
| K (Key) | 자료의 제목·태그 | 자기가 무엇인지 설명 |
| V (Value) | 자료의 본문 | 실제 내용 제공 |
흐름: Q × K → 유사도 → (softmax) 가중치 → 가중치대로 V 집계
Tips: 비유 먼저, 공식은 나중에. 소스에 없는 두 가지를 보태면 차이가 크다 — √d_k 스케일링(없으면 softmax 포화·기울기 소실), Multi-Head(단일 QKV는 한 가지 참조 관계만 표현). K/V가 불변이라는 점이 KV Cache의 전제.
"다음 단어를 예측한다"는 결론이지 답이 아니다. 요구되는 것은 4단 파이프라인이다.
Tips: 두 종류의 성능 지표를 구분(첫 token 지연은 prefill 지배, 이후 token당 지연은 decode 지배). 결정성 작업은 저온/그리디, 창작은 고온+샘플링. 모델이 "반복"하면 먼저 디코딩 설정부터 확인.
긴 대화에서 메모리가 폭증하는 주범은 모델 가중치가 아니다. 가중치는 고정된 십몇 GB이고, 팽창하는 것은 KV Cache다(수십~100 GB 이상).
본질: 메모리로 연산력을 산다.
왜 K/V만 캐싱하고 Q는 안 하나
| 벡터 | 생명주기 | 캐싱 가치 |
|---|---|---|
| K, V | 이후 모든 token이 반복 조회 | 있음 |
| Q | 현재 한 번의 조회에만 봉사, 쓰고 나면 실효 | 없음(메모리 낭비) |
메모리 3인자: 층수 × 시퀀스 길이 × 헤드 수 × 헤드 차원 × 2 × 정밀도 바이트. 롱컨텍스트에서는 가중치보다 더 먹을 수 있다.
최적화 5종(작용 차원으로 기억): 단편화 감소(PagedAttention) / 이동량 감소(FlashAttention) / 표현 압축(KV 양자화) / 시퀀스 단축(슬라이딩 윈도우) / 중복 회피(접두사 캐시).
Tips: 용량 공식에 동시성을 반드시 포함할 것(프로덕션 OOM의 고빈도 원인). 접두사 캐시는 다중 턴·고정 시스템 프롬프트에서 수익 최대. KV 양자화(FP8/INT8)가 가성비 1위. PagedAttention은 단편화를 해결하지 총량을 줄이지 않는다. 슬라이딩 윈도우는 손실 방안.
핵심은 계산 희소성(Compute Sparsity)과 저장 희소성(Storage Dense)을 분리해서 말할 수 있는가이다.
활성화 파라미터가 적다 ≠ 단일 카드 메모리가 작다.
답의 출발점은 결론이 아니라 "범위 정의" — 네 항목을 나눠서 계산할 것: 가중치 메모리 / 활성화 피크 / KV Cache / 통신 버퍼. 대입할 입력 차원: 전문가 병렬 · 배치 · 컨텍스트 길이 · 전문가 분포.
Tips: "매번 전문가 몇 개"만 외우지 말고 가중치 저장 토폴로지 / Token 라우팅 전략 / 동시성 병목을 말할 것. 범위를 먼저 정하고 계산할 것. "먼저 상한에 닿는 부분"을 설계 산출물로. 지표와 버전을 같은 타임라인에.
분수령은 업무 동작이 무엇인지 먼저 보는 것이다. 온라인 상담이면 지연이 하드 제약이다.
이용률 향상 ≠ 단일 사용자 체감 향상 — 배치 처리는 하드웨어 이용률을 높이지만 장단 혼재 시 서로 기다리게 되어 단일 사용자 꼬리 지연이 악화된다. 수십 token짜리 짧은 질문이 긴 문서 요약에 끌려 같은 배치에 들어간다.
해법 4종: 입출력 길이별 버킷 분리 / 최대 대기 윈도우 / 실시간·오프라인 큐 격리 / 처리량·TTFT·P95·P99를 동시에 볼 것.
3단 계측으로 귀인할 것
| 단계 | 반영 | 주된 영향 |
|---|---|---|
| 대기 | 스케줄링·용량 | 배치 밖 대기 시간 |
| Prefill | 입력 전체 처리 | 입력이 길수록 첫 글자 지연 |
| Decode | token 단위 생성 | 출력이 길수록 총 시간 |
단계별 처방: Prefill이 느리면 입력 측 뺄셈(무관 컨텍스트 제거·온디맨드 검색·안정적 접두사 캐싱), Decode가 느리면 그다음에 출력 상한·연속 배치·양자화·추측 디코딩.
Tips: 먼저 버킷을 나누고 나서 배치 크기를 논할 것. 최대 대기 윈도우가 짧은 요청의 생명줄. 실시간/오프라인 큐를 물리적으로 격리. 수정은 회귀 집합에 넣고 인접 작업을 확인.
트래픽이 3배 튀어 GPU를 2배 증설했는데 타임아웃률이 1%→40%로 뛰었다. GPU 사용률 60%, 메모리 70%인데도 서비스가 먼저 죽었다 — 자원은 멀쩡한데 요청이 아직 모델에 들어가지도 못한 채 "서비스 진입 큐"에 갇혀 있었다.
핵심: 병목은 연산력이 아니라 **연산력 이전(스케줄링)**에 있다. 타임아웃은 사용자의 재시도를 부르고, 재시도는 큐를 더 길게 만드는 정방향 피드백 눈사태를 일으킨다.
3층 대응: ①업무 등급별 스케줄링(고우선 실시간 큐는 자원 독점 배정, 요청 입도 관리로 거대 요청이 소형 요청 다수를 끌고 내려가는 것 방지) ②링크 하한책(연속 배치, 요청 수 대신 token 총량/예상 계산량 기준 제한, 다단 강등) ③아키텍처 최적화(핫 문답 캐시, KV 캐시 재사용, 성수기 이전 자원 고정 — 세 수단의 시간축이 다르다).
Tips: 진입 큐 길이와 대기 시간을 GPU 사용률과 나란히 1급 지표로 만들 것. 단건 요청에 실행 시간 상한을 걸고 강제 종료할 것. 스케줄러 자체에도 의존성 없는 로컬 하한책을 둘 것(중앙 스케줄러가 멈추면 전체가 통제 불능에 빠진다).
"양자화, 증류 말고 또 뭐가 있나?"에 파라미터 층 명사만 더 대면 모델을 작게 만드는 것만 말한 것이다. 실제 쟁점은 최적화가 모델 하나의 문제가 아니라 엔진·서비스·업무를 아우르는 체계의 문제인가이다.
4층 체계와 우선순위: 엔진 층 > 서비스 층 > 모델 층 > 업무 층 — 먼저 엔진과 스케줄링을 손보고, 그다음에야 모델 압축을 논한다.
네 가지 생산 치명 함정: 비용 통제 실패(스케줄링 없이 양자화만) / 지연 초과(장문 프리필이 GPU 독점) / 품질 저하(검증 없는 저정밀 양자화) / 자원 눈사태(KV Cache 무한 증가 + 정적 배치의 나무통 효과).
Tips: 각 층마다 검수 수치를 정해둘 것(메모리 −3050%, P99 −510배, 이용률 30%→85%, 라우팅 절감 60%+). 절감 동작은 반드시 품질 지표와 짝을 이뤄 나올 것. 캐시는 KV 캐시(엔진 층)와 시맨틱 캐시(서비스 층)를 섞어 말하지 말 것.
"작은 모델로 추론해서 빨라졌다"는 오답이다. 추측 디코딩은 모델을 바꾸지 않는다 — 목표 모델을 그대로 둔 채 **투기(Speculate) + 검증(Verify)**으로 무손실 가속을 얻는다.
적중률이 유일한 기축통화
| 시나리오 | 수용률 | 결과 |
|---|---|---|
코드 자동완성(import os → import sys) | 80%+ | 대폭 가속, K=5~6 |
| 개방형 대화 | 60% | 가속 반감 → K를 낮추거나 자동 종료 |
K_VALUE = 5로 하드코딩 → 트래픽 분포가 바뀌어 적중률 30% → 에러도 알람도 없이 가속이 감속으로 조용히 퇴화.Tips: K는 변수이지 상수가 아니다. 오프라인 1회 측정 ≠ 프로덕션 장기 결론. 등가를 먼저 증명하고 속도를 논할 것. 총 가속비가 아니라 순수익을 계산. 모니터링은 실시간 적중률 + 엔드투엔드 지연 두 곡선을 함께.
첫 글자 지연의 90%가 Prefill에서 발생한다. Decode가 첫 token을 생성하는 데는 행렬 곱 한 번이면 되지만, Prefill은 프롬프트 전체에 대해 전량 주의력을 계산해야 한다.
| Prefill | Decode | |
|---|---|---|
| 계산 | 입력 전체를 한 번에 병렬 | token 단위 직렬 |
| 길이와의 관계 | 제곱 O(N²) | 선형 |
| 병목 자원 | GPU 행렬 곱 처리량(연산력 제약) | GPU 메모리 대역폭(Memory Bound) |
4000 token 예시: Prefill은 4000×4000 주의력 행렬을 한 번에, Decode 첫 token은 4000개와 각각 한 번 → 계산량이 4000배 차이.
KV Cache가 첫 글자 지연을 바꾸는 법
| 턴 | 이력 | 캐시 없음 | 캐시 있음 |
|---|---|---|---|
| 1턴 | 4000 | 전부 Prefill, 첫 글자 2초 | — |
| 2턴 | 4200 | 4200개 전량 재계산(4200²) | 신규 200개만(200×4200) → 0.3초 |
Tips: "변수"를 프롬프트 꼬리로 몰 것. 프롬프트 조립은 결정론적으로 재현 가능해야 한다. "저장했다"를 "적중했다"로 착각하지 말 것. 모니터링 대상은 적중률이지 "Cache를 켰는가"가 아니다.
신입은 자리가 남으면 채우고, 프로덕션에서 안정적인 Agent를 만드는 사람은 오히려 절반 이상을 지운다. 쟁점은 **컨텍스트 예산(Context Budget)**이다.
윈도우에 자리가 있는 것 ≠ 모델에게 그만큼의 주의력이 있는 것. 많이 넣을수록 많이 잃는다.
두 가지 메커니즘
token↑ → 개별 가중치↓ → 노이즈 바닥↑ → 핵심 정보가 가라앉음.실제 사고 1: 상담 Agent 20턴 중 중간의 "환불 신청" 한마디가 잡담에 파묻혀 작업으로 인식된 적이 없었고, 모델은 "네, 알겠습니다"만 하고 끝. 사용자가 3일 후 신고. → **주의력 희석(Attention Dilution)**의 전형.
실제 사고 2: 문서 요약 업무에서 편의상 백만 토큰 모델에 매뉴얼 전체를 한 번에 밀어 넣었다. 결과는 앞부분 핵심 규칙 완전 망각·중간 내용 착란·끝부분 답변 뒤섞임 — 윈도우 용량이 남아돌아도 위치 구분력이 함께 커지지는 않는다는 증거다. Prefill 계산량이 O(N²)이므로 비용도 함께 폭증한다.
세 개의 예산: 윈도우가 공짜라도 주의력 · 비용 · 첫 글자 지연이 함께 터진다. 프롬프트 캐시는 안정적 접두사에만 유효하며 중간 token이 바뀌면 즉시 무효·재과금.
3층 편성
| 계층 | 내용 | 위치 |
|---|---|---|
| 1층 | 시스템 프롬프트 + 도구 정의 | 언제나 최전방 |
| 2층 | 현재 작업 지시 | 머리에 배치, 핵심 지시는 독립된 고우선순위 자리 |
| 3층 | 이력 | 최근 몇 턴 원문 + 더 이른 것은 요약 + 잡담은 삭제 |
정렬 법칙: 정보 밀도 · 관련성 · 역할 책임이 높을수록 앞으로. 수위선 70% 초과 시 절삭/압축 트리거.
시나리오별 취사선택: 정확한 사실 조회가 목표면 긴 컨텍스트보다 검색(RAG)이 더 적합할 수 있고, 문서 전체의 구조적 이해가 목표면 분할 후 결과 병합이나 희소 주의력(Sparse Attention) 계열 모델이 더 적합할 수 있다 — "윈도우가 크다"는 "그 작업에 맞는 도구다"를 보증하지 않는다.
Tips: 핵심 지시는 "앞으로"만이 아니라 **"격리"**할 것. 요약은 3등급(원문/요약/삭제)으로. 첫 글자 지연을 컨텍스트 팽창의 조기 지표로. 실패 모드에 이름을 붙일 것. 장문서는 분할 요약 후 병합하는 경로도 함께 검토할 것.
"컨텍스트 윈도우가 부족해서"는 한 겹만 답한 것이다. 진짜 이유는 정보 품질이다 — 담긴다 해도 노이즈가 모델을 끌어내린다(환각 증가·논리 혼란·주제 이탈).
축적되는 세 종류 노이즈: 만료된 정보(바뀐 예산·시간·선호) / 무관한 디테일(잡담·반복 확인) / 초기의 오류(폐기된 방안).
이력 3층 구조
| 계층 | 내용 | 처리 | 목적 |
|---|---|---|---|
| 1층 | 현재 턴 컨텍스트 | 원문 보존, 압축 금지 | 이번 턴 지시의 정확성 |
| 2층 | 장기 유효 상태 | 구조화 추출(목표·제약·선택된 방안) | 턴을 넘는 "사실 기반" |
| 3층 | 이력 요약 | 압축 | 배경 보존 + token 절약 |
충돌 정보 처리(가장 간과되는 고리): 예산이 10,000 → 20,000으로 바뀌었을 때, 두 숫자를 모두 주고 모델에게 추측시키지 말고 **예산: 20,000 [최신 확인] / 예산: 10,000 [실효]**로 명시할 것. 이것이 대화 상태 관리다.
Tips: 장기 상태를 명시적 스키마로. 요약에 트리거 임계값을 둘 것(매 턴 재요약은 비싸고 드리프트를 만든다). 1층은 절대 압축 금지(지시 대상이 무효가 된다). 충돌 재정 규칙은 코드에 하드코딩.
"둘 다 token을 아낀다"는 너무 거칠다. 진입점은 적중 조건 · 리스크 · 적용 시나리오 세 차원이다.
| 차원 | 접두사 캐시 | 시맨틱 캐시 |
|---|---|---|
| 위치 | 추론 가속 | 애플리케이션 층 재사용 |
| 절약 대상 | 동일 컨텍스트의 중복 계산 | 유사 질문의 중복 생성 |
| 재사용 대상 | 이미 계산한 KV 결과 | 과거에 산출한 답변 |
| 적중 조건 | 앞부분 글자 단위 완전 일치 | 의미가 유사하면 됨 |
| 직접 수익 | prefill 오버헤드 감소 | 모델 호출 횟수 감소 |
| 주요 리스크 | 접두사 파손 → 적중률 급락 | 오적중(엉뚱한 답/만료된 답) |
시맨틱 캐시의 네 관문(하나도 빠질 수 없음): 권한 통제 / 시간 유효성 / 지식 버전 / 유사도 임계값.
엔지니어링 함정: 타임스탬프·랜덤 ID를 프롬프트 가장 앞에 두면 접두사가 매번 달라져 캐시가 깨진다. 고정은 앞, 동적은 뒤 — 이것은 서버 최적화가 아니라 프롬프트의 구조 설계이며, 프롬프트를 쓰는 사람도 캐시 적중률에 책임이 있다.
다중 Agent 관점: 접두사(시스템 프롬프트, 도구 스키마 등)를 맞추면 서로 다른 Agent 인스턴스도 같은 KV Cache를 공유할 수 있다. 엔진이 RadixAttention/RadixTree 같은 구조로 여러 요청의 공통 접두사를 하나의 트리로 관리하면, Agent A가 이미 계산한 시스템 프롬프트의 KV를 Agent B가 재사용한다 — 단, 두 Agent의 시스템 프롬프트·도구 정의 문자열이 토큰 단위로 완전히 일치해야 한다.
Tips: "보이지 않는 동적 내용"을 경계할 것(도구 목록 순서 불안정, JSON 직렬화 순서 무작위, 템플릿의 현재 날짜). 시맨틱 캐시는 권한별 버킷 분리. 지식 버전 번호를 캐시 키에. 강한 정확성 시나리오에는 수동 다운그레이드 스위치를. 다중 Agent 배포에서는 시스템 프롬프트 템플릿을 공용 모듈로 관리해 접두사 드리프트를 방지할 것.
프롬프트를 설명하지 못하는 근본 원인은 표준 패러다임의 부재다. 하나의 점진적 사슬로 수렴한다.
| 패러다임 | 무엇을 주는가 | 무엇을 배우는가 | 전형적 실패 | 정성 |
|---|---|---|---|---|
| Zero-shot | 문제만 | 사전학습 본능 | 환각: 그럴듯한 오답 | 본능으로 맨몸 시험 |
| Few-shot | 문제 + 문답 쌍 3~5개 | 문형·형식·스타일 | 건너뛰며 찍기 | 답안 템플릿 제공 |
| CoT | 문제 + 중간 단계가 담긴 예시 | 추론 경로 | 단계 장황, Token↑ | 한 걸음씩 추론 |
동일 문제 대조("철수의 사과 5개, 2개 먹고, 남은 것의 3배를 사 왔다"): Zero-shot·Few-shot은 오답, CoT는 5-2=3 → 3×3=9 → 3+9=12로 정답.
Tips: 예시의 형식이 곧 계약(구두점·줄바꿈·필드 순서까지 모방한다). CoT의 각 단계는 원자 동작. "먼저 추론, 나중에 결론" 순서를 강제(반대면 사후 합리화로 퇴화). 간단한 작업에 CoT 남용은 순수 낭비.
같은 모델, 같은 지식베이스인데 누구는 답이 정확하고, 누구는 산으로 간다. "Prompt는 화술이니 자세히 쓰면 된다"는 답은 이 변수를 여전히 "글쓰기 실력"으로 취급한다. 실제로는 모델을 미세조정하지 않고도 행동을 통제하는 유일한 저비용 수단이며, 화술이 아니라 설계도로 다뤄야 한다.
네 가지 치명 문제와 다섯 요소의 대응
가장 날카로운 지점은 환각이다 — 지식베이스에 정답이 있어도 모델 자신의 사전학습 지식이 그것을 덮어써버릴 수 있다. RAG를 붙였다고 환각이 사라지는 것이 아니다. Prompt가 "참고 문서에 근거하라"고 명시적으로 강제하지 않는 한, 검색된 근거는 장식으로 전락한다.
Tips: 먼저 경계·포맷·이상 처리를 확정하고 나서 어투를 다듬을 것. 금지 행위는 허용 행위와 반드시 함께 쓸 것. **"맞았다 틀렸다 반복"**을 경보 신호로 취급하고, 이때는 온도 파라미터보다 먼저 명확한 과업 지시부터 되짚을 것.
"돈이 들고 시간이 걸린다"는 표층이다. 두 단어만 잡으면 된다: 주의력 희석과 물리적 캐시 병목.
【알고리즘 층】
【물리 층】 3. 캐시 병목 — 큰 캐시 공간 할당 → 시스템 동시성 압박 → 대기 중인 다른 작업도 함께 느려짐. 4. 사용자 체감과 비용 — 첫 글자 지연↑, API 청구서가 지수적으로 상승.
수렴: 프롬프트 과다는 모델 알고리즘 / 성능 표현 / 물리 자원을 동시에 압박한다.
Tips: 핵심 지시는 머리와 꼬리에. 마무리에서 핵심 제약을 복창시킬 것(꼬리의 높은 주목도 활용). 부하 테스트는 첫 글자 지연과 동시성 감쇠를 볼 것. 비용은 초선형으로 모델링(token 수 선형 외삽 금지).
템플릿도 모델도 파라미터도 바꾼 적이 없는데, 프로덕션의 Prompt는 시간이 지나며 서서히 나빠진다. 대다수 개발은 Prompt를 한 번 쓰고 끝나는 문안으로 취급하지만, 실제로는 지속적으로 관리해야 하는 제어 시스템이다.
4대 근본 원인: ①정적 템플릿이 입력 분포 변화에 적응하지 못함 ②긴 컨텍스트가 누적되며 제약 조건의 상대적 가중치가 희석됨 ③모델 자체의 배치·버전 갱신이 만드는 확률적 변동 ④모니터링 부재로 퇴화가 감지되지 않고 누적됨.
4대 방어선: 입력 분포 드리프트 감지 → 정기 회귀 테스트(같은 골든셋을 주기적으로 재실행) → 제약 조건 재확인 주기 배치(긴 대화일수록 핵심 규칙을 재주입) → 성능 지표 상시 모니터링(정확률·포맷 준수율·거부율의 시계열 추적).
Tips: Prompt 배포에도 코드처럼 골든셋 회귀 테스트를 CI에 넣을 것. 긴 대화는 일정 턴마다 핵심 제약을 명시적으로 재주입할 것. 모델 벤더의 무중단 업데이트(버전 고정 없는 API)를 쓴다면 정기 회귀가 필수다 — 모델이 조용히 바뀌면 프롬프트 효과도 조용히 바뀐다.
프롬프트 한 글자도, 모델도 바꾼 적이 없는데 어떤 날은 답이 반듯하고 어떤 날은 산으로 간다. "Temperature = 창의력 다이얼, 0이면 엄격, 1이면 자유분방"이라는 답은 표층이다 — 이걸로는 왜 온도를 0으로 낮춰도 여전히 틀린 답이 나오는지 설명하지 못한다.
핵심: Temperature는 Softmax 이후, 샘플링 이전에만 개입하는 확률분포 평활 계수다. 모델의 추론(무엇을 아는가)에는 전혀 관여하지 않는다.
네 가지 함정: ①Temperature=0이 완전 재현을 보장하지 않는다(부동소수점 연산 순서·병렬 스케줄링 등 비결정 요인) ②전사 공통 온도값 하나로 통일하면 용도별 상반된 요구를 하나로 누르는 것 ③Temperature와 Top-P를 동시에 크게 흔들면 결과 변화의 원인 귀속이 불가능해진다 ④낮은 온도가 환각을 없애준다는 착각 — 모델 내부 지식이 틀렸으면 "확정적으로, 그러나 틀리게" 답할 뿐이다.
Tips: 온도는 값이 아니라 등급으로 관리할 것(강확정성/중간발산/고창의 3단계). temperature=0을 캐시 키나 회귀 테스트 완전 일치 단언의 전제로 쓰지 말 것. 파라미터 변경은 Temperature 먼저, Top-P는 필요할 때만 나중에 순서를 지킬 것. 로그에 사용된 Temperature/Top-P 값을 반드시 남길 것.
| ❌ 흔한 오해 | ✅ 실상 |
|---|---|
| 새 지식을 허공에서 주입 | 더 안정적인 출력 습관 형성(고정 형식·어조·판단 기준) |
기억점: 파인튜닝은 "어떻게 답할지"를 가르치고, RAG는 "답변의 근거"를 보충한다.
4단계 의사결정
Tips: 프로젝트 시작 시 **"바꾸려는 것이 지식인가 행동인가"**를 한 문장으로 쓸 것. 평가셋은 실제 업무 로그의 복잡한 경계 샘플에서. Prompt-only / RAG-only 대조 결과를 항상 보존.
둘은 서로 다른 두 층위를 푼다: SFT는 일을 할 줄 알게, RLHF는 인간의 선호·가치관에 부합하게.
Tips: SFT 예산은 수량이 아니라 품질에. "형식/지시 준수"는 SFT, "어조/안전/가치관"은 RLHF — 도구를 잘못 쓰는 것이 흔한 낭비. 보상 기준(예의·신뢰성·환각 없음 vs 헛소리·위험·가치관 위배)을 판정 가능한 체크리스트로.
전량 파인튜닝 vs LoRA
| 전량 | LoRA(PEFT) | |
|---|---|---|
| 방식 | 대량 파라미터 변경 | 베이스 동결 + 소량 파라미터 추가 |
| 비용·속도·배포 | 높음·느림·경직 | 낮음·빠름·유연 |
| 문턱 | GPU·데이터·경험 모두 높음 | 개인/중소 팀 친화적 |
평가 5점검: 형식 안정 / 스타일 부합 / 오류율 하락 / 헛소리 없음 / 범용 능력 미퇴화.
이터레이션 처방: 불안정 → 고품질 샘플 보충 / 너무 경직 → 데이터가 단일 / 헛소리 → 데이터 오류 또는 학습 과도 / 형식 오류 → 형식 예시 추가.
Tips: "데이터 규범"을 문서로 쓰고 나서 라벨링을 시작할 것. LoRA 우선(하나의 베이스에 여러 모듈을 걸어 업무별 전환). 평가셋은 라벨링 시점에 함께 분리. "범용 능력을 희생하지 않았는가"를 필수 측정 항목으로. 헛소리 ≠ 데이터를 더 넣어야 한다는 뜻.
아래 주제들은 같은 소스 시리즈에 속하지만 Agent 심화에서 이미 한글로 정리되어 있어, 중복을 피하고 링크로 대신한다.
| 주제 | 링크 | 한 줄 요약 |
|---|---|---|
| LLM의 4가지 기억 메커니즘 | AGENT 02 | 모델 자체는 기억하지 않는다. 전체 이어붙이기 / 슬라이딩 윈도우 / 요약 / 벡터 검색은 시간 척도별 분업 |
| Prompt는 변수 이스케이프를 해야 한다 | AGENT 03 | 프롬프트 템플릿은 문자열 결합이 아니라 입력 경계 관리. 구분자 + 출처 선언 + 권한 다운그레이드 |
| 프롬프트 인젝션 취약점 방어 | AGENT 04 | 모든 텍스트가 하나의 Token 열이 되므로 천연의 하드 격리는 없다. 방어선은 모델 바깥에 |
| JSON 출력과 Function Calling의 차이 | AGENT 12 | 자유 텍스트 JSON과 구조화된 도구 호출은 신뢰도 보장 수준이 다르다 |
| JSON 안정 출력 4층 방어선 | AGENT 13 | 모델 출력은 계약이 아니다. 스키마·파싱·재시도·폴백의 4층 |
| 개념 | 등장 문서 | 한 줄 요약 |
|---|---|---|
| KV Cache | 03 / 04 / 10 / 13 | 메모리로 연산력을 산다. 재사용 횟수가 캐싱 가치를 결정하고, 메모리 압박을 가중치에서 컨텍스트 길이로 이전시킨다 |
| Prefill / Decode 이원 구조 | 03 / 06 / 10 | 병목 자원이 다르므로(연산력 vs 메모리 대역폭) 최적화 수단을 서로 바꿔 쓸 수 없다 |
| 접두사 안정성 | 10 / 11 / 12 / 13 | 고정은 앞, 동적은 뒤. 프롬프트의 필드 순서는 가독성이 아니라 성능 파라미터다 |
| 주의력 희석 / Lost in the Middle | 11 / 16 / 14 | 위치가 곧 우선순위. 머리와 꼬리는 고주목 구역이고, 넣을수록 중간이 사라진다 |
| 용량 ≠ 가용성 | 11 / 12 / 16 | 윈도우가 담을 수 있는 양과 모델이 실제로 돌볼 수 있는 양은 별개다 |
| 병목은 연산력이 아니라 스케줄링에 있을 수 있다 | 06 / 07 / 08 | 자원 사용률이 낮아도 병목이 없다는 증거가 아니다. 대기 시간과 처리 시간을 먼저 분리할 것 |
| 대가와 함께 견적 내기 | 04 / 05 / 09 / 19 | 수익만 보고하고 대가를 보고하지 않는 방안은 엔지니어링 리뷰에서 성립하지 않는다 |
| 대조 실험 규율 | 05 / 06 / 19 / 21 | 입력·데이터·버전을 고정하고 주요 변수를 하나만 바꾼다. 대조가 없으면 반증할 수 없다 |
| 침묵하는 실패 | 09 / 10 / 11 / 17 | 에러도 알람도 없이 조용히 퇴화하는 것이 가장 위험하다. 능동 관측 지표가 필요하다 |
| 샘플링은 지식을 바꾸지 못한다 | 03 / 18 | Temperature·Top-P는 확률분포를 어떻게 뽑을지를 조정할 뿐, 모델이 무엇을 아는지는 바꾸지 못한다. 환각은 샘플링이 아니라 지식·검증 문제다 |
| 지식이 없으면 RAG, 행동이 없으면 파인튜닝 | 19 / 20 / 21 | 먼저 판별하고 나서 방안을 고른다. 방향이 틀리면 나머지를 아무리 잘해도 헛수고 |