본문 바로가기

전체 글

맥북에서 Hugging Face 모델 돌려보고 LoRA 파인튜닝까지 해본 후기 Docker/k8s 위에서 LLM을 서빙해보고 싶어서 시작했는데, 그 전에 "일단 모델을 로컬에서 돌리고 파인튜닝하는 것부터 익혀보자" 싶어서 먼저 손에 잡히는 것부터 해봤다. 결과적으로 M2 Pro 맥북 하나로 가벼운 LLM 파인튜닝까지 30분도 안 걸려서 끝났다.왜 Docker/k8s가 아니라 로컬부터?처음엔 Docker나 k8s 위에서 바로 돌려볼까 했는데, 확인해보니 macOS의 Docker Desktop은 리눅스 VM 위에서 컨테이너를 돌리는 구조라 Apple Silicon의 GPU(Metal)에 컨테이너가 접근할 수 없다. 즉 컨테이너 안에서는 CPU로만 돌아가고, 파인튜닝처럼 반복이 많은 작업엔 너무 느리다.그래서 역할을 나눴다.학습(training): 네이티브 맥 환경에서 GPU 가속을 그.. 더보기
SGLang 서버 띄우기, 그리고 GPU 라인업 이해하기 LLM 추론 엔진 스터디를 시작했다. 4주 8세션 커리큘럼이고, SGLang을 축으로 배칭, KV 캐시, 어텐션 최적화, 벤치마킹까지 다룬다. 1주차 과제는 단순하다. SGLang 서버를 띄우고 요청 하나를 보내 응답을 받는 것.과제 자체는 명령어 두 줄이지만, 준비하면서 정리하게 된 배경 지식이 오히려 많았다. GPU를 어디서 빌릴지, 어떤 카드를 골라야 하는지, 애초에 SGLang이 뭔지. 그 과정을 함께 남긴다.SGLang이란한 줄로 말하면 LLM 추론(서빙) 엔진이다. Ollama, vLLM, TensorRT-LLM과 같은 카테고리다. 학습이 아니라, 이미 학습된 모델을 받아 요청을 최대한 빠르고 많이 처리하는 것이 목적이다.동작 순서는 이렇다.모델 가중치를 GPU에 로드KV 캐시 메모리 풀 할당.. 더보기
260728 업무 중 특이사항 NL2SQL 재현성 문제를 쫓다가 Ollama의 컨텍스트 설정을 며칠간 파헤친 기록. 결론부터 말하면 범인이 아니었다. 그래도 배운 게 많아서 남긴다.문제사내 데이터 웨어하우스에 자연어로 질문하면 SQL을 만들어주는 시스템을 만들고 있다. 로컬에 띄운 Ollama에 120B 모델을 올려서 쓰는 구조다.어느 날 이상한 걸 발견했다.같은 질문을 넣었는데 매번 다른 쿼리가 나온다.컬럼 순서가 바뀌는 정도가 아니라, 조인하는 테이블이 달라지거나 필터 조건이 빠지기도 했다. 사용자 입장에서는 어제 본 숫자와 오늘 본 숫자가 다르다는 뜻이다. 업무 시스템에서는 치명적이다.첫 번째 용의자: temperatureLLM이 매번 다른 답을 내는 가장 흔한 이유다.모델은 다음 토큰을 고를 때 후보마다 확률을 매긴다.SELE.. 더보기
RAG vs 파인튜닝, 뭐가 다른 걸까? LLM을 공부하다 보면 항상 마주치는 갈림길이 있다. "우리 도메인 지식을 모델에 어떻게 넣지?" 여기서 나오는 두 가지 대표 선택지가 RAG와 파인튜닝이다. 이름은 자주 들었지만 막상 정확히 뭐가 다른지 헷갈리는 경우가 많아서, 개념을 한번 정리해봤다.RAG (Retrieval-Augmented Generation)한 줄로 말하면 모델은 그대로 두고, 필요한 지식을 그때그때 검색해서 문맥으로 넣어주는 방식이다.동작 흐름은 이렇다.원본 문서를 적당한 크기의 **청크(chunk)**로 쪼갠다.각 청크를 임베딩(embedding), 즉 벡터로 변환한다.이 벡터들을 벡터 DB에 저장한다.사용자 질문이 들어오면, 그 질문도 벡터화해서 벡터 DB에서 유사한 청크만 검색해온다.검색된 청크들을 프롬프트에 끼워넣어서 .. 더보기
LLM Fine-tuning 정리 (1) — Instruction Tuning과 RLHF "다음 토큰 예측기"를 "쓸 만한 어시스턴트"로 만드는 과정. LLM 강의의 Fine-tuning 파트 중 Instruction Tuning과 RLHF(PPO)까지를 정리한다.0. 전체 그림Pretrain 언어 능력 습득 (다음 토큰 예측) → SFT 특정 태스크 수행 → Instruction 지시 이해의 일반화 — "무엇을 원하는가" → RLHF(PPO) 선호 정렬 — "어떤 답이 더 좋은가"각 단계는 이전 단계가 해결하지 못하는 문제를 하나씩 해결한다. 그리고 마지막 단계인 RLHF가 남긴 비용과 복잡성이 다음 기법(DPO)의 출발점이 된다.1. 왜 Fine-tuning이 필요한가Fine-tuning은 사전학습된 모델(이미 대규모 데이터로 일반.. 더보기
RAG, Naive부터 Agentic까지 RAG(Retrieval Augmented Generation)를 정리해본다. 사실 지금 회사에서 NL2SQL 시스템을 만들면서 "이게 RAG랑 뭐가 다른 거지?"라는 고민을 계속 해왔는데, 이번 강의를 들으면서 개념적으로 많이 정리가 됐다.LLM이 왜 RAG 없이는 한계가 있을까RAG 얘기를 하기 전에 LLM 자체의 한계부터 짚어야 한다.지식 컷오프: 학습이 멈춘 시점 이후 정보는 모른다도메인 지식 반영 불가: 회사 내부 문서, 보안 문서는 애초에 학습 데이터에 없다최신 정보 부재: 오늘 주가, 오늘 뉴스는 당연히 답할 수 없다이 상태에서 억지로 답변을 시키면 결국 할루시네이션(엉뚱한 답변)으로 이어진다. 이걸 막기 위해 나온 게 RAG다.RAG = 질문과 관련된 문서를 외부 지식 베이스에서 검색(Re.. 더보기
MCP(Model Context Protocol), 제대로 이해하기 최근에 MCP 관련 강의를 들었다. 요즘 여기저기서 "MCP 연결했다", "MCP 서버 만들었다" 하는 얘기가 하도 많이 들려서, 개념부터 실습까지 한번 제대로 정리해보고 싶었다. 이 글은 그 강의를 듣고 나서 내가 이해한 내용을 정리한 것이다.MCP는 왜 등장했을까GPT나 Claude 같은 LLM을 쓸 때 우리는 보통 이렇게 한다.PDF 업로드하고 "이 내용 바탕으로 보고서 만들어줘" 텍스트 붙여넣고 "이 내용 요약해줘"그런데 여기엔 한계가 있다. 내가 준 정보 안에서만 답변이 가능하다는 것. Gmail이나 Notion, Google Drive에 있는 내 정보를 AI가 직접 가져다 쓸 수는 없을까? 라는 니즈가 자연스럽게 생겼고, 여기서 문제가 하나 생긴다.LLM 종류(Claude, GPT, Gemin.. 더보기
내가 운영했던 서비스들, 그리고 남기는 것들 — 시스템 운영 회고 이 글은 내가 맡아서 운영하고, 결국 인수인계하게 된 여러 서비스들에 대한 회고다.거창한 MSA도 아니고, 대단한 트래픽을 감당했던 것도 아니다.그냥 실제로 살아있는 서비스들을 유지하면서 겪었던 것들을 솔직하게 정리해봤다.들어가며일하다 보면 어느 순간 "이 서비스가 돌아가는 건 나밖에 모른다"는 상황이 생긴다.문서는 없고, 히스토리는 머릿속에만 있고, 왜 이렇게 설정해놨는지 나도 잘 기억 안 나는 것들이 쌓인다.인수인계를 준비하면서 그걸 다시 꺼내보게 됐다. 정리하다 보니 생각보다 많은 걸 겪었고, 생각보다 많은 걸 그냥 넘겼다는 걸 알게 됐다.이 글은 그 정리의 기록이다.운영했던 서비스들 한눈에 보기서비스 구성 실사용 여부 특이사항K8s 채굴 노드Kubernetes 클러스터✅ 운영Prometheus /.. 더보기