README: add SGLang config + real performance numbers
Browse files
README.md
CHANGED
|
@@ -37,20 +37,51 @@ security workflows and autonomous security agents.
|
|
| 37 |
| Tool-calling | OpenAI-compatible (`qwen3_coder` parser) |
|
| 38 |
| Serving | SGLang / vLLM compatible |
|
| 39 |
|
| 40 |
-
##
|
| 41 |
-
Nesi1 runs on any OpenAI-compatible inference server (SGLang, vLLM).
|
| 42 |
-
|
| 43 |
|
| 44 |
```bash
|
| 45 |
python3 -m sglang.launch_server \
|
| 46 |
--model-path nesilabs/Nesi1 \
|
| 47 |
--served-model-name Nesi1 \
|
| 48 |
--context-length 262144 \
|
|
|
|
|
|
|
|
|
|
| 49 |
--tool-call-parser qwen3_coder \
|
| 50 |
-
--
|
|
|
|
| 51 |
```
|
| 52 |
|
| 53 |
-
Then query it like any OpenAI chat endpoint (`/v1/chat/completions`).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 54 |
|
| 55 |
## ⚠️ Legal Notice / Disclaimer
|
| 56 |
|
|
|
|
| 37 |
| Tool-calling | OpenAI-compatible (`qwen3_coder` parser) |
|
| 38 |
| Serving | SGLang / vLLM compatible |
|
| 39 |
|
| 40 |
+
## Deployment
|
| 41 |
+
Nesi1 runs on any OpenAI-compatible inference server (SGLang, vLLM). This is
|
| 42 |
+
the exact SGLang configuration we run in production:
|
| 43 |
|
| 44 |
```bash
|
| 45 |
python3 -m sglang.launch_server \
|
| 46 |
--model-path nesilabs/Nesi1 \
|
| 47 |
--served-model-name Nesi1 \
|
| 48 |
--context-length 262144 \
|
| 49 |
+
--mem-fraction-static 0.92 \
|
| 50 |
+
--trust-remote-code \
|
| 51 |
+
--kv-cache-dtype auto \
|
| 52 |
--tool-call-parser qwen3_coder \
|
| 53 |
+
--default-chat-template-kwargs '{"enable_thinking":false}' \
|
| 54 |
+
--host 0.0.0.0 --port 30000
|
| 55 |
```
|
| 56 |
|
| 57 |
+
Then query it like any OpenAI chat endpoint (`POST /v1/chat/completions`).
|
| 58 |
+
|
| 59 |
+
### What we learned (tips that matter)
|
| 60 |
+
- **`--tool-call-parser qwen3_coder`** is required for clean OpenAI-style
|
| 61 |
+
`tool_calls`. Without it, tool calls come back as raw `<tool_call>` text and
|
| 62 |
+
break agent frameworks.
|
| 63 |
+
- **`enable_thinking: false`** keeps internal reasoning out of the final answer.
|
| 64 |
+
- **bf16 KV cache (`--kv-cache-dtype auto`)** for quality. FP8 KV roughly
|
| 65 |
+
doubles capacity but we observed quality drift on long agentic sessions, so
|
| 66 |
+
we keep bf16.
|
| 67 |
+
- **Prefix caching (RadixCache) is the big win for agents.** In agentic loops
|
| 68 |
+
the same context is replayed every turn — cache-read hit rates of ~95%+ make
|
| 69 |
+
prefill almost free. Keep the agent context **append-only** to maximize hits.
|
| 70 |
+
- Speculative decoding (NEXTN) did **not** help on this model under
|
| 71 |
+
concurrency — it lowered throughput, so we left it off.
|
| 72 |
+
|
| 73 |
+
### Performance (measured on 1× RTX PRO 6000 Blackwell 96GB, bf16)
|
| 74 |
+
| Metric | Value |
|
| 75 |
+
|---|---|
|
| 76 |
+
| Single-stream decode | **~84 tok/s** |
|
| 77 |
+
| Under concurrency (several streams) | ~50–75 tok/s per stream |
|
| 78 |
+
| KV cache pool | ~595k tokens |
|
| 79 |
+
| Concurrent sessions @ ~60k ctx | ~10 |
|
| 80 |
+
| Concurrent multi-agent pentest pipelines | ~2–3 |
|
| 81 |
+
| Max context | up to 256k tokens |
|
| 82 |
+
|
| 83 |
+
A single 96GB GPU comfortably serves a team's security copilots plus a few
|
| 84 |
+
parallel pentest pipelines. For higher concurrency, load-balance across GPUs.
|
| 85 |
|
| 86 |
## ⚠️ Legal Notice / Disclaimer
|
| 87 |
|