1. 29 May, 2025 4 commits
    • Graham King's avatar
      feat: Initial Granite support (#1271) · 7d0c9386
      Graham King authored
      - 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 
      7d0c9386
    • Jacky's avatar
      7677f74f
    • Anant Sharma's avatar
      9d9a1d9b
    • Alec's avatar
      feat: add KV Event Publishing to vLLM v1 (#1181) · 0df6d462
      Alec authored
      0df6d462
  2. 28 May, 2025 3 commits
  3. 23 May, 2025 1 commit
  4. 22 May, 2025 2 commits
  5. 21 May, 2025 2 commits
  6. 20 May, 2025 1 commit
  7. 19 May, 2025 5 commits
  8. 16 May, 2025 1 commit
  9. 14 May, 2025 1 commit
  10. 09 May, 2025 6 commits
  11. 08 May, 2025 2 commits
  12. 07 May, 2025 2 commits
  13. 06 May, 2025 3 commits
    • jthomson04's avatar
      c4213899
    • Graham King's avatar
      feat(dynamo-run): vllm and sglang subprocess engines (#954) · 28fd481c
      Graham King authored
      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.
      28fd481c
    • Graham King's avatar
      feat: dynamo-run <-> python interop (#934) · 99cd9d85
      Graham King authored
      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
      99cd9d85
  14. 05 May, 2025 1 commit
  15. 01 May, 2025 1 commit
  16. 29 Apr, 2025 1 commit
    • Graham King's avatar
      chore: Split PushRouter from Client (#817) · a1a10365
      Graham King authored
      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
      a1a10365
  17. 28 Apr, 2025 1 commit
  18. 26 Apr, 2025 1 commit
  19. 25 Apr, 2025 2 commits
    • Harrison Saturley-Hall's avatar
    • Graham King's avatar
      chore: Publish Model Deployment Card to NATS (#799) · d346782c
      Graham King authored
      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 
      d346782c