Commit Graph

448 Commits

Author SHA1 Message Date
Tanmay Verma 568eb1009e
fix: Use Rust Ingress (dynamo-run) for the Frontend (#1391) 2025-06-04 22:27:05 -07:00
Kristen Kelleher 5e9370d3aa
docs: fix sphinx errors admonitions adobe config (#1179)
Signed-off-by: Kristen Kelleher <kkelleher@nvidia.com>
- Content, format, and structural changes to the Dynamo docs for 0.3.0. 
- Includes copyediting and the first batch of changes from the DMO review.
2025-06-04 08:16:34 -07:00
Graham King 3f6a74723f
chore: Remove PreprocessedRequest alias BackendInput (#1307)
It was confusing to have two names for one type.

This tidy up started in #1064 , is now complete.
2025-06-02 11:22:27 -04:00
Alec 2f8da9ad1d
refactor: rename KvMetricsPublisher to WorkerMetricsPublisher (#1284) 2025-05-30 17:23:32 +00:00
jthomson04 9210a26d90
refactor: Refactor kv event publishers (#1287) 2025-05-30 09:04:28 -07:00
Alec f67dc38b28
fix: Renamed event publisher classes and configuration (#1273) 2025-05-29 13:00:06 -07:00
Graham King 7d0c938690
feat: Initial Granite support (#1271)
- Add Granite to our tokenizer
- Fix pre-processor to load context length correctly
- Add strftime_now Jinja function for prompt templates
- Update llama.cpp
- Handle trtllm errors when not using trtllm

Support depends on the engine:

- `mistral.rs`, our default engine, doesn't support Granite yet.

- `llama.cpp` does and works very well:
```
dynamo-run out=llamacpp ~/llms/granite-3.3-2b-instruct-Q4_K_M.gguf --context-length 16384
```

- `vllm` also works very well:
```
dynamo-run in=http out=vllm ~/llms/granite-3.3-2b-instruct --context-length 16384
```

- `sglang` mostly works, but it doesn't catch the stop token, so we do in the HTTP ingress, and log an error. The Text ingress doesn't catch it because I disabled it to make the raw echo engine work. A bit of work to do here.

Closes: #1245
2025-05-29 15:25:07 -04:00
Jacky 7677f74f37
feat: KVBM async Python bindings and Layer class (#1141) 2025-05-29 17:49:05 +00:00
Anant Sharma 9d9a1d9b74
chore: update dynamo and nixl versions for 0.3.0 (#1240) 2025-05-29 17:30:17 +00:00
Alec 0df6d462d7
feat: add KV Event Publishing to vLLM v1 (#1181) 2025-05-29 07:56:49 -07:00
Graham King 0a1d1fbe3d
feat(dynamo-llm): Remove bring-your-own-engine (#1216)
It was removed from the docs in 0.2.1 and replaced with writing a [standalone Python engine](https://github.com/ai-dynamo/dynamo/blob/main/docs/guides/dynamo_run.md#writing-your-own-engine-in-python).

Also remove the associated `dynamo-run` feature `python`.

Releasing this in 0.3.0 will resolve #784 and #1109.
2025-05-28 18:52:27 +00:00
Tanmay Verma 1b1e089a45
feat: Enable dynamo-run out=trtllm (#1223) 2025-05-28 10:59:41 -07:00
Alec cc40af704b
fix: dynamo-run pass proper args using register-llm (#1230) 2025-05-28 09:21:53 -07:00
Ryan Olson 31ff23704b
feat: adding arena allocator for storage objects (#1178) 2025-05-23 08:41:42 -06:00
Graham King 183f2b3286
feat(dynamo-run): Allow setting KV cache block size (#1175)
Example:
```
dynamo-run out=<engine> <model> --kv-cache-block-size 64
```

In a distributed system this goes on the worker node and is propagated to ingress via the model deployment card.

Previously hard coded to 16, which is now the default.

- Load context_length from model. Closes #1172
- Store context length and KV cache block size in Model Deployment Card #1170
2025-05-22 14:55:36 -07:00
Suman Tatiraju f992a6a2ba
docs: Fix broken link in python bindings documentation (#1163)
Co-authored-by: Suman Tatiraju <statiraju@statiraju-mlt.client.nvidia.com>
2025-05-22 03:13:23 +00:00
Graham King 3e8e38a942
fix(llmctl): Use ModelWatcher instead of direct etcd operations (#1150) 2025-05-21 19:06:56 +00:00
Suman Tatiraju 8d636ebdbe
docs: Add sphinx-theme based userguides (#528)
Signed-off-by: Suman Tatiraju <167138127+statiraju@users.noreply.github.com>
Signed-off-by: Anant Sharma <anants@nvidia.com>
Co-authored-by: Anant Sharma <anants@nvidia.com>
Co-authored-by: Dmitry Tokarev <dtokarev@nvidia.com>
Co-authored-by: ishandhanani <82981111+ishandhanani@users.noreply.github.com>
Co-authored-by: Kristen Kelleher <kkelleher@nvidia.com>
Co-authored-by: Suman Tatiraju <statiraju@statiraju-mlt.client.nvidia.com>
Co-authored-by: Hannah Zhang <hannahz@nvidia.com>
2025-05-21 22:41:34 +08:00
Ryan Olson 80256acf15
feat: adding outer dimension to isolate k/v blocks (#1126) 2025-05-20 08:51:41 -04:00
Jacky 7e452a2e22
fix: Disable block manager by default in Python bindings (#1128) 2025-05-19 16:28:12 -07:00
Graham King aeb79e6277
feat: Support multiple models on single ingress node (#1127)
We can now do this:

- Node 1:

```
dynamo-run in=http out=dyn
```

- Node 2 and 3, two instances of component 'backend' in the nemotron_ultra pipeline:

```
dynamo-run in=dyn://nemotron_ultra.backend.generate out=vllm /data/models/NemotronUltra
```

- Node 4 and 5, two instances of the 'backend' component in nemotron_super pipeline:

```
dynamo-run in=dyn://nemotron_super.backend.generate out=vllm /data/models/NemotronSuper
```

The ingress node will discover all four instances and route correctly. We have been planning for this for a long time now.

As part of this auto-discovery is now always `out=dyn`, with no extra URL parts. Previously it could only route to a single pipeline.

Also:
- Refactor endpoint / instance naming now that I understand them
- Fix removing models when their instance stops.
2025-05-19 18:41:07 -04:00
jthomson04 74221fd716
feat: Add support for SSD offloading in block manager (#1115) 2025-05-19 15:35:00 -07:00
Jacky 437cae0ad0
feat: KV Block Manager Python bindings (#1022) 2025-05-19 12:33:41 -04:00
Tom O'Brien 73fdfb8ab8
feat: Add OpenAI Embeddings interface in rust lib (#1110)
Implements OpenAI embeddings (interface only).

- Adds ModelType::Embedding
- Adds OpenAI embedding request/response structs
- Adds support for embedding model discovery
2025-05-19 11:59:46 -04:00
Ryan McCormick 34f3fc6d12
test: Add doc tests to Rust CI (#1102) 2025-05-16 07:56:52 -07:00
Graham King 2981350880
feat(dynamo-run): KV-aware routing (#1064)
Router:
```
dynamo-run in=http out=dyn://dynamo.endpoint.generate --router-mode kv
```

Worker (* N):
```
dynamo-run in=dyn://dynamo.endpoint.generate out=vllm /data/llms/Qwen/Qwen3-4B
```

You need patched vllm and the C bindings `.so`. Full docs in the updated guide: `docs/guides/dynamo_run.md`.

This gives us a pure-Rust ingress node: OpenAI compliant HTTP server + Pre-processor + KV-aware router.
2025-05-14 15:21:46 -04:00
Ryan Olson 4564a38711
feat: kv block manager (#965) 2025-05-09 21:05:24 +00:00
Graham King 24e2cbf516
docs: Example Chat sglang engine (#1015)
Example of how to connect a Python sglang engine to the message bus (NATS/etc). I

In this example sglang does the pre/post processing. There is already an example where Dynamo does it.

The examples teach this:

- Be a chat completions engine, do your own pre-processing:

```
await register_llm(ModelType.Chat, endpoint, config.model)
```

- Have Dynamo do pre-processing. It will register us under both Chat and Completions endpoints, because that's handled before a Backend engine gets the request:

```
await register_llm(ModelType.Backend, endpoint, config.model)
```
2025-05-09 20:45:03 +00:00
Graham King c7bb1e8346
fix(bindings): serve_endpoint no longer takes a lease (#1014) 2025-05-09 16:18:19 +00:00
Harrison Saturley-Hall e9cb035ac7
chore: bump versions and NIXL dependencies for 0.2.1 (#1012) 2025-05-09 15:35:01 +00:00
wxsm b2e401bcae
feat: allow adding auth to etcd (#980)
Allow both password or TLS auth, if none of these is provided fallback to no auth

Closes #657
2025-05-09 08:36:41 -04:00
ishandhanani 5d5235bc51
feat(sglang): aggregated support (#937)
Co-authored-by: ishandhanani <ishandhananai@gmail.com>
2025-05-09 06:01:40 +00:00
Hongkuan Zhou 466b8e5fb7
refactor: use primary lease + self-contained graceful shutdown trigged by SIGINT/SIGTERM (#1001) 2025-05-08 16:53:39 -07:00
Graham King ceaeba3e38
feat: Qwen3, Gemma3 and Llama4 support (#1002)
. New mistralrs and llamacpp version
. mistralrs: Handle Gemma 3 and Llama 4 as vision models
. Update the dynamo-run docs to use Qwen 3
. Our pre-processor now supports Llama 4's newer multi-modal `config.json`
. Upgrade minijinja to handle Qwen 3's prompt template

For Llama 4 we'll need to limit the max seq len. vllm says:
> To serve at least one request with the models's max seq len (10485760), (240.00 GiB KV cache is needed,...

I was able to run Llama 4 with llamacpp and a quantized GGUF, with Dynamo doing the pre-processing.
2025-05-08 18:18:40 -04:00
Hongkuan Zhou a590d10317
feat: cleanup EtcdKvCache and PrefillQueue before and after launch (#925) 2025-05-07 16:35:55 -07:00
Graham King 92bbbc3923
fix: Fix vllm/sglang engine model name if using HF repo (#986)
Signed-off-by: Graham King <graham@gkgk.org>
Co-authored-by: Ryan McCormick <rmccormick@nvidia.com>
2025-05-07 23:20:51 +00:00
jthomson04 c4213899fe
feat: Migrate NATS Queue to Rust (#669) (#961) 2025-05-06 15:36:55 -07:00
Graham King 28fd481c9a
feat(dynamo-run): vllm and sglang subprocess engines (#954)
New vllm and sglang engines that run in a sub-process. Will hopefully replace the existing embedded python engines.
    
Why?
    
  - Pure Python, does not require knowing Rust to work on it. Much simpler to maintain.
  - No embedded Python interpreter which avoids linking libpython and avoids the MacOS virtualenv issues.
  - Should have better performance as it's "native" vllm / sglang.
  - Works with any version of vllm (including v1!) and sglang. Less upgrade struggle.
2025-05-06 16:03:31 -04:00
Graham King 99cd9d85a9
feat: dynamo-run <-> python interop (#934)
Adding this to a Python script makes it register on the network so that `dynamo-run` can discover it and send it requests:
```
from dynamo.llm import register_llm

MODEL = "Qwen/Qwen2.5-0.5B-Instruct"
await register_llm(endpoint, MODEL, 3)
```

Full vllm example, with pre-processing in dynamo:
- `dynamo-run in=text out=dyn://dynamo.backend.generate`
- `cd lib/bindings/python/examples/hello_world`
- `python server_vllm.py`

This builds on top of the work to move pre-processor to ingress side. It means we can decouple Rust and Python using NATS as the bus.

The `register_llm` call does this:

- Download the model from HF if necessary
- Load the model deployment card from the HF folder or extract from GGUF
- Push the tokenizer config etc into NATS object store so ingress can access it from a different machine
- Publish the model deployment card to ETCD
2025-05-05 20:49:19 -04:00
Hongkuan Zhou 9d643f1eed
fix: use primary lease for NixlMetadataStore (#928) 2025-05-05 08:38:52 -07:00
Graham King 2d2a102727
chore(dynamo-llm): Move the pre-processor to ingress side (#903)
Part of https://github.com/ai-dynamo/dynamo/issues/743
2025-05-01 19:55:10 +00:00
Graham King a1a10365a7
chore: Split PushRouter from Client (#817)
In a distributed system we don't know if the remote workers need pre-processing done ingress-side or not. Previously Client required us to decide this before discovering the remote endpoints, which was fine because pre-processing was worker-side.

As part of moving pre-processing back to ingress-side we need to split this into two steps:
- Client discovers the endpoints, and (later PR) will fetch their Model Deployment Card.
- PushRouter will use the Model Deployment Card to decide if they need pre-processing or not, which affects the types of the generic parameters.

Part of #743
2025-04-29 14:39:56 +00:00
ishandhanani 974201c869
refactor: move logging config to runtime (#863) 2025-04-28 14:22:33 -07:00
Hongkuan Zhou 7d5d6f8c08
feat: local planner for 0.2.0 release (#398)
Signed-off-by: Hongkuan Zhou <tedzhouhk@gmail.com>
Co-authored-by: ishandhanani <82981111+ishandhanani@users.noreply.github.com>
Co-authored-by: ishandhanani <ishandhanani@gmail.com>
Co-authored-by: Ubuntu <ubuntu@dev-inst-2w1vokvyuts83rzn4n1k7mnzew9.us-central1-a.c.brevdevprod.internal>
Co-authored-by: Biswa Panda <biswa.panda@gmail.com>
Co-authored-by: Anant Sharma <anants@nvidia.com>
2025-04-26 00:05:54 +00:00
Harrison Saturley-Hall 0715d4691f
chore: bump NIXL version and package versions (#836)
Signed-off-by: Harrison Saturley-Hall <454891+saturley-hall@users.noreply.github.com>
2025-04-25 19:24:38 -04:00
Graham King d346782c7c
chore: Publish Model Deployment Card to NATS (#799)
This will allow an ingress-side pre-processor to see it without needing a model checkout.

Currently pre-processing is done in the worker, which has access to the model deployment card ("MDC") files (`config.json`, `tokenizer.json` and `tokenizer_config.json`) locally. We want to move the pre-processor to the ingress side to support KV routing. That requires ingress side (i.e the HTTP server), on a different machine than the worker to be able to see those three files.

To support that this PR makes the worker upload the contents of those files to the NATS object store, and publishes the MDC with those NATS urls to the key-value store. 

The key-value store has an interface so any store (nats, etcd, redis, etc) can be supported. Implementations for memory and NATS are provided.

Fetching the MDC from the store, doing pre-processing ingress side, and publishing a card backed by a GGUF, are all for a later commit.

Part of #743
2025-04-25 08:52:59 -04:00
Pankaj Gupta 420b7a82be
fix: Fix cancellation flow in python component graph (#765) 2025-04-21 16:07:49 -04:00
ishandhanani c392c3419b
feat: add custom lease to worker components (#748) 2025-04-21 17:43:02 +00:00
Hongkuan Zhou 4c38680eac
feat: gracefully shutdown endpoint by revoking etcd lease + python binding (#730)
Co-authored-by: ishandhanani <82981111+ishandhanani@users.noreply.github.com>
2025-04-18 18:36:50 +00:00
tlipoca9 50aa390b11
feat: configure logger with detail info (#654)
Co-authored-by: ishandhanani <82981111+ishandhanani@users.noreply.github.com>
2025-04-17 19:36:22 +00:00
Ryan McCormick f4780e855c
docs: Remove outdated python-wheels directory reference (#719) 2025-04-16 23:22:10 -07:00
Hongkuan Zhou 08fd28978c
feat: ETCD prefix watcher + python binding + runtime reconfiguration for router and disagg router (#581)
Signed-off-by: Hongkuan Zhou <tedzhouhk@gmail.com>
Co-authored-by: Neelay Shah <neelays@nvidia.com>
2025-04-11 18:15:42 -07:00
Cole 447840c223 docs: add docstring for llm.rs (#267) 2025-04-10 22:40:09 -04:00
Anant Sharma fa7ee14c2a chore: update versions to 0.1.1 (#552) 2025-04-09 09:50:30 -04:00
Yan Ru Pei 4b6cfc1be0 feat: KV recorder for dumping router events into a jsonl (#505) 2025-04-04 15:31:32 -07:00
Graham King 88ad3425c4 feat: Python decorator dynamo_worker takes optional `static` parameter without etcd (#494)
Adds `@dynamo_worker(static = True)` to create a static worker which has a predictable name and hence does not require discovery or `etcd` to be running. There can only be a single static worker per namespace / component / endpoint trio.

This contrasts with the default dynamic `dynamo_worker` endpoints we have now, which get a unique random name (based on namespace/component/endpoint), and are discovered by ingress components using etcd.

Also change the hello_world example to use `dynamo_worker(static = True)` so that it is exercised and demonstrated somewhere.

For NIM.
2025-04-04 09:26:52 -04:00
Ryan Olson 84985d3f1d refactor: migrate engines to standalone crates (#453)
Moved all of `lib/llm/src/engines` to their own crates as e.g. `lib/engines/mistralrs`. This will allow publishing of the `dynamo-llm` crate as it won't have any github dependencies.

The only engines in dynamo-llm will be the demo `echo` ones.

Co-authored-by: Graham King <grahamk@nvidia.com>
2025-04-03 21:53:54 +00:00
Ryan Olson 6795e645d0 fix: adding missing file (#501) 2025-04-03 08:29:33 -04:00
Ryan Olson c4106e6a27 feat: kv aware router executable (#399) 2025-04-02 17:58:21 +02:00
Ryan Olson 5b682f4839 feat: unified logging (#472) 2025-04-01 19:49:20 +00:00
Ryan Olson de2905377c refactor: prometheus upgrade (#452) 2025-03-31 13:03:36 -06:00
Biswa Panda 8621d914e3 feat: dynamo deploy hello world example to k8s (#205) 2025-03-28 20:51:48 +00:00
Graham King c7067fc2ec feat: Build pre-processor from GGUF (#344)
This lets us do:
```
dynamo-run out=llamacpp <gguf_file>
```

Previously a `--model-config <hf-repo>` was also required, to configure our tokenizer.
2025-03-24 11:59:41 -04:00
Graham King 7c3fd5c94c chore: Don't depend on openssl (#292)
This makes the Rust parts all use ring / rustls library instead of local install of openssl. It's a step on the journey to being statically linked.

Pieces:
- `tokenizers` and `mistralrs` now support rustls (mistralrs by default, tokenizers with feature flag).
- Move shared dependencies up into workspace
- New `rand` crate has some renames for future rust
- Ensure the dependency doesn't creep back in by enforcing it with cargo deny.
2025-03-19 14:16:19 -04:00
Dmitry Tokarev 548578f4a9 docs: fix links in docs (#256)
Co-authored-by: Anant Sharma <anants@nvidia.com>
2025-03-18 03:40:31 -04:00
GuanLuo 6e09681e0e feat: expose Python binding for KVEventPublisher. Use event pub/sub trait for KV events (#169) 2025-03-17 00:17:33 -07:00
April Yang 7f136e29c1 feat: update deploy api & sdk (#74)
Co-authored-by: Julien Mancuso <jmancuso@nvidia.com>
Co-authored-by: Hannah Zhang <hannahz@nvidia.com>
Co-authored-by: Biswa Panda <biswa.panda@gmail.com>
Co-authored-by: Maksim Khadkevich <mkhadkevich@nvidia.com>
2025-03-15 18:32:57 -07:00
Anant Sharma c1c22703c5 build: reorganize python packaging to build new wheels (#118) 2025-03-14 13:43:29 -04:00
Ryan Olson f04359cf69 feat: global kv block manager (#45) 2025-03-13 20:57:28 -06:00
Anant Sharma 3d2928510c build: add top level rust workspace (#137) 2025-03-13 17:22:19 -04:00
Alec 3f84cdadfa feat: add new metrics and simple router cost fn (#88) 2025-03-11 11:53:21 -07:00
Biswa Panda dd6208254d feat: add openai http service (#82) 2025-03-10 17:27:22 -07:00
Anant Sharma fc4da34502 chore: update wheel name and reset versions (#73) 2025-03-10 17:41:13 -04:00
Alec 989bb3d59c feat: make block_size input for indexer, router, publisher (#66) 2025-03-09 15:58:27 -07:00
Neelay Shah dd31a322ae chore: stragglers rename (#69)
Co-authored-by: Harrison King Saturley-Hall <hsaturleyhal@nvidia.com>
2025-03-09 14:09:11 -07:00
Neelay Shah 678cffb4e5 chore: left over renaming (#67)
Co-authored-by: Harrison Saturley-Hall <454891+saturley-hall@users.noreply.github.com>
Co-authored-by: Harrison King Saturley-Hall <hsaturleyhal@nvidia.com>
2025-03-09 14:09:04 -04:00
GuanLuo 6ba39b0932 chore: address comments for #35 (#53) 2025-03-09 07:44:45 -07:00
Hongkuan Zhou 19844fc07e feat: kv aware router + disagg router + prefill queue (#11)
Signed-off-by: Hongkuan Zhou <tedzhouhk@gmail.com>
Co-authored-by: hongkuan <hongkuanz@nvidia.com>
Co-authored-by: Piotr Tarasiewicz <ptarasiewicz@nvidia.com>
Co-authored-by: Piotr Tarasiewicz Nvidia <ptarasiewicznv@Piotrs-MacBook-Pro.local>
Co-authored-by: alec-flowers <aflowers@nvidia.com>
Co-authored-by: Neelay Shah <neelays@nvidia.com>
2025-03-08 17:09:11 -08:00
Dmitry Tokarev b4d56a5789 chore: Renamed Triton Distributed to Dynamo (#56) 2025-03-08 09:42:09 -08:00
Neelay Shah 602352ce19 chore: rename dynamo (#44)
Co-authored-by: Biswa Panda <biswa.panda@gmail.com>
2025-03-08 01:42:40 -08:00
GuanLuo dcecc47de9 test: add tests for kv bindings (#35) 2025-03-07 16:01:28 -08:00
Graham King 12714d9080 feat: Python bring-your-own-engine with our tokenizer (#47)
Instead of using `out=pystr:<my.py>` we can now do this:
```
dynemo-run out=pytok:/home/graham/my_python_engine.py --model-path <hf-repo-checkout>
```

That engine will receive and respond with tokens. Here's an example engine file:
```
import asyncio

async def generate(request):
    yield {"token_ids":[791]}
    await asyncio.sleep(0.1)
    yield {"token_ids":[6864]}
    await asyncio.sleep(0.1)
    yield {"token_ids":[315]}
    await asyncio.sleep(0.1)
    yield {"token_ids":[9822]}
    await asyncio.sleep(0.1)
    yield {"token_ids":[374]}
    await asyncio.sleep(0.1)
    yield {"token_ids":[12366]}
    await asyncio.sleep(0.1)
    yield {"token_ids":[13]}
```

Also reduce duplication by making the bindings engine use the llm lib engine.
2025-03-07 10:48:37 -05:00
GuanLuo e159e53fe6 feat: expose KV routing components for easier router customization (#15) 2025-03-05 16:06:19 -08:00
Neelay Shah 1af7433bff refactor: rename triton_distributed to dynemo (#22)
Co-authored-by: Graham King <grahamk@nvidia.com>
2025-03-05 09:15:46 -08:00
Biswa Panda a32cdad622 feat: add python binding for rust llm modules (#13) 2025-03-04 14:52:09 -08:00
Neelay Shah 3a5fe17db9 feat: nixl metadata store and retrieved from etcd (#6)
Co-authored-by: hongkuanz <hongkuanz@nvidia.com>
Co-authored-by: Piotr Tarasiewicz <ptarasiewicz@nvidia.com>
Co-authored-by: Piotr Tarasiewicz Nvidia <ptarasiewicznv@Piotrs-MacBook-Pro.local>
Co-authored-by: Neelay Shah <neelays@ipp2-0493.ipp2u1.colossus.nvidia.com>
Co-authored-by: Neelay Shah <neelays@ipp1-1941.ipp1a1.colossus.nvidia.com>
Co-authored-by: ishandhanani <ishandhanani@gmail.com>
Co-authored-by: Neelay Shah <neelays@4u8g-gen-0078.ipp3a2.colossus.nvidia.com>
Co-authored-by: ptarasiewiczNV <104908264+ptarasiewiczNV@users.noreply.github.com>
2025-03-04 13:10:16 -08:00
Graham King 2d906fb4c9 fix: Install specific toolchain (#329)
`cargo build --locked` won't let you use "1.85.0" if you only have "stable" installed, even if those are the same thing right now.
2025-03-03 11:53:14 -05:00
Graham King 057f8f4700 feat: TensorRT-LLM engine (#317)
Engine, `tio` support and docs.

Proof of concept / experimental.
2025-02-28 17:09:01 -05:00
Alec 11a36651a6 [fix] KV Router Example fixes (#314)
Co-authored-by: Ryan McCormick <rmccormick@nvidia.com>
2025-02-28 12:20:47 -08:00
Ryan Olson 85cc7b67c6 refactor: service/endpoint stats_handler (#282) 2025-02-27 11:30:18 -07:00
Anant Sharma ea401e3bc0 ci: build wheel from root directory (#274) 2025-02-27 11:56:51 -05:00
Paul Hendricks 86aff237ab refactor: using async_openai
Co-authored-by: Graham King <grahamk@nvidia.com>
2025-02-26 13:59:39 -08:00
Graham King e97493eb00 feat: sglang backend for tio (#271)
- Setup venv

```
uv venv
source .venv/bin/activate
uv pip install pip
uv pip install sgl-kernel --force-reinstall --no-deps
uv pip install "sglang[all]==0.4.2" --find-links https://flashinfer.ai/whl/cu124/torch2.4/flashinfer/
```

- Build: `cargo build --release --features sglang`

- Run single node (make sure you're in the venv): `./tio out=sglang ~/llm_models/my_model`

- Run Deepseek multi-gpu / multi-node:

Node 1:
```
tio in=http out=sglang --model-path ~/llm_models/DeepSeek-R1-Distill-Llama-70B/ --tensor-parallel-size 8 --num-nodes 2 --node-rank 0 --dist-init-addr 10.217.98.122:9876
```

Node 2:
```
tio in=none out=sglang --model-path ~/llm_models/DeepSeek-R1-Distill-Llama-70B/ --tensor-parallel-size 8 --num-nodes 2 --node-rank 1 --dist-init-addr 10.217.98.122:9876
```
2025-02-25 17:04:08 -05:00
Neelay Shah c70de37fcb chore: updating docs after restructure 2025-02-25 12:37:25 -08:00
Alec b760c5694d feat: Add completion endpoint to http server and llmctl (#230)
Co-authored-by: aflowers <aflowers@nvidia.com>
2025-02-25 12:32:09 -08:00
GuanLuo 861c50982b feat: enable metrics polling
Signed-off-by: Meenakshi Sharma <163925564+nvda-mesharma@users.noreply.github.com>
Signed-off-by: Neelay Shah <neelays@nvidia.com>
Co-authored-by: Neelay Shah <neelays@nvidia.com>
Co-authored-by: Ryan Olson <ryanolson@users.noreply.github.com>
Co-authored-by: Meenakshi Sharma <163925564+nvda-mesharma@users.noreply.github.com>
Co-authored-by: Biswa Panda <biswapanda@users.noreply.github.com>
Co-authored-by: Ryan McCormick <rmccormick@nvidia.com>
2025-02-25 11:12:54 -08:00
Ryan McCormick c06b95ffdb ci: Add rust checks to missing directories (#239)
Signed-off-by: Ryan McCormick <rmccormick@nvidia.com>
2025-02-25 07:42:33 -08:00
Neelay Shah 08fcd7e93b refactor: move libs to lib dir
Signed-off-by: Neelay Shah <neelays@nvidia.com>
Co-authored-by: Ryan McCormick <rmccormick@nvidia.com>
2025-02-24 18:21:02 -08:00