vLLM으로 서빙하고 성능 벤치마킹하기
·
ssafy/AI Engineering
AI 실습의 마지막 단계다. 세 단계가 모델을 만드는 과정이었다면, 이번에는 만든 모델을 서비스에 올린다.서빙 엔진으로는 vLLM을 쓴다. 같은 모델이라도 요청을 어떻게 받아 처리하느냐에 따라 처리량이 크게 달라지는데, vLLM은 KV Cache를 블록 단위로 관리하고 요청을 알아서 배치로 묶는다. 이 글에서는 vLLM이 무엇을 다르게 하는지, 엔진에서 어떤 값을 설정했고 그 값들이 무슨 의미인지, 그리고 Transformers와 비교했을 때 성능이 어떻게 나왔는지를 정리한다. 01 KV Cache는 이전 계산을 다시 하지 않게 한다LLM은 이전 토큰들을 보고 다음 토큰을 만든다. 그래서 아무 장치가 없으면 토큰 하나를 만들 때마다 앞의 모든 토큰을 처음부터 다시 계산하게 된다.KV Cache: 과거 토..
양자화와 QLoRA로 6GB에서 1.7B 모델 학습하기
·
ssafy/AI Engineering
지난 실습에서 만든 Text-to-SQL 데이터셋으로 이번에는 1.7B 모델을 학습시킨다.문제는 이 모델이 학습에 약 8GB의 VRAM을 요구하는데 내 환경은 6GB라는 것이다. 그래서 모델을 4비트로 양자화해서 크기를 줄인 뒤 그 위에 LoRA를 얹는 방식으로 학습을 진행하는데, 이것을 QLoRA라고 한다. 이 글에서는 양자화가 무엇을 하는 것인지, 양자화 과정에서 어떤 값을 설정했고 그 값들이 무슨 의미인지, 그리고 학습과 평가에서 어떤 결과가 나왔는지를 정리한다. 01 양자화는 값 대신 대표값 번호를 저장하는 것이다양자화(Quantization): 숫자 하나를 표현하는 비트 수를 줄여서 모델의 크기를 줄이는 기법원리는 비슷한 값끼리 묶어서 대표값 몇 개를 정해두고, 각 가중치는 그 대표값 중 몇 번..
Text-to-SQL 지식 증류 데이터셋으로 LoRA 학습하기
·
ssafy/AI Engineering
AI 실습 특강의 두 번째 단계다. 앞 단계에서 거대 모델(solar-pro3)로 만든 데이터셋을 가지고, 이번에는 소형 모델을 Text-to-SQL 과제에 맞게 학습시킨다. 01과 달라진 것은 정답이 있다는 점이다. 01의 train.csv는 db_id, question 두 컬럼뿐이었지만 02의 train.csv는 db_id, query, question 세 컬럼이다. 이 query가 Teacher가 생성한 SQL이고, Student가 맞춰야 할 목표이다. 베이스 모델은 SmolLM2-360M-Instruct이고, 학습 방식은 LoRA다. 학습 전후를 execution accuracy로 재서 0.567에서 0.750으로 올렸다. 01 데이터는 질문과 정답 SQL 한 쌍이다pandas 대신 Hugging..
지식 증류를 위한 LLM 기반 Pseudo Labeled 데이터 생성
·
ssafy/AI Engineering
이번 AI 실습 특강의 주제는 지식 증류(Knowledge Distillation)다. 크고 성능 좋은 모델이 만들어낸 결과를 작은 모델이 학습하게 해서, 가벼운 모델로도 특정 작업을 처리하게 만드는 것이 목표다. 전체는 네 단계로 진행된다. 먼저 정답이 없는 데이터에 거대 모델로 정답을 붙이고, 그 데이터로 소형 모델을 LoRA 파인튜닝하고, 양자화를 얹어 더 큰 모델까지 학습시키고, 마지막으로 vLLM으로 서빙해서 성능을 비교한다. 이번 글에서는 그 첫 단계인 Pseudo Labeling을 다룬다. 01 지식 증류는 큰 모델의 답을 작은 모델에게 물려주는 것이다큰 모델은 성능이 좋지만 무겁고 비싸다. 작은 모델은 싸고 빠르지만 혼자 학습해서는 성능이 안 나온다. 그래서 큰 모델을 선생(Teacher)..
메시지를 잃지 않는 RabbitMQ 컨슈머 만들기
·
ssafy/공통 프로젝트: 와글와글
싸피 공통 프로젝트에서 익명 채팅 서비스를 만들었고, 나는 AI 파트를 맡았다. 내가 담당한 기능은 채팅방에서 실시간으로 범죄 의심 패턴을 찾아내는 것이었다.이 기능은 백엔드 서버가 채팅 메시지를 모아서 큐에 넣고, AI 서버가 큐에서 꺼내 분석하고 결과를 돌려주는 구조로 설계됐다. 큐를 쓰기로 정한 건 팀의 설계 결정이었고, 큐에서 꺼내는 쪽이 내 담당이었다. 문제는 내가 메시지 큐를 만져본 적이 없다는 것이었다. 일정이 촘촘했기에, 구현하면서 개념을 주워 담았다. 기능은 돌아갔고 MR도 통과했는데, 며칠 지나니 큐를 왜 durable로 잡았는지 ACK를 왜 콜백 뒤에 찍었는지, 솔직히 메시지 큐가 뭔지도 설명을 못할 수준이었다.그래서 코드와 설계 명세서를 다시 열고, 컨슈머 하나 만드는 데 실제로 필..
젠킨스로 도커 배포 자동화하기
·
ssafy/공통 프로젝트: 와글와글
앞서 만든 이미지를 서버에 올리는 게 다음 일이었다. 수동으로 하면 서버에 접속해서 코드 받고, 빌드하고, 기존 컨테이너 지우고, 새로 띄우고, 잘 떴는지 확인하는 다섯 단계다. 코드 고칠 때마다 이걸 반복하는 것도 번거롭지만, 진짜 문제는 중간에 실패했을 때다. 기존 컨테이너는 이미 지웠는데 새 컨테이너가 안 뜨면 서비스가 죽은 채로 남는다. 이 절차를 대신 실행해주는 게 젠킨스이고, 팀이 이미 쓰고 있어서 AI 배포도 거기에 얹기로 했다. 01 Jenkinsfile을 올렸는데 아무 일도 안 일어났다젠킨스는 정해진 순서로 명령을 대신 실행해주는 서버다. 실행할 절차는 `Jenkinsfile`이라는 파일에 적는다. 코드 받고, 빌드하고, 기존 컨테이너 교체하고, 잘 떴는지 확인하는 순서를 여기에 쭉 써두..
도커가 처음인 채로 Dockerfile 써보기
·
ssafy/공통 프로젝트: 와글와글
싸피 공통 프로젝트에서 AI 파트를 맡았다. 배포 얘기가 나올 즈음 인프라 담당 팀원이 백엔드와 프론트를 서버에 올려둔 상태였고, 나는 AI 서버만 도커로 감싸면 되는 상황이었다.문제는 내가 도커를 만져본 적이 없다는 것이었다.그래서 한 줄씩 왜 필요한지 찾아보면서 정리했다. 도커를 처음 보는 사람 기준으로 썼고, 젠킨스 배포는 2편에서 이어진다. 01 코드는 깃에 있는데 왜 굳이 이미지로 만드나코드는 이미 저장소에 있으니 서버에서 받아서 실행하면 되는 것 아닌가.안 된다. 서버는 내 노트북과 다른 컴퓨터이기 때문이다. 내 쪽에는 파이썬 3.11이 깔려 있고 영상 처리에 쓰는 ffmpeg도 있는데 서버에는 없다. 코드만 올리면 실행하자마자 import에서 죽는다. 서버에 필요한 걸 하나씩 깔아줄 수도 있..
EC2부터 CI/CD까지, 배포 인프라가 굴러가는 원리 정리하기
·
ssafy/공통 프로젝트: 와글와글
싸피 2학기 공통 프로젝트를 진행하면서 이번에 처음으로 인프라 쪽을 건드려보기로 했다.팀의 인프라 담당 팀원이 인프라 대부분을 맡아줬고, 나는 AI 파트 쪽에 필요한 부분만 관리하는 식이었다.기술적 논의를 진행하면서 리버시 프록시, 인바운드, 인증서 갱신과 같은 말들이 후두둑 쏟아지는데, 친하지 않는 용어들이라서 따로 메모해두고 공부하기로 했다. 이 글은 그 메모를 순서대로 다시 세운 것이다. 배포를 직접 해본 경험담이 아니라, 배포되는 걸 옆에서 보면서 "이게 왜 이렇게 되는 건가"를 따라간 공부 기록에 가깝다. 00 배포 구조npm run dev를 치면 localhost:8080이 열리는데, 이 주소는 내 노트북을 닫으면 사라진다. 그래서 24시간 켜져 있는 컴퓨터가 필요하고, 그게 EC2다. 그 컴..
mypy → pytest → ruff, 검증 파이프라인을 프로젝트에 활용하기
·
ssafy/공통 프로젝트: 와글와글
싸피 2학기가 시작되고 6주간의 짧은 공통 프로젝트를 진행 중이다. 오랜만에 AI 서버 스캐폴딩 작업을 진행했는데, 몇 번 해본 작업이라서 특별한 건 없지만요번에는 해본 적 없었던 검증(테스트) 과정을 나름 체계적으로 구성해봤기에, 이렇게 또 새롭게 배운 내용을 정리하고자 한다. AI의 도움을 어느 정도 받으면서 작업을 하다보니, 작업이 끝날 때마다 즉, 푸시할 때마다 작업이 끝났다고 부를 수 있는 기준이 있으면 좋을 것 같았다.그리고 내가 기존에 알던 pytest 이외에도 꽤나 여러 테스트들이 있는 것 같아서, 이번에 한 번 짚고 넘어가자 싶었다. 01 검증 방법에는 뭐가 있는지코드를 검증하는 방법은 크게 두 갈래로 나뉜다.정적 분석(static analysis): 코드를 실행하지 않고, 코드 자체(구..
바이브코딩으로 나만의 영단어 암기 앱 만들기: VocaVibe
·
tech digest/Vibe Coding
취준생에게는 많고 많은 산이 있는데,그중 가장 하기 싫고 높은 산이 나에겐 바로 영어다 ...싸피 출퇴근길에 릴스만 하염없이 보다가 시간을 낭비하는 나를 발견하고휴대폰으로 간단히 자기 개발할 수 있는 게 뭘까 생각하다가나의 가장 큰 약점인 영어를 보완해 보자는 것이었다.중고등학교 때 영어를 경선식 영단어책으로 공부해 왔었다.나는 이 방식이 가장 기억에 오래 남고 하는 과정에서도 재미가 있다고 생각해서나를 위한 영어단어 앱을 만들어보면 어떨까 하여 시작된 나의 바이브코딩 이야기근데 꽤나 잘 만든 것 같아서,나처럼 나만을 위한 무언가, 혹은 재미있는 아이디어를 만들어보고 싶은 사람들에게 도움이 될까 하여나의 바이브코딩 과정을 한 번 정리해 보았다.이 과정을 겪으며 가장 중요하게 생각했던 결국 AI가 코드를 ..