Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
128 commits
Select commit Hold shift + click to select a range
8de026a
dflash sliding window layer support, fix eager backend
dcw02 Jul 30, 2026
7757409
make anchor sampling batch invariant and normalize loss globally acro…
dcw02 Jul 30, 2026
9fc6514
Add configurable learning-rate schedules
Aug 1, 2026
3ef0094
Decouple online prompt ordering from run seed
Aug 1, 2026
99431d9
Add Kimi K3 DSpark capture support
Aug 1, 2026
967fd9e
Add Kimi K3 V1C disaggregated recipe
Aug 1, 2026
9ed2462
Support Inkling managed capture
maocheng23 Aug 1, 2026
623c07e
Add Inkling two-node recipe
maocheng23 Aug 1, 2026
2021359
docs: harden Kimi K3 disaggregated launch settings
Aug 1, 2026
b7d21db
feat(dspark): add Kimi-K3 MLA and KDA draft backbones
Aug 1, 2026
15fd6c4
fix(data): register Kimi-K3 thinking template
Aug 1, 2026
2ecd685
fix(runtime): force terminal Mooncake cleanup
Aug 1, 2026
af428cc
fix(runtime): validate online flow window before data build
Aug 1, 2026
e1a4bd1
fix(recipe): preserve Kimi K3 global batch window
Aug 1, 2026
daa41a3
fix(runtime): fill optimizer window before byte throttle
Aug 1, 2026
6ea5ab1
fix(tracking): log resolved config with recursive redaction
Aug 1, 2026
3e27ad2
fix(runtime): stream large online prompt datasets
Aug 1, 2026
bfb662b
fix(model): compile long Kimi K3 MLA attention
Aug 1, 2026
c76ca3c
fix(model): fuse expanded long Kimi MLA attention
Aug 1, 2026
16e4d74
fix(runtime): reclaim durable Mooncake samples per step
Aug 1, 2026
108eda3
fix(dspark): checkpoint config carries BOTH rope schemas
Boreas618 Aug 1, 2026
dd8b00a
fix(dspark): shard production KDA launches
Aug 1, 2026
3faa234
fix(tracking): retain owned W&B run handle
Aug 1, 2026
5301d1e
fix(tracking): commit W&B step metrics
Aug 1, 2026
4095c16
fix(kimi-k3): pipeline capture and trainer throughput
Aug 2, 2026
e62fe83
fix(kimi-k3): complete disaggregated training adoption
Aug 2, 2026
27502ff
style: apply repository formatters
Aug 2, 2026
0c47c0a
fix lint and fix:generate rope_theta that matches old transformer ver…
jiapingW Aug 3, 2026
5072675
Merge branch 'main' into agent/dual-rope-export
jiapingW Aug 3, 2026
40d88f8
fix test
dcw02 Aug 3, 2026
745b092
Merge branch 'main' into agent/inkling-sglang-capture-compat
jiapingW Aug 3, 2026
2dcfcdf
fix lint and del overfit intro in examples/gates/README
jiapingW Aug 3, 2026
edc450a
more fixes
dcw02 Aug 3, 2026
5c93516
Merge pull request #734 from maocheng23/agent/inkling-sglang-capture-…
jiapingW Aug 3, 2026
f53db79
Merge pull request #731 from modal-projects/dcw02/dflash-correctness
jiapingW Aug 3, 2026
ec6af00
Merge branch 'main' into agent/kimi-k3-dspark-disaggregated-recipe
jiapingW Aug 3, 2026
5a8d926
fix lint and merge main
jiapingW Aug 3, 2026
ed06ab2
restore code according to PR 731 and fix unittest
jiapingW Aug 3, 2026
469da28
feat: Kimi-K3 DSpark support -- template, draft config, example run
Boreas618 Aug 3, 2026
3e71683
perf: make reference channel polling linear
ddlearn Aug 3, 2026
642f6ed
Merge pull request #735 from maocheng23/agent/kimi-k3-dspark-disaggre…
jiapingW Aug 3, 2026
e87ae6c
Merge branch 'main' into feat/kimi-k3-dspark-support
jiapingW Aug 3, 2026
2768619
update news about specforge v0.3.0
jiapingW Aug 3, 2026
0d505d6
add inkling and kimi-k3
jiapingW Aug 3, 2026
f19d389
Remove in-house Kimi-K3 MLA/KDA experiments and publish a single rena…
Boreas618 Aug 4, 2026
a0ae7f4
Fix the leftover hardcoded recipe count in tests/test_config/test_uni…
Boreas618 Aug 4, 2026
f110be3
Merge pull request #752 from Boreas618/main
jiapingW Aug 4, 2026
211d83a
fix
jiapingW Aug 4, 2026
3107f3c
DFlash/Domino: Add support for the FlexAttention FLASH backend
zou3519 Jul 21, 2026
1e014d1
support sliding-window
jiapingW Jul 31, 2026
19836f8
update lmsys blog link
jiapingW Aug 4, 2026
7d5a693
Merge pull request #751 from sgl-project/news_update
jiapingW Aug 5, 2026
a8393c7
fix(data): attach record images in regenerate_train_data for VLM prompts
mingliangfu Aug 5, 2026
eaaf37f
docs: add ROCm known-issues notes to installation guide
Aug 4, 2026
ac075b0
fix: update Python version requirement in pyproject.toml
Aug 4, 2026
b788657
fix: update exception handling in Trainer class
Aug 4, 2026
a8c0993
feat: enhance spec_capture_sink with dynamic pinning configuration
Aug 4, 2026
2b43be9
docs: rewrite ROCm installation for container-based sglang v0.5.14 flow
Aug 4, 2026
33b5baa
rocm: map hard-pin onto with_soft_pin on older Mooncake builds
Aug 4, 2026
8a3bcdc
managed_local: expose Mooncake default_kv_lease_ttl to fix teardown d…
Aug 4, 2026
0790275
docs: add dedicated AMD ROCm tutorial and link from installation guide
Aug 4, 2026
b29cff3
docs: move and expand AMD ROCm guide into dedicated basic_usage tutorial
Aug 4, 2026
ff275f6
docs: add ROCm Qwen3.5-4B DFlash reference results for MI300X and MI355X
Aug 4, 2026
53a7f39
docs(configs): add AMD ROCm Qwen3.5-4B DFlash example configs and upd…
Aug 4, 2026
4a2701c
fix: disable SGLang radix cache by default and allow opt-in
Aug 4, 2026
f5fa579
perf: make server capture requests prefill-only
ddlearn Aug 5, 2026
2a6c2e0
server-capture: async capture streaming + DSpark method in the v0.5.1…
maocheng23 Aug 5, 2026
e8f0879
optimize train
jiapingW Aug 7, 2026
a87aa7d
flex_attention use triton not auto
jiapingW Aug 7, 2026
7df454f
add test sh
jiapingW Aug 7, 2026
e09e3c3
Merge pull request #757 from maocheng23/feat/v0514-async-dspark-capture
jiapingW Aug 8, 2026
24d0565
Merge remote-tracking branch 'origin/main' into rocm-foundation
jiapingW Aug 8, 2026
35b94c3
Merge branch 'main' into perf/zero-max-new-tokens
jiapingW Aug 8, 2026
d27bb69
Merge pull request #749 from ddlearn/perf/linear-ref-channel-poll
jiapingW Aug 8, 2026
a6b6b02
Merge pull request #742 from Boreas618/agent/dual-rope-export
jiapingW Aug 8, 2026
0ac2198
Merge remote-tracking branch 'origin/main' into optimize-train
jiapingW Aug 8, 2026
7e1c767
update dir and del fixed path
jiapingW Aug 8, 2026
ea259cc
fix unittest
jiapingW Aug 8, 2026
12bd2be
Merge branch 'main' into perf/zero-max-new-tokens
jiapingW Aug 9, 2026
17fee18
fix CI:del unused network
jiapingW Aug 9, 2026
a9637c3
Merge pull request #756 from ddlearn/perf/zero-max-new-tokens
jiapingW Aug 9, 2026
4bd6371
feat(npu): managed-local disaggregated DFlash online training on Asce…
jiapingW Aug 10, 2026
87e8cf4
Merge pull request #722 from curnane-lab/npu_disaggregated
jiapingW Aug 10, 2026
c0b7644
Merge remote-tracking branch 'origin/main' into rocm-foundation
jiapingW Aug 10, 2026
2cde75c
--sglang-disable-radix-cache is false default.
jiapingW Aug 10, 2026
368c077
Merge pull request #760 from sgl-project/fix_ci
jiapingW Aug 10, 2026
ccce246
fix small bugs
jiapingW Aug 10, 2026
20e952e
release: prepare PyPI 0.2.0 publishing
jiapingW Aug 10, 2026
72ddf63
ci: update PyPI workflow actions
jiapingW Aug 10, 2026
368217e
Merge pull request #698 from zhentaocc/rocm-foundation
jiapingW Aug 10, 2026
2233a65
docs: add Ascend NPU tutorial
mingliangfu Aug 10, 2026
5b63574
use the fixed parameters:max_attempts and retry_interval_s
jiapingW Aug 10, 2026
e6440f0
Merge pull request #714 from zou3519/rzou/flex-attention-flash-backend
jiapingW Aug 10, 2026
c809bd5
Merge branch 'main' into add_npu_doc
curnane-lab Aug 10, 2026
5a12f2f
feat: trim_loss_positions — compute teacher/logits/loss only at super…
julyanghar Jul 20, 2026
efbc096
feat: SP-native trim_loss_positions under USP sequence parallelism
julyanghar Aug 1, 2026
22bfa42
Merge pull request #759 from sgl-project/optimize-train
jiapingW Aug 14, 2026
2c1ecd2
add trim_loss_positions to eagle3 strategy
jiapingW Aug 17, 2026
7a699f3
Merge origin/main into pr-trim-a
jiapingW Aug 17, 2026
30e5db5
fix unittest
jiapingW Aug 17, 2026
4c8e0c3
Merge pull request #762 from curnane-lab/add_npu_doc
jiapingW Aug 17, 2026
946aed8
Merge branch 'main' into pypi
jiapingW Aug 17, 2026
bdeb7d8
Merge pull request #705 from julyanghar/pr-trim-a
jiapingW Aug 18, 2026
4fcc231
Merge branch 'main' into feat/kimi-k3-dspark-support
jiapingW Aug 18, 2026
ca90c99
fix lint
jiapingW Aug 18, 2026
8b7b0bd
fix unittest
jiapingW Aug 18, 2026
e9b221e
fix unittest
jiapingW Aug 18, 2026
2590f48
Merge pull request #748 from Boreas618/feat/kimi-k3-dspark-support
jiapingW Aug 18, 2026
64ad8f7
refactor configs dir
jiapingW Aug 18, 2026
e5fa49d
polish
jiapingW Aug 19, 2026
586b48b
update content
jiapingW Aug 20, 2026
c5cac93
fix unittest
jiapingW Aug 20, 2026
3926ae0
del hardcode config tests
jiapingW Aug 20, 2026
93adc52
Fuse Domino cross entropy with Triton
zou3519 Jul 21, 2026
10a61a1
Merge pull request #761 from sgl-project/pypi
jiapingW Aug 21, 2026
3a6db47
Merge branch 'main' into update_config_desc
jiapingW Aug 21, 2026
e54e0f8
Merge pull request #770 from sgl-project/update_config_desc
jiapingW Aug 21, 2026
5dc34ae
Merge pull request #716 from zou3519/rzou/domino-fused-triton-ce
jiapingW Aug 21, 2026
f7b1179
Merge remote-tracking branch 'origin/main' into del_hardcode_tests
jiapingW Aug 21, 2026
17cee84
perf(rocm): enable Liger fused RMSNorm/SwiGLU for AMD DFlash configs
Aug 20, 2026
de0ea2f
Merge pull request #778 from sgl-project/del_hardcode_tests
jiapingW Aug 21, 2026
bc4be0b
feat(mtp): add Qwen3.5 MTP training support
jiapingW Aug 21, 2026
cb0ebfa
Merge pull request #667 from curnane-lab/add_mtp_support
jiapingW Aug 21, 2026
6f9fbbc
feat(dflash): allow plain-rope drafts on multimodal captures
mingliangfu Aug 25, 2026
388a83c
Merge branch 'main' into perf/amd-dflash-liger-kernels
jiapingW Aug 26, 2026
f072dc0
Merge pull request #779 from zhentaocc/perf/amd-dflash-liger-kernels
jiapingW Aug 26, 2026
223019b
Merge upstream main into add_vl_support
mingliangfu Aug 27, 2026
9a7ffbd
refactor(dflash): remove the mRoPE draft path, plain-rope only
mingliangfu Aug 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
65 changes: 45 additions & 20 deletions .github/workflows/publish_pypi.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,31 +3,56 @@ name: Publish to PyPI
on:
workflow_dispatch:

permissions:
contents: read

concurrency:
group: publish-pypi
cancel-in-progress: false

jobs:
build-n-publish:
if: github.event_name == 'workflow_dispatch'
name: Build and publish Python distributions to PyPI
build:
name: Build Python distributions
runs-on: ubuntu-latest
timeout-minutes: 20
steps:
- uses: actions/checkout@v7
with:
persist-credentials: false

- uses: actions/setup-python@v7
with:
python-version: "3.11"

- name: Build and validate distributions
run: |
python -m pip install --upgrade build twine
python -m build
python -m twine check --strict dist/*

- name: Upload distributions
uses: actions/upload-artifact@v7
with:
name: python-distributions
path: dist/
if-no-files-found: error

publish:
name: Publish distributions to PyPI
needs: build
runs-on: ubuntu-latest
timeout-minutes: 20
environment:
name: pypi
url: https://pypi.org/p/specforgeee
url: https://pypi.org/p/specforge
permissions:
id-token: write
steps:
- uses: actions/checkout@v2

- uses: actions/setup-python@v2
with:
python-version: '3.11'

- run: pip install build && python -m build --sdist

# publish to PyPI if executed on the main branch
- name: Publish package to PyPI
id: publish
uses: pypa/gh-action-pypi-publish@release/v1
with:
user: __token__
password: ${{ secrets.PYPI_TOKEN }}
verbose: true
- name: Download distributions
uses: actions/download-artifact@v8
with:
name: python-distributions
path: dist/

- name: Publish distributions to PyPI
uses: pypa/gh-action-pypi-publish@release/v1
17 changes: 17 additions & 0 deletions .github/workflows/test.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,24 @@ permissions:
contents: read

jobs:
cleanup-runner:
if: (github.repository == 'sgl-project/SpecForge' || github.event_name == 'pull_request') &&
github.event.pull_request.draft == false
runs-on: [self-hosted]
concurrency:
group: specforge-gpu-ci
cancel-in-progress: false
queue: max
timeout-minutes: 5
steps:
# Job containers need a fresh Docker network before any container step can
# run, so stale networks must be pruned in a host-side prerequisite job.
- name: Prune stale Docker networks
shell: bash
run: docker network prune --force --filter "until=1h"

unit-test:
needs: cleanup-runner
if: (github.repository == 'sgl-project/SpecForge' || github.event_name == 'pull_request') &&
github.event.pull_request.draft == false
runs-on: [self-hosted]
Expand Down
42 changes: 24 additions & 18 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,12 @@
SpecForge is an ecosystem project developed by the SGLang team. It is a framework for training speculative decoding models so that you can smoothly port them over to the SGLang serving framework to speed up your inference.

We have seen many open-source projects for speculative decoding, but most of them are not well-maintained or not directly compatible with SGLang. We prepared this project because we wish that the open-source community can enjoy a speculative decoding framework that is

- regularly maintained by the SpecForge team: the code is runnable out-of-the-box
- directly compatible with SGLang: there is no additional efforts for porting to SGLang
- provides local offline and server-only online-disaggregated training through
one runtime, including the supported data, tensor, and sequence parallel
topologies
- directly compatible with SGLang: no additional porting effort is required
- able to run online disaggregated training and both colocated and
disaggregated offline training through one runtime, including the supported
data, tensor, and sequence parallel topologies


Check out [**our documentation**](https://docs.sglang.ai/SpecForge/) to get started.
Expand All @@ -31,23 +32,25 @@ Check out [**our documentation**](https://docs.sglang.ai/SpecForge/) to get star
Every method uses the same typed training entry point:

```bash
specforge train --config examples/configs/qwen3-8b-eagle3-disaggregated.yaml
specforge train --config examples/configs/online/disaggregated/external/qwen3-8b-eagle3-disaggregated.yaml
```

The typed `deployment.trainer` topology self-launches trainer DP and EAGLE3
offline USP process groups. A single-node disaggregated config also supervises
its SpecForge producer and consumer; Mooncake and SGLang remain externally
managed services, and online target parallelism belongs to SGLang. There are no
method-specific Python training entry points.
The path under `examples/configs` identifies feature mode, topology, and online
service ownership. The command above uses an `external` recipe: SpecForge
supervises the producer and consumer on one trainer node, while the user or
scheduler owns Mooncake and SGLang. Recipes under `managed-local` also start
those services on the local host. Online target parallelism belongs to SGLang;
`deployment.trainer` owns trainer DP and offline EAGLE3 USP process groups.
There are no method-specific Python training entry points.

| Method | Description | Example config | Optimization |
| --- | --- | --- | --- |
| **[EAGLE3](https://arxiv.org/abs/2503.01840)** | Feature-based autoregressive drafting | [Online](./examples/configs/qwen3-8b-eagle3-disaggregated.yaml) / [Offline](./examples/configs/qwen3-8b-eagle3-offline.yaml) / [Disaggregated offline](./examples/configs/qwen3-8b-eagle3-offline-disaggregated.yaml) | [LK loss](https://arxiv.org/pdf/2602.23881) |
| **[P-EAGLE](https://arxiv.org/abs/2602.01469)** | Parallel EAGLE | [Online](./examples/configs/qwen3-8b-peagle-disaggregated.yaml) | — |
| **EAGLE3.1** | Feature-based autoregressive drafting with attention drift | [Online](./examples/configs/qwen3-30b-a3b-eagle3.1-online.yaml) | — |
| **[DFlash](https://arxiv.org/abs/2602.06036)** | Block-parallel drafting | [Online](./examples/configs/qwen3-8b-dflash-online.yaml) / [Disaggregated](./examples/configs/qwen3-8b-dflash-disaggregated.yaml) | [D-PACE](https://arxiv.org/abs/2605.18810) |
| **[Domino](https://arxiv.org/html/2605.29707v1)** | DFlash with GRU logit correction | [Online](./examples/configs/qwen3-8b-domino-online.yaml) / [Disaggregated](./examples/configs/qwen3-8b-domino-disaggregated.yaml) | — |
| **[DSpark](https://arxiv.org/abs/2607.05147)** | Confidence-Scheduled Semi-Autoregressive Generation | [Disaggregated](./examples/configs/qwen3-4b-dspark-disaggregated.yaml) | — |
| **[EAGLE3](https://arxiv.org/abs/2503.01840)** | Feature-based autoregressive drafting | [Online external](./examples/configs/online/disaggregated/external/qwen3-8b-eagle3-disaggregated.yaml) / [Offline colocated](./examples/configs/offline/colocated/qwen3-8b-eagle3-offline.yaml) / [Offline disaggregated](./examples/configs/offline/disaggregated/qwen3-8b-eagle3-offline-disaggregated.yaml) | [LK loss](https://arxiv.org/pdf/2602.23881) |
| **[P-EAGLE](https://arxiv.org/abs/2602.01469)** | Parallel EAGLE | [Online external](./examples/configs/online/disaggregated/external/qwen3-8b-peagle-disaggregated.yaml) | — |
| **EAGLE3.1** | Feature-based autoregressive drafting with attention drift | [Online external](./examples/configs/online/disaggregated/external/qwen3-30b-a3b-eagle3.1-online.yaml) | — |
| **[DFlash](https://arxiv.org/abs/2602.06036)** | Block-parallel drafting | [Online external](./examples/configs/online/disaggregated/external/qwen3-8b-dflash-online.yaml) / [Offline colocated](./examples/configs/offline/colocated/qwen3-8b-dflash-offline.yaml) / [Online managed-local](./examples/configs/online/disaggregated/managed-local/qwen3-8b-dflash-1server-dp7-disaggregated.yaml) | [D-PACE](https://arxiv.org/abs/2605.18810) |
| **[Domino](https://arxiv.org/html/2605.29707v1)** | DFlash with GRU logit correction | [Online external](./examples/configs/online/disaggregated/external/qwen3-8b-domino-online.yaml) / [Offline colocated](./examples/configs/offline/colocated/qwen3-8b-domino-offline.yaml) / [Online managed-local](./examples/configs/online/disaggregated/managed-local/qwen3-8b-domino-multiserver-disaggregated.yaml) | — |
| **[DSpark](https://arxiv.org/abs/2607.05147)** | Confidence-Scheduled Semi-Autoregressive Generation | [Online external](./examples/configs/online/disaggregated/external/qwen3-4b-dspark-disaggregated.yaml) / [Offline colocated](./examples/configs/offline/colocated/qwen3-4b-dspark-offline.yaml) | — |

See the [training guide](./docs/basic_usage/training.md) for the supported
method/topology matrix and the
Expand All @@ -69,11 +72,14 @@ SpecBundle is a collection of production-grade speculative decoding models that


## 🎉 News

- [2026-08] 🎉 Released SpecBundle (phase 2) and SpecForge v0.3.0. Check out our blog at [LMSYS.org](https://www.lmsys.org/blog/2026-08-04-specforge-v0-3)
- [2026-07] 🚀 Day0 supported two flagship dspark draft model, [Inkling](https://huggingface.co/RadixArk/Inkling-DSpark-Preview) and [Kimi-K3](https://huggingface.co/RadixArk/Kimi-K3-DSpark).
- [2026-07] 🔥 Supported full disaggregation of training and inference in online training.
- [2026-07] 🔥 Added DSpark online training for DFlash draft models.
- [2026-06] 🔥 Added D-PACE as an optional loss for DFlash training.
- [2026-06] 🔥 Added Domino online training for DFlash draft models.
- [2026-01] 🔥 Added DFlash block-parallel online training with SGLang serving support.
- [2025-12] 🎉 Released SpecBundle (phase 1) and SpecForge v0.2. Check out our blog at [LMSYS.org](https://lmsys.org/blog/2025-12-23-spec-bundle-phase-1/)
- [2025-12] 🎉 Released SpecBundle (phase 1) and SpecForge v0.2.0. Check out our blog at [LMSYS.org](https://lmsys.org/blog/2025-12-23-spec-bundle-phase-1/)
- [2025-08] 🔔 SpecForge is listed as a [flagship project](https://lmsys.org/about/) in LMSYS. Congratulations to the SpecForge team!
- [2025-08] 🔥 SpecForge powered the Eagle3 draft model for GPT-OSS. Check out the blog at [LMSYS.org](https://lmsys.org/blog/2025-08-27-gpt-oss/)
- [2025-07] 🔥 SpecForge is released together with Llama4-Eagle3 checkpoints. Check out our blog at [LMSYS.org](https://lmsys.org/blog/2025-07-25-spec-forge/)
Expand Down
53 changes: 53 additions & 0 deletions configs/kimi-k3-dspark.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
{
"architectures": ["DSparkDraftModel"],
"attention_bias": false,
"attention_dropout": 0.0,
"auto_map": {"AutoModel": "dspark.DSparkDraftModel"},
"block_size": 7,
"bos_token_id": 163584,
"dflash_config": {
"attention_mode": "gqa",
"confidence_head_alpha": 1.0,
"confidence_head_with_markov": true,
"enable_confidence_head": true,
"markov_head_type": "vanilla",
"markov_rank": 256,
"mask_token_id": 163824,
"projector_type": "dspark",
"target_layer_ids": [7, 23, 51, 67, 83]
},
"dtype": "bfloat16",
"eos_token_id": 163586,
"head_dim": 64,
"hidden_act": "silu",
"hidden_size": 7168,
"initializer_range": 0.02,
"intermediate_size": 14336,
"layer_types": [
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention"
],
"max_position_embeddings": 65536,
"max_window_layers": 5,
"model_type": "qwen3",
"num_attention_heads": 64,
"num_hidden_layers": 5,
"num_key_value_heads": 16,
"num_target_layers": 93,
"pad_token_id": 163839,
"rms_norm_eps": 1e-05,
"rope_parameters": {
"factor": 16.0,
"original_max_position_embeddings": 65536,
"rope_theta": 10000.0,
"rope_type": "yarn"
},
"sliding_window": null,
"tie_word_embeddings": false,
"use_cache": true,
"use_sliding_window": false,
"vocab_size": 163840
}
35 changes: 11 additions & 24 deletions configs/qwen3.5-4b-vl-dflash.json → configs/qwen3.5-4b-mtp.json
Original file line number Diff line number Diff line change
@@ -1,50 +1,37 @@
{
"architectures": [
"DFlashDraftModel"
"Qwen3_5MTPDraftModel"
],
"attention_bias": false,
"attention_dropout": 0.0,
"auto_map": {
"AutoModel": "dflash.DFlashDraftModel"
"AutoModel": "mtp.Qwen3_5MTPDraftModel"
},
"block_size": 16,
"attn_output_gate": true,
"bos_token_id": 248043,
"dflash_config": {
"mask_token_id": 248070,
"target_layer_ids": [1, 8, 15, 22, 29]
},
"dtype": "bfloat16",
"eos_token_id": 248044,
"head_dim": 256,
"hidden_act": "silu",
"hidden_size": 2560,
"initializer_range": 0.02,
"intermediate_size": 9216,
"layer_types": [
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention"
],
"max_position_embeddings": 262144,
"model_type": "qwen3_vl_text",
"model_type": "qwen3",
"mtp_config": {
"share_lm_head": true
},
"num_attention_heads": 16,
"num_hidden_layers": 5,
"num_hidden_layers": 1,
"num_key_value_heads": 4,
"num_target_layers": 32,
"pad_token_id": 248044,
"partial_rotary_factor": 0.25,
"rms_norm_eps": 1e-06,
"rope_scaling": {
"mrope_interleaved": true,
"mrope_section": [11, 11, 10],
"rope_type": "default",
"partial_rotary_factor": 0.25
},
"rope_scaling": null,
"rope_theta": 10000000,
"sliding_window": null,
"tie_word_embeddings": true,
"torch_dtype": "bfloat16",
"use_cache": true,
"use_sliding_window": false,
"vocab_size": 248320
}
2 changes: 1 addition & 1 deletion docs/advanced_features/customization.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ For one-off changes, use dotted overrides rather than adding another launcher:

```bash
specforge train \
--config examples/configs/qwen3-8b-eagle3-disaggregated.yaml \
--config examples/configs/online/disaggregated/external/qwen3-8b-eagle3-disaggregated.yaml \
model.target_model_path=/models/my-target \
data.train_data_path=/datasets/my-training-data.jsonl \
training.learning_rate=5e-5
Expand Down
Loading
Loading