How to run Nemotron-3.5-Bolt-74B-A9B IQ2 QAT on 2× RTX 5060 Ti 16 GB

Retrieval is flawless across the full native 262144-token context window. Warm prefill is at around 1267 tok/s, and DFlash2 acceptance is the best among the models measured on this hardware so far. The code failures are typos: a raise called like a Python exception, and a dot where a colon belongs. This is the closest thing to a production coding model for Elixir on this hardware.

Evaluated by tizzyt566/Ornith-1.5-35B-A3B-NVFP4-GGUF · Written by Isaak Tsalicoglou

Results

LoadWallPPTGPredFinishQuality
21.9 s 284.8 s 1280 107.9 30035 stop 4/5

Medians of three runs (wall 215.1 / 284.8 / 329.8 s); per-run quality 3 / 3 / 2. pp is the warmed 10 % ladder value — run 1 reports 709 cold (mmap first-touch), runs 2-3 prefix-cached the identical prompt (prompt_n=4) and are excluded. Warm pp 1,280→1,247 across the window reproduces the profile card’s ~1,267 class. tg 107.9 (106.0 / 107.9 / 110.8). DFlash2 acceptance 47.1 / 48.4 / 49.7 % — the best spec number among the models measured on this box (Muse ≈30 %, flint had none). Delivered-pipeline gate 0/3 as-filed: every run is a single token-bleed from compiling, never two structural flaws.

Needle retrieval

Window
262144
Depth
26,214 → 262,080 (every 10 % of the slot)
Result
hit
pp/tg
30/30, no cliff; pp 1,280→920 · tg 143→99
Anchor
tesseract-1c7d3f-vault

Quality of result

Adversarial review before code 4/5 a broad explicit gap list before any code; reads the default-TTL-vs-interval ambiguity and the periodic-eviction trap correctly.
Public API present (put/get/delete/stats) 5/5 complete start_link/1,2, put/3,4, get/2, delete/2, stats/1 with docs and typespecs.
TTL + periodic eviction + named instances + hit/miss stats 4/5 real timer machinery via Process.send_after, registry-addressed names, hit/miss/size/memory counters — design sound across all three modules.
Idiomatic OTP / would it compile? 3/5 every module a single textual fix from compiling: the raise ArgumentError, "…" call-shape (run 1 kv_1.ex:78, ×4 occurrences; run 2 kv_2.ex:137) and :erlang.monotonic_time(:ms) (run 3 run3.ex:118) — exception and namespace objects invoked like Python; correct Elixir is raise ArgumentError, "…" / :erlang:monotonic_time(:millisecond).
Tests shipped, not promised 4/5 six tests (run 1, run 2) and nine (run 3) covering TTL expiry, stats, multi-instance — never executed only because each module dies first; run 3 shipped them unfenced.
Finish reason + thinking tax 5/5 clean stop ×3; largest, best-structured deliveries among the models measured on this box.

Scale: 5 strong · 4 capable · 3 mixed · 2 weak · 1 broken.

Prompt

This run used v5 (The benchmarking prompt) — It answers a single Elixir-specific question, so YMMV.

Elixir code smells 2

  • content-wide:— — cross-language call bleed as the signature defect: ArgumentError("…") (×4 in run 1) and :erlang.monotonic_time(:ms) — right objects, wrong language’s call syntax.
  • run3.ex:— — run 3 reverted to bare prose after two well-fenced runs — format drift, not format discipline.

Defects 3

  • kv_1.ex — unexpected ( after alias ArgumentError (×4 sites) (module compile FAIL — run 1, one shape)
  • kv_2.ex — same ArgumentError(…) call-shape (module compile FAIL — run 2, one shape)
  • run3.ex — :erlang. dot-namespace (missing colon) (module compile FAIL — run 3, one char; TTLStore salvaged)

Host

QuantIQ2 QAT
Hardware2× RTX 5060 Ti 16 GB (PCIe 5.0 x8/x8), Ryzen 9700X, 16 GB DDR5-6000
Splitlayer-split — the split is a run property, not a tier key
Runtimellama-server 0.7.0-dev (d05706b4f), CUDA
HarnessGrok Build 1.0.50 (c58f321264ba)
Tested2026-10-31
Weightshuggingface.co/nvidia/NVIDIA-Nemotron-3.5-Bolt-74B-A9B-24GB-GGUF

Reproduce

Two 16 GB cards. IQ2 QAT (2-bit, quantization-aware-trained) MoE 74B-A9B (~24 GB) served layer-split; vision tower wired in host RAM (--mmproj … --no-mmproj-offload) — the plain single-slot variant, not the -x2 sibling. Served window 262,144; the key-value task client cap is 261,000. DFlash2 speculative decoding (--spec-type draft-dflash, n-max 6) with a LiLiCorr drafter at ngl 999. Sampling temp 1.0 / top_p 0.95 / top_k 20 / min-p 0 / presence 0. --host/--port omitted. Needle answers capped at 512; three 100 %-steps ran finish=length past the cap. Client sent no sampling parameters.
llama-server -b 2048 -ub 512 -ctk q8_0 -ctv q8_0 --jinja --threads 6 --threads-batch 6 \
  -ngl 999 --kv-offload --no-context-shift --load-mode mmap --cache-ram 0 --no-cache-idle-slots \
  -fa on --reasoning on --reasoning-preserve --temp 0.6 --top_p 0.95 --top_k 20 --min-p 0.05 \
  --cont-batching --split-mode tensor \
  --split-mode layer --tensor-split 1,1 -fit off \
  --ctx-size 262144 --parallel 1 --cache-ram 0 --no-cache-idle-slots \
  --spec-type draft-dflash --spec-draft-n-max 6 --spec-draft-ngl 999 \
  -m NVIDIA-Nemotron-3.5-Bolt-74B-A9B-24GB.gguf \
  --mmproj mmproj-NVIDIA-Nemotron-3.5-Bolt-74B-A9B-24GB.gguf --no-mmproj-offload \
  --spec-draft-model NVIDIA-Nemotron-3.5-Bolt-74B-A9B-24GB-LiLiCorr.gguf \
  -ub 1024 \
  --temp 1.0 --top_p 0.95 --top_k 20 --min-p 0.0 --presence_penalty 0.0

Nemotron-3.5-Bolt-74B-A9B on IQ2 QAT (2-bit) landed as a very strong all-rounder, with perfect (30/30) needle recall across its full native context window, with warm prefill at approx. 1280 tok/s and the best DFlash2 acceptance among the models measured on this configuration. Though it still missed the ready-to-compile condition, every run is a uniquely single minor issue away from compiling, here an exception called like Python, and a dot where a colon belongs.

Representative output

Run 1 delivered the largest, best-formed deliverable among the models measured so far on this hardware, with 11.3 k characters in its output. Trimmed representative excerpt of the GenServer module, with the public API, input validation, and the timer-driven eviction:

defmodule KVStore do
  @default_ttl 3_600_000          # 1 hour
  @default_interval 60_000        # 60 s

  @type t :: %{
    entries: map(),
    default_ttl: pos_integer(),
    interval: pos_integer(),
    hits: non_neg_integer(),
    misses: non_neg_integer(),
    timer: reference() | nil
  }

  @spec start_link(options :: keyword()) :: GenServer.gen_server_result()
  def start_link(options \ []) when is_list(options) do
    GenServer.start_link(__MODULE__, options)
  end

  @spec start_link(name :: atom(), options :: keyword()) :: GenServer.gen_server_result()
  def start_link(name, options \ []) when is_atom(name) and is_list(options) do
    GenServer.start_link(__MODULE__, Keyword.put(options, :name, name))
  end

  @spec put(store, key :: binary(), value :: binary()) :: :ok
  def put(store, key, value) do
    validate_key(key)
    validate_value(value)
    GenServer.call(store, {:put, key, value})
  end

  @spec put(store, key :: binary(), value :: binary(), ttl :: pos_integer()) :: :ok
  def put(store, key, value, ttl) do
    validate_key(key)
    validate_value(value)
    validate_ttl(ttl)
    GenServer.call(store, {:put, key, value, ttl})
  end

  @spec get(store, key :: binary()) :: binary() | nil
  def get(store, key) do
    validate_key(key)
    GenServer.call(store, {:get, key})
  end

  @spec delete(store, key :: binary()) :: boolean()
  def delete(store, key) do
    validate_key(key)
    GenServer.call(store, {:delete, key})
  end

  @spec stats(store) :: %{size: non_neg_integer(), hits: non_neg_integer(), misses: non_neg_integer(), memory: non_neg_integer()}
  def stats(store) do
    GenServer.call(store, {:stats})
  end

  defp validate_key(key) when is_binary(key), do: key
  defp validate_key(_key), do: raise ArgumentError, "key must be a binary"

  defp validate_value(value) when is_binary(value), do: value
  defp validate_value(_value), do: raise ArgumentError, "value must be a binary"

  defp validate_ttl(ttl) when is_integer(ttl) and ttl > 0, do: ttl
  defp validate_ttl(_ttl), do: raise ArgumentError, "ttl must be a positive integer"

  defp validate_interval(interval) when is_integer(interval) and interval > 0, do: interval
  defp validate_interval(_interval), do: raise ArgumentError, "interval must be a positive integer"

  @impl true
  def init(options) do
    default_ttl = validate_ttl(Keyword.get(options, :default_ttl, @default_ttl))
    interval = validate_interval(Keyword.get(options, :interval, @default_interval))
    state = %{entries: %{}, default_ttl: default_ttl, interval: interval, hits: 0, misses: 0, timer: nil}
    {:ok, schedule_evict(state, interval)}
  end

  @impl true
  def handle_info(:evict, state) do
    {:noreply, state |> evict_expired() |> schedule_evict(state.interval)}
  end

  defp evict_expired(state) do
    now = System.monotonic_time(:millisecond)
    expired = for {key, {_value, expires_at}} <- state.entries, expires_at <= now, do: key
    %{state | entries: Map.drop(state.entries, expired)}
  end

  defp schedule_evict(state, interval) do
    %{state | timer: Process.send_after(self(), :evict, interval)}
  end

  @impl true
  def handle_call({:put, key, value, ttl}, _from, state) do
    expires_at = System.monotonic_time(:millisecond) + ttl
    {:reply, :ok, %{state | entries: Map.put(state.entries, key, {value, expires_at})}}
  end

  @impl true
  def handle_call({:stats}, _from, state) do
    memory = Enum.reduce(state.entries, 0, fn {k, {v, _}}, acc -> acc + byte_size(k) + byte_size(v) + 64 end)
    {:reply, %{size: map_size(state.entries), hits: state.hits, misses: state.misses, memory: memory}, state}
  end

  @impl true
  def terminate(_reason, state) do
    case state.timer do
      nil -> :ok
      ref -> Process.cancel_timer(ref)
    end
  end
end

The catch

The compile gate is 0/3 as-filed, but the failure texture is distinct from other models benchmarked so far. Every run’s module is one textual fix from compiling:

  • run 1 kv_1.ex:78:24 — raise ArgumentError("…") ×4: correct raise, call-shape on the alias (Python ValueError(…) bleed).
  • run 2 kv_2.ex:137:60 — same ArgumentError call-shape, third occurrence system-wide.
  • run 3 run3.ex:118:18 (salvaged) — :erlang.monotonic_time(:ms): a dot where Elixir wants a colon.

Format discipline held in runs 1-2 (proper ```elixir fences); run 3 reverted to bare prose.

Route

Nemotron Bolt deserves promotion to long-context retrieval and review duty, but it also deserves an orchestrator that will review its coding output and fix minor issues so that the Elixir code compiles. It can possibly serve as a main Elixir coding model, at least for bounded tasks, provided that AGENTS.md instructs it to attempt mix compile and fix its own issues based on compiler output.

Have something worth building?

A paragraph about what you are working on is enough to start.

Say hello