Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
2fc3a55
placement, model: Program::NemotronHBody, a dense whole-card program,…
midagedev Oct 14, 2026
1c6f94f
gpu, gpu-gates: the nemotron_h decode body on the card, and gate_nemo…
midagedev Oct 15, 2026
be15476
model: the nemotron_h program covers the pack-5 GQA row by its own entry
midagedev Oct 15, 2026
d4082d6
refset: read nemotron logits as whole f32 chunks
midagedev Oct 15, 2026
583bf9f
gpu-gates, model, runtime: bloomery-serve --model nemotron, one slot …
midagedev Oct 15, 2026
79290ad
placement, model: PIN(2026-10-15) the two test clauses the nemotron_h…
midagedev Oct 15, 2026
816bbaf
gpu-gates, refset: gate_nemotron_e2e holds the body to mainline's las…
midagedev Oct 15, 2026
052e3d3
gpu-gates: the group-5 flash check ends a tile on four live keys
midagedev Oct 15, 2026
9ea9da2
tools: gate-paths after the rebase onto main: nemotron_h's row as set…
midagedev Oct 15, 2026
dc1b956
model: PIN(2026-10-15) the nemotron meta clause the program retired
midagedev Oct 15, 2026
92d182d
gpu: the nemotron_h attention takes main's one head-128 launch at gro…
midagedev Oct 15, 2026
29fb061
gpu: relu_sqr returns with the nemotron_h body that calls it
midagedev Oct 15, 2026
9d54d6b
gpu-gates: gate_nemotron_e2e takes the shared runner's argmax
midagedev Oct 15, 2026
34111a1
gpu-gates: gate_nemotron_serve reads the trained context through gene…
midagedev Oct 15, 2026
cb26dcb
tools: gate-paths' act_rule.rs and flip.rs rows name gate_nemotron_e2…
midagedev Oct 15, 2026
1f9a93c
tools: gate-paths' emb2.rs and gelu.rs rows name the nemotron gates t…
midagedev Oct 15, 2026
1b6550c
model, gpu, gpu-gates: review fold: the nemotron type pins, the share…
midagedev Oct 15, 2026
6906329
model, gpu, gpu-gates: review fold: the nemotron pins read every type…
midagedev Oct 15, 2026
a25cbe0
gpu, tools: a file tensor never takes a derived weight's name; gate-p…
midagedev Oct 15, 2026
2b2b19d
model, gpu, gpu-gates: review fold: the nemotron vector and gain pins…
midagedev Oct 15, 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
8 changes: 8 additions & 0 deletions crates/gpu-gates/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -404,6 +404,14 @@ required-features = ["gpu"]
name = "gate_mamba2"
required-features = ["gpu"]

[[bin]]
name = "gate_nemotron_e2e"
required-features = ["gpu"]

[[bin]]
name = "gate_nemotron_serve"
required-features = ["deepseek41"]

[[bin]]
name = "gate_load_v41"
required-features = ["gpu"]
Expand Down
27 changes: 17 additions & 10 deletions crates/gpu-gates/src/bin/bloomery_serve.rs
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
//! `bloomery-serve` — one server binary, one seat a model: `--model
//! ds41|qwen38|glm|qwen3|mimo2|decide` picks the seat (`serve_seats`, the shared
//! ds41|qwen38|glm|qwen3|mimo2|nemotron|decide` picks the seat (`serve_seats`, the shared
//! seat modules), every other flag the seat's own, parsed by the seat's own
//! parser, so each seat's flag set is exactly its per-model binary's. The
//! word is optional with a model file: with none, the file's architecture
//! picks the seat, and a bare start or `--help` prints [`drive::MODELS`],
//! one line a seat with a working `--hf` example.
//!
//! bloomery-serve [--model ds41|qwen38|glm|qwen3|mimo2|decide]
//! bloomery-serve [--model ds41|qwen38|glm|qwen3|mimo2|nemotron|decide]
//! [-m PATH | --model-file PATH | --hf <repo>[:<quant>]]
//! [--head <weights> [--head-config <file>]]
//! <the seat's own flags>
Expand Down Expand Up @@ -37,7 +37,7 @@
//! Otherwise, with no `--model`, the architecture of the file's first shard
//! picks the seat: deepseek41 and deepseek4 the ds41 seat, glm5next and
//! glm5-next the glm seat, qwen4exp the qwen38 seat, qwen3moe and qwen35moe
//! the qwen3 seat, mimo2 the mimo2 seat;
//! the qwen3 seat, mimo2 the mimo2 seat, nemotron_h the nemotron seat;
//! a file of a decision row's backbone (qwen35) with no head is refused by
//! name, saying what would seat it (`--head`, a row's `--hf` repo, or a file
//! that carries its head); a
Expand Down Expand Up @@ -122,15 +122,15 @@ mod drive {
use serve::decide::Ask;
use serve::preflight::Driver;

use crate::serve_seats::{decide, ds41, glm, mimo2, qwen3, qwen38};
use crate::serve_seats::{decide, ds41, glm, mimo2, nemotron, qwen3, qwen38};

const NAME: &str = "bloomery-serve";

const USAGE: &str = "usage: bloomery-serve [--model ds41|qwen38|glm|qwen3|mimo2|decide] [-m PATH | \
--model-file PATH | --hf <repo>[:<quant>]] [--head <weights> \
const USAGE: &str = "usage: bloomery-serve [--model ds41|qwen38|glm|qwen3|mimo2|nemotron|decide] \
[-m PATH | --model-file PATH | --hf <repo>[:<quant>]] [--head <weights> \
[--head-config <file>]] <the chosen seat's own flags, as \
bloomery-serve-ds41, bloomery-serve-qwen38, the glm, the qwen3, the \
mimo2 or the decide seat takes them> | --version";
mimo2, the nemotron or the decide seat takes them> | --version";

/// One line a seat, printed beside [`USAGE`] on `--help` and a bare
/// start: the seat word, what it serves, and a working `--hf` example of
Expand All @@ -142,6 +142,7 @@ models (the --model word is optional with a model file: the file's architecture
glm GLM-5.3-Flash --hf unsloth/GLM-5.3-Flash-GGUF:UD-Q4_K_XL
qwen3 Qwen3-30B-A3B and Qwen3.6 --hf unsloth/Qwen3-30B-A3B-Instruct-2507-GGUF:Q4_K_M
mimo2 MiMo-V2.6-Flash --hf ggml-org/MiMo-V2.6-Flash-MOPD-GGUF:MXFP4
nemotron Nemotron 3 Nano --hf nvidia/NVIDIA-Nemotron-3-Nano-4B-GGUF:Q4_K_M
decide a decision model by its head --hf bartowski/Cloudflare_clef-flash-GGUF:Q5_K_M
decide a decision model in its file --hf ggml-org/lev-GGUF:Q4_K_M";

Expand All @@ -162,6 +163,7 @@ models (the --model word is optional with a model file: the file's architecture
Glm,
Qwen3,
Mimo2,
Nemotron,
}

/// A `--model` word: a generative seat's, or the decide seat's.
Expand All @@ -179,9 +181,10 @@ models (the --model word is optional with a model file: the file's architecture
"glm" => Ok(Word::Seat(Model::Glm)),
"qwen3" => Ok(Word::Seat(Model::Qwen3)),
"mimo2" => Ok(Word::Seat(Model::Mimo2)),
"nemotron" => Ok(Word::Seat(Model::Nemotron)),
serve::decide::WORD => Ok(Word::Decide),
other => Err(format!(
"--model is ds41, qwen38, glm, qwen3, mimo2 or {}, not {other}",
"--model is ds41, qwen38, glm, qwen3, mimo2, nemotron or {}, not {other}",
serve::decide::WORD
)
.into()),
Expand All @@ -198,12 +201,13 @@ models (the --model word is optional with a model file: the file's architecture

impl Model {
/// Every generative seat.
const ALL: [Model; 5] = [
const ALL: [Model; 6] = [
Model::Ds41,
Model::Qwen38,
Model::Glm,
Model::Qwen3,
Model::Mimo2,
Model::Nemotron,
];

/// The seat's word, as errors and the usage name it.
Expand All @@ -214,6 +218,7 @@ models (the --model word is optional with a model file: the file's architecture
Model::Glm => "glm",
Model::Qwen3 => "qwen3",
Model::Mimo2 => "mimo2",
Model::Nemotron => "nemotron",
}
}

Expand All @@ -228,6 +233,7 @@ models (the --model word is optional with a model file: the file's architecture
Model::Glm => matches!(Arch::from_name(arch), Ok(Arch::Glm5next)),
Model::Qwen3 => matches!(arch, "qwen3moe" | "qwen35moe"),
Model::Mimo2 => arch == "mimo2",
Model::Nemotron => matches!(Arch::from_name(arch), Ok(Arch::NemotronH)),
}
}
}
Expand All @@ -245,7 +251,7 @@ models (the --model word is optional with a model file: the file's architecture
}
let v = it.next().ok_or_else(|| {
format!(
"--model needs a value (ds41, qwen38, glm, qwen3, mimo2 or {}): {USAGE}",
"--model needs a value (ds41, qwen38, glm, qwen3, mimo2, nemotron or {}): {USAGE}",
serve::decide::WORD
)
})?;
Expand Down Expand Up @@ -436,6 +442,7 @@ models (the --model word is optional with a model file: the file's architecture
Model::Glm => glm::run(&rest),
Model::Qwen3 => qwen3::run(&rest),
Model::Mimo2 => mimo2::run(&rest),
Model::Nemotron => nemotron::run(&rest),
};
ended(r)
}
Expand Down
4 changes: 3 additions & 1 deletion crates/gpu-gates/src/bin/gate_clef_serve.rs
Original file line number Diff line number Diff line change
Expand Up @@ -234,14 +234,16 @@ mod gate {
/// header line above them.
///
/// PIN(2026-10-10): a seventh row, the mimo2 seat's, joins the table.
const MODELS_LINES: [&str; 7] = [
/// PIN(2026-10-15): an eighth row, the nemotron seat's, joins the table.
const MODELS_LINES: [&str; 8] = [
"models (the --model word is optional with a model file: the file's architecture picks \
the seat)",
"ds41 DeepSeek-V4.1-Flash --hf vcruz305/DeepSeek-V4.1-Flash-GGUF:Q3_K_M",
"qwen38 Qwen3.8-Flash-Next --hf unsloth/Qwen3.8-Flash-Next-GGUF:UD-Q4_K_XL",
"glm GLM-5.3-Flash --hf unsloth/GLM-5.3-Flash-GGUF:UD-Q4_K_XL",
"qwen3 Qwen3-30B-A3B and Qwen3.6 --hf unsloth/Qwen3-30B-A3B-Instruct-2507-GGUF:Q4_K_M",
"mimo2 MiMo-V2.6-Flash --hf ggml-org/MiMo-V2.6-Flash-MOPD-GGUF:MXFP4",
"nemotron Nemotron 3 Nano --hf nvidia/NVIDIA-Nemotron-3-Nano-4B-GGUF:Q4_K_M",
"decide a decision model by its head --hf bartowski/Cloudflare_clef-flash-GGUF:Q5_K_M",
];

Expand Down
Loading
Loading