recipe.toml 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. # Qwen3.8-27B (FP8) — 1× DGX Spark / GB10 (sm_121), TP=1.
  2. #
  3. # Official Qwen FP8 quant (29 GB). Dense 27B, GQA, hybrid DeltaNet+Attention,
  4. # MTP-1. Text + vision. As fast as NVFP4 typically, with full FP8 quality.
  5. #
  6. # Image: ghcr.io/timothystewart6/vllm-gb10:v0.27.1-gb10.2
  7. # vLLM 0.27.1, torch 2.13+cuda130, FlashInfer built from source,
  8. # instanttensor. Stock vLLM — supports the qwen3_5 arch + MTP.
  9. #
  10. # Model: Qwen/Qwen3.8-27B-FP8
  11. # https://huggingface.co/Qwen/Qwen3.8-27B-FP8
  12. #
  13. # PREREQUISITES:
  14. # Weights cached on every node (dgx1 ~/.cache/huggingface → NAS):
  15. # huggingface-cli download Qwen/Qwen3.8-27B-FP8
  16. #
  17. # REFERENCE:
  18. # https://forums.developer.nvidia.com/t/qwen3-8-27b-mixedint4-autoround-optimized-for-a-single-dgx-spark/380248
  19. # https://forums.developer.nvidia.com/t/qwen3-8-27b-on-dual-sparks/380350
  20. engine = "vllm"
  21. name = "Qwen3.8-27B (FP8)"
  22. docker_image = "ghcr.io/timothystewart6/vllm-gb10:v0.27.1-gb10.2"
  23. model = "Qwen/Qwen3.8-27B-FP8"
  24. required_nodes = 1
  25. tensor_parallel_size = 1
  26. pipeline_parallel_size = 1
  27. distributed_backend = "mp"
  28. shm_size = "32gb"
  29. entrypoint = ["vllm", "serve"]
  30. args = [
  31. # KV cache & memory
  32. "--kv-cache-dtype", "fp8",
  33. "--max-model-len", "262144",
  34. "--max-num-seqs", "6",
  35. "--max-num-batched-tokens", "8192",
  36. "--gpu-memory-utilization", "0.75",
  37. "--served-model-name", "qwen3.8-27b",
  38. # Engine backends (dense GQA — FlashInfer)
  39. "--attention-backend", "flashinfer",
  40. # Compilation / perf
  41. "--optimization-level", "3",
  42. "--performance-mode", "throughput",
  43. # Chunked prefill + prefix caching
  44. "--enable-chunked-prefill",
  45. "--enable-prefix-caching",
  46. "--enable-flashinfer-autotune",
  47. # MTP speculative decoding (in-checkpoint draft)
  48. "--speculative-config", """
  49. '{"method":"mtp","num_speculative_tokens":5}'""",
  50. # Tokenizer / reasoning (Qwen3 family)
  51. "--tool-call-parser", "qwen3_xml",
  52. "--reasoning-parser", "qwen3",
  53. "--enable-auto-tool-choice",
  54. "--generation-config", "auto",
  55. "--default-chat-template-kwargs.preserve_thinking=true",
  56. # Proven generation defaults (thinking mode; Qwen3.8 model-card best
  57. # practices)
  58. "--override-generation-config", """
  59. '{"temperature":1.0,"top_p":0.95,"top_k":20,"min_p":0.0,"presence_penalty":0.0,"repetition_penalty":1.0}'""",
  60. "--trust-remote-code",
  61. ]
  62. [env]
  63. HF_HUB_OFFLINE = "1"
  64. TORCH_CUDA_ARCH_LIST = "12.1a"
  65. CUTE_DSL_ARCH = "sm_121a"
  66. OMP_NUM_THREADS = "4"
  67. PYTORCH_CUDA_ALLOC_CONF = "expandable_segments:True"
  68. CUDA_VISIBLE_DEVICES = "0"
  69. CUDA_DEVICE_ORDER = "PCI_BUS_ID"
  70. CUDA_CACHE_MAXSIZE = "4294967296"