ds4.c - Metal용 DeepSeek V4 Flash 로컬 추론 엔진

4 days ago 11
  • ds4.c는 DeepSeek V4 Flash 전용의 작은 네이티브 추론 엔진으로, 범용 GGUF 실행기나 다른 런타임 래퍼가 아니라 Metal 그래프 실행기와 DS4 전용 로딩·프롬프트 렌더링·KV 상태·서버 API를 제공함
  • 프로젝트는 DeepSeek V4 Flash가 적은 활성 파라미터로 빠르고, 사고 모드에서 문제 복잡도에 비례하는 짧은 사고 구간을 만들며, 100만 토큰 컨텍스트와 압축 KV 캐시를 갖춰 로컬 장기 컨텍스트 추론에 적합하다고 봄
  • 실행 대상은 고사양 개인용 머신이나 Mac Studio이며, 128GB 메모리부터 시작하는 로컬 추론을 목표로 하고, 현재는 Metal-only로 서버도 Metal 전용임
  • 임의의 GGUF를 읽는 범용 로더가 아니며, 이 프로젝트용으로 배포된 DeepSeek V4 Flash GGUF만 지원하고 텐서 배치·양자화 조합·메타데이터·선택적 MTP 상태가 엔진 기대와 맞아야 함
  • 제공되는 2비트 양자화는 routed MoE experts만 비대칭적으로 양자화하고 shared experts·projections·routing은 그대로 둬 품질을 보장하려 하며, 128GB RAM 머신은 q2, 256GB 이상은 q4 모델 다운로드를 권장함
  • 모델 다운로드 스크립트는 https://huggingface.co/antirez/deepseek-v4-gguf에서 받아 ./gguf/에 저장하고, ./ds4flash.gguf가 선택한 q2/q4 모델을 가리키도록 갱신하며, 공개 다운로드에서는 인증이 선택 사항임
  • 벤치마크는 --ctx 32768, --nothink, greedy decoding, -n 256 조건의 단일 실행 Metal CLI 수치로, MacBook Pro M3 Max 128GB q2에서 짧은 프롬프트 생성 26.68 t/s, Mac Studio M3 Ultra 512GB q4에서 짧은 프롬프트 생성 35.50 t/s를 기록함
  • CLI는 일회성 프롬프트와 인터랙티브 다중 턴 채팅을 지원하며, 기본은 사고 모드이고 /nothink 또는 --nothink로 직접 답변 모드를 사용할 수 있음
  • ds4-server는 로컬 OpenAI/Anthropic 호환 서버를 제공하며 /v1/chat/completions, /v1/completions, /v1/messages 등을 지원하고, SSE 스트리밍과 도구 호출 매핑을 처리함
  • 서버는 하나의 mutable graph/KV checkpoint를 메모리에 유지해 같은 프롬프트 접두사를 재사용하지만, 독립 요청을 배치하지 않고 하나의 Metal worker에서 추론을 직렬화하므로 동시 요청은 차례를 기다림
  • 디스크 KV 캐시는 에이전트 클라이언트가 매 요청 전체 대화를 다시 보내는 상황에서 토큰 접두사를 비교해 재사용하며, 세션 전환이나 서버 재시작 뒤에도 유용한 접두사를 다시 prefill하지 않도록 설계됨
  • 전체 100만 토큰 컨텍스트는 대략 26GB 메모리를 쓰며, 128GB RAM에서 2비트 모델 자체가 81GB이므로 README는 100~300k 토큰 정도의 컨텍스트가 더 현실적이라고 안내함
  • 선택적 MTP speculative decoding GGUF는 q2/q4와 함께 쓸 수 있지만 명시적으로 --mtp로 켜야 하며, 현재는 correctness-gated 실험 경로라 의미 있는 생성 속도 향상보다는 약간의 속도 향상에 그침
  • CPU 경로는 정확성 확인용 참조·디버그 경로일 뿐 운영 대상이 아니며, 현재 macOS 가상 메모리 구현 버그로 CPU 코드를 실행하면 커널 크래시가 날 수 있다고 경고함
  • ds4.c는 GGML에 링크하지 않지만 llama.cpp와 GGML의 커널·양자화 형식·GGUF 생태계·엔지니어링 지식에 기반했으며, 일부 소스 수준 요소는 MIT 라이선스 아래 유지 또는 조정됨
Read Entire Article