pile·
AI / ML·네이버 D2네이버 D2·

우리 팀만의 vLLM 플러그인 만들기 2편 - 모델 변환부터 배포까지 AI-native로 자동화하기

vLLM 플러그인 2편으로, Hugging Face 모델을 vLLM 으로 변환하는 절차 자체를 Claude Code Skill 로 만들고 두 번의 시행착오를 거쳐 다듬어 온 기록이다. 모델 7개를 같은 절차로 변환했고, 지식 전달에 드는 호출당 토큰을 6,900개에서 170개로 97% 줄였다.

핵심 포인트
  • 모델 변환은 단순 코드 마이그레이션이 아니다. 가중치는 유지하되 구현을 vLLM 실행 방식에 맞게 다시 쓰는 일이라 모델과 서빙 인프라 양쪽 지식이 필요하다.
  • 그래서 모델 개발자 혼자도, MLOps 엔지니어 혼자도 하기 어렵다. 전자는 vLLM 풀링 인터페이스·IO Processor 를 모르고 후자는 가중치 구조와 Transformers·vLLM 구현의 미묘한 차이를 모른다.
  • 여기에 vLLM 이 약 2주 간격으로 새 버전을 내며 인터페이스가 계속 바뀐다(3년간 v0.1 → v0.20). 사람이 매번 따라가기 어렵다.
  • `convert-vllm` 스킬은 다섯 하위 스킬로 나뉜다. 환경 구성 → 모델 변환 → IO Processor 개발 → 테스트·벤치마크 → MLflow 등록·PR 생성.
  • 첫 모델에서 정리한 규칙 5개가 일곱 번째 모델을 거치며 **45개**로 늘었고, 축적된 규칙이 다음 변환에 쓰이며 점점 빨라졌다.
상세 정리
  • 완전 자동이 아니라 협업 장치를 둘 설계했다.
  • ① `plan.md` 승인 게이트: 처음부터 끝까지 맡기면 잘못된 판단을 늦게 발견하므로, 실행 전에 계획을 문서로 쓰게 하고 사람이 승인한 뒤에만 구현을 시작한다. 각 단계가 끝날 때마다 결과를 다시 확인한다.
  • ② 구현과 검증의 컨텍스트 분리: **변환을 수행한 에이전트가 자기 결과를 검증할 때 자기 구현을 맞다고 전제해 오류를 놓치는 경향**을 관찰했다. 그래서 테스트 작성과 결과 검증은 별도 컨텍스트의 하위 에이전트가 맡는다.
  • `convert-model` 단계는 `config.json` 을 분석해 생성·풀링·분류 등 모델 유형을 판단하고, vLLM 용 설정 클래스·모델 클래스·가중치 적재 코드·등록 코드를 작성한다.
  • `develop-io-processor` 는 풀링 모델 등 일부에만 필요해 모델 유형에 따라 실행 여부가 자동으로 결정된다.
  • `test-and-benchmark` 의 핵심은 동등성(parity) 검증, 즉 Hugging Face 원본과 vLLM 변환본이 같은 출력을 내는지 확인하는 것이다.
  • 변환 대상은 분류·NER·임베딩·ABSA·이미지 스코어링 등 서로 다른 유형 7개였다.
  • **시행착오 ① — 도구가 변하면 스킬도 변해야 한다**: 초기 버전에는 체크포인트 4개와 상태 필드 9개가 있었다. 당시 Claude Code 컨텍스트 상한이 200K 라 한 단계만 실행해도 가득 차, `--from=step` 으로 재개해야 했다.
  • 1M 컨텍스트가 되자 전제가 무너졌다. 같은 변환이 압축 없이 한 세션에서 끝났고, 체크포인트를 제거하니 `SKILL.md` 가 492줄 → 332줄로 **33% 감소**했다. 세션당 5회 이상이던 컨텍스트 압축은 사라졌다.
  • 즉 SKILL.md 의 3분의 1은 모델 변환 지식이 아니라 당시 컨텍스트 한계를 우회하는 임시 구조였고, 제약이 사라진 뒤에도 남아 복잡도만 높이고 있었다.
  • 이 문제가 일회성이 아니라는 점도 짚는다. 최근 Claude 모델이 Opus 4.6 → 4.7 로 바뀌며 4.6 에서 동작하던 스킬 일부가 멈춘 사례가 있었다. **"기술 부채는 소스 코드에만 생기지 않는다."**
  • **시행착오 ② — 무엇을·언제·얼마나 줄지 설계해야 한다**: 처음에는 Claude Code 훅으로 도구 호출 직전마다 팀 지식 베이스 전체를 컨텍스트에 넣었다.
  • 그 결과 호출당 약 6,900토큰이 추가됐고 22회 반복하면 같은 지식이 중복돼 약 15만 2천 토큰을 차지했다.
  • 더 큰 문제는 양이 아니라 적합성이었다. 풀링 모델을 변환하는 중에 생성·임베딩·재순위화 규칙이 함께 들어가 에이전트가 엉뚱한 규칙을 참조하는 일이 생겼다.
  • 결론이 분명하다. 컨텍스트 상한이 1M 으로 커져도 정보가 많아질수록 중요한 내용에 대한 주의가 분산되는 현상(attention dilution)은 남는다.
  • 그래서 필요한 지식만 골라 읽는 스킬 방식으로 바꿔 호출당 170토큰으로 줄이면서 같은 목표를 더 잘 달성했다.
  • 마지막으로 이 협업 방식을 저장소 경계 너머로 확장해, 사용자가 GitHub Issue 하나를 작성하면 변환부터 배포까지 이어지는 E2E 파이프라인을 만들었다.
왜 읽나AI 에이전트에게 팀의 도메인 지식을 물려주려는 사람에게, 훅으로 전부 밀어 넣는 방식이 왜 실패하는지와 도구가 바뀌면 자동화도 함께 걷어내야 한다는 것을 수치로 보여준다.
네이버 D2
네이버 D2 블로그
원문은 여기서 이어서 읽을 수 있어요
원문 읽기
읽음 (0)

이 글과 비슷한

  1. AI / ML·stackoverflow-blogStack Overflow Blog·

    에이전틱 SDLC를 QA 엔지니어링 마인드셋으로 구축하기

    Motorola Solutions의 테스트 엔지니어링 선임 매니저 Suneet Malhotra가 Stack Overflow 팟캐스트에 출연해 MCP(Model Context Protocol) 기반 에이전틱 SDLC 파이프라인 구축과 LLM-as-judge 평가 방법론을 소개했다. QA 엔지니어링 관점을 소프트웨어 개발 생애 전반에 적용하고, 설계 단계 직후 스펙을 강화해 결함 비용을 줄이는 'QA shift-left' 접근을 다룬다.

    요약 이어보기
    #llm-agent#mcp#test-automation+2
  2. AI / ML·LINE EngineeringLINE Engineering·

    보안 업무를 위한 AI 에이전트 플랫폼 「SAGE」 개발기 1편: 판단은 사람에게 남기는 설계

    LY Corporation Security Development Division이 보안 업무용 AI 에이전트 플랫폼 SAGE의 개발 과정을 공개했다. "완전 자동화"와 "도입 미루기" 양 극단 사이에서 "판단은 사람에게 남기는 설계"를 핵심 원칙으로 삼고, 3단계 점진적 도입 전략(AI 보조→에이전트 협업→자동화)을 채택했다. 현재는 1단계를 중심으로 파일럿·실운영 중이다.

    요약 이어보기
    #llm-app#opensearch#mcp+2