확장 아이디어: 커스텀 샘플러(custom samplers)를 지원하는 llama-server
요약
llama-server에 커스텀 샘플링 로직을 직접 추가할 수 있는 확장 기능 아이디어와 프로토타입을 소개합니다. 이를 통해 사용자는 전체 코드를 포크하거나 래퍼를 만들지 않고도 루프 감지, 단계별 샘플링 파라미터 변경, 개인정보 삭제 등 실험적인 샘플링 기능을 구현할 수 있습니다.
핵심 포인트
- llama-server에 커스텀 샘플러를 추가하여 유연한 샘플링 로직 구현 가능
- 양자화된 모델에서 발생하는 토큰 반복 루프를 감지하고 차단하는 예시 제공
- 사고(thinking), 도구 호출, 문맥 기반 문법 토글 등 다양한 확장 시나리오 제시
- MTP(Multi-Token Prediction) 및 투기적 디코딩(speculative decoding)과 호환 가능
사용자가 전체 포크(fork)를 유지 관리하거나 llama-server가 할 수 있는 모든 기능을 재구현하는 래퍼(wrapper)를 만들 필요 없이, llama-server에 커스텀 샘플링(sampling) 로직을 추가할 수 있도록 하는 아이디어 및 프로토타입(OpenCode를 통해 Qwen3.6-27B-UD-Q6_K_XL로 제작됨)입니다.
포함된 확장 예시는 제가 심하게 양자화된(heavily quantized) 모델에서 흔히 목격하는 현상, 즉 1~3개의 토큰을 반복하며 갇혀버리는 일종의 루프를 감지하고 끊어내는 기능을 담고 있습니다. llama.cpp에 포함되지 않은 샘플링에 대한 다른 아이디어로는 사고(thinking) 단계, 도구 호출(tool calling), 그리고 일반 생성 단계 동안 서로 다른 샘플링 파라미터(sampling parameters)를 사용하는 것; 문맥(context)에 따라 문법(grammars)을 토글하는 것; 비-GBNF 문법(non-GBNF grammars); 생성된 SQL 쿼리에서 실제 테이블만 참조되도록 보장하는 것; 샘플러 자체에서 개인정보(PII)를 삭제하는 것; 그리고 기타 실험적인 일반 샘플링 접근 방식 등이 있습니다.
이것은 MTP가 병합된 이후의 최신 master 브랜치를 기반으로 작성되었습니다; 투기적 디코딩(speculative decoding)과도 함께 작동합니다.
여기서 투표를 위해 게시되었습니다: https://github.com/ggml-org/llama.cpp/discussions/23028
브랜치: https://github.com/dpmm99/llama.cpp/tree/master-with-sampling-extensions
예시 샘플러 확장은 상당히 짧은 파일 하나로 구성되어 있습니다: https://github.com/dpmm99/llama.cpp/blob/master-with-sampling-extensions/examples/sampling-ext/loop-detector.cpp
테스트해보고 싶으신 분들을 위해 편의상 제공하는 Vulkan Windows x64 릴리스 복사본입니다: https://github.com/dpmm99/llama.cpp/releases/tag/dpmm99-0.1 하지만 인터넷에서 가져온 무작위 실행 파일(executables)을 신뢰하지 말라는 일상적인 주의 사항을 다시 한번 말씀드립니다. ;)
예시 명령어:
llama-server -np 1 -c 32768 --temp 0.1 -m Qwen3.6-27B-UD-Q6_K_XL-MTP.gguf --spec-type draft-mtp --spec-draft-n-max 3 --sampling-ext-path sampling-ext-loop-detector.dll
AI 자동 생성 콘텐츠
본 콘텐츠는 Reddit AI Engineering의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기