DeepSeek-V4.1, 비전, 추측 디코딩을 지원하는 FreeToken 포크 (2x3090 벤치마크 포함)
Fork of FreeToken with DeepSeek-V4.1, vision and speculative decoding (2x3090 numbers inside)
핵심 요약
FreeToken 엔진에 DeepSeek-V4.1, 비전 기능, 추측 디코딩을 추가한 포크 버전 공개 및 벤치마크 공유.
- FreeToken 포크 — DeepSeek-V4.1, 비전, 추측 디코딩 기능 추가됨.
- 성능 벤치마크 — 2x3090 환경에서 추측 디코딩 효율성 및 속도 테스트함.
- 하드웨어 최적화 — MoE 모델의 효율적 구동을 위해 CPU/GPU 병렬 처리 개선함.
- 사용자 피드백 — 모델 및 양자화 포맷에 대한 추가 요구사항 수렴 중임.
내 2x3090 박스에서 FreeToken 돌린 지 좀 됐는데, 쓰다 보니 아예 포크 떠서 관리하게 됐음. 혹시 필요한 사람 있을까 싶어서 공유한다.
혹시 안 써본 사람들을 위해 간단히 설명하자면: FreeToken은 엣지 네이티브 MoE 서빙 엔진임. 전문가(expert) 모델을 호스트 RAM이나 NVMe로 오프로드하고 CPU+GPU에서 같이 돌리는 방식이라, 일반 소비자용 하드웨어에서도 큰 MoE 모델을 굴릴 수 있게 해줌. 원본 저장소는 여기: https://github.com/FlashML-org/FreeToken
원본에 내가 추가한 것들:
-
DeepSeek-V4.1-Flash (mHC, CSA2 sparse attention, lightning indexer, Engram n-gram memory, DSpark draft)
-
Qwen3.8-Flash-Next용 비전 기능, OpenAI image_url 입력 엔드투엔드 지원 포함
-
Speculative decoding: MTP draft head (내장 또는 외부 아티팩트), rejection sampling, 재확장 대신 commit-the-accepted-prefix 방식, 선택적 round chaining
-
FTW (fast weight format)에 사이드 테이블(PLE/Engram) 및 MTP 헤드, TP 슬라이싱 기능 추가
-
일부 모델군에 대한 텐서 병렬 로딩, 선택적 fp8 all-reduce
-
양자화 설정 레이어 싹 갈아엎어서 각 모듈의 스킴을 한곳에서 관리하게 함
-
각종 버그 수정 (FTW TP 밴드 오프셋, O_DIRECT 읽기, 스케줄러 spec 예산, Engram 해싱 등)
참고용 내 사양:
-
2x RTX 3090 (각 24GB, PCIe x16), 텐서 병렬 = 2
-
AMD EPYC 7203P, 8코어 / 16스레드, 8x DDR4-2400
-
모델: nvidia/Qwen3.8-Flash-Next-NVFP4 (FTW로 변환, 512 전문가, 오프로드)
-
서빙 플래그: --moe-strategy offload --tensor-parallel-size 2 --moe-cache-auto --ple-backend pinned --expert-load parallel --max-prefill-length 8192 --disable-moe-prefill-overlap
벤치마크 (256 출력 토큰, 5회 실행, 고정 프롬프트, tok/s 평균 / 중앙값):
-
greedy, MTP 끔: 48.0 / 52.4
-
sampled (온도 0.8), MTP 끔: 46.2 / 50.9
-
greedy, MTP 켬: 21.5 / 22.4 (수락률 약 56%)
-
sampled, MTP 켬: 34.0 / 43.8 (sampled 모드에선 MTP가 기본적으로 꺼짐)
일반 경로에서 CUDA 그래프를 쓰면 현재 내 환경에선 MTP가 오히려 손해임. 동일 조건(eager, 오버랩 없음)에선 일반 대비 약 1.5배(17.2 vs 11.4)였고, 배치 사이즈별 검증 그래프를 쓰면 MTP 경로가 단독 실행 시 16에서 28 tok/s까지 올라갔음. 그 검증 그래프 쪽을 지금 파고 있는 중이라, 아직 성능 이득이라고 확답하긴 이름.


