쓰던 LLM 프로바이더가 멈췄을 때, 다른 모델로 넘기며 깨지는 것들

결론부터 말씀드리면, 쓰던 LLM 프로바이더가 멈췄을 때 단순히 모델 이름만 바꿔서 다른 프로바이더로 넘기면 열에 아홉은 어딘가에서 예외가 터집니다. API 응답 형식 자체가 프로바이더마다 다르게 설계돼 있기 때문입니다. 이 글에서는 OpenAI Chat Completions API와 Anthropic Messages API를 기준으로, 실제로 어느 지점에서 코드가 깨지는지와 그걸 최소한으로 흡수하는 방법을 정리했습니다. 프로바이더 장애 때 넘어가는 순서와 가장 먼저 … Read more

LLM에게 채점을 맡길 때, 순서 편향과 자기 편애부터 걷어내야 합니다

LLM에게 채점을 맡기면 사람보다 더 일관된 점수가 나올 거라고 생각하는 분들이 많은데, 실제로는 정반대인 경우가 흔합니다. 같은 두 답안이라도 어느 쪽을 먼저 보여주느냐에 따라 승자가 바뀌고, 채점자로 쓴 모델이 자기 계열이 만든 답을 더 후하게 평가하는 현상도 보고돼 있습니다. 이 글에서는 이 두 가지 편향이 왜 생기는지, 그리고 위치를 바꿔 두 번 채점하고 평균을 내는 … Read more

RAG 문서에 심긴 지시문을 모델이 따를 때 막아야 할 지점

RAG(검색 증강 생성) 시스템을 실제로 운영해 본 분이라면, 검색된 문서 안에 있는 문장 하나가 모델의 행동을 바꿔버리는 경험을 한 번쯤 하셨을 겁니다. RAG 문서에 심긴 지시문을 모델이 따르는 문제는 프롬프트 자체를 아무리 정교하게 짜도 막히지 않습니다. 이 글에서는 이런 간접 프롬프트 인젝션이 실제로 어느 지점에서 뚫리는지, 그리고 각 지점마다 어떤 방어가 통하고 어떤 방어가 통하지 … Read more

temperature 0인데 답이 매번 다른 이유 — 배치 크기와 부동소수점

이 글에서는 temperature 0인데 답이 매번 다른 이유를 배치 처리와 부동소수점 연산 관점에서 확인할 수 있어요. 결과부터 말씀드리면, GPU 서버가 여러 요청을 한 번에 묶어 처리하는 배치 크기가 호출할 때마다 달라지면서 행렬 곱셈의 계산 순서가 바뀌고, 그 순서 차이가 미세한 부동소수점 반올림 오차를 만들어 argmax로 뽑히는 토큰이 흔들리는 거예요. temperature=0은 “확률이 가장 높은 토큰을 그대로 … Read more

GPU 메모리에 모델이 안 올라갈 때, 양자화로 돌파하기

GPU 메모리에 모델이 안 올라갈 때, 양자화 말고 다른 도리가 없을까 고민하시는 분들이 많습니다. 결론부터 말씀드리면 오프로딩이나 배치 크기 조정으로 약간은 버틸 수 있지만, 7B급 이상 모델을 로컬 GPU 한 장에 올리려는 상황이라면 결국 양자화가 가장 확실한 해결책입니다. 문제는 양자화 방식이 하나가 아니라는 점인데, bitsandbytes·GPTQ·AWQ·GGUF 각각이 메모리를 줄이는 원리와 대가로 치르는 품질·속도가 다릅니다. 이 글에서는 … Read more

LLM을 직접 띄우는 게 싸지는 지점은 어디일까요

“API 대신 LLM을 직접 띄우는 게 언제부터 더 싸질까요?” 이 질문에 대한 답은 간단합니다. 하루에 처리하는 토큰량이 GPU 임대료를 상쇄하는 지점을 넘어서는 순간부터입니다. 문제는 이 지점이 어떤 GPU를, 몇 시간 켜두는지에 따라 달라진다는 점인데요, 감으로 판단하지 말고 계산식 하나로 정리해보겠습니다. API 토큰 요금과 GPU 임대료, 뭘 비교해야 할까요? API를 쓸 때는 사용한 토큰 수만큼 요금이 … Read more

LLM이 느리다는 말을 쪼개기: TTFT·토큰당 시간·큐 대기 따로 재는 법

운영 중인 챗봇에 “응답이 느려요”라는 문의가 쌓이면, 어디부터 손대야 할지 막막합니다. 이럴 때는 LLM이 느리다는 말을 쪼개서 첫 토큰이 나오기까지 걸리는 시간, 토큰 하나를 생성하는 데 걸리는 시간, 요청이 처리되기 전 대기열에 머무는 시간을 따로 측정해야 원인이 보입니다. 세 구간을 나누지 않고 “전체 응답 시간”만 재면, 프롬프트가 길어서 느린 건지 GPU가 포화된 건지 요청이 몰려서 … Read more

추론 모델로 바꾸고 비용이 뛰었다면? 사고 토큰과 effort 조절부터 확인하세요

“왜 추론 모델로 바꾸고 나서 API 요금이 갑자기 뛰었을까요?” 결론부터 말씀드리면, 화면에는 보이지 않는 ‘사고 토큰(reasoning tokens)’이 출력 토큰 단가로 그대로 청구되기 때문입니다. 같은 질문을 던져도 일반 모델보다 추론 모델 쪽 응답에 보이지 않는 계산 과정이 훨씬 길게 붙는 구조라, 프롬프트와 답변 길이는 비슷한데 비용이 눈에 띄게 뛰었을 때 대부분 이 사고 토큰이 원인입니다. 이 … Read more

모든 요청에 최상위 모델을 쓰고 있다면 짚어야 할 라우팅 기준

요청 하나하나에 GPT-4급이나 Claude Opus급 최상위 모델을 그대로 물리고 있다면, 지금 이 구조가 맞는 건지 궁금해서 검색해 보셨을 것입니다. 답을 먼저 말씀드리면, 모든 요청에 최상위 모델을 쓰고 있다면 응답 품질은 지킬 수 있어도 토큰 비용은 필요 이상으로 커지는 구간이 반드시 생깁니다. 이 글에서는 어느 시점부터 모델 라우팅을 도입하는 게 손익상 유리한지, 실제 비교 기준으로 짚어보겠습니다. … Read more

LLM에게 코드 리뷰를 시켰더니 없는 함수를 지적하는 이유

LLM에게 코드 리뷰를 맡겼는데, 왜 있지도 않은 함수를 썼다고 지적할까요? 답은 생각보다 단순합니다 — 리뷰를 하는 모델이 여러분의 실제 코드베이스가 아니라, 붙여넣은 몇 줄과 학습 당시 기억만 보고 판단하기 때문입니다. LLM에게 코드 리뷰를 시켰더니 없는 함수를 지적하는 현상은 모델 성능 문제라기보다 ‘컨텍스트 부족’ 문제에 가깝습니다. 이 글에서는 이 현상이 왜 생기는지, 그리고 프롬프트 구조를 어떻게 … Read more