Skip to content

docs(tutorial): merge the four training tutorials into one#840

Open
WindChimeRan wants to merge 9 commits into
vllm-project:mainfrom
WindChimeRan:docs/merge-training-tutorials
Open

docs(tutorial): merge the four training tutorials into one#840
WindChimeRan wants to merge 9 commits into
vllm-project:mainfrom
WindChimeRan:docs/merge-training-tutorials

Conversation

@WindChimeRan

@WindChimeRan WindChimeRan commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Easy review

ask claude code to pull the PR to local, then host it locally. Read the speculators/user_guide/tutorials/train/ page.

This is a refactor only PR. it only actually touches the content of the train pages.

Purpose

This is a doc refactoring PR.

  • Before: Eagle-3/P-EAGLE/DFlash/DSpark/MTP x online/offline/hybrid each on one page (and some of them are just missing)
  • After: one page, toggle design borrowed from pytorch.org/get-started/locally

Also, hybrid mode had no tutorial of its own (it was buried as an "Advanced" subsection of the Eagle-3 online page), DSpark had none at all, and MTP was only documented for online training even though the mode is orthogonal to it.

Tests

Docs only, no behavior change.

Followup PRs

cc: @guan404ming

Checklist

I have filled in:

  • The purpose of the PR, such as "Fix some issue (link existing issues this PR will resolve)".
  • The test plan/results, such as providing test command and pasting the results.
  • (Optional) The necessary documentation update.
  • I (a human) have written or reviewed the code in this pr to the best of my ability.

@coderabbitai

coderabbitai Bot commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Important

Review skipped

Auto incremental reviews are disabled on this repository.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 6abcbef9-1623-41fc-8535-9b65e86fed29

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Changes

Documentation and training workflows

Layer / File(s) Summary
DSpark algorithm documentation
docs/user_guide/algorithms/*
Adds DSpark to algorithm indexes and decision guidance, introduces its dedicated page, and updates related links and DFlash configuration notes.
Unified training tutorial and site wiring
docs/user_guide/tutorials/*, docs/user_guide/getting_started.md, docs/.nav.yml, mkdocs.yml, docs/cli/train.md
Adds the consolidated training tutorial, updates tutorial navigation and guidance, configures block-style tabs, and changes the documented DFlash anchor default to 3072.
Training reference links
examples/train/*, tests/e2e/*
Updates example comments and E2E test docstrings to reference the consolidated training tutorial.

Possibly related PRs

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Title check ✅ Passed The title clearly reflects the tutorial consolidation, though it understates the number of tutorials merged.
Description check ✅ Passed The description matches the refactor goals and accurately describes the tutorial consolidation and added coverage.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@mergify mergify Bot added the documentation Improvements or additions to documentation label Jul 22, 2026
@WindChimeRan
WindChimeRan force-pushed the docs/merge-training-tutorials branch 2 times, most recently from c1d0226 to 1cfbe4a Compare July 22, 2026 04:02
@WindChimeRan
WindChimeRan marked this pull request as ready for review July 22, 2026 04:14
… and algorithm

Signed-off-by: Ranran Haoran Zhang <ranzhang@redhat.com>
@WindChimeRan
WindChimeRan force-pushed the docs/merge-training-tutorials branch from 1cfbe4a to 4df3744 Compare July 22, 2026 04:16

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/user_guide/algorithms/decision_guide.md`:
- Line 17: Update the verifier compatibility sentence to include DSpark
alongside Eagle-3, P-EAGLE, and DFlash in the unrestricted list, while
preserving the existing statement that MTP requires native MTP layers.

In `@docs/user_guide/getting_started.md`:
- Around line 40-44: Update the training summary and Supported Algorithms
content in the Getting Started guide to match the consolidated “Train a
Speculator” tutorial: describe all supported training modes and list or link
Eagle-3, P-EAGLE, DSpark, DFlash, and MTP consistently, without leaving
contradictory or incomplete algorithm information.

In `@docs/user_guide/tutorials/train.md`:
- Line 339: Document the DSpark --loss-fn argument in the CLI reference,
including its JSON format, accepted loss keys such as ce and tv, and expected
values, or link to authoritative documentation. Ensure the documented API and
examples match all usages in the tutorial, including the repeated {"ce": 0.1,
"tv": 0.9} example.
- Line 668: Update the checkpoint description near “Each checkpoint” to limit
the self-contained, deployment-ready claim to non-MTP speculator checkpoints.
State that MTP checkpoints require running stitch_mtp.py before serving, while
preserving the existing note about optimizer and learning-rate scheduler states
for resume training.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 334c94a3-9f9c-41a3-904e-c7e22ca6e85e

📥 Commits

Reviewing files that changed from the base of the PR and between 7b10846 and 1cfbe4a.

📒 Files selected for processing (26)
  • docs/.nav.yml
  • docs/cli/train.md
  • docs/user_guide/algorithms/decision_guide.md
  • docs/user_guide/algorithms/dflash.md
  • docs/user_guide/algorithms/dspark.md
  • docs/user_guide/algorithms/eagle3.md
  • docs/user_guide/algorithms/index.md
  • docs/user_guide/algorithms/mtp.md
  • docs/user_guide/algorithms/peagle.md
  • docs/user_guide/getting_started.md
  • docs/user_guide/tutorials/index.md
  • docs/user_guide/tutorials/response_regeneration.md
  • docs/user_guide/tutorials/train.md
  • docs/user_guide/tutorials/train_dflash_online.md
  • docs/user_guide/tutorials/train_eagle3_offline.md
  • docs/user_guide/tutorials/train_eagle3_online.md
  • docs/user_guide/tutorials/train_mtp_online.md
  • docs/user_guide/tutorials/train_peagle_offline.md
  • examples/train/dflash_qwen3_8b_sharegpt_online_5k.sh
  • examples/train/dspark_qwen3_0_6b_sharegpt_online.sh
  • examples/train/eagle3_llama3_8b_ultrachat_offline_5k.sh
  • examples/train/eagle3_qwen3_8b_sharegpt_online_5k.sh
  • examples/train/mtp_qwen3_5_9b_gsm8k_online.sh
  • mkdocs.yml
  • tests/e2e/regression/test_eagle3_online_acceptance.py
  • tests/e2e/smoke/test_online_training.py
💤 Files with no reviewable changes (5)
  • docs/user_guide/tutorials/train_mtp_online.md
  • docs/user_guide/tutorials/train_dflash_online.md
  • docs/user_guide/tutorials/train_eagle3_online.md
  • docs/user_guide/tutorials/train_peagle_offline.md
  • docs/user_guide/tutorials/train_eagle3_offline.md


**MTP** finetunes the model's native multi-token prediction head on domain-specific data. Unlike the other algorithms, MTP does not train from scratch -- it starts from pre-existing MTP layers and is only available for models with native MTP support.

Eagle-3, P-EAGLE, and DFlash can be paired with any supported verifier model (including quantized variants) -- the draft architecture is independent of the verifier architecture. MTP requires a model with native MTP layers (e.g. Qwen3-Next, Qwen3.5).

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Include DSpark in the unrestricted verifier list.

This sentence omits DSpark even though docs/user_guide/algorithms/dspark.md and docs/user_guide/tutorials/train.md describe it as compatible with any supported verifier. Update the list to include DSpark while retaining the MTP exception.

As per path instructions, docs/**/*.md must be checked for clarity, accuracy, and completeness.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/user_guide/algorithms/decision_guide.md` at line 17, Update the verifier
compatibility sentence to include DSpark alongside Eagle-3, P-EAGLE, and DFlash
in the unrestricted list, while preserving the existing statement that MTP
requires native MTP layers.

Source: Path instructions

Comment on lines +40 to +44
- **Hybrid training** -- Hidden states are generated on-the-fly during the first epoch, cached, and reused after.

### Tutorials

- [Train Eagle-3 Online](tutorials/train_eagle3_online.md) -- Recommended starting point
- [Train Eagle-3 Offline](tutorials/train_eagle3_offline.md)
- [Train DFlash Online](tutorials/train_dflash_online.md) -- Starting point for DFlash
- [Train a Speculator](tutorials/train.md) -- Recommended starting point. Covers Eagle-3, P-EAGLE, DFlash, DSpark, and MTP in all three modes

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Keep the training summary consistent with the new tutorial.

The surrounding text still describes only online/offline training, and the Supported Algorithms section lists only Eagle-3 and DFlash while this entry advertises P-EAGLE, DSpark, and MTP. Update those statements or add the missing links so Getting Started does not contradict the consolidated tutorial.

As per path instructions, this Markdown must remain accurate and complete.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/user_guide/getting_started.md` around lines 40 - 44, Update the training
summary and Supported Algorithms content in the Getting Started guide to match
the consolidated “Train a Speculator” tutorial: describe all supported training
modes and list or link Eagle-3, P-EAGLE, DSpark, DFlash, and MTP consistently,
without leaving contradictory or incomplete algorithm information.

Source: Path instructions

--speculator-type dspark \
--num-layers 5 \
--lr 3e-4 \
--loss-fn '{"ce": 0.1, "tv": 0.9}' \

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Document the DSpark --loss-fn contract.

The DSpark commands introduce --loss-fn '{"ce": 0.1, "tv": 0.9}'—also repeated at Lines 461 and 586—but the CLI reference does not describe this argument or its accepted keys. Add it to docs/cli/train.md or link to authoritative DSpark loss documentation.

As per path instructions, this Markdown must be complete and its examples must match the documented API.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/user_guide/tutorials/train.md` at line 339, Document the DSpark
--loss-fn argument in the CLI reference, including its JSON format, accepted
loss keys such as ce and tv, and expected values, or link to authoritative
documentation. Ensure the documented API and examples match all usages in the
tutorial, including the repeated {"ce": 0.1, "tv": 0.9} example.

Source: Path instructions

└── checkpoint_best -> 4/ # Symlink to lowest val loss checkpoint
```

Each checkpoint is a complete, self-contained speculator model ready for deployment in vLLM. The checkpoints also contain optimizer and learning rate scheduler states for resume training.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Exclude MTP from the self-contained-checkpoint claim.

MTP checkpoints still require stitch_mtp.py before serving, as documented at Lines 364–370, 484–491, and 613–619. Saying every checkpoint is immediately deployable can lead users to serve the wrong artifact.

Proposed wording
-Each checkpoint is a complete, self-contained speculator model ready for deployment in vLLM.
+Non-MTP checkpoints are self-contained speculator models ready for deployment in vLLM.
+MTP checkpoints must be stitched into the verifier checkpoint before deployment.

As per path instructions, this Markdown must remain accurate and complete.

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
Each checkpoint is a complete, self-contained speculator model ready for deployment in vLLM. The checkpoints also contain optimizer and learning rate scheduler states for resume training.
Non-MTP checkpoints are self-contained speculator models ready for deployment in vLLM. MTP checkpoints must be stitched into the verifier checkpoint before deployment. The checkpoints also contain optimizer and learning rate scheduler states for resume training.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/user_guide/tutorials/train.md` at line 668, Update the checkpoint
description near “Each checkpoint” to limit the self-contained, deployment-ready
claim to non-MTP speculator checkpoints. State that MTP checkpoints require
running stitch_mtp.py before serving, while preserving the existing note about
optimizer and learning-rate scheduler states for resume training.

Source: Path instructions

@WindChimeRan WindChimeRan changed the title docs: merge the four training tutorials into one docs(tutorial): merge the four training tutorials into one Jul 22, 2026

@speculatorsbot speculatorsbot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Well-structured docs refactor. Merging five tutorials into one tabbed page is a clear maintenance win, and the new DSpark algorithm page slots in cleanly. The tabbed layout with nested algorithm/mode selectors is a nice UX touch. Agree with @coderabbitai's suggestion to update the verifier-compatibility sentence in decision_guide.md to include DSpark, and the stale "Supported Algorithms" section in getting_started.md.

One item not yet raised: the five deleted tutorial files (train_eagle3_online.md, train_eagle3_offline.md, train_dflash_online.md, train_peagle_offline.md, train_mtp_online.md) will cause 404s for anyone who bookmarked those URLs or any external sites linking to them (search engine results, blog posts, the old ReadTheDocs versioned pages, etc.). Consider adding mkdocs-redirects (or the equivalent plugin already available in the Material theme) to map the old paths to the new consolidated page. Something like:

plugins:
  - redirects:
      redirect_maps:
        user_guide/tutorials/train_eagle3_online.md: user_guide/tutorials/train.md
        user_guide/tutorials/train_eagle3_offline.md: user_guide/tutorials/train.md
        user_guide/tutorials/train_dflash_online.md: user_guide/tutorials/train.md
        user_guide/tutorials/train_peagle_offline.md: user_guide/tutorials/train.md
        user_guide/tutorials/train_mtp_online.md: user_guide/tutorials/train.md

Non-blocking, but worth doing to avoid link rot. Recommend approving once the inline items from CodeRabbit are addressed.

🤖 Generated with Claude Code using the /pr-review skill

@guan404ming guan404ming mentioned this pull request Jul 23, 2026
4 tasks
Comment thread docs/cli/train.md
- **`--sample-from-anchor`** / **`--no-sample-from-anchor`** (bool, default: algorithm-specific) Whether to sample from the anchor position. `True`: sample from anchor and all mask positions (default for dspark, produces block_size tokens). `False`: anchor is bonus token (default for dflash, produces block_size-1 tokens).

- **`--max-anchors`** (int, default: `256`) Maximum anchor positions for DFlash training.
- **`--max-anchors`** (int, default: `3072`) Maximum anchor positions for DFlash training.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we really be using such a large max anchors by default? Commonly I see <1k in recent papers I've read, but haven't done large analysis. I guess this is just a docs update ultimately

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agreed that we should look into this, but currently we've got the default as 3072 in train.py so this docs update makes sense for the time being.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • This PR is just to let the doc match the code's default.
  • I run some exp on ultrachat. 3072 is ok (it's indeed not ideal). Will run more exps & try some options in the near future ...

Comment thread docs/user_guide/tutorials/response_regeneration.md
Comment thread docs/user_guide/tutorials/train.md

@shanjiaz shanjiaz left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good in general! added some comments.

@WindChimeRan
WindChimeRan requested a review from shanjiaz July 23, 2026 20:33

@fynnsu fynnsu left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good! I think this approach is much cleaner.

Added a bunch of comments.

Comment thread docs/cli/train.md
- **`--sample-from-anchor`** / **`--no-sample-from-anchor`** (bool, default: algorithm-specific) Whether to sample from the anchor position. `True`: sample from anchor and all mask positions (default for dspark, produces block_size tokens). `False`: anchor is bonus token (default for dflash, produces block_size-1 tokens).

- **`--max-anchors`** (int, default: `256`) Maximum anchor positions for DFlash training.
- **`--max-anchors`** (int, default: `3072`) Maximum anchor positions for DFlash training.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agreed that we should look into this, but currently we've got the default as 3072 in train.py so this docs update makes sense for the time being.


Pick an algorithm and a training mode below; the rest of the walkthrough is the same for every combination. The examples use `Qwen/Qwen3-8B` as the target model -- except for MTP, which needs a verifier with native MTP layers and so uses `Qwen/Qwen3.5-9B`. The process is the same for other models.

## Choose Your Setup

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this "Choose Your Setup" section should also use the grouped tabs. That way the user can actually "choose" one at this step and when they scroll down that's what they'll see.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We probably don't need the "what it changes in the train command" section either.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We probably don't need the "what it changes in the train command" section either. agree. applied the change

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this "Choose Your Setup" section should also use the grouped tabs. That way the user can actually "choose" one at this step and when they scroll down that's what they'll see.

done

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agreed that we should look into this, but currently we've got the default as 3072 in train.py

future PR

Comment thread docs/user_guide/tutorials/train.md Outdated
# Speculators venv (for data prep and training)
uv venv speculators_venv
source speculators_venv/bin/activate
uv pip install "speculators>=0.6.0"

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe we should mention installing from main as an option here?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • this PR's bug: scripts/ is not in the wheel. so the only valid way is installing from main
  • scripts/ is not a good UX. Will fix it in followup PRs ...
  • I think we should bump the version to 0.6.1 to include the DSpark bug fixing.

Comment thread docs/user_guide/tutorials/train.md Outdated

## Step 1: Prepare Your Data

**Recommended:** regenerate the dataset's responses with your target model first (see [Response Regeneration](response_regeneration.md)) and pass the resulting JSONL to `--data`. This on-policy data aligns the drafter with what the target actually generates. Using the dataset's original responses, as shown below, is a cheaper off-policy fallback that skips a full target-model pass over the data, at the cost of lower acceptance length. **For MTP this is not optional** -- it requires data generated by the target model itself.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe we should make this it's own step? We can still call it recommended and just link to response regen, but that way the step isn't getting lost under the prepare data header.

--seq-length 8192
```

For MTP, point `--data` at a regenerated dataset. You can produce one with [Response Regeneration](response_regeneration.md), or download a pre-regenerated one:

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe we can generalize this comment so that it isn't just about MTP

Comment on lines +84 to +97
```bash
# in speculators venv
hf download \
inference-optimization/Qwen3.5-9B-responses gsm8k.jsonl \
--repo-type dataset \
--local-dir ./output/dataset

python scripts/prepare_data.py \
--model Qwen/Qwen3.5-9B \
--data ./output/dataset/gsm8k.jsonl \
--output ./output \
--max-samples 5000 \
--seq-length 8192
```

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe this should be hidden behind an MTP tab?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Currently it's a MTP vs others. So there's no tab. Will delete non-regen path in train.md in the next PR.

Not this PR, because regen is not yet production-ready.

## Expected Results

These are sanity-check runs, not production numbers. With just 5K samples, model performance will be limited -- the point is to verify that the pipeline works and the model is learning. For production quality, train on significantly more data.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't like that we only have these results for DFlash and P-Eagle. Maybe we could generalize / remove the specific results and just:

  • mention this is not a production run and real runs need a lot more data
  • (Maybe) Give a ballpark estimate for position acceptance rates/length (e.g. for most methods we expect to see around 40% first token acceptance rate on similar data)

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd keep the DFlash and P-Eagle result for now (but I moved them out of the tab to be clearer), just wanna match the step 1 data.


They'll be all replaced by the new regen result in future PRs.

Comment thread docs/user_guide/tutorials/train.md Outdated
@fynnsu

fynnsu commented Jul 23, 2026

Copy link
Copy Markdown
Collaborator

Oh and I think the speculators bot suggestion might make sense:

Consider adding mkdocs-redirects (or the equivalent plugin already available in the Material theme) to map the old paths to the new consolidated page. Something like:

@WindChimeRan
WindChimeRan force-pushed the docs/merge-training-tutorials branch from 220464a to bf704a4 Compare July 23, 2026 23:30
@mergify

mergify Bot commented Jul 24, 2026

Copy link
Copy Markdown

Merge Protections

🔴 1 of 1 protections blocking · waiting on 👀 reviews

Protection Waiting on
🔴 Require approval from approved reviewers list 👀 reviews

🔴 Require approval from approved reviewers list

Waiting for any of

  • approved-reviews-by = dsikka
  • approved-reviews-by = fynnsu
  • approved-reviews-by = orestis-z
  • approved-reviews-by = rahul-tuli
  • approved-reviews-by = shanjiaz
This rule is failing.

All pull requests must have at least one approving review from a member of the approved reviewers list before merging.

  • any of:
    • approved-reviews-by = dsikka
    • approved-reviews-by = fynnsu
    • approved-reviews-by = orestis-z
    • approved-reviews-by = rahul-tuli
    • approved-reviews-by = shanjiaz

Signed-off-by: Ranran Haoran Zhang <ranzhang@redhat.com>
… are not in the PyPI package

Signed-off-by: Ranran Haoran Zhang <ranzhang@redhat.com>
…uisites

Signed-off-by: Ranran Haoran Zhang <ranzhang@redhat.com>
…idated page

Signed-off-by: Ranran Haoran Zhang <ranzhang@redhat.com>
…d explain the GPU split

Signed-off-by: Ranran Haoran Zhang <ranzhang@redhat.com>
@WindChimeRan
WindChimeRan force-pushed the docs/merge-training-tutorials branch from 5848cf7 to 25cf718 Compare July 24, 2026 04:01
…o-algorithm tabs

Signed-off-by: Ranran Haoran Zhang <ranzhang@redhat.com>
@WindChimeRan
WindChimeRan force-pushed the docs/merge-training-tutorials branch from 25cf718 to c99e5b0 Compare July 24, 2026 04:13
…hat syncs to Steps 3 and 4

Signed-off-by: Ranran Haoran Zhang <ranzhang@redhat.com>
…s in favor of vllm-project#849

Signed-off-by: Ranran Haoran Zhang <ranzhang@redhat.com>
@WindChimeRan
WindChimeRan requested a review from fynnsu July 24, 2026 04:53
@WindChimeRan

WindChimeRan commented Jul 24, 2026

Copy link
Copy Markdown
Contributor Author
  • defer "making regen to the default" as future PR, because regen is not in a product ready shape. (and need to re-run some exps)
  • delete dspark page to give way to Add DSpark algorithm page #849 (Please merge 849 first!)
  • addressed other comments.
    @fynnsu

@speculatorsbot speculatorsbot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The new commits address the feedback from the first round well -- tabbed "Choose Your Setup" picker, torchrun as the default, redirects for deleted pages, repo-clone install, and accelerator-neutral prerequisites all look good.

One remaining issue: the last commit drops dspark.md (in favor of PR #849), but several files in this PR still contain markdown links that point to it. If this PR merges before #849, those links will 404 on the docs site. Even if #849 goes first, the dependency is implicit and easy to miss. Safest fix: remove the three broken dspark.md links from this PR and let #849 add them when it creates the page.

🤖 Generated with Claude Code using the /pr-review skill

## See Also

- [Train DFlash Tutorial](../tutorials/train_dflash_online.md) -- Step-by-step training guide
- [DSpark](dspark.md) -- Builds on DFlash with a sequential Markov head and a confidence head

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Both links to dspark.md in this file (here and line 26) now point to a file that does not exist -- it was deleted in the last commit of this PR and does not exist on main. If this PR merges before #849, these produce 404s.

Consider reverting these two links to plain text (matching what main currently has), and letting #849 add them when it creates dspark.md:

Suggested change
- [DSpark](dspark.md) -- Builds on DFlash with a sequential Markov head and a confidence head
- DSpark -- Builds on DFlash with a sequential Markov head and a confidence head

And at line 26, revert [DSpark](dspark.md) back to just DSpark.


/// tab | DSpark

DFlash plus a Markov logit-bias head and a per-position confidence head. ([details](../algorithms/dspark.md))

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same issue: ../algorithms/dspark.md does not exist on main or in this PR. This link will 404 if merged before #849.

Suggested change
DFlash plus a Markov logit-bias head and a per-position confidence head. ([details](../algorithms/dspark.md))
DFlash plus a Markov logit-bias head and a per-position confidence head.

The DSpark tab itself is fine (it documents real CLI flags), but the algorithm-page link should wait until the page exists.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants