[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-dstackai--dstack":3,"tool-dstackai--dstack":62},[4,18,28,37,45,53],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":17},4358,"openclaw","openclaw\u002Fopenclaw","OpenClaw 是一款专为个人打造的本地化 AI 助手，旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚，能够直接接入你日常使用的各类通讯渠道，包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息，OpenClaw 都能即时响应，甚至支持在 macOS、iOS 和 Android 设备上进行语音交互，并提供实时的画布渲染功能供你操控。\n\n这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地，用户无需依赖云端服务即可享受快速、私密的智能辅助，真正实现了“你的数据，你做主”。其独特的技术亮点在于强大的网关架构，将控制平面与核心助手分离，确保跨平台通信的流畅性与扩展性。\n\nOpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者，以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力（支持 macOS、Linux 及 Windows WSL2），即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你",349277,3,"2026-04-06T06:32:30",[13,14,15,16],"Agent","开发框架","图像","数据工具","ready",{"id":19,"name":20,"github_repo":21,"description_zh":22,"stars":23,"difficulty_score":24,"last_commit_at":25,"category_tags":26,"status":17},9989,"n8n","n8n-io\u002Fn8n","n8n 是一款面向技术团队的公平代码（fair-code）工作流自动化平台，旨在让用户在享受低代码快速构建便利的同时，保留编写自定义代码的灵活性。它主要解决了传统自动化工具要么过于封闭难以扩展、要么完全依赖手写代码效率低下的痛点，帮助用户轻松连接 400 多种应用与服务，实现复杂业务流程的自动化。\n\nn8n 特别适合开发者、工程师以及具备一定技术背景的业务人员使用。其核心亮点在于“按需编码”：既可以通过直观的可视化界面拖拽节点搭建流程，也能随时插入 JavaScript 或 Python 代码、调用 npm 包来处理复杂逻辑。此外，n8n 原生集成了基于 LangChain 的 AI 能力，支持用户利用自有数据和模型构建智能体工作流。在部署方面，n8n 提供极高的自由度，支持完全自托管以保障数据隐私和控制权，也提供云端服务选项。凭借活跃的社区生态和数百个现成模板，n8n 让构建强大且可控的自动化系统变得简单高效。",184740,2,"2026-04-19T23:22:26",[16,14,13,15,27],"插件",{"id":29,"name":30,"github_repo":31,"description_zh":32,"stars":33,"difficulty_score":10,"last_commit_at":34,"category_tags":35,"status":17},10095,"AutoGPT","Significant-Gravitas\u002FAutoGPT","AutoGPT 是一个旨在让每个人都能轻松使用和构建 AI 的强大平台，核心功能是帮助用户创建、部署和管理能够自动执行复杂任务的连续型 AI 智能体。它解决了传统 AI 应用中需要频繁人工干预、难以自动化长流程工作的痛点，让用户只需设定目标，AI 即可自主规划步骤、调用工具并持续运行直至完成任务。\n\n无论是开发者、研究人员，还是希望提升工作效率的普通用户，都能从 AutoGPT 中受益。开发者可利用其低代码界面快速定制专属智能体；研究人员能基于开源架构探索多智能体协作机制；而非技术背景用户也可直接选用预置的智能体模板，立即投入实际工作场景。\n\nAutoGPT 的技术亮点在于其模块化“积木式”工作流设计——用户通过连接功能块即可构建复杂逻辑，每个块负责单一动作，灵活且易于调试。同时，平台支持本地自托管与云端部署两种模式，兼顾数据隐私与使用便捷性。配合完善的文档和一键安装脚本，即使是初次接触的用户也能在几分钟内启动自己的第一个 AI 智能体。AutoGPT 正致力于降低 AI 应用门槛，让人人都能成为 AI 的创造者与受益者。",183572,"2026-04-20T04:47:55",[13,36,27,14,15],"语言模型",{"id":38,"name":39,"github_repo":40,"description_zh":41,"stars":42,"difficulty_score":10,"last_commit_at":43,"category_tags":44,"status":17},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,"2026-04-05T11:01:52",[14,15,13],{"id":46,"name":47,"github_repo":48,"description_zh":49,"stars":50,"difficulty_score":24,"last_commit_at":51,"category_tags":52,"status":17},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",161147,"2026-04-19T23:31:47",[14,13,36],{"id":54,"name":55,"github_repo":56,"description_zh":57,"stars":58,"difficulty_score":59,"last_commit_at":60,"category_tags":61,"status":17},8272,"opencode","anomalyco\u002Fopencode","OpenCode 是一款开源的 AI 编程助手（Coding Agent），旨在像一位智能搭档一样融入您的开发流程。它不仅仅是一个代码补全插件，而是一个能够理解项目上下文、自主规划任务并执行复杂编码操作的智能体。无论是生成全新功能、重构现有代码，还是排查难以定位的 Bug，OpenCode 都能通过自然语言交互高效完成，显著减少开发者在重复性劳动和上下文切换上的时间消耗。\n\n这款工具专为软件开发者、工程师及技术研究人员设计，特别适合希望利用大模型能力来提升编码效率、加速原型开发或处理遗留代码维护的专业人群。其核心亮点在于完全开源的架构，这意味着用户可以审查代码逻辑、自定义行为策略，甚至私有化部署以保障数据安全，彻底打破了传统闭源 AI 助手的“黑盒”限制。\n\n在技术体验上，OpenCode 提供了灵活的终端界面（Terminal UI）和正在测试中的桌面应用程序，支持 macOS、Windows 及 Linux 全平台。它兼容多种包管理工具，安装便捷，并能无缝集成到现有的开发环境中。无论您是追求极致控制权的资深极客，还是渴望提升产出的独立开发者，OpenCode 都提供了一个透明、可信",144296,1,"2026-04-16T14:50:03",[13,27],{"id":63,"github_repo":64,"name":65,"description_en":66,"description_zh":67,"ai_summary_zh":68,"readme_en":69,"readme_zh":70,"quickstart_zh":71,"use_case_zh":72,"hero_image_url":73,"owner_login":74,"owner_name":65,"owner_avatar_url":75,"owner_bio":76,"owner_company":77,"owner_location":77,"owner_email":77,"owner_twitter":74,"owner_website":78,"owner_url":79,"languages":80,"stars":117,"forks":118,"last_commit_at":119,"license":120,"difficulty_score":24,"env_os":121,"env_gpu":122,"env_ram":123,"env_deps":124,"category_tags":131,"github_topics":132,"view_count":24,"oss_zip_url":77,"oss_zip_packed_at":77,"status":17,"created_at":151,"updated_at":152,"faqs":153,"releases":169},10102,"dstackai\u002Fdstack","dstack","Vendor-agnostic orchestration for training, inference and agentic workloads across NVIDIA, AMD, TPU, and Tenstorrent on clouds, Kubernetes, and bare metal.","dstack 是一个统一的 GPU 资源调度与管理平台，旨在简化人工智能工作流的部署与运行。无论是模型训练、推理还是智能体（Agent）任务，它都能帮助用户在各类云服务商、Kubernetes 集群或本地服务器之间无缝调度计算资源。\n\n面对当前 AI 开发中硬件碎片化严重、不同云厂商接口各异以及环境配置繁琐等痛点，dstack 提供了一套“厂商无关”的解决方案。它屏蔽了底层基础设施的差异，让用户无需关心具体的云提供商或硬件细节，即可轻松启动和管理任务，显著提升了开发效率与资源利用率。\n\n这款工具特别适合 AI 开发者、研究人员以及需要大规模算力支持的工程团队。无论您使用的是 NVIDIA、AMD、Google TPU 还是 Tenstorrent 加速器，dstack 均能原生支持。其核心技术亮点在于强大的兼容性：不仅跨越多种硬件架构，还完美适配开源工具链与主流框架。此外，dstack 提供了直观的命令行界面（CLI）和 API，并创新性地集成了\"AI 技能（Skills）”，让 Claude 等智能体能直接协助用户操作集群和编辑配置，进一步降低了运维门槛。通过统一控制平面，dstac","dstack 是一个统一的 GPU 资源调度与管理平台，旨在简化人工智能工作流的部署与运行。无论是模型训练、推理还是智能体（Agent）任务，它都能帮助用户在各类云服务商、Kubernetes 集群或本地服务器之间无缝调度计算资源。\n\n面对当前 AI 开发中硬件碎片化严重、不同云厂商接口各异以及环境配置繁琐等痛点，dstack 提供了一套“厂商无关”的解决方案。它屏蔽了底层基础设施的差异，让用户无需关心具体的云提供商或硬件细节，即可轻松启动和管理任务，显著提升了开发效率与资源利用率。\n\n这款工具特别适合 AI 开发者、研究人员以及需要大规模算力支持的工程团队。无论您使用的是 NVIDIA、AMD、Google TPU 还是 Tenstorrent 加速器，dstack 均能原生支持。其核心技术亮点在于强大的兼容性：不仅跨越多种硬件架构，还完美适配开源工具链与主流框架。此外，dstack 提供了直观的命令行界面（CLI）和 API，并创新性地集成了\"AI 技能（Skills）”，让 Claude 等智能体能直接协助用户操作集群和编辑配置，进一步降低了运维门槛。通过统一控制平面，dstack 让复杂的算力编排变得像本地运行脚本一样简单。","\u003Cdiv style=\"text-align: center;\">\n\u003Ch2>\n  \u003Ca target=\"_blank\" href=\"https:\u002F\u002Fdstack.ai\">\n    \u003Cpicture>\n      \u003Csource media=\"(prefers-color-scheme: dark)\" srcset=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fdstackai\u002Fdstack\u002Fmaster\u002Fdocs\u002Fassets\u002Fimages\u002Fdstack-logo-dark.svg\"\u002F>\n      \u003Cimg alt=\"dstack\" src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fdstackai\u002Fdstack\u002Fmaster\u002Fdocs\u002Fassets\u002Fimages\u002Fdstack-logo.svg\" width=\"350px\"\u002F>\n    \u003C\u002Fpicture>\n  \u003C\u002Fa>\n\u003C\u002Fh2>\n\n[![Last commit](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flast-commit\u002Fdstackai\u002Fdstack?style=flat-square)](https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fcommits\u002F)\n[![PyPI - License](https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fl\u002Fdstack?style=flat-square&color=blue)](https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fblob\u002Fmaster\u002FLICENSE.md)\n[![Discord](https:\u002F\u002Fimg.shields.io\u002Fdiscord\u002F1106906313969123368?style=flat-square)](https:\u002F\u002Fdiscord.gg\u002Fu8SmfwPpMd)\n\n\u003C\u002Fdiv>\n\n`dstack` is a unified control plane for GPU provisioning and orchestration that works with any GPU cloud, Kubernetes, or on-prem clusters. \n\nIt streamlines development, training, and inference, and is compatible with any hardware, open-source tools, and frameworks.\n\n#### Accelerators\n\n`dstack` supports `NVIDIA`, `AMD`, `Google TPU`, and `Tenstorrent` accelerators out of the box.\n\n## Latest news ✨\n- [2026\u002F04] [dstack 0.20.17: PD disaggregation, Kubernetes volumes](https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Freleases\u002Ftag\u002F0.20.17)\n- [2026\u002F04] [dstack 0.20.16: Performance, SSH proxy](https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Freleases\u002Ftag\u002F0.20.16)\n- [2026\u002F03] [dstack 0.20.13: Exports, Templates](https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Freleases\u002Ftag\u002F0.20.13)\n- [2026\u002F02] [dstack 0.20.12: Crusoe](https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Freleases\u002Ftag\u002F0.20.12)\n- [2026\u002F02] [dstack 0.20.8: Skills](https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Freleases\u002Ftag\u002F0.20.8)\n- [2025\u002F12] [dstack 0.20.0: Fleet-first UX, Events, and more](https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Freleases\u002Ftag\u002F0.20.0)\n\n## How does it work?\n\n\u003Cpicture>\n  \u003Csource media=\"(prefers-color-scheme: dark)\" srcset=\"https:\u002F\u002Fdstack.ai\u002Fstatic-assets\u002Fstatic-assets\u002Fimages\u002Fdstack-architecture-diagram-v11-dark.svg\"\u002F>\n  \u003Cimg src=\"https:\u002F\u002Fdstack.ai\u002Fstatic-assets\u002Fstatic-assets\u002Fimages\u002Fdstack-architecture-diagram-v11.svg\" width=\"750\" \u002F>\n\u003C\u002Fpicture>\n\n### Launch the server\n\n> Before using `dstack` through CLI or API, set up a `dstack` server. If you already have a running `dstack` server, you only need to [install the CLI](#install-the-cli).\n\nTo orchestrate compute across GPU clouds or Kubernetes clusters, you need to [configure backends](https:\u002F\u002Fdstack.ai\u002Fdocs\u002Fconcepts\u002Fbackends).\n\n> When using `dstack` with on-prem servers, backend configuration isn’t required. Simply create [SSH fleets](https:\u002F\u002Fdstack.ai\u002Fdocs\u002Fconcepts\u002Ffleets#ssh-fleets) once the server is up.\n\nThe server can be installed on Linux, macOS, and Windows (via WSL 2). It requires Git and\nOpenSSH.\n\n```shell\n$ uv tool install \"dstack[all]\" -U\n$ dstack server\n\nApplying ~\u002F.dstack\u002Fserver\u002Fconfig.yml...\n\nThe admin token is \"bbae0f28-d3dd-4820-bf61-8f4bb40815da\"\nThe server is running at http:\u002F\u002F127.0.0.1:3000\u002F\n```\n\n> For more details on server configuration options, see the\n[Server deployment](https:\u002F\u002Fdstack.ai\u002Fdocs\u002Fguides\u002Fserver-deployment) guide.\n\n### Install the CLI\n\n\u003Cdetails>\u003Csummary>If the CLI is not installed with the server\u003C\u002Fsummary>\n\nOnce the server is up, you can access it via the `dstack` CLI.\n\nThe CLI can be installed on Linux, macOS, and Windows. It requires Git and OpenSSH.\n\n```shell\n$ uv tool install dstack -U\n```\n\nTo point the CLI to the `dstack` server, configure it\nwith the server address, user token, and project name:\n\n```shell\n$ dstack project add \\\n    --name main \\\n    --url http:\u002F\u002F127.0.0.1:3000 \\\n    --token bbae0f28-d3dd-4820-bf61-8f4bb40815da\n\nConfiguration is updated at ~\u002F.dstack\u002Fconfig.yml\n```\n\n\u003C\u002Fdetails>\n\n### Install agent skills\n\nInstall [`dstack` skills](https:\u002F\u002Fskills.sh\u002Fdstackai\u002Fdstack\u002Fdstack) to help AI agents use the CLI and edit configuration files.\n\n```shell\n$ npx skills add dstackai\u002Fdstack\n```\n\nAI agents like Claude, Codex, and Cursor can now create and manage fleets and submit workloads on your behalf.\n\n### Define configurations\n\n`dstack` supports the following configurations:\n   \n* [Fleets](https:\u002F\u002Fdstack.ai\u002Fdocs\u002Fconcepts\u002Ffleets) &mdash; for managing cloud and on-prem clusters\n* [Dev environments](https:\u002F\u002Fdstack.ai\u002Fdocs\u002Fconcepts\u002Fdev-environments) &mdash; for interactive development using a desktop IDE\n* [Tasks](https:\u002F\u002Fdstack.ai\u002Fdocs\u002Fconcepts\u002Ftasks) &mdash; for scheduling jobs (incl. distributed jobs) or running web apps\n* [Services](https:\u002F\u002Fdstack.ai\u002Fdocs\u002Fconcepts\u002Fservices) &mdash; for deployment of models and web apps (with auto-scaling and authorization)\n* [Volumes](https:\u002F\u002Fdstack.ai\u002Fdocs\u002Fconcepts\u002Fvolumes) &mdash; for managing persisted volumes\n\nConfiguration can be defined as YAML files within your repo.\n\n### Apply configurations\n\nApply the configuration via the `dstack apply` CLI command, a programmatic API, or through [AI agent skills](#install-ai-agent-skills).\n\n`dstack` automatically manages provisioning, job queuing, auto-scaling, networking, volumes, run failures,\nout-of-capacity errors, port-forwarding, and more &mdash; across clouds and on-prem clusters.\n\n## Useful links\n\nFor additional information, see the following links:\n\n* [Docs](https:\u002F\u002Fdstack.ai\u002Fdocs)\n* [Examples](https:\u002F\u002Fdstack.ai\u002Fexamples)\n* [Discord](https:\u002F\u002Fdiscord.gg\u002Fu8SmfwPpMd)\n\n## Contributing\n\nYou're very welcome to contribute to `dstack`. \nLearn more about how to contribute to the project at [CONTRIBUTING.md](CONTRIBUTING.md).\n\n## License\n\n[Mozilla Public License 2.0](LICENSE.md)\n","\u003Cdiv style=\"text-align: center;\">\n\u003Ch2>\n  \u003Ca target=\"_blank\" href=\"https:\u002F\u002Fdstack.ai\">\n    \u003Cpicture>\n      \u003Csource media=\"(prefers-color-scheme: dark)\" srcset=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fdstackai\u002Fdstack\u002Fmaster\u002Fdocs\u002Fassets\u002Fimages\u002Fdstack-logo-dark.svg\"\u002F>\n      \u003Cimg alt=\"dstack\" src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fdstackai\u002Fdstack\u002Fmaster\u002Fdocs\u002Fassets\u002Fimages\u002Fdstack-logo.svg\" width=\"350px\"\u002F>\n    \u003C\u002Fpicture>\n  \u003C\u002Fa>\n\u003C\u002Fh2>\n\n[![最近一次提交](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flast-commit\u002Fdstackai\u002Fdstack?style=flat-square)](https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fcommits\u002F)\n[![PyPI - 许可证](https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fl\u002Fdstack?style=flat-square&color=blue)](https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fblob\u002Fmaster\u002FLICENSE.md)\n[![Discord](https:\u002F\u002Fimg.shields.io\u002Fdiscord\u002F1106906313969123368?style=flat-square)](https:\u002F\u002Fdiscord.gg\u002Fu8SmfwPpMd)\n\n\u003C\u002Fdiv>\n\n`dstack` 是一个统一的 GPU 资源调配与编排控制平面，可兼容任意 GPU 云、Kubernetes 集群或本地集群。\n\n它简化了开发、训练和推理流程，并且与任何硬件、开源工具和框架都保持兼容。\n\n#### 加速器\n\n`dstack` 开箱即用地支持 `NVIDIA`、`AMD`、`Google TPU` 和 `Tenstorrent` 加速器。\n\n## 最新消息 ✨\n- [2026年4月] [dstack 0.20.17：PD 分离、Kubernetes 卷](https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Freleases\u002Ftag\u002F0.20.17)\n- [2026年4月] [dstack 0.20.16：性能优化、SSH 代理](https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Freleases\u002Ftag\u002F0.20.16)\n- [2026年3月] [dstack 0.20.13：导出功能、模板](https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Freleases\u002Ftag\u002F0.20.13)\n- [2026年2月] [dstack 0.20.12：Crusoe](https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Freleases\u002Ftag\u002F0.20.12)\n- [2026年2月] [dstack 0.20.8：技能模块](https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Freleases\u002Ftag\u002F0.20.8)\n- [2025年12月] [dstack 0.20.0：以集群为中心的用户体验、事件系统等](https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Freleases\u002Ftag\u002F0.20.0)\n\n## 它是如何工作的？\n\n\u003Cpicture>\n  \u003Csource media=\"(prefers-color-scheme: dark)\" srcset=\"https:\u002F\u002Fdstack.ai\u002Fstatic-assets\u002Fstatic-assets\u002Fimages\u002Fdstack-architecture-diagram-v11-dark.svg\"\u002F>\n  \u003Cimg src=\"https:\u002F\u002Fdstack.ai\u002Fstatic-assets\u002Fstatic-assets\u002Fimages\u002Fdstack-architecture-diagram-v11.svg\" width=\"750\" \u002F>\n\u003C\u002Fpicture>\n\n### 启动服务器\n\n> 在通过 CLI 或 API 使用 `dstack` 之前，您需要先搭建一个 `dstack` 服务器。如果您已经有一个正在运行的 `dstack` 服务器，则只需 [安装 CLI](#install-the-cli)。\n\n要跨 GPU 云或 Kubernetes 集群编排计算资源，您需要 [配置后端](https:\u002F\u002Fdstack.ai\u002Fdocs\u002Fconcepts\u002Fbackends)。\n\n> 当使用 `dstack` 管理本地服务器时，无需配置后端。只需在服务器启动后创建 [SSH 集群](https:\u002F\u002Fdstack.ai\u002Fdocs\u002Fconcepts\u002Ffleets#ssh-fleets) 即可。\n\n服务器可在 Linux、macOS 和 Windows（通过 WSL 2）上安装。它需要 Git 和 OpenSSH。\n\n```shell\n$ uv tool install \"dstack[all]\" -U\n$ dstack server\n\n正在应用 ~\u002F.dstack\u002Fserver\u002Fconfig.yml...\n\n管理员令牌为 \"bbae0f28-d3dd-4820-bf61-8f4bb40815da\"\n服务器正在 http:\u002F\u002F127.0.0.1:3000\u002F 上运行\n```\n\n> 更多关于服务器配置选项的详细信息，请参阅 [服务器部署](https:\u002F\u002Fdstack.ai\u002Fdocs\u002Fguides\u002Fserver-deployment) 指南。\n\n### 安装 CLI\n\n\u003Cdetails>\u003Csummary>如果 CLI 没有随服务器一起安装\u003C\u002Fsummary>\n\n服务器启动后，您可以通过 `dstack` CLI 访问它。\n\nCLI 可在 Linux、macOS 和 Windows 上安装。它需要 Git 和 OpenSSH。\n\n```shell\n$ uv tool install dstack -U\n```\n\n要将 CLI 指向 `dstack` 服务器，您需要配置服务器地址、用户令牌和项目名称：\n\n```shell\n$ dstack project add \\\n    --name main \\\n    --url http:\u002F\u002F127.0.0.1:3000 \\\n    --token bbae0f28-d3dd-4820-bf61-8f4bb40815da\n\n配置已更新至 ~\u002F.dstack\u002Fconfig.yml\n```\n\n\u003C\u002Fdetails>\n\n### 安装代理技能\n\n安装 [`dstack` 技能](https:\u002F\u002Fskills.sh\u002Fdstackai\u002Fdstack\u002Fdstack)，以帮助 AI 代理使用 CLI 并编辑配置文件。\n\n```shell\n$ npx skills add dstackai\u002Fdstack\n```\n\n像 Claude、Codex 和 Cursor 这样的 AI 代理现在可以代表您创建和管理集群，并提交工作负载。\n\n### 定义配置\n\n`dstack` 支持以下配置：\n\n* [集群](https:\u002F\u002Fdstack.ai\u002Fdocs\u002Fconcepts\u002Ffleets) —— 用于管理云端和本地集群\n* [开发环境](https:\u002F\u002Fdstack.ai\u002Fdocs\u002Fconcepts\u002Fdev-environments) —— 用于使用桌面 IDE 进行交互式开发\n* [任务](https:\u002F\u002Fdstack.ai\u002Fdocs\u002Fconcepts\u002Ftasks) —— 用于调度作业（包括分布式作业）或运行 Web 应用\n* [服务](https:\u002F\u002Fdstack.ai\u002Fdocs\u002Fconcepts\u002Fservices) —— 用于部署模型和 Web 应用（具备自动扩展和授权功能）\n* [卷](https:\u002F\u002Fdstack.ai\u002Fdocs\u002Fconcepts\u002Fvolumes) —— 用于管理持久化存储卷\n\n配置可以定义为仓库内的 YAML 文件。\n\n### 应用配置\n\n您可以通过 `dstack apply` CLI 命令、程序化 API，或借助 [AI 代理技能](#install-ai-agent-skills) 来应用配置。\n\n`dstack` 自动管理资源供应、作业队列、自动扩展、网络连接、卷管理、运行失败处理、容量超限错误、端口转发等——无论是在云端还是本地集群中。\n\n## 有用链接\n\n如需更多信息，请参阅以下链接：\n\n* [文档](https:\u002F\u002Fdstack.ai\u002Fdocs)\n* [示例](https:\u002F\u002Fdstack.ai\u002Fexamples)\n* [Discord](https:\u002F\u002Fdiscord.gg\u002Fu8SmfwPpMd)\n\n## 贡献\n\n我们非常欢迎您的贡献！有关如何参与项目的更多信息，请查看 [CONTRIBUTING.md](CONTRIBUTING.md)。\n\n## 许可证\n\n[Mozilla 公共许可证 2.0](LICENSE.md)","# dstack 快速上手指南\n\ndstack 是一个统一的 GPU 资源调配与控制平面，支持任意 GPU 云服务商、Kubernetes 集群或本地服务器。它简化了开发、训练和推理流程，兼容 NVIDIA、AMD、Google TPU 及 Tenstorrent 等加速器。\n\n## 环境准备\n\n在开始之前，请确保您的系统满足以下要求：\n\n*   **操作系统**：Linux、macOS 或 Windows（需通过 WSL 2）。\n*   **前置依赖**：\n    *   `Git`\n    *   `OpenSSH`\n*   **包管理工具**：推荐使用 `uv` 进行安装（若未安装，可先安装 uv）。\n\n> **注意**：目前官方文档未提供特定的中国镜像源，建议在网络通畅的环境下操作，或配置通用的 PyPI\u002FUV 国内镜像加速。\n\n## 安装步骤\n\n### 1. 启动 dstack 服务端\n\n首先需要安装并启动 dstack 服务器。服务器将作为控制平面管理所有资源。\n\n```shell\n$ uv tool install \"dstack[all]\" -U\n$ dstack server\n```\n\n启动成功后，终端会显示管理员令牌（Admin Token）和服务地址，例如：\n\n```text\nApplying ~\u002F.dstack\u002Fserver\u002Fconfig.yml...\n\nThe admin token is \"bbae0f28-d3dd-4820-bf61-8f4bb40815da\"\nThe server is running at http:\u002F\u002F127.0.0.1:3000\u002F\n```\n\n> 若需在本地服务器集群运行，无需配置后端，直接创建 SSH 集群即可；若需连接云端或 K8s，请在 `~\u002F.dstack\u002Fserver\u002Fconfig.yml` 中配置相应后端信息。\n\n### 2. 安装命令行工具 (CLI)\n\n如果 CLI 未随服务端自动安装，可单独安装：\n\n```shell\n$ uv tool install dstack -U\n```\n\n### 3. 配置 CLI 连接服务端\n\n使用服务端启动时生成的地址和令牌配置 CLI：\n\n```shell\n$ dstack project add \\\n    --name main \\\n    --url http:\u002F\u002F127.0.0.1:3000 \\\n    --token bbae0f28-d3dd-4820-bf61-8f4bb40815da\n```\n\n配置完成后，信息将保存至 `~\u002F.dstack\u002Fconfig.yml`。\n\n### 4. (可选) 安装 AI Agent 技能\n\n若希望 Claude、Cursor 等 AI 助手协助管理集群，可安装 dstack skills：\n\n```shell\n$ npx skills add dstackai\u002Fdstack\n```\n\n## 基本使用\n\ndstack 通过 YAML 文件定义资源配置，涵盖集群（Fleets）、开发环境（Dev environments）、任务（Tasks）、服务（Services）和数据卷（Volumes）。\n\n### 第一步：定义配置\n\n在项目根目录创建配置文件（例如 `.dstack.yml`），以下是一个简单的开发环境示例：\n\n```yaml\ntype: dev-environment\nname: my-dev-env\nimage: dstackai\u002Fbase:py3.11-0.4-cuda-12.1\nresources:\n  gpu: 1\n  memory: 16GB\nide: vscode\n```\n\n### 第二步：应用配置\n\n使用 `dstack apply` 命令提交配置。dstack 将自动处理资源调配、排队、网络映射及错误重试。\n\n```shell\n$ dstack apply\n```\n\n执行后，dstack 会根据配置在已连接的后端（本地 SSH、云服务器或 K8s）启动实例。启动成功后，您将可以直接通过 IDE 连接进行开发，或查看任务运行状态。\n\n---\n更多详细配置选项和示例，请访问 [官方文档](https:\u002F\u002Fdstack.ai\u002Fdocs) 或 [示例库](https:\u002F\u002Fdstack.ai\u002Fexamples)。","某初创 AI 团队需要在 AWS、Lambda Labs 和本地机房之间频繁切换，以训练一个基于 Llama 3 的大语言模型并部署推理服务。\n\n### 没有 dstack 时\n- **环境割裂严重**：团队成员需分别学习 AWS CLI、Kubernetes YAML 和各云厂商特有的控制台操作，切换云端时配置脚本完全无法复用。\n- **资源调度低效**：当首选云厂商的 NVIDIA H100 缺货时，人工寻找并迁移到 AMD 或 TPU 资源耗时数小时，导致训练任务长期排队等待。\n- **运维成本高昂**：每次训练结束需手动销毁实例以防费用超支，常因遗忘关闭机器而产生不必要的巨额账单。\n- **框架兼容性差**：尝试混合使用不同硬件（如本地调试用 NVIDIA，云端训练用 TPU）时，需花费大量时间修改底层驱动和依赖库。\n\n### 使用 dstack 后\n- **统一控制平面**：通过一套简单的 YAML 配置文件，即可在 AWS、本地集群或任何支持的云厂商间无缝启动训练任务，无需关心底层差异。\n- **智能弹性调度**：定义所需算力规格后，dstack 自动在配置的多个后端中查找可用资源（支持 NVIDIA、AMD、TPU 等），瞬间锁定空闲显卡并开始训练。\n- **自动化生命周期管理**：任务完成后自动释放计算资源，结合内置的成本监控，彻底杜绝了“僵尸实例”造成的资金浪费。\n- **硬件无关开发**：代码与具体硬件解耦，团队可自由组合异构算力池，在不修改任何代码的前提下将任务从 NVIDIA 集群平滑迁移至 TPU 集群。\n\ndstack 通过屏蔽底层基础设施的复杂性，让 AI 团队能专注于模型迭代而非运维琐事，实现了真正的“一次编写，随处运行”。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fdstackai_dstack_7c3427fc.png","dstackai","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Fdstackai_f440ef56.png","dstack is an open-source engine for running GPU workloads. It simplifies development, training, and deployment of gen AI models on any cloud.",null,"https:\u002F\u002Fdstack.ai","https:\u002F\u002Fgithub.com\u002Fdstackai",[81,85,89,93,97,100,104,107,111,113],{"name":82,"color":83,"percentage":84},"Python","#3572A5",79.3,{"name":86,"color":87,"percentage":88},"TypeScript","#3178c6",14,{"name":90,"color":91,"percentage":92},"Go","#00ADD8",5.2,{"name":94,"color":95,"percentage":96},"Shell","#89e051",0.3,{"name":98,"color":99,"percentage":96},"SCSS","#c6538c",{"name":101,"color":102,"percentage":103},"Jinja","#a52a22",0.2,{"name":105,"color":106,"percentage":103},"JavaScript","#f1e05a",{"name":108,"color":109,"percentage":110},"Dockerfile","#384d54",0.1,{"name":112,"color":109,"percentage":110},"Just",{"name":114,"color":115,"percentage":116},"HCL","#844FBA",0,2103,222,"2026-04-20T03:25:57","MPL-2.0","Linux, macOS, Windows (via WSL 2)","非必需（取决于具体任务）。支持 NVIDIA、AMD、Google TPU 和 Tenstorrent 加速器。服务器端无特定显卡型号或显存要求，实际算力需求由用户配置的任务决定。","未说明",{"notes":125,"python":126,"dependencies":127},"该工具是一个统一的控制平面，用于协调 GPU 云、Kubernetes 或本地集群。服务器和 CLI 均需安装 Git 和 OpenSSH。推荐使用 'uv' 工具进行安装。支持在本地服务器上通过 SSH 集群模式运行而无需配置后端。","未说明（通过 uv 工具安装）",[128,129,130],"Git","OpenSSH","uv",[13,14,36],[133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150],"machine-learning","python","gpu","llms","cloud","orchestration","fine-tuning","training","kubernetes","k8s","amd","docker","inference","nvidia","slurm","containers","agent-skills","agentic-orchestration","2026-03-27T02:49:30.150509","2026-04-20T19:22:18.399858",[154,159,164],{"id":155,"question_zh":156,"answer_zh":157,"source_url":158},45354,"为什么在使用自定义 Fleet 配置时会出现 'FAILED_TO_START_DUE_TO_NO_CAPACITY' 错误？","这通常是因为 dev-environment 配置中指定的资源需求（如 CPU、内存）与 Fleet 中实际可用的实例资源不匹配。例如，如果配置要求精确匹配 2 CPU 和 2GB 内存，而实例有 8 CPU 和 39GB 内存，dstack 会认为没有可用容量。\n\n解决方案：\n1. 从 dev-environment 配置中移除具体的 `resources` 字段，让 dstack 自动适配。\n2. 或者使用范围表示法（开放区间），将配置改为：\n```yaml\nresources:\n  cpu: 2..      # 表示 2 个 CPU 或更多\n  memory: 2GB.. # 表示 2GB 内存或更多\n  disk: 5GB..\n  gpu: 0\n```\n这样只要实例资源大于等于设定值即可匹配成功。","https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fissues\u002F1994",{"id":160,"question_zh":161,"answer_zh":162,"source_url":163},45355,"当 dstack-server 主机网络中断时，为什么实例状态显示为 'terminated' 但实际上仍在云端运行并产生费用？","这是一个已知问题，当服务器无法连接到运行器（runner）时，可能会错误地将实例标记为终止，而实际上云提供商处的实例并未被删除。\n\n目前的解决机制是引入了终止重试逻辑：系统会在 5-10 分钟内多次尝试终止实例。只有当所有重试都失败后，才会最终确认状态。这可以处理短暂的网络中断或后端临时不可用的情况。如果遇到此问题，建议检查服务器日志确认重试机制是否生效，或手动在云控制台检查并清理孤儿实例。","https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fissues\u002F1551",{"id":165,"question_zh":166,"answer_zh":167,"source_url":168},45356,"RunPod 作为后端时，为什么有时找不到某些可用的实例报价？","这是因为 dstack 目前使用每天收集一次的 RunPod 目录（catalog）。由于 RunPod 的实例可用性全天都在变化，目录生成后新出现的实例可能不会立即显示。\n\n解决方案：\n虽然目前尚未将 RunPod 完全升级为实时在线提供商，但可以通过提高目录收集频率来缓解此问题。维护者建议将收集工作流从每天一次调整为每小时一次。这样可以确保大部分可用实例能被及时发现，减少因目录滞后导致的实例缺失问题。","https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fissues\u002F1118",[170,175,180,185,190,195,200,205,210,215,220,225,230,235,240,245,250,255,260,265],{"id":171,"version":172,"summary_zh":173,"released_at":174},360242,"0.20.17","## PD 分离架构\n\n此次更新简化了使用预填充-解码分离架构运行 SGLang 的流程。\n\n此前，PD 分离架构需要在网关上配置 `router`，这意味着网关必须与服务部署在同一集群中，才能与服务副本进行通信。\n\n而此次更新后，`router` 配置转移到了服务副本组上。这使得我们可以使用位于服务集群之外的标准网关。\n\n以下是使用副本组运行 `zai-org\u002FGLM-4.5-Air-FP8` 的服务配置示例：\n\n```yaml\ntype: service\nname: prefill-decode\nimage: lmsysorg\u002Fsglang:latest\n\nenv:\n  - HF_TOKEN\n  - MODEL_ID=zai-org\u002FGLM-4.5-Air-FP8\n\nreplicas:\n  - count: 1\n    commands:\n      - pip install sglang_router\n      - |\n        python -m sglang_router.launch_router \\\n          --host 0.0.0.0 \\\n          --port 8000 \\\n          --pd-disaggregation \\\n          --prefill-policy cache_aware\n    router:\n      type: sglang\n    resources:\n      cpu: 4\n\n  - count: 1..4\n    scaling:\n      metric: rps\n      target: 3\n    commands:\n      - |\n        python -m sglang.launch_server \\\n          --model-path $MODEL_ID \\\n          --disaggregation-mode prefill \\\n          --disaggregation-transfer-backend nixl \\\n          --host 0.0.0.0 \\\n          --port 8000 \\\n          --disaggregation-bootstrap-port 8998\n    resources:\n      gpu: H200\n\n  - count: 1..8\n    scaling:\n      metric: rps\n      target: 2\n    commands:\n      - |\n        python -m sglang.launch_server \\\n          --model-path $MODEL_ID \\\n          --disaggregation-mode decode \\\n          --disaggregation-transfer-backend nixl \\\n          --host 0.0.0.0 \\\n          --port 8000\n    resources:\n      gpu: H200\n\nport: 8000\nmodel: zai-org\u002FGLM-4.5-Air-FP8\n\n# PD 分离架构需要自定义探针。\nprobes:\n  - type: http\n    url: \u002Fhealth\n    interval: 15s\n```\n\n> 注意：此配置要求服务集群或舰队提供一个用于 `router` 副本的 CPU 节点。\n\n## Kubernetes\n\n`kubernetes` 后端新增了对网络卷和实例卷的支持。\n\n### 网络卷\n\n您可以创建一个新的网络卷，也可以注册一个已有的网络卷。要创建一个新的网络卷，需指定 `size`，并可选地指定 `storage_class_name` 和\u002F或 `access_modes`：\n\n```yaml\ntype: volume\nbackend: kubernetes\nname: my-volume\n\nsize: 100GB\n```\n\n这将自动创建一个 `PersistentVolumeClaim` 并将其与该卷关联。\n\n> 如果未指定 `storage_class_name`，则由启用的 `DefaultStorageClass` 准入控制器决定。\n> \n> 如果未指定 `access_modes`，则默认为 `[ReadWriteOnce]`。若需同时将卷挂载到多个运行实例上，请将其设置为 `[ReadWriteMany]` 或 `[ReadWriteMany, ReadOnlyMany]`。\n\n要复用现有的 `PersistentVolumeClaim`，只需在 `claim_name` 中指定其名称即可：\n\n```yaml\ntype: volume\nbackend: kubernetes\nname: my-volume\n\nc","2026-04-16T12:45:58",{"id":176,"version":177,"summary_zh":178,"released_at":179},360243,"0.20.16","## 服务器\n\n### 性能\n\n此版本对 `dstack` 服务器的后台处理进行了重大重构。单个服务器副本现在可以处理约 10 倍的资源，支持至少 1000 个活跃实例和运行。在基准测试中，我们观察到处理速度提升了 2 到 10 倍（参见 [#3551](https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fissues\u002F3551#issuecomment-4161918048)）。\n\n- 预配 200 个实例：12 分钟 → 4 分钟。\n- 运行一个 200 节点的任务：超过 25 分钟 → 4 分钟。\n- 终止 50 个实例：60 秒 → 10 秒。\n\n![dstack 流水线演示 GIF](https:\u002F\u002Fdstack.ai\u002Fstatic-assets\u002Fstatic-assets\u002Fimages\u002Fdstack-pipelines-demo.gif)\n\n性能提升得益于全新的、更高效的后台处理架构。服务器硬件要求和内存消耗保持不变。\n\n如果您需要临时恢复旧行为，请在启动服务器前设置 `DSTACK_FF_PIPELINE_PROCESSING_DISABLED=1`。\n\n### 升级注意事项\n\n> [!警告]\n> 此版本对 `dstack` 服务器进行了重大内部更改。请尽可能先在预发布环境中进行测试，再升级生产环境。\n\n> [!警告]\n> 不支持从 `0.20.13` 或更早版本直接滚动升级到 `0.20.16`。请勿同时运行 `0.20.13`（或更早版本）和 `0.20.16` 的服务器副本。请先升级到 `0.20.15`，或将服务器副本数量缩减至 1，然后再进行升级。\n\n### SSH 代理\n\n服务器可以通过结合使用“SSH 代理”和新的 `DSTACK_SERVER_SSHPROXY_ENFORCED` 标志来强制实施仅通过代理的 SSH 访问。启用后，运行会将用户提供的密钥从授权列表中移除，并期望客户端通过运行详情中公开的代理端点进行连接。有关详细信息，请参阅[服务器部署指南](docs\u002Fdocs\u002Fguides\u002Fserver-deployment.md#ssh-proxy)。\n\n> [!注释]\n> “SSH 代理”目前处于实验阶段，未来版本中行为可能会发生变化。\n\n## 用户界面\n\n### SSH 密钥\n\n用户设置现在包含一个 SSH 密钥选项卡，您可以在其中上传 OpenSSH 公钥、查看其指纹，并删除不再属于您的密钥。上传的密钥使您无需依赖 `dstack attach` 自动管理的客户端密钥即可打开 SSH 会话；重复的密钥将被拒绝，并显示明确的错误信息。\n\n## 命令行工具\n\n### `dstack attach`\n\n当服务器启用“SSH 代理”时，`dstack attach` 现在会自动通过代理路由，并从运行连接信息中获取代理主机、端口和上游 ID。服务器可以通过设置 `DSTACK_SERVER_SSHPROXY_ENFORCED` 来选择仅允许通过代理访问，这将停止在运行中嵌入直接的 SSH 密钥。\n\n```bash\nexport DSTACK_SERVER_SSHPROXY_ENFORCED=1\n```\n\n## 后端\n\n### RunPod\n\nRunPod 后端现在可以在安全的云区域中预配按需 CPU 资源，因此请求 `gpu: 0` 的作业可以成功调度，而无需欺骗调度器。磁盘大小检查会遵守 RunPod 公布的每项服务限制。\n\n```yaml\nresources:\n  gpu: 0\n  cpu: 8\n  memory: 32GB\n```\n\n### Verda\n\nVerda 的启动脚本和 SSH 密钥是","2026-04-06T12:03:52",{"id":181,"version":182,"summary_zh":183,"released_at":184},360244,"0.20.15","## 后端\n\n### CloudRift\n\n`cloudrift` 后端现在支持预置 AMD MI350X GPU。\n\n\u003Cimg width=\"750\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F03fdaad3-002c-4bbc-9cb9-5513543563b9\" \u002F>\n\n## 重大错误修复\n\n* [AMD] 处理 `amd-smi` 7.x 输出格式 ([#3701](https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3701)) — 支持两种 `amd-smi` 输出格式：扁平数组（ROCm 6.x）和包裹在 `{\"gpu_data\": [...]}` 中的格式（ROCm 7.x）。\n* [CloudRift] CloudRift 虚拟机启动时 RTC 时钟不正确（快约 1 小时）。已在启动 shim 之前添加了 NTP 同步等待。\n* [UI] 在“启动”向导中支持 `model` 及其他一些 YAML 属性（例如，允许通过模板部署模型）。\n* [SSH 集群] 在启用了 SELinux 的主机上（RHEL、Rocky、CentOS），shim 服务因从 `\u002Ftmp` 移动的文件保留了临时 SELinux 标签而无法启动，并报“权限拒绝”错误。\n* [UI] 使用 AWS ACM 证书并通过 HTTPS 提供的服务，在 UI 中被错误地显示为 `http:\u002F\u002F` URL。\n* [SSH 集群] 在 SSH 集群配置的顶级设置 `blocks` 会被静默忽略，从而导致“没有匹配的实例供应”的错误。只有在按主机分别设置时才有效。\n\n## 变更内容\n\n* 由 @r4victor 在 https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3704 中修复了流水线获取器死锁问题。\n* [CloudRift] 由 @peterschmidt85 在 https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3701 中修复了 NTP 时钟偏差导致 Docker 故障的问题，并处理了 amd-smi 7.x 的输出。\n* 由 @peterschmidt85 在 https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3702 中修复了 SSH 集群部署中的 SELinux 拒绝访问问题。\n* [UI] 由 @peterschmidt85 在 https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3671 中将缺失字段添加到“启动”UI 支持的字段列表中。\n* 由 @r4victor 在 https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3709 中修复了使用 `acm` 证书的 `https` 服务在 UI 中显示为 `http` 协议的问题。\n* 由 @un-def 在 https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3700 中实现了对 SSH 集群配置中顶级 `blocks` 设置的尊重。\n\n**完整变更日志**: https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fcompare\u002F0.20.14...0.20.15","2026-03-27T12:56:03",{"id":186,"version":187,"summary_zh":188,"released_at":189},360245,"0.20.14","## 开发环境\r\n\r\n你可以创建不指定 `ide` 的开发环境，仅通过 SSH 连接：\r\n\r\n```yaml\r\ntype: dev-environment\r\nname: dev\r\n\r\npython: \"3.12\"\r\n\r\nresources:\r\n  gpu: H100NVL:1\r\n```\r\n\r\n## 导出\r\n\r\n以下改进属于 [导出](https:\u002F\u002Fdstack.ai\u002Fdocs\u002Fconcepts\u002Fexports\u002F) 功能的一部分，该功能允许在不同项目之间共享资源池。\r\n\r\n现在你可以使用以下命令列出已导入的资源：\r\n\r\n```shell\r\n$ dstack import list\r\n\r\n NAME                 FLEETS\r\n project-a\u002Fmy-export  my-fleet, another-fleet\r\n```\r\n\r\n导入的资源池可以直接在你的工作流中通过跨项目引用使用：\r\n\r\n```yaml\r\ntype: dev-environment\r\nname: dev\r\n\r\npython: \"3.12\"\r\n\r\nresources:\r\n  gpu: H100NVL:1\r\n\r\nfleets: [project-a\u002Fmy-fleet]\r\n```\r\n\r\n或者通过 CLI 使用：\r\n\r\n```shell\r\ndstack apply -f .dstack.yml --fleet project-a\u002Fmy-fleet\r\n```\r\n\r\n导入的资源池也会包含在 `dstack offer` 中。此外，`dstack event` 会显示带有项目前缀的导入资源池。\r\n\r\n## 后端\r\n\r\n### Azure\r\n\r\n新增对基于最新 NVIDIA 硬件的 Azure GPU 虚拟机系列的支持：\r\n\r\n* NCads H100 v5（H100 NVL GPU，每台虚拟机最多 2 块）\r\n* ND H100 v5（8 块 H100 GPU，适用于大规模训练任务）\r\n* ND H200 v5（新一代 H200 GPU，具有更大的显存和带宽，适合大型模型）\r\n\r\n```yaml\r\ntype: fleet\r\nname: my-fleet\r\n\r\nnodes: 1\r\n\r\nresources:\r\n  gpu: H100NVL:1\r\n```\r\n\r\n## 重大错误修复\r\n* 修复了由于 AWS 负载均衡器名称限制为 32 个字符以及每个可用区有多个私有子网而导致的 AWS 私有网关配置失败问题。\r\n* 恢复了 AWS 上实例启动的正确处理方式，解决了卷无法可靠挂载等问题。\r\n* 移除了对默认镜像不必要的 Docker 元数据请求，从而降低了触发注册表速率限制的风险。\r\n\r\n## 变更内容\r\n* @peterschmidt85 在 https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3659 中添加了“导出”概念页面及 CLI 参考文档。\r\n* @r4victor 在 https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3666 中重构了 `process_submitted_jobs` 函数。\r\n* @un-def 在 https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3646 中添加了 SSH 代理 API。\r\n* @peterschmidt85 在 https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3668 中为运行程序增加了按作业计算的每小时日志配额限制。\r\n* @r4victor 在 https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3670 中实现了提交作业流水线。\r\n* @jvstme 在 https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3674 中修改了 `filter_instances()` 函数，不再按资源池过滤。\r\n* @jvstme 在 https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3673 中修改了 `dstack offer`，使其能够显示导入的实例。\r\n* @r4victor 在 https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3675 中为迁移至流水线做好了 `process_runs` 的准备。\r\n* @jvstme 在 https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3669 中修复了 UI 中的“无资源池”警告。\r\n* @jvstme 在 https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3667 中修复了 CLI 中的“无资源池”警告。\r\n* @jvstme 在 https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3680 中修改了 `dstack event`，使其在显示目标时包含项目前缀。\r\n* @peterschmidt85 修改了开发环境，使 `ide` 成为可选配置。","2026-03-26T17:38:04",{"id":191,"version":192,"summary_zh":193,"released_at":194},360246,"0.20.13","## 导出\n\n### SSH 舰队共享\n\n现在，您可以使用新的导出系统在不同项目之间共享 SSH 舰队：\n\n```shell\n$ dstack export \\\n        --project team-a \\\n        create shared-gpus \\\n        --fleet gpu-fleet-1 \\\n        --fleet gpu-fleet-2 \\\n        --importer team-b \\\n        --importer team-c\n\n NAME         FLEETS                    IMPORTERS\n shared-gpus  gpu-fleet-1, gpu-fleet-2  team-b, team-c\n```\n\n从导入方项目的视角来看，导出的舰队会出现在 `dstack fleet list` 中，并且可以像本项目的舰队一样用于运行任务：\n\n```shell\n$ dstack fleet --project team-b list\n\n NAME                NODES  GPU          SPOT  BACKEND  PRICE  STATUS  CREATED\n my-local-fleet      1      -            -     ssh      -      active  3 days ago\n team-a\u002Fgpu-fleet-1  2      A100:80GB:8  -     ssh      -      active  1 week ago\n team-a\u002Fgpu-fleet-2  1      H100:80GB:4  -     ssh      -      active  2 days ago\n```\n\n更多关于导出的信息，请参阅[文档](https:\u002F\u002Fdstack.ai\u002Fdocs\u002Fconcepts\u002Fexports\u002F)。\n\n## UI\n\n### 项目模板\n\n项目设置现在允许您配置自定义的[模板](https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack-templates)仓库。\n\n\u003Cimg width=\"1920\" height=\"1080\" alt=\"ui-templates\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002Fa9d36143-b26c-4660-ab22-cd63a0fb5616\" \u002F>\n\n### 任务连接\n\n任务页面现在包含一个“连接”部分，指导您访问任务暴露的端口。\n\n\u003Cimg width=\"1920\" height=\"1080\" alt=\"ui-task-connect\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F89496df9-f1aa-4ae1-8e45-d72f4748f840\" \u002F>\n\n## 后端\n\n### Crusoe\n\nCrusoe 后端现在支持 H200 和 B200 GPU。[集群文档](https:\u002F\u002Fdstack.ai\u002Fexamples\u002Fclusters\u002Fcrusoe\u002F#vms)已更新，展示了如何使用原生 Crusoe 后端来配置高性能 InfiniBand 集群。\n\n### Vast.ai\n\n新的 `community_cloud` 后端设置允许您将使用范围限制为仅安全的云服务：\n\n```yaml\nbackends:\n- type: vastai\n  community_cloud: false  # 仅使用安全的云服务\n```\n\n默认值仍为 `community_cloud: true`。\n\n## 变更内容\n* [UI]: 刷新按钮不会刷新运行日志、指标或事件 由 @olgenn 在 https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3618 中提出\n* 更新 Crusoe 集群文档 由 @peterschmidt85 在 https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3620 中提出\n* 通过 `JobRuntimeData` 从 `runner` 报告运行时的 `working_dir` 和 `username` 由 @peterschmidt85 在 https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3617 中提出\n* 实现舰队流水线 由 @r4victor 在 https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3623 中提出\n* 将文档、博客和评论中的 RunPod 替换为 Runpod 由 @jvstme 在 https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3625 中提出\n* 扩展舰队和实例权限测试 由 @jvstme 在 https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3627 中提出\n* 重组 Go 代码库 由 @un-def 在 https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3628 中提出\n* 显示导入的舰队及所属项目","2026-03-13T13:42:21",{"id":196,"version":197,"summary_zh":198,"released_at":199},360247,"0.20.12","## 后端\r\n\r\n### Crusoe\r\n\r\n`dstack` 现在支持 [Crusoe](https:\u002F\u002Fcrusoe.ai\u002F) 作为后端，从而实现基于 GPU 实例的虚拟机部署。该后端同时支持单节点和多节点集群的部署，并且可以使用 InfiniBand 网络。\n\n\u003Cdiv editor-title=\"fleet.dstack.yml\">\n\n```yaml\ntype: fleet\nname: my-crusoe-fleet\n\nbackends: [crusoe]\nresources:\n  gpu: A100:8\nnodes: 2\nplacement: cluster\n```\n\n\u003C\u002Fdiv>\n\n> [!NOTE]\n> CPU 实例、H200、B200、GB200、MI300X、MI355X 以及卷的支持即将推出。\n\n## UI\n\n### 启动向导\n\nUI 现在包含一个启动向导，允许用户从预定义的模板创建运行。用户无需从头编写 YAML 文件，只需选择一个模板，挑选 GPU 资源，调整设置，并通过引导式流程查看最终配置即可。\n\n\u003Cimg width=\"850\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002Fff0958d3-ff99-4f4c-b354-3713976d651d\" \u002F>\n\n要启用启动向导，需要将服务器指向一个模板仓库：\n\n\u003Cdiv class=\"termy\">\n\n```shell\n$ DSTACK_SERVER_TEMPLATES_REPO=https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack-templates dstack server\n```\n\n\u003C\u002Fdiv>\n\n模板是仓库中 `.dstack\u002Ftemplates` 目录下的 YAML 文件。每个模板都设置了 `type: template`，拥有唯一的 `name` 和 `title`，可配置的 `parameters`，以及定义 `dstack` 运行的 `configuration`：\n\n\u003Cdiv editor-title=\".dstack\u002Ftemplates\u002Fin-browser-ide.yml\">\n\n```yaml\ntype: template\nname: in-browser-ide\n\ntitle: 浏览器内 IDE\ndescription: 使用浏览器中的 VS Code 访问实例。\n\nparameters:\n  - type: name\n  - type: resources\n  - type: python_or_docker\n  - type: repo\n  - type: working_dir\n    \n  - type: env\n    title: 密码\n    name: PASSWORD\n    value: $random-password\n\nconfiguration:\n  type: service\n  \n  auth: false\n  gateway: true\n  https: auto\n\n  env:\n    - BIND_ADDR=0.0.0.0:8080\n  commands:\n    - |\n      echo \"Your password is $PASSWORD. Share it carefully as it grants full access to the IDE.\"\n    - |\n      curl -fsSL https:\u002F\u002Fcode-server.dev\u002Finstall.sh | sh -s -- --method standalone --prefix \u002Ftmp\u002Fcode-server\n    - |\n      \u002Ftmp\u002Fcode-server\u002Fbin\u002Fcode-server --bind-addr $BIND_ADDR --auth password --disable-telemetry --disable-update-check .\n  port: 8080\n\n  probes:\n    - type: http\n      url: \u002Fhealthz\n```\n\n\u003C\u002Fdiv>\n\n示例仓库请参阅 [dstack-templates](https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack-templates)。\n\n> [!NOTE]\n> 启动向导目前是一个实验性功能。现阶段模板是按服务器进行配置的，未来将支持按项目配置模板。\n\n### 实例\n\nUI 现在新增了实例详情页，用户可以在其中查看实例的详细信息，包括事件和数据检查。UI 中的所有实例名称，包括事件页面上的名称，现在都会直接链接到该详情页。\n\n\u003Cimg width=\"850\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F32495740-1e86-4e1d-ab78-547dedf71d97\" \u002F>\n\n## 变更内容\n\n* 文档添加","2026-02-26T15:52:52",{"id":201,"version":202,"summary_zh":203,"released_at":204},360248,"0.20.11","本次发布修复了一个潜在问题：由于迁移尝试在 Postgres 上创建已存在的索引，导致服务器副本无法启动。\n\n## 变更内容\n* 由 @r4victor 在 https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3591 中修复了并发索引迁移问题\n\n**完整变更日志**: https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fcompare\u002F0.20.10...0.20.11","2026-02-26T09:17:41",{"id":206,"version":207,"summary_zh":208,"released_at":209},360249,"0.20.10","## 服务\n\n### 预填充-解码分离\n\n`dstack` 现在支持分离的预填充–解码推理架构，允许在同一服务中同时运行预填充和解码工作节点类型。\n\n要定义并运行此类服务，请在 `router` 属性下将 `pd_disaggregation` 设置为 `true`（这要求网关使用 [`sglang` 路由器](https:\u002F\u002Fdstack.ai\u002Fdocs\u002Fconcepts\u002Fgateways\u002F#sglang)，并分别为预填充和解码工作节点类型定义独立的副本组）：\n\n```yaml\ntype: service\nname: prefill-decode\n\nenv:\n  - HF_TOKEN\n  - MODEL_ID=zai-org\u002FGLM-4.5-Air-FP8\n\nimage: lmsysorg\u002Fsglang:latest\n\nreplicas:\n  - count: 1..4\n    scaling:\n      metric: rps\n      target: 3\n    commands:\n      - |\n          python -m sglang.launch_server \\\n            --model-path $MODEL_ID \\\n            --disaggregation-mode prefill \\\n            --disaggregation-transfer-backend mooncake \\\n            --host 0.0.0.0 \\\n            --port 8000 \\\n            --disaggregation-bootstrap-port 8998\n    resources:\n      gpu: H200\n\n  - count: 1..8\n    scaling:\n      metric: rps\n      target: 2\n    commands:\n      - |\n          python -m sglang.launch_server \\\n            --model-path $MODEL_ID \\\n            --disaggregation-mode decode \\\n            --disaggregation-transfer-backend mooncake \\\n            --host 0.0.0.0 \\\n            --port 8000\n    resources:\n      gpu: H200\n\nport: 8000\nmodel: zai-org\u002FGLM-4.5-Air-FP8\n\nprobes:\n  - type: http\n    url: \u002Fhealth_generate\n    interval: 15s\n\nrouter:\n  type: sglang\n  pd_disaggregation: true\n```\n\n> [!NOTE]\n> 请注意，`pd_disaggregation` 要求网关和副本使用同一个集群。借助 `dstack`，现在可以在 `aws`、`gcp` 和 `kubernetes` 后端中使用此功能（因为这些后端支持同时创建集群和网关）。对更多后端（以及最终的 SSH 集群）的支持即将推出。\n\n目前，`pd_disaggregation` 仅适用于 SGLang。对 vLLM 的支持也将很快推出。\n\n此外，未来还将支持额外的扩缩容指标，例如 TTFT 和 ITL，以实现预填充和解码工作节点的自动扩缩容。\n\n### 模型端点\n\n如果您配置了 `model` 属性，`dstack` 此前会在 `gateway.\u003Cgateway domain>`（或 `\u002Fproxy\u002Fmodels\u002F\u003Cproject name>`）提供一个全局模型端点，允许访问项目中部署的所有模型。该端点现已弃用。\n\n现在，任何已部署的模型都应通过服务端点本身访问，即 `\u003Crun name>.\u003Cgateway domain>`（或 `\u002Fproxy\u002Fservices\u002Fmain\u002F\u003Cservice name>`）。\n\n> [!NOTE]\n> 如果您配置了 `model` 属性，`dstack` 会自动在服务端点上启用 CORS。未来版本将允许您禁用或自定义此行为。\n\n## CLI\n\n### `dstack apply`\n\n此前，如果您未指定 `gpu`，`dstack` 会将其视为 `0..1`，但不会在运行计划中显示。现在，`dstack` 会正确显示这一默认值。此外，如果您未指定 `image`，dstack 自动…","2026-02-19T12:42:42",{"id":211,"version":212,"summary_zh":213,"released_at":214},360250,"0.20.9","## 事件\r\n\r\n### UI\r\n\r\n在 UI 中，`Project` 和 `User` 页面现在都新增了一个 `Events` 选项卡，提供了一种便捷的方式来跟踪事件，而无需手动使用全局筛选器。\n\n在 `User` 页面上，`Events` 选项卡会显示当前用户作为 `Actor`（发起操作的人）或 `Target user`（命令所作用的用户）的相关事件：\n\n\u003Cimg width=\"850\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F64e2de39-32c7-4337-9942-cfef3d868d8e\" \u002F>\r\n\r\n在 `Project` 页面上，`Events` 选项卡则会展示当前项目中的所有事件。\n\n## CLI\n\n### `dstack attach`\n\n`dstack attach` 命令现在会等待运行实例完成资源调配（类似于 `dstack apply`），并实时显示进度，仅在运行状态变为“正在运行”时才进行连接。\n\n此外，如果任务中定义了 `ports`，且其中某些端口无法转发到 `localhost`（例如因为该端口已被占用），那么无论是 `dstack attach` 还是 `dstack apply` 都会显示一条清晰的错误信息，并附带 `-p` 参数的建议：\n\n```\n无法连接：端口 8000 已被占用。请在 dstack attach 中使用 -p 参数覆盖本地端口映射，例如 -p 8001:8000。\n```\n\n## Kubernetes\n\n### 资源与供给\n\n`kubernetes` 后端获取供给的方式已更新。此前，供给会反映节点的资源情况。而现在，`dstack` 只会返回满足请求范围下限值的供给；例如，如果你请求 `gpu: 0..8`，`dstack` 将只返回 `gpu: 0` 的供给。这样显示的供给更接近 Kubernetes 实际进行资源调配的情况。\n\n`dstack offer -b kubernetes --gpu 0..8` 将仅返回 `gpu: 0` 的供给。\n\n若要查看 `gpu: 1` 的供给，则必须在 `dstack offer` 或 `dstack apply` 中指定 `gpu: 1` 或 `gpu: 1..`。\n\n> [!NOTE]\n> 我们理解这与其他后端显示供给的方式有所不同，但这是改进 Kubernetes 后端资源调配的第一步。欢迎提出反馈意见。\n\n### 代理跳转\n\n为了在容器内代理 SSH 流量，`kubernetes` 后端会在启动时创建一个代理跳转 Pod。这要求至少有一个集群节点拥有外部 IP，并依赖 Kubernetes 来转发流量，即使代理跳转 Pod 并未运行在具有外部 IP 的节点上。\n\n然而，并非所有 Kubernetes 服务都支持这种行为；例如，Nebius 的托管 Kubernetes 要求代理跳转 Pod 必须运行在具有外部 IP 的节点上。为了支持这些场景，`kubernetes` 后端现在会再次检查代理跳转 Pod 是否已正确创建。\n\n> [!NOTE]\n> 在此类环境中，最可靠的做法仍然是确保所有集群节点都具备外部 IP。欢迎提出反馈意见。\n\n## 舰队\n\nSSH 舰队中的实例不再因通过 SSH 无法访问而被自动终止。这可以避免由于临时性的 SSH 连接问题而导致 SSH 舰队实例过早终止。\n\n## 文档\n\n`.d` 的参考页面","2026-02-12T13:12:52",{"id":216,"version":217,"summary_zh":218,"released_at":219},360251,"0.20.8","## 命令行界面\n\n### `dstack event --watch`\n\n`dstack event` 命令现在支持 `--watch` 选项，用于实时跟踪事件。\n\n![video](https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002Fe9a236b5-62d1-4cf2-a58e-b90d0a5bc2a6)\n\n事件覆盖范围也得到了改进，现在可以获取就地更新运行和服务注册的相关事件。\n\n### `dstack fleet`\n\n`dstack fleet` 命令现在包含集群级别的信息，如节点、资源、竞价策略和后端详情，并在下方列出各个实例。\n\n\u003Cimg width=\"1474\" height=\"301\" alt=\"dstack-fleet\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002Fdd1a070f-2d0c-4286-954c-da22679906f1\" \u002F>\n\n## 技能\n\n### `SKILL.md`\n\n如果您正在使用 Claude Code、Codex、Cursor 等代理工具，现在可以安装 `dstack` 技能。\n\n```shell\nnpx skills add dstackai\u002Fdstack\n```\n\n这些技能可以让代理完全了解配置语法和 CLI 命令。\n\n\u003Cimg width=\"850\" alt=\"Screenshot 2026-02-05 at 11 54 18\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002Fd7fc7828-572f-41f6-9c3d-9ce16f6226a8\" \u002F>\n\n## 服务\n\n### 探针\n\n#### UI\n\nUI 现在会显示服务的 [探针](https:\u002F\u002Fdstack.ai\u002Fdocs\u002Fconcepts\u002Fservices\u002F#probes) 状态，帮助监控副本的就绪性和健康状况。\n\n\u003Cimg width=\"1348\" height=\"689\" alt=\"ui-probes\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002Fabf0bdce-1462-49ab-ac3b-5e4e033b8d5b\" \u002F>\n\n#### `until_ready`\n\n探针新增了 `until_ready` 选项，当达到 `ready_after` 阈值时即可停止探针执行。这对于仅需在启动时运行的资源密集型探针非常有用：\n\n```yaml\nprobes:\n  - type: http\n     url: \u002Fhealth\n     until_ready: true\n     ready_after: 2\n```\n\n#### 模型探针\n\n使用 [`model`](https:\u002F\u002Fdstack.ai\u002Fdocs\u002Fconcepts\u002Fservices\u002F#model) 属性声明具有 OpenAI 兼容接口的聊天模型的服务，现在会自动配置一个探针，通过请求 `\u002Fv1\u002Fchat\u002Fcompletions` 来检查模型是否可用。\n\n## 后端\n\n### RunPod\n\n#### 社区云\n\n为确保更可靠的体验，RunPod 社区云现已默认禁用。您仍可在 [后端设置](https:\u002F\u002Fdstack.ai\u002Fdocs\u002Fconcepts\u002Fbackends\u002F#runpod) 中启用社区云。`dstack` Sky 用户仅在其使用自己的 RunPod 凭证时才能启用社区云。\n\n### CUDO\n\n由于 CUDO Compute 已经停止其公共按需服务，`cudo` 后端现已被弃用。\n\n## 变更内容\n* [文档] 副本组，由 @Bihan 在 https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3511 中完成\n* [文档] 添加“竞价策略”，由 @peterschmidt85 在 https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3512 中完成\n* 将 UI 切换为基于分页的项目和用户 API，由 @olgenn 在 https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3503 中完成\n* [UI] 在集群向导中添加竞价策略配置选项，由 @olgenn 在 https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3519 中完成\n* 重命名 UI 中的事件目标筛选器","2026-02-05T11:46:10",{"id":221,"version":222,"summary_zh":223,"released_at":224},360252,"0.20.7","## Services\r\n\r\n### Replica groups\r\n\r\nA service can now include multiple replica groups. Each group can define its own `commands`, `resources` spec, and `scaling` rules.\r\n\r\n```yaml\r\ntype: service\r\nname: llama-8b-service\r\n\r\nimage: lmsysorg\u002Fsglang:latest\r\nenv:\r\n  - MODEL_ID=deepseek-ai\u002FDeepSeek-R1-Distill-Llama-8B\r\n\r\nreplicas:\r\n  - count: 1..2\r\n    scaling:\r\n      metric: rps\r\n      target: 10\r\n    commands:\r\n      - |\r\n        python -m sglang.launch_server \\\r\n          --model-path $MODEL_ID \\\r\n          --port 8000 \\\r\n          --trust-remote-code\r\n    resources:\r\n      gpu: 48GB\r\n\r\n  - count: 1..4\r\n    scaling:\r\n      metric: rps\r\n      target: 5\r\n    commands:\r\n      - |\r\n        python -m sglang.launch_server \\\r\n          --model-path $MODEL_ID \\\r\n          --port 8000 \\\r\n          --trust-remote-code\r\n    resources:\r\n      gpu: 24GB\r\n\r\nport: 8000\r\nmodel: deepseek-ai\u002FDeepSeek-R1-Distill-Llama-8B\r\n```\r\n\r\n\u003C\u002Fdiv>\r\n\r\n> [!NOTE]\r\n> Properties such as `regions`, `port`, `image`, `env` and some other cannot be configured per replica group. This support is coming soon.\r\n\r\n> [!NOTE]\r\n> Native support for disaggregated prefill and decode, allowing both worker types to run within a single service, is coming soon.\r\n\r\n## Events\r\n\r\nEvents are now also supported for volumes, gateways, and secrets.\r\n\r\n```shell\r\n$ dstack event --target-gateway my-gateway\r\n[2026-01-28 11:53:03] [👤admin] [gateway my-gateway] Gateway created. Status: SUBMITTED\r\n[2026-01-28 11:53:32] [gateway my-gateway] Gateway status changed SUBMITTED -> PROVISIONING\r\n[2026-01-28 11:54:46] [gateway my-gateway] Gateway status changed PROVISIONING -> RUNNING\r\n[2026-01-28 11:55:08] [👤admin] [gateway my-gateway] Gateway set as default\r\n```\r\n\r\nInstance events now also include reachability and health events.\r\n\r\nFinally, we have added [Events](https:\u002F\u002Fdstack.ai\u002Fdocs\u002Fconcepts\u002Fevents\u002F) under `Concepts` in the documentation.\r\n\r\n## CLI\r\n\r\n### `dstack project`\r\n\r\nThe `dstack project` and `dstack project set-default` commands now allow you to interactively select the default project when these commands are run without arguments.\r\n\r\n\u003Cimg width=\"750\" alt=\"dstack-cli-project\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F1ce0fed9-4f81-479a-89be-0b59379ed307\" \u002F>\r\n\r\n### `dstack login`\r\n\r\nThe `dstack login` command can now be run without arguments. In this case, it will interactively ask for the URL and provider if needed. If you want to use dstack Sky, you can simply press Enter without entering a URL or provider.\r\n\r\n\u003Cimg width=\"750\" alt=\"dstack-cli-login\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F6c596ee4-7ca0-4d68-9e2d-93bcaef28ca7\" \u002F>\r\n\r\nAlso, if you have multiple projects, the command will prompt you to select the default project as well.\r\n\r\n## What's changed\r\n* Implement pagination for `\u002Fapi\u002Fproject\u002Flist` and `\u002Fapi\u002Fusers\u002Flist` by @r4victor in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3489\r\n* Update dstack server CLI logo by @r4victor in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3438\r\n* Move pytest.ini options to pyproject.toml by @r4victor in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3491\r\n* [UX] Make `dstack project` and `dstack project set-default` interactive for default project selection by @peterschmidt85 in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3488\r\n* Add replica groups in dstack-service by @Bihan in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3408\r\n* [chore]: Add `list_events` utility for unit tests by @jvstme in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3493\r\n* [Docs]: Fix k8s backend config example by @jvstme in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3495\r\n* Move ruff.toml to pyproject.toml by @r4victor in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3496\r\n* Events: instance\u002Fjob reachability and health by @jvstme in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3482\r\n* Volume events by @jvstme in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3494\r\n* Set INSTANCE_UNREACHABLE for unreachable on-demand instances by @r4victor in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3497\r\n* Support gateway events in API, CLI, and UI by @jvstme in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3499\r\n* Use numeric replica-group names by @Bihan in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3502\r\n* Add gateway lifecycle events by @jvstme in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3500\r\n* Docs minor improvements by @peterschmidt85 in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3501\r\n* Support secret events in API, CLI, and UI by @jvstme in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3504\r\n* [Docs] Events #3397 by @peterschmidt85 in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3506\r\n* [UX] Extend `dstack login` with interactive selection of `url` and default project by @peterschmidt85 in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3492\r\n* Add secret lifecycle events by @jvstme in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3505\r\n* Fix apply plan compatibility with old servers by @jvstme in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3507\r\n* [UI] Minor tweaks by @peterschmidt85 in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3508\r\n* Fix `dsta","2026-01-28T16:48:36",{"id":226,"version":227,"summary_zh":228,"released_at":229},360253,"0.20.6","## Server deployment\r\n\r\n### Memory optimization\r\n\r\nThis release reduces peak server memory usage. Previously, memory grew with the total number of instances ever submitted; this is now fixed. We recommend upgrading if memory usage increases over time.\r\n\r\n### Logs storage\r\n\r\n#### Fluent Bit + Elasticsearch\u002FOpenSearch\r\n\r\nRun logs can now be stored in your own log storage via Fluent Bit. At the same time, dstack can now read run logs from Elasticsearch\u002FOpenSearch (to display in the UI and CLI), if Fluent Bit ships the logs there.\r\n\r\nSee the [docs](https:\u002F\u002Fdstack.ai\u002Fdocs\u002Fguides\u002Fserver-deployment\u002F#fluent-bit) for more details.\r\n\r\n## Fleets\r\n\r\nSince 0.20, `dstack` requires at least one fleet to be created before you can submit any runs. To make this easier, we’ve simplified default fleet creation during project setup in the UI:\r\n\r\n\u003Cimg width=\"750\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002Ff8ec3798-b122-4d24-9872-23cc06b88a06\" \u002F>\r\n\r\nIn addition, if your project doesn’t have a fleet, the UI will prompt you to create one.\r\n\r\n## What's Changed\r\n\r\n* Hotfix. Fixed generation fleet fields in project forms by @olgenn in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3486\r\n* Add missing Box imports by @r4victor in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3485\r\n* Use the same metrics endpoint label for 404 requests by @r4victor in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3455\r\n* Refactoring Inspect page by @olgenn in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3457\r\n* Migrate from Slurm by @peterschmidt85 in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3454\r\n* [Internal]: Handle GitHub API errors in `release_notes.py` by @jvstme in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3463\r\n* Display `InstanceAvailability.NO_BALANCE` in CLI by @jvstme in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3460\r\n* Do not return `NO_BALANCE` to older clients by @jvstme in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3462\r\n* Optimize job submissions loading by @r4victor in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3466\r\n* [CLI] Add `--memory` option to `apply` and `offer` by @un-def in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3461\r\n* [runner] Rework and fix user processing by @un-def in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3456\r\n* Optimize fleet instances db queries by @r4victor in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3467\r\n* Kubernetes: adjust offer GPU count by @un-def in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3469\r\n* Add missing job status change event for scaling by @jvstme in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3465\r\n* Fix `find_optimal_fleet_with_offers` log message by @un-def in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3470\r\n* Fix missing instance lock in delete_fleets by @r4victor in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3471\r\n* Optimize list and get fleets by @r4victor in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3472\r\n* feat(logging): add fluent-bit log shipping by @DragonStuff in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3431\r\n* Adjust fluent-bit logging integration by @r4victor in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3478\r\n* Emit events for instance status changes by @jvstme in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3477\r\n* [runner] Restore `--home-dir` option as no-op by @un-def in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3480\r\n* [UI] Default fleet in project wizard by @olgenn in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3464\r\n* Support shared AWS compute caches by @r4victor in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3483\r\n* [UI] Minor re-order in the sidebar by @peterschmidt85 in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3484\r\n\r\n**Full changelog**: https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fcompare\u002F0.20.3...0.20.6","2026-01-21T13:31:13",{"id":231,"version":232,"summary_zh":233,"released_at":234},360254,"0.20.5","> [!WARNING]\r\n>\r\n> **Be sure to update to [0.20.6](https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Freleases\u002F0.20.6), which includes important fixes.**\r\n\r\n## What's Changed\r\n* Add missing Box imports by @r4victor in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3485\r\n\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fcompare\u002F0.20.4...0.20.5","2026-01-21T11:31:38",{"id":236,"version":237,"summary_zh":238,"released_at":239},360255,"0.20.4","> [!WARNING]\r\n>\r\n> **Be sure to update to [0.20.6](https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Freleases\u002F0.20.6), which includes important fixes.**\r\n\r\n## What's changed\r\n\r\n* Use the same metrics endpoint label for 404 requests by @r4victor in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3455\r\n* Refactoring Inspect page by @olgenn in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3457\r\n* Migrate from Slurm by @peterschmidt85 in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3454\r\n* [Internal]: Handle GitHub API errors in `release_notes.py` by @jvstme in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3463\r\n* Display `InstanceAvailability.NO_BALANCE` in CLI by @jvstme in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3460\r\n* Do not return `NO_BALANCE` to older clients by @jvstme in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3462\r\n* Optimize job submissions loading by @r4victor in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3466\r\n* [CLI] Add `--memory` option to `apply` and `offer` by @un-def in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3461\r\n* [runner] Rework and fix user processing by @un-def in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3456\r\n* Optimize fleet instances db queries by @r4victor in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3467\r\n* Kubernetes: adjust offer GPU count by @un-def in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3469\r\n* Add missing job status change event for scaling by @jvstme in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3465\r\n* Fix `find_optimal_fleet_with_offers` log message by @un-def in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3470\r\n* Fix missing instance lock in delete_fleets by @r4victor in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3471\r\n* Optimize list and get fleets by @r4victor in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3472\r\n* feat(logging): add fluent-bit log shipping by @DragonStuff in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3431\r\n* Adjust fluent-bit logging integration by @r4victor in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3478\r\n* Emit events for instance status changes by @jvstme in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3477\r\n* [runner] Restore `--home-dir` option as no-op by @un-def in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3480\r\n* [UI] Default fleet in project wizard by @olgenn in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3464\r\n* Support shared AWS compute caches by @r4victor in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3483\r\n* [UI] Minor re-order in the sidebar by @peterschmidt85 in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3484\r\n\r\n**Full changelog**: https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fcompare\u002F0.20.3...0.20.4","2026-01-21T10:45:22",{"id":241,"version":242,"summary_zh":243,"released_at":244},360256,"0.20.3","## Dev environments\r\n\r\n### Windsurf IDE\r\n\r\nDev environments now support Windsurf as a first-class IDE option alongside VSCode and Cursor.\r\n\r\n```yaml\r\ntype: dev-environment\r\nide: windsurf\r\n\r\nrepos:\r\n- https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\r\n\r\nresources:\r\n  gpu: 24GB..:1\r\n```\r\n\r\n`dstack` provisions an instance for your dev environment and seamlessly connects your local Windsurf editor to it.\r\n\r\n\u003Cimg width=\"3448\" height=\"1946\" alt=\"dstack-windsurf-dev-environment-min\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F94efb2c4-fb68-44fb-aa49-a08725754d5e\" \u002F>\r\n\r\n\r\n## Troubleshooting\r\n\r\n### Runs\u002Ffleets\u002Fvolumes\u002Fgateways JSON via CLI\r\n\r\nYou can now inspect the full JSON state of runs, fleets, volumes, and gateways using these CLI commands:\r\n\r\n```shell\r\n$ dstack run get \u003Cname> --json\r\n$ dstack fleet get \u003Cname> --json\r\n$ dstack volume get \u003Cname> --json\r\n$ dstack gateway get \u003Cname> --json\r\n```\r\n\r\n### Runs\u002Ffleets JSON via UI\r\n\r\nThe UI includes new \"Inspect\" tabs with read-only JSON viewers for runs and fleets, making it easier to debug and understand resource states.\r\n\r\n\u003Cimg width=\"1729\" height=\"978\" alt=\"dstack-inspect-ui-min\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F4a8cb884-1217-4f6b-8482-57e415ddfe2f\" \u002F>\r\n\r\n## What's changed\r\n* Adjust kubernetes gpu matching for RTX5090 by @r4victor in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3440\r\n* [runner] Fix MPI hostfile by @un-def in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3441\r\n* [Crusoe] Minor edits by @peterschmidt85 in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3448\r\n* [Dev environments] Support windsurf IDE  by @peterschmidt85 in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3444\r\n* Add `processing instance` debug log message by @jvstme in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3450\r\n* [runner] Decouple Server and Executor by @un-def in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3447\r\n* [Feature] Allow to see JSON state of runs\u002Fvolumes\u002Ffleets\u002Fgateways via CLI\u002FUI by @peterschmidt85 in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3445\r\n\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fcompare\u002F0.20.2...0.20.3","2026-01-08T18:03:00",{"id":246,"version":247,"summary_zh":248,"released_at":249},360257,"0.20.2","## What's Changed\r\n* Fix TestRemoveDanglingTasks by @un-def in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3426\r\n* [runner] Configure and start sshd by @un-def in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3421\r\n* Resolve url for dstack login by @r4victor in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3427\r\n* [shim] Fix DockerRunner tests by @un-def in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3429\r\n* Remove httpx duplicated in dev deps by @r4victor in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3433\r\n* [UX] Better \"No fleets\" messages; plus updated `Troubleshooting` guide by @peterschmidt85 in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3428\r\n* [runner] Streamline authorized_keys management by @un-def in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3435\r\n* Change \u002Fdstack\u002Fvenv ownership to the current user by @un-def in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3437\r\n* [UX] Add an API that returns projects that lack active fleets by @peterschmidt85 in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3425\r\n* Make no fleet notifications dismissible by @r4victor in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3439\r\n\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fcompare\u002F0.20.1...0.20.2","2025-12-30T10:22:44",{"id":251,"version":252,"summary_zh":253,"released_at":254},360258,"0.20.1","# CLI\r\n\r\n## No-fleets warning\r\n\r\nSince the [last major release](https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Freleases\u002F0.20.0), fleets are required before submitting runs. This update makes that requirement explicit in the CLI.\r\n\r\n\u003Cimg width=\"969\" height=\"685\" alt=\"Screenshot 2025-12-25 at 15 39 00\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F16078d58-c286-4011-bc26-e9cdf63d746b\" \u002F>\r\n\r\nWhen a run is submitted for a project that has no fleets, the CLI now shows a dedicated warning. The run status has also been updated in both the CLI and UI to `No fleets` instead of `No offers`.\r\n\r\nThis removes ambiguity around failed runs that previously appeared as `No offers`.\r\n\r\n## `dstack login`\r\n\r\nIf you're using [dstack Sky](https:\u002F\u002Fsky.dstack.ai\u002F) or [dstack Enterprise](https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack-enterprise), you can now authenticate the CLI using a new command, `dstack login`, instead of manually providing a token.\r\n\r\n\u003Cimg width=\"969\" height=\"685\" alt=\"Screenshot 2025-12-25 at 15 42 30\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F225d9cd2-fbb0-49b0-8fc3-949d146fc035\" \u002F>\r\n\r\ndstack Sky supports authentication via GitHub. dstack Enterprise supports SSO with providers such as Okta, Microsoft Entra ID, and Google.\r\n\r\n# Services\r\n\r\nService configurations now support `gateway: true`.\r\n\r\nFor services that require gateway features (such as auto-scaling, custom domains, WebSockets, etc), this property makes the requirement explicit. When set, `dstack` ensures a default gateway is present.\r\n\r\n## `dstack-shim`\r\n\r\nIn addition to the `dstack-runner` auto-update mechanism introduced in 0.20.0, `dstack-shim` now also supports auto-updating.\r\n\r\nSee [contributing\u002FRUNNER-AND-SHIM.md](https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fblob\u002Fmaster\u002Fcontributing\u002FRUNNER-AND-SHIM.md) for details.\r\n\r\n## What's changed\r\n\r\n* [Docs] Reflect the 0.20 changes related to `working_dir` and `repo_dir` by @peterschmidt85 in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3356\r\n* [Docs]: Fix environment variables reference layout by @jvstme in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3396\r\n* Add more events about users and projects by @jvstme in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3390\r\n* Implement shim auto-update by @un-def in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3395\r\n* [Fleets] Updated error message and docs by @peterschmidt85 in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3377\r\n* [Blog] dstack 0.20 GA: Fleet-first UX and other important changes by @peterschmidt85 in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3401\r\n* [runner] Get container cgroup path from procfs by @un-def in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3402\r\n* [Internal] Add an index for user email by @peterschmidt85 in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3409\r\n* Don't send `asyncio.CancelledError` to Sentry by @un-def in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3404\r\n* [Internal] Allow passing `AnyActor` to `update_user` by @peterschmidt85 in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3410\r\n* Replace `Instance.termination_reason` values with codes  by @peterschmidt85 in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3187\r\n* [Docs] Added the `Lambda` example under `Clusters` by @peterschmidt85 in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3407\r\n* [runner] Revamp `main.go` by @un-def in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3411\r\n* Was implemented Event list for job, run and fleet by @olgenn in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3392\r\n* Fix event target type rendering in server logs by @jvstme in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3414\r\n* Support `gateway: true` in service configurations by @jvstme in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3413\r\n* Implement `dstack login` command and CLI OAuth flow by @r4victor in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3415\r\n* Allow users to delete their only project by @jvstme in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3416\r\n* Indicate deleted actors and projects in Events API by @jvstme in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3422\r\n* [UX] Make \"No fleets\" run status more explicit #3405 by @peterschmidt85 in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3406\r\n* Bump `gpuhunt==0.1.16` by @r4victor in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3423\r\n\r\n**Full changelog**: https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fcompare\u002F0.20.0...0.20.1","2025-12-25T15:03:34",{"id":256,"version":257,"summary_zh":258,"released_at":259},360259,"0.20.0","`dstack` 0.20 is a major release that brings significant improvements and introduces a number of breaking changes. Read below for the most important ones. For migration notes, please refer to the [migration guide](https:\u002F\u002Fdstack.ai\u002Fdocs\u002Fguides\u002Fmigration\u002F#0_20).\r\n\r\n## Fleets\r\n\r\n`dstack` previously had two different ways to provision instances for runs: using a fleet configuration or using automatic fleet provisioning on run apply.  To unify the UX, `dstack` no longer creates fleets automatically. \r\n\r\nFleets must now be created explicitly before submitting runs. This gives users full control over the provisioning lifecycle. If you don't need any limits on instance provisioning (as was the case with auto-created fleets), you can create a single elastic fleet for all runs:\r\n\r\n```yaml\r\ntype: fleet\r\nname: default-fleet\r\nnodes: 0..\r\n```\r\n\r\nNote that multi-node tasks require fleets with `placement: cluster`, which provides the best possible connectivity. You will need a separate fleet for each cluster.\r\n\r\n> [!NOTE]\r\n> To keep the old behavior with auto-created fleets, set the `DSTACK_FF_AUTOCREATED_FLEETS_ENABLED` environment variable.\r\n\r\n## Runs\r\n\r\n### Working directory\r\n\r\nPreviously, the `working_dir` property had complicated semantics: it defaulted to `\u002Fworkflow`, but for tasks and services without commands, the image's working directory was used instead.\r\n\r\nThis has now been simplified: `working_dir` always defaults to the image's working directory. The working directory of the default dstack images is now set to `\u002Fdstack\u002Frun`.\r\n\r\n### Repo directory\r\n\r\nWorking with repos is now more explicit and intuitive. First, `dstack` now only sets up repos that are explicitly defined in run configurations via repos; repos initialized with `dstack init` are not set up unless specified:\r\n\r\n```yaml\r\ntype: dev-environment\r\nide: vscode\r\nrepos:\r\n  # Clone the repo in the configuration's dir into `working_dir`\r\n  - .\r\n```\r\n\r\nSecond, `repos[].path` now defaults to `working_dir` (`\".\"`) instead of `\u002Fworkflow`.\r\n\r\nThird, cloning a repo into a non-empty directory now raises an error so that mistakes are not silently ignored. The previous behavior of skipping cloning can be specified explicitly with `if_exists: skip`:\r\n\r\n```yaml\r\ntype: dev-environment\r\nide: vscode\r\nrepos:\r\n  - local_path: .\r\n    path: \u002Fmy_volume\u002Frepo\r\n    if_exists: skip\r\n```\r\n\r\n## Events\r\n\r\n`dstack` now stores important events—such as resource CRUD operations, status changes, and other information crucial for auditing and debugging. Users can view events using the dstack event CLI command or in the UI.\r\n\r\n```shell\r\n$ dstack event\r\n[2025-12-11 15:05:20] [👤admin] [run clever-cheetah-1] Run submitted. Status: SUBMITTED\r\n[2025-12-11 15:05:20] [job clever-cheetah-1-0-0] Job created on run submission. Status: SUBMITTED\r\n[2025-12-11 15:05:26] [job clever-cheetah-1-0-0, instance cloud-fleet-0] Job assigned to instance. Instance status: BUSY (1\u002F1 blocks busy)\r\n```\r\n\r\n## CLI\r\n\r\n### JSON output\r\n\r\nThe `dstack ps` and `dstack gateway` commands now support `--format json` \u002F `--json` arguments that print results in JSON instead of plaintext:\r\n\r\n```shell\r\n$ dstack ps --json\r\n{\r\n  \"project\": \"main\",\r\n  \"runs\": [\r\n    {\r\n      \"id\": \"5f2e08b5-2098-4064-86c7-0efe0eb84970\",\r\n      \"project_name\": \"main\",\r\n      \"user\": \"admin\",\r\n      \"fleet\": {\r\n        \"id\": \"9598d5db-67d8-4a2e-bdd2-842ab93b2f2e\",\r\n        \"name\": \"cloud-fleet\"\r\n      },\r\n      ...\r\n    }\r\n  ]\r\n}\r\n```\r\n\r\n## Verda (formerly Datacrunch)\r\n\r\nThe `datacrunch` backend has been renamed to `verda`, following the company's rebranding.\r\n\r\n```\r\nprojects:\r\n  - name: main\r\n    backends:\r\n      - type: verda\r\n        creds:\r\n          type: api_key\r\n          client_id: xfaHBqYEsArqhKWX-e52x3HH7w8T\r\n          client_secret: B5ZU5Qx9Nt8oGMlmMhNI3iglK8bjMhagTbylZy4WzncZe39995f7Vxh8\r\n```\r\n\r\n## Gateways\r\n\r\nGateway configurations now support an optional `instance_type`  property that allows overriding the default gateway instance type:\r\n\r\n```yaml\r\ntype: gateway\r\nname: example-gateway\r\n\r\nbackend: aws\r\nregion: eu-west-1\r\n\r\ninstance_type: t3.large\r\n\r\ndomain: example.com\r\n```\r\n\r\nCurrently `instance_type` is supported for `aws` and `gcp` backends.\r\n\r\n## All breaking changes\r\n\r\n* Fleets are no longer created automatically on run apply and have to be created explicitly before submitting runs.\r\n* The run's `working_dir` now always defaults to the image's working directory instead of `\u002Fworkflow`. The working directory of `dstack` default images is now `\u002Fdstack\u002Frun`.\r\n* `repos[].path` now defaults to `working_dir` (`\".\"`) instead of `\u002Fworkflow`.\r\n* Dropped implicitly loaded repos; repos must be specified via `repos` configuration property.\r\n* Cloning a repo into a non-empty directory now raises an error. This can be changed by setting `if_exists: skip`.\r\n* Dropped CLI commands `dstack config`, `dstack stats`, and `dstack gateway create`.\r\n* Dropped Python API `RunCollection` methods `RunCollection.get_plan()`, `RunCollection.exec_plan()`, and `R","2025-12-17T11:33:51",{"id":261,"version":262,"summary_zh":263,"released_at":264},360260,"0.20.0rc1","`dstack` 0.20 is a major upcoming release that brings significant improvements and introduces a number of breaking changes. Read below for the most important ones.\r\n\r\n> [!NOTE]\r\n> You're encouraged to test `0.20rc1` in the **staging environment**, share your feedback, and ensure you're ready to upgrade before the release goes GA (planned for December 17). \r\n>\r\n> ```shell\r\n> uv tool install \"dstack[all]==0.20rc1\"\r\n> ```\r\n>\r\n> For migration notes, please refer to the [migration guide](https:\u002F\u002Fdstack.ai\u002Fdocs\u002Fguides\u002Fmigration\u002F#0_20).\r\n\r\n## Fleets\r\n\r\n`dstack` previously had two different ways to provision instances for runs: using a fleet configuration or using automatic fleet provisioning on run apply.  To unify the UX, `dstack` no longer creates fleets automatically. \r\n\r\nFleets must now be created explicitly before submitting runs. This gives users full control over the provisioning lifecycle. If you don't need any limits on instance provisioning (as was the case with auto-created fleets), you can create a single elastic fleet for all runs:\r\n\r\n```yaml\r\ntype: fleet\r\nname: default-fleet\r\nnodes: 0..\r\n```\r\n\r\nNote that multi-node tasks require fleets with `placement: cluster`, which provides the best possible connectivity. You will need a separate fleet for each cluster.\r\n\r\n> [!NOTE]\r\n> To keep the old behavior with auto-created fleets, set the `DSTACK_FF_AUTOCREATED_FLEETS_ENABLED` environment variable.\r\n\r\n## Runs\r\n\r\n### Working directory\r\n\r\nPreviously, the `working_dir` property had complicated semantics: it defaulted to `\u002Fworkflow`, but for tasks and services without commands, the image's working directory was used instead.\r\n\r\nThis has now been simplified: `working_dir` always defaults to the image's working directory. The working directory of the default dstack images is now set to `\u002Fdstack\u002Frun`.\r\n\r\n### Repo directory\r\n\r\nWorking with repos is now more explicit and intuitive. First, `dstack` now only sets up repos that are explicitly defined in run configurations via repos; repos initialized with `dstack init` are not set up unless specified:\r\n\r\n```yaml\r\ntype: dev-environment\r\nide: vscode\r\nrepos:\r\n  # Clone the repo in the configuration's dir into `working_dir`\r\n  - .\r\n```\r\n\r\nSecond, `repos[].path` now defaults to `working_dir` (`\".\"`) instead of `\u002Fworkflow`.\r\n\r\nThird, cloning a repo into a non-empty directory now raises an error so that mistakes are not silently ignored. The previous behavior of skipping cloning can be specified explicitly with `if_exists: skip`:\r\n\r\n```yaml\r\ntype: dev-environment\r\nide: vscode\r\nrepos:\r\n  - local_path: .\r\n    path: \u002Fmy_volume\u002Frepo\r\n    if_exists: skip\r\n```\r\n\r\n## Events\r\n\r\n`dstack` now stores important events—such as resource CRUD operations, status changes, and other information crucial for auditing and debugging. Users can view events using the dstack event CLI command or in the UI.\r\n\r\n```shell\r\n$ dstack event\r\n[2025-12-11 15:05:20] [👤admin] [run clever-cheetah-1] Run submitted. Status: SUBMITTED\r\n[2025-12-11 15:05:20] [job clever-cheetah-1-0-0] Job created on run submission. Status: SUBMITTED\r\n[2025-12-11 15:05:26] [job clever-cheetah-1-0-0, instance cloud-fleet-0] Job assigned to instance. Instance status: BUSY (1\u002F1 blocks busy)\r\n```\r\n\r\n## CLI\r\n\r\n### JSON output\r\n\r\nThe `dstack ps` and `dstack gateway` commands now support `--format json` \u002F `--json` arguments that print results in JSON instead of plaintext:\r\n\r\n```shell\r\n$ dstack ps --json\r\n{\r\n  \"project\": \"main\",\r\n  \"runs\": [\r\n    {\r\n      \"id\": \"5f2e08b5-2098-4064-86c7-0efe0eb84970\",\r\n      \"project_name\": \"main\",\r\n      \"user\": \"admin\",\r\n      \"fleet\": {\r\n        \"id\": \"9598d5db-67d8-4a2e-bdd2-842ab93b2f2e\",\r\n        \"name\": \"cloud-fleet\"\r\n      },\r\n      ...\r\n    }\r\n  ]\r\n}\r\n```\r\n\r\n## Verda (formerly Datacrunch)\r\n\r\nThe `datacrunch` backend has been renamed to `verda`, following the company's rebranding.\r\n\r\n```\r\nprojects:\r\n  - name: main\r\n    backends:\r\n      - type: verda\r\n        creds:\r\n          type: api_key\r\n          client_id: xfaHBqYEsArqhKWX-e52x3HH7w8T\r\n          client_secret: B5ZU5Qx9Nt8oGMlmMhNI3iglK8bjMhagTbylZy4WzncZe39995f7Vxh8\r\n```\r\n\r\n## All breaking changes\r\n\r\n* Fleets are no longer created automatically on run apply and have to be created explicitly before submitting runs.\r\n* The run's `working_dir` now always defaults to the image's working directory instead of `\u002Fworkflow`. The working directory of `dstack` default images is now `\u002Fdstack\u002Frun`.\r\n* `repos[].path` now defaults to `working_dir` (`\".\"`) instead of `\u002Fworkflow`.\r\n* Dropped implicitly loaded repos; repos must be specified via `repos` configuration property.\r\n* Cloning a repo into a non-empty directory now raises an error. This can be changed by setting `if_exists: skip`.\r\n* Dropped CLI commands `dstack config`, `dstack stats`, and `dstack gateway create`.\r\n* Dropped Python API `RunCollection` methods `RunCollection.get_plan()`, `RunCollection.exec_plan()`, and `RunCollection.submit()`.\r\n* Dropped local repos support: `dstack init --local` and `dst","2025-12-11T12:59:09",{"id":266,"version":267,"summary_zh":268,"released_at":269},360261,"0.19.40","This release fixes a DB migration deadlock that could happen when upgrading multi-replica server with Postgres to 0.19.39.\r\n\r\n## What's changed\r\n* [Bug] Split last user\u002Fproject migration to fix deadlock by @r4victor in https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fpull\u002F3330\r\n\r\n\r\n**Full changelog**: https:\u002F\u002Fgithub.com\u002Fdstackai\u002Fdstack\u002Fcompare\u002F0.19.39...0.19.40","2025-11-27T15:01:07"]