Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
86 commits
Select commit Hold shift + click to select a range
88efd6b
Reorganize and refactor Suffix Decoding (#182)
sfc-gh-aqiao Sep 16, 2025
e8d252f
Add environment variable to skip version check (#186)
sfc-gh-aqiao Sep 18, 2025
e27ae09
Enable SwiftKV when FlashInfer is not available (#187)
sfc-gh-pjoziak Sep 18, 2025
9ecce3a
Fix hybrid mode(spec decoding + suffix) crash on structured_output (#…
sfc-gh-yewang Sep 23, 2025
8b1d693
Make Arctic Inference plugin opt-in instead of opt-out (#188)
sfc-gh-aqiao Sep 23, 2025
e5aa688
Simplify min_score selection logic, correct type hint for `propose_su…
CptTZ Sep 25, 2025
02a8a51
Add op_builder for jitting the kernels (#193)
sfc-gh-reyazda Sep 25, 2025
87e2f77
Update links in README for Shift Parallelism (#196)
sfc-gh-mhidayetoglu Sep 26, 2025
8452500
bump to v0.0.10 (#194)
sfc-gh-jrasley Sep 26, 2025
170082f
init
sfc-gh-yewang Sep 29, 2025
5a410f1
Revert "init"
sfc-gh-yewang Sep 29, 2025
cbeb679
Move SwiftKV ops to JIT-build (#198)
sfc-gh-yewang Sep 29, 2025
c4cb213
Add @sfc-gh-reyazda as code owner (#199)
sfc-gh-yewang Sep 29, 2025
1408c80
Explicitly initialize CUDA buffers for next tokens (#201)
sfc-gh-yewang Oct 6, 2025
353e102
Port suffix decoding to nanobind (#206)
sfc-gh-aqiao Oct 13, 2025
e1d1ff2
upgrade to vllm 0.10.1 (#162)
sfc-gh-yewang Oct 13, 2025
6adb69f
Suffix decoding: break out of speculate loop early (#207)
sfc-gh-aqiao Oct 13, 2025
1bc893f
Suffix decoding speculation optimization (#211)
sfc-gh-aqiao Oct 17, 2025
2a14b27
reshape_and_cache_flash fp4 kernel (#210)
sfc-gh-yewang Oct 17, 2025
8d5d124
More suffix decoding optimizations (#212)
sfc-gh-aqiao Oct 20, 2025
3988caf
remove ulysses moe patch (#213)
sfc-gh-mhidayetoglu Oct 21, 2025
3145f23
Bump version from 0.0.10 to 0.1.0 (#214)
sfc-gh-jrasley Oct 21, 2025
d88d4de
Silence logging if plugin is diabled (#221)
sfc-gh-aqiao Nov 6, 2025
db56537
Bump version from 0.1.0 to 0.1.1 (#222)
sfc-gh-jrasley Nov 6, 2025
d096fdf
Communication Fusing (#224)
sfc-gh-mhidayetoglu Nov 19, 2025
5e08f0f
patch for running traces with timestamps (#228)
sfc-gh-mhidayetoglu Dec 5, 2025
0ea6a68
rebase to vllm 0.11.0 (#216)
sfc-gh-yewang Dec 30, 2025
c6bee37
Bump version from 0.1.1 to 0.1.2
sfc-gh-yewang Jan 24, 2026
d223cb5
Bump version from 0.1.2 to 0.1.3
sfc-gh-yewang Jan 24, 2026
cf431e4
Reproducibility extension (#239)
sfc-gh-mhidayetoglu Jan 26, 2026
29def6b
Enhance ArcticProposer and ArcticSpeculator to incorporate scheduler …
sfc-gh-yewang Feb 8, 2026
19c8eac
Rebase to vLLM 0.14.1 (#242)
sfc-gh-yewang Feb 24, 2026
0a42e6f
[Rollout] Patch InprocClient.get_output() to ensure correct behavior …
sfc-gh-yewang Feb 24, 2026
84636e6
[Rollout] Forest Cascade Attention (#20)
sfc-gh-yewang Feb 24, 2026
b1d2e0f
Bring ArcticForge code over (#21)
sfc-gh-mwyatt Feb 24, 2026
9729a45
Surface logprobs (#23)
sfc-gh-yewang Mar 3, 2026
b7aaf10
ArcticInference server weight sync (#22)
sfc-gh-yewang Mar 3, 2026
420418f
Multi-model support (#25)
sfc-gh-mwyatt Mar 5, 2026
b3a62c1
Extract multi-model support to separate module (#26)
sfc-gh-mwyatt Mar 6, 2026
6ab2f5a
Surface wake_up/sleep API (#27)
sfc-gh-yewang Mar 6, 2026
570d9e3
Update and expand server examples (#28)
sfc-gh-mwyatt Mar 6, 2026
8812d31
Fix FP8 MoE weight sync (#29)
sfc-gh-yewang Mar 6, 2026
d8473bd
Small fixes (#30)
sfc-gh-yewang Mar 6, 2026
d5ddae9
Update CODEOWNERS with new org and user names (#32)
jenkins-snowci-mergequeue-0-emu[bot] Mar 9, 2026
ca36437
SNOW-2231554-EMU Migration - Update references for Wave 4 testing (#18)
svc-gh-sourcegraph-sa Mar 9, 2026
62ca5b9
Revert "SNOW-2231554-EMU Migration - Update references for Wave 4 tes…
sfc-gh-yewang Mar 9, 2026
fad9d41
reflect vllm PR #32947 (#34)
sfc-gh-mhidayetoglu Mar 9, 2026
4dc4bbe
Add reverse mode for weight sync and fix per-replica port assignment …
sfc-gh-yewang Mar 13, 2026
7970df0
Fix spec decoding drafter model during sleep/wake cycles (#36)
sfc-gh-yewang Mar 16, 2026
6a6acb9
Add spec (drafter) model weight sync API (#37)
sfc-gh-yewang Mar 17, 2026
fba641f
Fix shift-parallel CUDA graph capture and dispatch (#258)
xylian86 Mar 28, 2026
a591018
Fix shift-parallel CUDA graph capture and dispatch (#258)
sfc-gh-yewang Apr 6, 2026
830f92f
Feature: colocation support (#45)
sfc-gh-mwyatt Apr 8, 2026
f23d97c
feat: IPC shared-memory weight sync + placement group support for col…
sfc-gh-kganesan Apr 22, 2026
60bea68
Disable health status
sfc-gh-truwase May 12, 2026
3db6631
Verl colocate
sfc-gh-truwase May 15, 2026
e4d1740
Add reset_prefix_cache to inference worker (#73)
sfc-gh-mhidayetoglu May 19, 2026
7a4f7e9
PG fixes
sfc-gh-truwase May 19, 2026
99838c4
Merge branch 'tunji/verl_integration' into tunji/verl_32b_perf
sfc-gh-truwase May 19, 2026
883dc95
support VLLM_BATCH_INVARIANT
sfc-gh-sbekman May 20, 2026
85c762a
vllm version
sfc-gh-truwase May 20, 2026
9f9ac4a
support VLLM_BATCH_INVARIANT note
sfc-gh-sbekman May 20, 2026
c86fee9
Merge branch 'tunji/verl_integration' of https://github.com/snowflake…
sfc-gh-sbekman May 20, 2026
dfb4f0a
weight sync; fca
sfc-gh-truwase May 23, 2026
9aa69ae
Sync tunji/verl_integration with origin/main (vLLM 0.18.0 rebase) (#7…
sfc-gh-mhidayetoglu May 24, 2026
4f051c5
fix vllm18 rebase mistake
sfc-gh-mhidayetoglu May 24, 2026
07bb3e4
Fix vllm deps
sfc-gh-truwase May 24, 2026
4cfc9d2
fix parallel config init
sfc-gh-mhidayetoglu May 25, 2026
85391b1
Add strict weight-sync parameter name validation for CUDA IPC.
sfc-gh-truwase May 28, 2026
e80638d
Harden weight sync and add spec-weight HTTP endpoints
sfc-gh-truwase May 30, 2026
d4d0279
Add streaming CUDA IPC chunk loader for low-memory weight sync
sfc-gh-truwase Jun 2, 2026
63ee7e8
Print one-shot [FCA] status banner (#85)
sfc-gh-mhidayetoglu Jun 5, 2026
e70bd99
Add min_batch_size tuning to Forest Cascade Attention (#93)
sfc-gh-mhidayetoglu Jun 7, 2026
28a0f45
Strict group-balanced routing for GRPO rollouts (#92)
sfc-gh-mhidayetoglu Jun 9, 2026
c6f0a4f
add auxiliary compute_weight_norm API used in tests
sfc-gh-sbekman Jun 16, 2026
1edefdf
Integrate Zorro Inference (FCA) and Arctic Speculative Decoding into …
sfc-gh-mhidayetoglu Jun 17, 2026
6c73218
Add hard cut-off for speculative decoding at high batch size
sfc-gh-mhidayetoglu Jun 23, 2026
e51233f
Merge branch 'main' into arctic_rl/integration
sfc-gh-mhidayetoglu Jun 24, 2026
c771c22
fix codeowners
sfc-gh-mhidayetoglu Jun 24, 2026
9803ba3
delete dev patches
sfc-gh-mhidayetoglu Jun 24, 2026
d8365b6
remove kvcached
sfc-gh-mhidayetoglu Jun 24, 2026
a1bf61a
Merge pull request #264 from snowflakedb/arctic_rl/integration
sfc-gh-jrasley Jun 24, 2026
e9bbbd0
bump v0.2.0 (#265)
sfc-gh-mwyatt Jun 26, 2026
8cbac15
bump v0.2.1.dev0
sfc-gh-mwyatt Jun 26, 2026
daf3172
Fix vllm port toctou (#266)
sfc-gh-truwase Jun 29, 2026
9d46438
Mike's toctou simplification (#267)
sfc-gh-truwase Jun 29, 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
2 changes: 1 addition & 1 deletion .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -1 +1 @@
* @sfc-gh-aqiao @sfc-gh-jrasley @sfc-gh-mhidayetoglu @sfc-gh-yewang @sfc-gh-goliaro
* @sfc-gh-jrasley @sfc-gh-mhidayetoglu @sfc-gh-goliaro @sfc-gh-reyazda
16 changes: 12 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,10 +36,10 @@ Arctic Inference achieves high throughput and low latency through a wholistic se
<tbody>
<tr>
<td align="left">
Arctic Ulysses (<a href="https://www.snowflake.com/en/engineering-blog/ulysses-low-latency-llm-inference/">blog</a>,
<a href="https://arxiv.org/abs/2507.11830">paper</a>)
Arctic Ulysses (<a href="https://www.snowflake.com/en/engineering-blog/ulysses-low-latency-llm-inference/">blog</a>)
<br>
Shift Parallelism (<a href="https://www.snowflake.com/en/engineering-blog/arctic-inference-shift-parallelism/">blog</a>)
Shift Parallelism (<a href="https://www.snowflake.com/en/engineering-blog/arctic-inference-shift-parallelism/">blog</a>,
<a href="https://arxiv.org/abs/2509.16495">paper</a>)
</td>
<td align="left">
Arctic Speculator (<a href="https://www.snowflake.com/en/engineering-blog/fast-speculative-decoding-vllm-arctic/">blog</a>)
Expand Down Expand Up @@ -105,7 +105,7 @@ By using the examples below, you can get benefits from Shift Parallelism, Specul
#### Serving

```console
vllm serve Snowflake/Llama-3.1-SwiftKV-8B-Instruct \
ARCTIC_INFERENCE_ENABLED=1 vllm serve Snowflake/Llama-3.1-SwiftKV-8B-Instruct \
--quantization "fp8" \
--tensor-parallel-size 1 \
--ulysses-sequence-parallel-size 2 \
Expand All @@ -121,6 +121,8 @@ vllm serve Snowflake/Llama-3.1-SwiftKV-8B-Instruct \

#### Offline

Save the following script to `arctic_example.py`:

```python
import vllm
from vllm import LLM, SamplingParams
Expand Down Expand Up @@ -156,6 +158,12 @@ outputs = llm.chat(conversation, sampling_params=sampling_params)
print(outputs[0].outputs[0].text)
```

Run the script with Arctic Inference enabled:

```console
ARCTIC_INFERENCE_ENABLED=1 python arctic_example.py
```

## Citation
```
@misc{arcticinference2025,
Expand Down
34 changes: 34 additions & 0 deletions arctic_inference/envs.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,46 @@

if TYPE_CHECKING:
ARCTIC_INFERENCE_SKIP_SPEC_MODEL_CHECK: bool = False
ARCTIC_FP32_LM_HEAD: bool = False


def arctic_inference_effective_enabled(
extra_env: dict[str, str] | None = None,
) -> bool:
"""True if the Arctic vLLM plugin should load for this process or worker env.

When ``extra_env`` is passed (e.g. ``ModelConfig.extra_env``), it is checked
in addition to ``os.environ`` so the driver can omit Arctic-only engine
kwargs when workers will not enable the plugin.
"""
if os.getenv("ARCTIC_INFERENCE_ENABLED", "0") == "1":
return True
if extra_env and str(extra_env.get("ARCTIC_INFERENCE_ENABLED", "0")) == "1":
return True
return False


environment_variables: dict[str, Callable[[], Any]] = {
"ARCTIC_INFERENCE_ENABLED":
lambda: os.getenv("ARCTIC_INFERENCE_ENABLED", "0") == "1",
"ARCTIC_INFERENCE_SKIP_PLATFORM_CHECK":
lambda: os.getenv("ARCTIC_INFERENCE_SKIP_PLATFORM_CHECK", "0") == "1",
"ARCTIC_INFERENCE_SKIP_SPEC_MODEL_CHECK":
lambda: os.getenv("ARCTIC_INFERENCE_SKIP_SPEC_MODEL_CHECK", "0") == "1",
"ARCTIC_INFERENCE_SKIP_VERSION_CHECK":
lambda: os.getenv("ARCTIC_INFERENCE_SKIP_VERSION_CHECK", "0") == "1",
# Run the lm_head matmul in fp32 (weights stay in their native
# dtype; we upcast on the fly). vLLM's V1 sampler already does
# softmax in fp32, so the full final stage is fp32. Needed for
# RL workloads that require precise log-probs / token
# probabilities for off-policy correction. Equivalent to the
# ``--fp32-lm-head`` CLI flag.
"ARCTIC_FP32_LM_HEAD":
lambda: os.getenv("ARCTIC_FP32_LM_HEAD", "0") == "1",
}

# temporary workaround for gpt-oss model
ARCTIC_INFERENCE_SKIP_SPEC_MODEL_CHECK = 1

def __getattr__(name: str) -> Any:
if name in environment_variables:
Expand Down
Empty file.
Loading
Loading