자사 오픈/사용 LLM 활용하여 자사 로컬 AI 개발자 시스템 구축 및 서비스 보고
“상용 LLM → 오픈소스 LLM 전이학습”을 통한 로컬 AI Cursor 설계·구현·운영 로드맵
요약
상용 LLM(GPT‑4/Claude)로 신속히 프로토타입을 확보하고, 해당 산출물을 체계적으로 데이터화하여 오픈소스 LLM(Llama 3.x, DeepSeek Coder V2, StarCoder2 등)을 SFT/QLoRA/DPO로 정밀 적응(fine-tuning)한 뒤, vLLM/llama.cpp/Ollama 기반 로컬 서빙과 VS Code Chat Participant API를 통한 “자사형 AI Cursor(사내 Copilot)”를 구축·운영하는 전 과정을 단계별로 제시합니다.
데이터셋 구축(코드 추출·AST/패턴 분석·문서화·테스트/PR변화 추적)은 성패의 핵심이며, 모델/프레임워크/IDE/CI까지 전방위 자동화를 포함합니다.
대체 모델 전환(A→B)과 버전 업데이트 전략(레이어/어댑터/포맷 관리, 오픈AI 호환 API 유지)도 포함하여 기술적 지속가능성을 담보합니다.
vLLM의 PagedAttention·OpenAI 호환 서버, llama.cpp의 경량/광범위 하드웨어 지원, Ollama Modelfile을 활용한 현업 친화 커스터마이징, TRL/PEFT/Axolotl을 이용한 학습 파이프라인, Milvus/Qdrant+BGE‑M3/Nomic‑embed의 검색(RAG) 기반 보강, SWE‑bench/HumanEval/MBPP 기반 평가와 OWASP LLM Top 10 기반 보안·거버넌스까지 실무 레벨로 제공합니다.
docs.vllm.ai1,
ggml-org/llama.cpp2, ollama Modelfile3, Meta Llama 3 라이선스4, Llama 3.1 소개5, DeepSeek Coder V26, StarCoder27, QLoRA8, LoRA9, DPO10, SWE-bench11, HumanEval12, MBPP13, The Stack14, StarCoderData15, tree-sitter16, JavaParser17, jscodeshift18, VS Code Chat API19, LSP20, OWASP LLM Top 1021, Axolotl22, TRL23, PEFT/LoRA24, Milvus25, Qdrant26, BGE‑M327, nomic‑embed‑text‑v1.528.
우리만의 GitHub Copilot
자사 프레임워크(React+TypeScript, NestJS+TypeORM, Java+Spring Boot+{MariaDB, Oracle})의 코드 스타일·레이어링·DDD 패턴·트랜잭션·보안·배포 관례까지 내재화한 “사내 AI Pair Programmer”를 구축합니다.
요구사항→스캐폴딩(예: Create Auth Module)→자동 코드 생성/리팩토링/문서화/테스트 생성→PR 리뷰/커밋 메시지 생성→CI 게이팅과 운영 자동화까지 단일 워크플로우로 수렴시키는 것입니다.
초기엔 상용 LLM으로 빠르게 프로토타입을 생산하되, 그 산출물을 체계적으로 데이터화하여 오픈 LLM로 영속화·내재화합니다.
code.visualstudio.com19, docs.vllm.ai1, ggml-org/llama.cpp2
전체 아키텍처 개요
- 모델 계층: 상용 LLM(초기) → 오픈 LLM(운영)로 전이. 후보: Llama 3.x(8B/70B/405B), DeepSeek Coder V2(MoE, 128K), StarCoder2(코드 특화). ai.meta.com5, deepseek-ai/DeepSeek-Coder-V2-Instruct6, bigcode/starcoder2-15b7
- 학습 계층: Axolotl/TRL/PEFT(LoRA/QLoRA/DPO) 기반 SFT·선호최적화 파이프라인. axolotl22, trl23, peft lora24, QLoRA8, DPO10
- 서빙 계층: vLLM(OpenAI 호환 API, PagedAttention, 텐서/파이프라인 병렬) + llama.cpp(저자원/광범위 HW) + Ollama(Modelfile로 운영 커스텀). vLLM OpenAI 호환29, PagedAttention30, parallelism31, llama.cpp2, Ollama Modelfile3
- IDE/도구 계층: VS Code Chat Participant API 기반 커스텀 AI Cursor, LSP로 정적 분석, jscodeshift/JavaParser/tree‑sitter로 코드 조작. VS Code Chat API19, LSP20, jscodeshift18, JavaParser17, tree‑sitter16
- 데이터/RAG 계층: Milvus/Qdrant에 BGE‑M3 또는 nomic‑embed 임베딩으로 사내 문서·코드 검색·증강. Milvus25, Qdrant26, BGE‑M327, nomic-embed-text-v1.528
- 보안/운영: OWASP LLM Top 10 준수, 모델/데이터 접근통제, 프롬프트 방어, 라이선스/컴플라이언스. OWASP LLM Top 1021, The Stack 라이선스 정책14
시각 자료
- vLLM PagedAttention 메모리 레이아웃 예시(쿼리/키/값 캐시 구조) docs.vllm.ai30
docs.vllm.ai30
- DeepSeek‑Coder‑V2 성능 비교 이미지(코드/수리 능력 강조) Hugging Face6
Hugging Face6
Phase별 실행 가이드(프로토타입 → 데이터셋 → Fine-tuning → 로컬 서빙 → IDE 통합 → 명령어 → CI/CD)
Phase 1: 상용 LLM으로 프로토타입 생성
상용 LLM(GPT‑4/Claude)을 VS Code/브라우저에서 연결하여 “자사 프레임워크 스캐폴딩·컨벤션·테스트 패턴”을 담은 샘플 서비스(React+NestJS+TypeORM, Java+Spring Boot+MariaDB/Oracle)를 빠르게 생성합니다. 생성물은 이후 데이터셋으로 전환할 원천이므로, 프롬프트·컨텍스트·산출물(코드/문서/테스트/PR diff)을 모두 캡처합니다. 이 단계에서 “도메인 명령어 시나리오”(예: Create Auth Module, Generate CRUD with DTO/Service/Repository, Add Oracle XA Transaction, Apply Global Exception Filter)를 확정합니다. 이후 vLLM 오픈AI 호환 엔드포인트로 동일 프롬프트 인터페이스를 이식할 수 있게 설계합니다. docs.vllm.ai29, code.visualstudio.com19
Phase 2: 코드 추출 및 데이터셋 구축(핵심)
- 소스 수집
- 내부 Git(모놀리식/멀티레포), 위키/ADR, API 문서, 코드리뷰/PR 기록, 이슈/스프린트 보드, 운영 플레이북을 수집.
- 오픈 참고 데이터: The Stack/StarCoderData(라이선스 준수·출처 메타데이터 유지). 내부 데이터 우선이며 외부 코드는 레퍼런스/일반 패턴 강화에 제한적으로 사용. The Stack14, StarCoderData15
- 코드 이해·패턴 추출
- tree‑sitter로 다언어 파싱(AST), 레이어 구조/디자인 패턴/에러 핸들링/트랜잭션/보안 주석을 메타데이터화. tree-sitter.github.io16
- Java 영역은 JavaParser+JavaSymbolSolver로 타입/선언관계 해석, 컨벤션(rule set) 자동 추출. JavaParser17
- JS/TS 리팩토링 패턴은 jscodeshift로 codemod 스크립트를 축적(예: NestJS 모듈 스켈레톤 주입, axios→fetch 마이그레이션 등). jscodeshift18
- 학습 샘플 스키마
- 지시형(SFT) 샘플: {instruction, input(context/code/doc), output(code/diff/test/doc)}. 예: “Create Auth Module for NestJS with JWT, user entity, repository, service, controller, e2e test”.
- 코드 채움(FIM) 샘플: prefix, suffix → middle(코드 블록). StarCoder2의 FIM 사양에 맞춤. bigcode/starcoder2-15b7
- PR 기반 “수정 전→후” 페어: 결함 수정/리팩토링 diff와 테스트 통과 여부로 품질 라벨링.
- 문서화/테스트 생성: 코드→JSDoc/Javadoc, REST 스펙→테스트 케이스 생성.
- 정제·안전
- PII/비밀키 제거, 라이선스/저작권 검증, 사내용 고유명사 익명화. The Stack 정책처럼 출처·라이선스 메타데이터 유지. The Stack14
- 네거티브/금지 태스크 정의(보안/규제 위반 방지). OWASP LLM Top 1021
- 인덱싱/RAG
- 사내 문서/코드 스니펫을 Milvus/Qdrant에 벡터화(BGE‑M3 또는 nomic‑embed‑text v1.5, 최대 8K 토큰). 작업지시 프롬프트 전 RAG로 보강. Milvus25, Qdrant26, BGE‑M327, nomic‑embed‑text‑v1.528
Phase 3: 오픈소스 LLM Fine-tuning(모델·기법·레시피)
모델 선택 가이드
- Llama 3.x: 범용·도구사용·멀티링구얼, 8B/70B/405B(128K). 라이선스는 커스텀(배포시 “Built with Meta Llama 3” 표기, 3.1에서는 출력물 활용 범위 확대 언급). 내부 배포·상업화시 조항 검토 필요. Meta Llama 3 라이선스4, Llama 3.1 소개5
- DeepSeek Coder V2: MoE, 코드/수리 강화, 338개 언어, 128K 컨텍스트, 코드 벤치마크 강점. 사내 코드 조수에 적합. Hugging Face6
- StarCoder2: 600+ 언어, 4T+ 토큰, FIM/SLiDE, 코드생성 특화. bigcode/starcoder2-15b7
학습 기법
- SFT: 자사 지시형 데이터로 행동 내재화(스캐폴딩/리팩토링/테스트/문서화). TRL의 SFT Trainer 권장. TRL SFT23
- QLoRA: 4‑bit NF4+LoRA로 대형모델 저자원 미세튜닝(65B도 48GB GPU 1장 사례). 메모리 절약·성능 유지. QLoRA8
- DPO: 선호 최적화(RLHF보다 단순/안정). 코드리뷰·리팩토링 선택쌍으로 적용. DPO10
- PEFT/LoRA 구성: 대상 모듈(attn/ffn), r/alpha/dropout, DoRA/Rank‑Stabilized 옵션, merge/unload로 배포 최적화. PEFT LoRA24, LoRA 논문9
프레임워크
- Axolotl: 다양한 모델/전처리/분산 설정을 YAML로 단순화. axolotl22
- TRL: SFT/GRPO/DPO/Reward Modeling 통합. TRL23
- PEFT: LoRA/QLoRA 어댑터 관리/병합. PEFT24
권장 레시피 예(개략)
- 베이스: DeepSeek‑Coder‑V2‑Instruct 또는 Llama 3.1 8B/70B
- 토크나이저 정규화(사내 토큰/템플릿 일관성)
- SFT 1단계: 지시형 50–150k 고품질 샘플(스캐폴딩/패턴) 1–3 epoch
- SFT 2단계: FIM/인필/리팩토링 diff 대량 샘플 1–2 epoch
- DPO: PR 리뷰 선호쌍 50–100k 스텝(초기엔 소량)
- QLoRA 설정: r=16–64, lora_alpha=16–64, dropout=0–0.1, target_modules=[attn.q_proj,k_proj,v_proj,o_proj,mlp.*]
- 검증: SWE‑bench‑Lite, HumanEval/MBPP 내부 변형, 사내 태스크 스위트. SWE‑bench11, HumanEval12, MBPP13
Phase 4: 로컬 AI 서버 구축(서빙·성능·HW)
vLLM 권장(엔터프라이즈 GPU)
- OpenAI 호환 HTTP 서버(Completions/Chat/Embeddings/ASR/Tokenizer 등), vllm serve로 즉시 기동. OpenAI 호환 서버29
- PagedAttention: KV cache 블록화/효율적 메모리 관리로 고스루풋·지연 단축. 연속 배칭, FlashAttention/FlashInfer, Speculative decoding 지원. PagedAttention30, vLLM 개요1
- 분산/병렬: 텐서/파이프라인 병렬, MoE 데이터 병렬. 예: tensor_parallel_size=8, pipeline_parallel_size=2. parallelism31
llama.cpp(엣지/저자원/광범위 기기)
- C/C++ 단일 바이너리, CPU/GPU/Metal/CUDA/HIP/Vulkan 등 폭넓은 백엔드, 1.5~8bit 정수 양자화, OpenAI 호환 서버(llama-server) 포함. llama.cpp2
- GGUF 포맷로 경량 배포, grammar 제한(JSON)·speculative decoding·embedding/reranking 지원. llama.cpp2
Ollama(운영 친화)
- Modelfile로 FROM/PARAMETER/TEMPLATE/SYSTEM/ADAPTER(LoRA) 선언적 구성, 손쉬운 어댑터 적용·템플릿 관리. Modelfile3
Phase 5: 커스텀 AI Cursor 구현(VS Code 확장)
- VS Code Chat Participant API로 @company-copilot 참가자 등록, 요청 핸들러에서 사내 vLLM/llama.cpp 엔드포인트 호출, RAG 결합, slash 명령어 제공. VS Code Chat API19
- LSP 연동으로 심볼/정의/참조/호버/다이애그 진단 제공(자사 룰 기반 코드스멜 경고). LSP20
- 도구 체인: 코드 생성→파일 트리/패치 스트리밍, 커맨드 버튼으로 “적용/PR 생성/테스트 실행”.
Phase 6: 자사 명령어 체계 구축
- 예: “Create Auth Module”, “Generate CRUD for ‘Order’ with TypeORM/Oracle”, “Add Global Exception Filter”, “Introduce Outbox Pattern in Payment Service”, “Migrate RestTemplate→WebClient”.
- 각 명령어는 템플릿 프롬프트+스키마+코드 스캐폴드+테스트 생성 규칙으로 정의, 모델은 자사 컨벤션을 반영하여 생성.
Phase 7: CI/CD 및 운영 자동화
- PR 자동 리뷰: 모델로 변경요약/리뷰 코멘트/리스크 태깅·체크리스트 생성, 기준 미달시 게이팅. SWE‑bench 유사 내부 과제 회귀 테스트. SWE‑bench11
- 커밋 메시지/릴리즈노트 자동 생성.
- vLLM/llama.cpp 서버 헬스/로그/성능 모니터링, 모델·어댑터 버전 카탈로그, A/B 테스트 롤아웃.
기술적 대안 및 비교(발췌)
항목vLLMllama.cppOllama
API | OpenAI 호환 Chat/Comp/Embed/ASR 등 | OpenAI 호환 서버 제공 | HTTP API·CLI, 레지스트리 |
성능/스케일 | PagedAttention, 연속배칭, 텐서/파이프라인 병렬 | 광범위 HW, 경량·양자화 중심 | 운영 편의성, Modelfile 적용 |
배포 | GPU 서버/클러스터 | 엣지/데스크톱/서버 | 데스크톱/서버 |
커스터마이징 | LoRA 멀티/양자화/FlashAttention | grammar 제약/embedding | ADAPTER(LoRA), TEMPLATE |
vLLM 개요1, OpenAI 호환 서버29, parallelism31, llama.cpp2, Modelfile3
데이터셋 구축: 구체적 방법(필수 요구사항 상세)
- 추출 파이프라인
- 생성 규칙
- SFT instruction: “회사 컨벤션”을 명시(폴더 구조, 모듈 경계, 예외/로그 정책, 보안/검증).
- FIM: 파일 단위 prefix/suffix+중간구간 빈자리 채우기.
- PR 페어: “이슈 설명→패치 diff→테스트 통과” 삼중 레코드.
- 품질 필터
- 빌드·테스트 자동 실행, 실패 샘플 제외.
- 중복/근접중복 제거, 금칙어·비밀키 제거, 라이선스 체크. The Stack 라이선스 정책14
- 스키마(예)
- id, modality(code/doc/diff), lang, framework, layer, instruction, context, target, tests, license, source_url, pr_meta, tags(patterns).
오픈 LLM 버전 업데이트/모델 이전 전략(필수)
- 동일 계열 버전 업: LoRA 어댑터 계층 유지 + 재스캔 데이터로 소규모 SFT/DPO 보정. 배포 전 A/B 및 회귀(사내 태스크+SWE‑bench‑Lite)로 게이트. SWE‑bench Lite32
- A(예: StarCoder2)→B(예: DeepSeek Coder V2) 이전
- 양자화/적재
평가 및 품질 게이트
- 외부 지표: SWE‑bench(패치 생성), HumanEval/MBPP(코딩 과제). SWE‑bench11, HumanEval12, MBPP13
- 내부 스위트: 자사 명령어 100–500개, 프레임워크 패턴 생성/리팩토링/문서화/테스트 생성, 성능/지연/메모리/비용.
- 운영 지표: PR 리뷰 정확도/거짓양성률, 커밋메시지 품질, 개발자 생산성(리드타임/MTTR).
보안/거버넌스/라이선스
- OWASP LLM Top 10 대응(프롬프트 인젝션, 출력 검증, 데이터 오염, 모델 DoS, 공급망, 민감정보 노출, 플러그인 설계, 과도한 에이전시, 과신, 모델 절도). 게이트웨이에서 출력 정책 검사·샌드박스 실행·레이트리밋 적용. OWASP21
- 라이선스
하드웨어/성능 권고(예시 가이드)
- 개발/PoC: Llama 3.1 8B/StarCoder2‑7B, vLLM 단일 A100 80GB 또는 L40S 48GB 2장(텐서 병렬), 또는 llama.cpp Q4_0 CPU+중형 GPU. parallelism31, llama.cpp2
- 사내 스케일: DeepSeek Coder V2(MoE) 또는 Llama 3.1 70B, vLLM 다노드 텐서+파이프라인 병렬.
- 엣지/폐쇄망: llama.cpp GGUF Q4/Q5, Ollama 운영 편의.
구현 스니펫(발췌)
- vLLM 서버 기동
- vllm serve meta-llama/Meta-Llama-3-8B-Instruct --dtype auto --api-key token-abc123 (OpenAI 호환 /v1/chat/completions 등) OpenAI 호환 서버29
- llama.cpp 서버
- llama-server -m model.gguf --port 8080 (Chat: /v1/chat/completions, embedding/reranking/grammar 지원) llama.cpp2
- Ollama Modelfile(요약)
- FROM llama3:latest; PARAMETER num_ctx 8192; SYSTEM """사내 컨벤션..."""; ADAPTER ./auth-lora.safetensors Modelfile3
- VS Code Chat Participant 등록(요약)
- package.json의 contributes.chatParticipants 등록, activate에서 vscode.chat.createChatParticipant로 핸들러 바인딩, stream으로 응답 스트리밍. VS Code Chat API19
- PEFT LoRA 설정(개념)
- LoraConfig(r=32, lora_alpha=32, target_modules=[q_proj,k_proj,v_proj,o_proj,mlp], dropout=0.05) → merge_and_unload로 배포 경량화. PEFT LoRA24
로드맵·마일스톤(요약)
- M1(4주): 상용 LLM 프로토타입(명령어 20개, React+NestJS+TypeORM/Java+Spring 샘플), 데이터 파이프라인 초안. VS Code Chat API19
- M2(6주): 데이터셋 v0(지시형 50k, PR 페어 20k, FIM 50k), RAG 인덱스 구축. Milvus25, BGE‑M327
- M3(6주): 오픈 LLM SFT(QLoRA) v1, vLLM/llama.cpp 서빙 PoC, IDE 확장 베타. QLoRA8, docs.vllm.ai1, llama.cpp2
- M4(4주): DPO 소량 적용, CI PR 리뷰봇, 게이팅 도입, 보안 점검(OWASP). DPO10, OWASP21
- M5(지속): 명령어 확장 100+, 모델/버전 갱신 파이프라인, A/B+회귀 스위트 운영. SWE‑bench11
리스크와 대응
- 데이터 품질/유출: 정제 파이프라인·출처 메타·비밀검출·모의유출 테스트. The Stack 정책14
- 라이선스/출력 활용: Llama 3/3.1 조항 상시 검토·법무 승인 체계. Meta Llama 3 라이선스4, Llama 3.1 소개5
- 벤더 락인: 내부 OpenAI 호환 API로 모델 교체 용이. vLLM OpenAI 호환29
- 성능/지연: PagedAttention/연속배칭·병렬·양자화·스펙 데코딩·프리픽스 캐시. docs.vllm.ai1
부록: 참고 이미지/링크
- vLLM 로고 및 개요: docs.vllm.ai1
- vLLM PagedAttention(쿼리/키/값): docs.vllm.ai30
- DeepSeek Coder V2 성능 그래프: Hugging Face6
상용 LLM로 빠르게 시작하고, 오픈 LLM로 영속화 핵심은 데이터셋 품질과 사내 컨벤션 내재화이며, vLLM/llama.cpp/Ollama로 배포 유연성을 확보하고, VS Code Chat Participant API로 “자사형 AI Cursor”를 구현하여 개발 생산성과 일관성을 동시에 끌어올립니다.
모델 업데이트/교체는 OpenAI 호환 API·어댑터/포맷 전략으로 무중단에 가깝게 수행할 수 있습니다.
보안·라이선스 거버넌스를 내장해 설득 포인트(위험 통제·지속 가능성)도 함께 충족
docs.vllm.ai1, ggml-org/llama.cpp2, ollama Modelfile3, VS Code Chat API19
참고 문헌
- vLLM 개요/서빙/병렬/아키텍처 docs.vllm.ai1
- PagedAttention 설계 docs.vllm.ai30
- llama.cpp 프로젝트 GitHub2
- Ollama Modelfile ollama.readthedocs.io3
- Meta Llama 3 라이선스/사용정책 Hugging Face4
- Llama 3.1 발표/기능 ai.meta.com5
- DeepSeek‑Coder‑V2 Hugging Face6
- StarCoder2 Hugging Face7
- QLoRA arXiv8
- LoRA arXiv9
- DPO arXiv10
- SWE‑bench GitHub11
- HumanEval GitHub12
- MBPP Hugging Face13
- The Stack bigcode-project.org14
- StarCoderData Hugging Face15
- tree‑sitter tree-sitter.github.io16
- JavaParser GitHub17
- jscodeshift GitHub18
- VS Code Chat Participant API code.visualstudio.com19
- LSP microsoft.github.io20
- OWASP LLM Top 10 owasp.org21
- Axolotl GitHub22
- TRL Hugging Face23
- PEFT/LoRA Hugging Face24
- Milvus milvus.io25
- Qdrant qdrant.tech26
- BGE‑M3 Hugging Face27
- nomic‑embed‑text‑v1.5 Hugging Face28
Local AI Coding in VS Code: Installing Llama 3 with continue.dev & Ollama
https://www.youtube.com/watch?v=AV_8czoF3PU
Run Llama 3.1 Locally as Code Assistant in VSCode with Ollama
'AI' 카테고리의 다른 글
상용 LLM에서 오픈소스 LLM으로: AI Cursor 설계, 구현 및 운영 가이드 (0) | 2025.09.18 |
---|---|
AI 러버블 코딩 (0) | 2025.09.15 |
Windows 11에서 Playwright 실행 엔진 개발하기 (0) | 2025.08.25 |
개발자가 로컬에서 Playwright 기반 스크립트 실행 엔진을 구축 (1) | 2025.08.25 |
웹페이지에 JavaScript/TypeScript 스크립트를 저장하고, 이를 Playwright로 동적으로 실행하는 아키텍처와 개발 방법 (0) | 2025.08.25 |