Skip to content

[Wave 4] Low/info — Docs: docs/usermanuals/en/training/ (part 1/2) #791

Open

Description

@cemililik

Wave 4 · 20 finding(s) in 20 fix package(s). Documents with fewer than five findings each in this wave, grouped by directory.

Findings

  • DOC-BLEGAL-242 (docs, Low) — docs/usermanuals/en/training/kto.md: wrong detail — "TRL's KTOTrainer runs with library defaults (1.0 / 1.0 weights, sigmoid loss)."
    severity Low
    Where. docs/usermanuals/en/training/kto.md:65 (Turkish mirror: docs/usermanuals/tr/training/kto.md:65) · type: wrong detail
    The document says. "TRL's KTOTrainer runs with library defaults (1.0 / 1.0 weights, sigmoid loss)."
    What the code does. KTOConfig's loss_type default is 'kto' on trl 1.0.0, 1.7.1 and 1.14.1.
    Proposed correction. '(1.0 / 1.0 weights, loss_type "kto")'
    Turkish mirror. the Turkish page has the same error; fix both in the same PR

  • DOC-D3B05-047 (docs, Low) — docs/usermanuals/en/training/dpo.md: broken example — Enable reference_free: true (less stable but skips the second model)
    severity Low · already tracked: KNOWN-OPEN C31-DOC-SCHEMA-PROSE docs/roadmap/phase-16-trust-surface-hardening.md:785-786
    Where. docs/usermanuals/en/training/dpo.md:128 · type: broken example
    The document says. Enable reference_free: true (less stable but skips the second model)
    What the code does. training.reference_free is rejected (extra_forbidden, exit 1). The same page says at dpo.md:114 that reference_free is not exposed.
    Proposed correction. Delete the bullet (or point to SimPO)
    Turkish mirror. the Turkish page has no such statement

  • DOC-D3B05-048 (docs, Low) — docs/usermanuals/en/training/dpo.md: false claim — ForgeLM automatically rolls back to the pre-DPO checkpoint
    severity Low · already tracked: KNOWN-OPEN DOCS-04 docs/roadmap/phase-16-trust-surface-hardening.md:760-765
    Where. docs/usermanuals/en/training/dpo.md:203 · type: false claim
    The document says. ForgeLM automatically rolls back to the pre-DPO checkpoint
    What the code does. Auto-revert deletes final_model and restores nothing (exit 3). The same page's sequence diagram at dpo.md:172 says 'Delete DPO artefacts (no restore)'.
    Code references. forgelm/trainer.py:994-998
    Proposed correction. Say that the DPO output is deleted and the input model is left untouched
    Turkish mirror. the Turkish page has no such statement

  • DOC-D3B05-049 (docs, Low) — docs/usermanuals/en/training/dpo.md: misleading — Start at 5e-6 for full fine-tunes
    severity Low
    Where. docs/usermanuals/en/training/dpo.md:212 (Turkish mirror: docs/usermanuals/tr/training/dpo.md (pitfalls)) · type: misleading
    The document says. Start at 5e-6 for full fine-tunes
    What the code does. There is no full-fine-tune path; every run is LoRA (model.py:609).
    Code references. forgelm/model.py:609
    Proposed correction. Drop the full-fine-tune branch; give a LoRA DPO range only.
    Turkish mirror. the Turkish page has the same error; fix both in the same PR

  • DOC-D3B05-055 (docs, Low) — docs/usermanuals/en/training/kto.md: misleading — About 1.5× SFT memory — keeps a reference model like DPO does
    severity Low
    Where. docs/usermanuals/en/training/kto.md:73 (Turkish mirror: docs/usermanuals/tr/training/kto.md:73) · type: misleading
    The document says. About 1.5× SFT memory — keeps a reference model like DPO does
    What the code does. ForgeLM is always LoRA (model.py:609). TRL computes the KTO reference with adapters disabled or a ref adapter, so no second model is loaded.
    Code references. forgelm/model.py:609
    Proposed correction. Say the reference is the adapter-disabled base model.
    Turkish mirror. the Turkish page has the same error; fix both in the same PR

  • DOC-D3B05-056 (docs, Low) — docs/usermanuals/en/training/kto.md: misleading — Production telemetry is imbalanced; KTO's per-class weights handle that more naturally
    severity Low
    Where. docs/usermanuals/en/training/kto.md:80 (Turkish mirror: docs/usermanuals/tr/training/kto.md:80) · type: misleading
    The document says. Production telemetry is imbalanced; KTO's per-class weights handle that more naturally
    What the code does. The per-class weights are fixed at TRL defaults 1.0/1.0 and are not configurable in ForgeLM (the same page, lines 45 and 65; trainer.py:746-751).
    Code references. forgelm/trainer.py:746-751
    Proposed correction. Add: "(in ForgeLM the weights are fixed at 1.0/1.0; oversample the minority class instead)".
    Turkish mirror. the Turkish page has the same error; fix both in the same PR

  • DOC-D3B05-057 (docs, Low) — docs/usermanuals/en/training/kto.md: false claim — Use JSON booleans; the data loader rejects integer labels for KTO
    severity Low
    Where. docs/usermanuals/en/training/kto.md:84-86 · type: false claim
    The document says. Use JSON booleans; the data loader rejects integer labels for KTO
    What the code does. Only column presence is checked; label 1/0 trains with exit 0
    Code references. forgelm/data.py:600-607, forgelm/data.py:720
    Proposed correction. Remove the sentence or add a bool-type check
    Turkish mirror. the Turkish page has the same error; fix both in the same PR

  • DOC-D3B05-058 (docs, Low) — docs/usermanuals/en/training/sft.md: misleading — Schema LR default is tuned for full-parameter training; 'For full fine-tuning, drop to 1e-5'; '(or merged checkpoint if not using LoRA)'
    severity Low
    Where. docs/usermanuals/en/training/sft.md:78,109,130 (Turkish mirror: docs/usermanuals/tr/training/sft.md:78,109,130) · type: misleading
    The document says. Schema LR default is tuned for full-parameter training; 'For full fine-tuning, drop to 1e-5'; '(or merged checkpoint if not using LoRA)'
    What the code does. ForgeLM always applies get_peft_model (model.py:609). There is no non-LoRA / full-parameter path. A merged checkpoint appears only with training.merge_adapters: true (config.py:457-460).
    Code references. forgelm/model.py:609, forgelm/config.py:457-460
    Proposed correction. State that ForgeLM always trains a LoRA-family adapter (use training.merge_adapters: true to save merged weights), and drop the full-fine-tune guidance.
    Turkish mirror. the Turkish page has no such statement

  • DOC-D3B05-059 (docs, Low) — docs/usermanuals/en/training/sft.md: wrong detail — --fit-check output: FITS est. peak 7.8 GB / 12 GB available
    severity Low
    Where. docs/usermanuals/en/training/sft.md:101-104 (Turkish mirror: docs/usermanuals/tr/training/sft.md:102-103) · type: wrong detail
    The document says. --fit-check output: FITS est. peak 7.8 GB / 12 GB available
    What the code does. format_fit_check prints a block: '=== VRAM Fit Check ===', 'GPU available: X GB', 'Estimated peak: Y GB', 'Verdict: FITS', a breakdown and recommendations (fit_check.py:473-512).
    Code references. forgelm/fit_check.py:473-512
    Proposed correction. Show the real multi-line block, or say 'abridged'.
    Turkish mirror. the Turkish page has the same error; fix both in the same PR

  • DOC-D3B05-060 (docs, Low) — docs/usermanuals/en/training/sft.md: wrong detail — After training: checkpoints/sft/ holds adapter_model.safetensors, README.md, config_snapshot.yaml, and compliance/ only when the compliance: block…
    severity Low
    Where. docs/usermanuals/en/training/sft.md:124-134 · type: wrong detail
    The document says. After training: checkpoints/sft/ holds adapter_model.safetensors, README.md, config_snapshot.yaml, and compliance/ only when the compliance: block is present
    What the code does. The adapter, card and tokenizer are in <output_dir>/final_model/. No config_snapshot.yaml is written (the config summary is compliance/training_manifest.yaml). compliance/ is written without a compliance: block. checkpoint-N, audit_log.jsonl and model_integrity.json/deployer_instructions.md also appear.
    Code references. forgelm/trainer.py:1496-1506
    Proposed correction. Replace the tree with the real layout
    Turkish mirror. the Turkish page has the same error; fix both in the same PR

  • DOC-D3B05-061 (docs, Low) — docs/usermanuals/en/training/simpo.md: misleading — Removing the reference model gives roughly half the VRAM of DPO (1.2× vs 2× SFT)
    severity Low
    Where. docs/usermanuals/en/training/simpo.md:8,72 (Turkish mirror: docs/usermanuals/tr/training/simpo.md:8,67) · type: misleading
    The document says. Removing the reference model gives roughly half the VRAM of DPO (1.2× vs 2× SFT)
    What the code does. ForgeLM's DPO never loads a second model: it is always LoRA and TRL uses adapter-disabled reference passes (model.py:609).
    Code references. forgelm/model.py:609
    Proposed correction. Say SimPO saves the reference forward passes, not a second model copy.
    Turkish mirror. the Turkish page has the same error; fix both in the same PR

  • DOC-D3B06-037 (docs, Low) — docs/usermanuals/en/training/distributed.md: misleading — "ForgeLM picks up the resulting [accelerate] config automatically."
    severity Low
    Where. docs/usermanuals/en/training/distributed.md:149 (Turkish mirror: docs/usermanuals/tr/training/distributed.md) · type: misleading
    The document says. "ForgeLM picks up the resulting [accelerate] config automatically."
    What the code does. ForgeLM never reads an accelerate config. accelerate launch applies it to the processes it spawns.
    Code references. forgelm/trainer.py:592-615
    Proposed correction. "accelerate launch applies the recorded config to the ForgeLM processes it starts."
    Turkish mirror. the Turkish page has the same error; fix both in the same PR

  • DOC-D3B06-038 (docs, Low) — docs/usermanuals/en/training/galore.md: wrong detail — Comment: galore_rank: 256 # higher than LoRA default (128).
    severity Low
    Where. docs/usermanuals/en/training/galore.md:34 (Turkish mirror: docs/usermanuals/tr/training/galore.md:34) · type: wrong detail
    The document says. Comment: galore_rank: 256 # higher than LoRA default (128).
    What the code does. 128 is the GaLore rank default (galore_rank, forgelm/config.py:553-555). The LoRA default rank is 8 (config.py:347-352).
    Code references. forgelm/config.py:553-555, forgelm/config.py:347-352
    Proposed correction. # higher than the GaLore default (128) — projection rank
    Turkish mirror. the Turkish page has the same error; fix both in the same PR

  • DOC-D3B06-039 (docs, Low) — docs/usermanuals/en/training/galore.md: wrong detail — galore_proj_type values are "std (default), reverse_std, right, left".
    severity Low
    Where. docs/usermanuals/en/training/galore.md:37,52 (Turkish mirror: docs/usermanuals/tr/training/galore.md:37) · type: wrong detail
    The document says. galore_proj_type values are "std (default), reverse_std, right, left".
    What the code does. The Literal also accepts full, which disables projection and is debug only (forgelm/config.py:564-567).
    Code references. forgelm/config.py:564-567
    Proposed correction. Add "full (disables projection; debugging only)".
    Turkish mirror. the Turkish page has the same error; fix both in the same PR

  • DOC-D3B06-040 (docs, Low) — docs/usermanuals/en/training/long-context.md: misleading — "ForgeLM supports training (and continued pre-training) on extended contexts."
    severity Low
    Where. docs/usermanuals/en/training/long-context.md:8 (Turkish mirror: docs/usermanuals/tr/training/long-context.md:8) · type: misleading
    The document says. "ForgeLM supports training (and continued pre-training) on extended contexts."
    What the code does. Line 134 of the same page states "ForgeLM doesn't ship a pre-training trainer". The trainer types are sft/orpo/dpo/simpo/kto/grpo only (forgelm/config.py:461-464).
    Code references. forgelm/config.py:461-464
    Proposed correction. Drop "(and continued pre-training)" from the intro.
    Turkish mirror. the Turkish page has the same error; fix both in the same PR

  • DOC-D3B06-041 (docs, Low) — docs/usermanuals/en/training/long-context.md: misleading — Sliding-window attention "processes long sequences in overlapping windows". The example comment "process in 4K windows" presents it as a tec…
    severity Low
    Where. docs/usermanuals/en/training/long-context.md:28,51 (Turkish mirror: docs/usermanuals/tr/training/long-context.md) · type: misleading
    The document says. Sliding-window attention "processes long sequences in overlapping windows". The example comment "process in 4K windows" presents it as a technique ForgeLM applies to any model.
    What the code does. sliding_window_attention only passes sliding_window=<int> into from_pretrained kwargs (forgelm/model.py:468-471). Its schema description is "Override the model's sliding-window-attention size … None = use the model default" (config.py:586-589). It has an effect only on architectures that implement sliding-window attention.
    Code references. forgelm/model.py:468-471, forgelm/config.py:586-589
    Proposed correction. "Overrides the model's sliding-window size; only effective on architectures with sliding-window attention (e.g. Mistral)."
    Turkish mirror. the Turkish page has the same error; fix both in the same PR

  • DOC-D3B06-042 (docs, Low) — docs/usermanuals/en/training/long-context.md: wrong detail — longrope: "Learns separate scaling per RoPE dimension." The section also implies a scalar factor is the parameter.
    severity Low
    Where. docs/usermanuals/en/training/long-context.md:64 (Turkish mirror: docs/usermanuals/tr/training/long-context.md:64) · type: wrong detail
    The document says. longrope: "Learns separate scaling per RoPE dimension." The section also implies a scalar factor is the parameter.
    What the code does. longrope does not learn anything. It requires operator-supplied per-dimension short_factor and long_factor lists, and factor is optional; a longrope block without both lists is rejected at config load (forgelm/config.py:573-581, 670-678).
    Code references. forgelm/config.py:573-581, forgelm/config.py:670-678
    Proposed correction. "longrope | Per-dimension scaling | Requires short_factor and long_factor lists (one value per RoPE dimension); factor optional."
    Turkish mirror. the Turkish page has the same error; fix both in the same PR

  • DOC-D3B06-043 (docs, Low) — docs/usermanuals/en/training/long-context.md: misleading — "ForgeLM masks loss across example boundaries automatically" when packing.
    severity Low
    Where. docs/usermanuals/en/training/long-context.md:94 (Turkish mirror: docs/usermanuals/tr/training/long-context.md:94) · type: misleading
    The document says. "ForgeLM masks loss across example boundaries automatically" when packing.
    What the code does. ForgeLM only forwards packing to TRL's SFTConfig, and only for trainer_type: sft (forgelm/trainer.py:689-693). Any boundary handling is TRL's packing behaviour, which ForgeLM does not configure; ForgeLM sets no attention implementation.
    Code references. forgelm/trainer.py:689-693
    Proposed correction. "packing is forwarded to TRL's SFTConfig (SFT only); cross-example isolation depends on TRL's packing strategy and the attention implementation."
    Turkish mirror. the Turkish page has the same error; fix both in the same PR

  • DOC-D3B06-044 (docs, Low) — docs/usermanuals/en/training/lora.md: misleading — LoRA/QLoRA/DoRA is "a property of the optimiser, not the algorithm".
    severity Low
    Where. docs/usermanuals/en/training/lora.md:10 (Turkish mirror: docs/usermanuals/tr/training/lora.md:10) · type: misleading
    The document says. LoRA/QLoRA/DoRA is "a property of the optimiser, not the algorithm".
    What the code does. PEFT is applied at model load, before any trainer is built (forgelm/model.py:609; cli/_training.py:141-148). It is not an optimiser property. The claim that it applies to every trainer is true.
    Code references. forgelm/model.py:609, forgelm/cli/_training.py:141-148
    Proposed correction. "…it is applied when the model is loaded, independent of the alignment algorithm."
    Turkish mirror. the Turkish page has the same error; fix both in the same PR

  • DOC-D3B06-045 (docs, Low) — docs/usermanuals/en/training/pipelines.md: misleading — Every stage's model.name_or_path is auto-set to the previous stage's training.output_dir/final_model.
    severity Low
    Where. docs/usermanuals/en/training/pipelines.md:92,118 (Turkish mirror: docs/usermanuals/tr/training/pipelines.md) · type: misleading
    The document says. Every stage's model.name_or_path is auto-set to the previous stage's training.output_dir/final_model.
    What the code does. Auto-chaining happens only when the stage does not declare its own model: block, or when it is overridden by --input-model (forgelm/config.py:2242-2248). A stage with its own model: keeps its own name_or_path. The inheritance matrix on line 129 is correct.
    Code references. forgelm/config.py:2242-2248
    Proposed correction. "…auto-set, unless the stage declares its own model: block (then its name_or_path is used as written)."
    Turkish mirror. the Turkish page has the same error; fix both in the same PR

Done when

  • Every finding above is fixed or closed with a reason (tick it here).
  • Code fixes carry a test; doc fixes update the Turkish mirror in the same PR.

Found by the October 2026 ForgeLM code and documentation review against commit cab2947. Code links point at that commit; line numbers may have moved since. Finding IDs (CR-…, DOC-…, TECH-…) are stable references for this backlog.

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    backlog: knownAlready tracked in docs/roadmapdocumentationImprovements or additions to documentationseverity: lowMinor defect, inaccuracy or rough edgesource: review-2026-10Found by the October 2026 code and documentation reviewwave: 4Roadmap wave 4: low / info / watch, when touching the module

    Type

    No type

    Projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions