recipe.toml 3.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. # DeepSeek-V4.1-Flash-1017 через FLARE — их собственный пакет под четыре Spark.
  2. #
  3. # Ветка `gb10` репозитория local-inference-lab/DeepSeek-V4.1-Flash-1017-FLARE —
  4. # подписанный FLARE-пакет ровно под наш стенд: 17 шардов ≈ 511.3 GB (12 весовых
  5. # + 5 графовых), TP4, 16 одновременных запросов, DSpark до 5 драфтов с adaptive
  6. # verification, prefill чанками 4096, контекст до 1M на запрос.
  7. #
  8. # Запуск: `sm121 serve --recipe dsv41-flash-1017-4x-flare-gb10 --cluster dgx58-switch`
  9. # Лаунчер сам: preflight агентов на всех нодах, `flare download` на контроллере
  10. # (идемпотентно, 511 GB один раз), `flare orbit run --detach`, затем ждёт
  11. # /health + /v1/models. `sm121 stop` → `flare orbit stop`, `sm121 logs` →
  12. # `flare orbit attach`.
  13. #
  14. # Креды (ключ издателя, publisher) — в приватном config: [flare] accept_key /
  15. # accept_publisher / orbit_cluster. В репозиторий рецептов они не попадают.
  16. engine = "flare"
  17. deploy = "native"
  18. name = "DeepSeek-V4.1-Flash-1017 (FLARE gb10, 4x TP4, c16, DSpark5)"
  19. model = "deepseek-ai/DeepSeek-V4.1-Flash-1017"
  20. parent_model = "deepseek-ai/DeepSeek-V4.1-Flash"
  21. required_nodes = 4
  22. cluster = "dgx58-switch"
  23. # адрес модели для клиентов — общий кластерный алиас (FLARE отдаёт его же
  24. # через --name, но лаунчеру/бенчу нужен явный id в args)
  25. args = ["--served-model-name", "deepseek-v4.1-flash"]
  26. [flare]
  27. package = "local-inference-lab/DeepSeek-V4.1-Flash-1017-FLARE"
  28. revision = "gb10"
  29. name = "dsv41-flash-1017-4x-flare-gb10"
  30. http_port = 30000
  31. # их же рекомендованный набор (README ветки gb10), verbatim
  32. serve_flags = [
  33. "--max-concurrency", "16",
  34. "--mtp-draft-tokens", "5",
  35. "--mtp-adaptive-verification",
  36. # Engram = 2 таблицы (слои 1, 14) × 4 шарда: 196.6 GB весов + 6.1 GB
  37. # скейлов на пакет ⇒ ~50.7 GB на ранг. Файлами engram не выделить — он
  38. # лежит в тех же восьми шардах, что и веса, — поэтому «локальность» делаем
  39. # RAM-кэшем строк: 4 GiB горячих строк на ранг, промахи идут на диск
  40. # (пакет на локальном NVMe контроллера, у пиров — свои срезы в кэше).
  41. # (Отвергнутая проба: 48 GiB кэша выедает бюджет continuation rows —
  42. # «selected concurrency and verification width exceed available memory».)
  43. #
  44. # --embedding-table-resident-scales НЕ включён: держит E8M0-плоскость
  45. # скейлов engram в pinned host RAM (~6.1 GB на пакет ⇒ ~1.5 GB на ранг),
  46. # чтобы промахи не читали скейлы с диска вторым заходом. Смысл только при
  47. # disk (с ram падает: «RAM storage already retains all planes»).
  48. # Кандидат на A/B: +1.5 GB RAM за меньшее число random-read.
  49. "--embedding-table-storage", "disk",
  50. "--embedding-table-cache-size", "4GiB",
  51. # включено 2026-10-24: скейлы engram (~1.5 GB/ранг) резидентно в host RAM,
  52. # чтобы промахи кэша читали только веса. На dgx5 было 13 GB available —
  53. # запас остаётся ~11 GB, но следим за continuation rows при c16.
  54. "--embedding-table-resident-scales",
  55. ]