| 144 | } |
| 145 | |
| 146 | static void print_model_runtime(FILE *fp, const help_colors *c, |
| 147 | ds4_help_tool tool, bool full) { |
| 148 | title(fp, c, "Model And Runtime"); |
| 149 | opt(fp, c, "-m, --model FILE", "GGUF model path. Default: ds4flash.gguf"); |
| 150 | if (tool == DS4_HELP_DS4 || tool == DS4_HELP_AGENT || tool == DS4_HELP_SERVER) { |
| 151 | opt(fp, c, "--vision FILE", "Vision encoder GGUF for the selected model."); |
| 152 | } |
| 153 | #ifdef DS4_ROCM_BUILD |
| 154 | opt(fp, c, "--metal | --rocm | --cpu", "Select the backend explicitly."); |
| 155 | opt(fp, c, "--backend NAME", "Backend name: metal, rocm, or cpu."); |
| 156 | #else |
| 157 | opt(fp, c, "--metal | --cuda | --cpu", "Select the backend explicitly."); |
| 158 | opt(fp, c, "--backend NAME", "Backend name: metal, cuda, or cpu."); |
| 159 | opt(fp, c, "--gpu-vram N[,N,...]|auto", "CUDA VRAM budgets per device, in GiB, or auto-detect free VRAM."); |
| 160 | opt(fp, c, "--gpu-devices N[,N,...]", "CUDA device indices used by multi-GPU placement."); |
| 161 | if (tool != DS4_HELP_EVAL) { |
| 162 | opt(fp, c, "--cuda-tensor-parallel", "Enable the paired DeepSeek tensor/expert path on an even multi-GPU CUDA placement."); |
| 163 | } |
| 164 | #endif |
| 165 | if (tool != DS4_HELP_BENCH) { |
| 166 | opt(fp, c, "-c, --ctx N", "Allocated context tokens."); |
| 167 | } |
| 168 | if (tool == DS4_HELP_SERVER) { |
| 169 | opt(fp, c, "-n, --tokens N", "Default max output tokens when clients omit a limit."); |
| 170 | } |
| 171 | opt(fp, c, "-t, --threads N", "CPU helper threads for host-side/reference work."); |
| 172 | opt(fp, c, "--power N", "GPU duty-cycle target, 1..100. Default: 100"); |
| 173 | opt(fp, c, "--ssd-streaming", "Metal/CUDA/ROCm: opt in to SSD-backed model streaming instead of full residency."); |
| 174 | opt(fp, c, "--ssd-streaming-cold", "SSD streaming: skip default popularity-based expert-cache preload."); |
| 175 | opt(fp, c, "--ssd-streaming-cache-experts N|NGB", "SSD streaming cache target. N requests dynamic expert slots; NGB also reserves two full prefill layers. Either may be reduced to fit the model, graph, context, and backend working set."); |
| 176 | opt(fp, c, "--ssd-streaming-full-layers N", "GLM Metal streaming: keep the first N routed layers fully resident. Default: auto from NGB expert budget; use 0 to disable."); |
| 177 | opt(fp, c, "--ssd-streaming-preload-experts N", "SSD streaming: upfront popularity preload count. DeepSeek auto-seeds by default; GLM demand-fills unless N is explicit."); |
| 178 | opt(fp, c, "--simulate-used-memory NGB", "Diagnostic: lock N GiB before model load to simulate a smaller-memory machine."); |
| 179 | opt(fp, c, "--prefill-chunk N", "Graph prefill chunk size. Default: CUDA TP 2048; PRO long prompts 8192; others 4096."); |
| 180 | if (full) { |
| 181 | if (tool == DS4_HELP_EVAL || tool == DS4_HELP_BENCH) { |
| 182 | opt(fp, c, "--mtp-model FILE", "External MTP or DSpark support GGUF."); |
| 183 | } |
| 184 | if (tool == DS4_HELP_DS4 || tool == DS4_HELP_AGENT || tool == DS4_HELP_SERVER) { |
| 185 | opt(fp, c, "--mtp", "Enable model-embedded MTP speculation."); |
| 186 | opt(fp, c, "--mtp-model FILE", "External MTP or DSpark support GGUF."); |
| 187 | opt(fp, c, "--mtp-draft N", "Maximum autoregressive MTP draft tokens. Default: 1"); |
| 188 | opt(fp, c, "--mtp-margin F", "Verifier confidence margin for fast MTP acceptance. Default: 3"); |
| 189 | opt(fp, c, "--mtp-timing", "Enable embedded MTP and print acceptance/timing counters."); |
no test coverage detected