> ## Documentation Index
> Fetch the complete documentation index at: https://starforge.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# StarForge

> 覆盖后训练完整生命周期的统一控制平面：环境、训练、评测、试用与部署，跨任意训练框架与任意算力后端。

<img src="https://mintcdn.com/starforge/KiXW_1e-qWb7Hzzw/images/banner.png?fit=max&auto=format&n=KiXW_1e-qWb7Hzzw&q=85&s=ccd7b53701c4d3cab5835347d38fb1e9" alt="StarForge —— LLM 后训练控制平面：环境、训练、评测、Playground、部署，Reflow 闭合整个回路" className="block dark:hidden w-full max-w-3xl mx-auto rounded-2xl" noZoom width="2123" height="741" data-path="images/banner.png" />

<img src="https://mintcdn.com/starforge/KiXW_1e-qWb7Hzzw/images/banner-dark.png?fit=max&auto=format&n=KiXW_1e-qWb7Hzzw&q=85&s=96c7dcf53f77bfae1e4d56b61b79d414" alt="StarForge —— LLM 后训练控制平面：环境、训练、评测、Playground、部署，Reflow 闭合整个回路" className="hidden dark:block w-full max-w-3xl mx-auto rounded-2xl" noZoom width="2120" height="742" data-path="images/banner-dark.png" />

StarForge 是围绕后训练作业的那一整圈事情的控制平面。它管的是：谁可以跑什么、
用哪个获批的运行时和数据、在哪些 GPU 上、在什么配额之下——
以及把结果带回来：指标、日志、评测、产物、一个模型版本、一次部署，
还有那些最终会变成下一版训练数据的生产流量。

它对两件事刻意保持中立。**哪个框架**训练模型——NeMo-RL、verl、TRL、OpenRLHF，或者你自己的；
以及**哪个后端**运行它：Docker、裸机 agent、KubeRay 还是 Slurm。
一份 JobSpec 表达意图，平台把它送到其中任何一个上。

它不做的事，是拥有作业内部跑的东西。那属于训练框架，以及你的代码。

```bash theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
uv tool install starforge-core
sf init my-lab && cd my-lab
sf new my-grpo --method nemo-rl/grpo
sf submit my-grpo --profile h200:8
```

从一个空目录到 GPU 集群上的一次 GRPO 训练，四条命令，loss 曲线实时流进 Web 控制台。
你的笔记本上从头到尾没有任何集群凭据。

<Columns cols={2}>
  <Card title="快速开始" icon="rocket" href="/zh-Hans/quickstart" cta="15 分钟" arrow="true">
    安装、登录、提交，看着第一个数据点落在曲线上。
  </Card>

  <Card title="核心概念" icon="book-open" href="/zh-Hans/concepts/glossary" cta="先读这个" arrow="true">
    实验、run、recipe、profile、执行器——后面一切都在用这几个名词。
  </Card>
</Columns>

## 它做什么

StarForge 是覆盖整个后训练生命周期的控制平面。它负责解析、校验、存储、调度和分发，
并且有意不去拥有作业内部跑的东西——那归训练框架。

|        |                                                                                     |
| ------ | ----------------------------------------------------------------------------------- |
| **提交** | 用 YAML 声明一个实验，在笔记本上校验，然后送到一个你从不登录的集群上                                               |
| **运行** | NeMo-RL、verl、TRL、OpenRLHF 或你自己的训练器，跑在 Docker、裸机 agent、KubeRay 或 Slurm 上             |
| **观察** | loss、reward、KL、GPU 利用率、实时日志、验证样本，曲线不对时还有一份诊断                                        |
| **评分** | 通过标准 harness 跑 GSM8K、MMLU、C-Eval 等——也可以用你自己的 benchmark 包，或者让 LLM 裁判按你团队写的 rubric 打分 |
| **服务** | 在 Playground 里和某个 checkpoint 对话，或者把一个版本推广成带稳定端点的受管部署                                |
| **治理** | 配额、时段窗口、镜像允许列表、审计，以及「能用于训练但读不到内容」的数据集                                               |

## 选一条路

<Columns cols={3}>
  <Card title="我要训模型" icon="flask-conical" href="/zh-Hans/quickstart" arrow="true">
    先快速开始，然后是[提交](/zh-Hans/guides/submit)、[sweep](/zh-Hans/guides/sweep)
    和[流水线](/zh-Hans/guides/pipelines)。
  </Card>

  <Card title="我要扩展平台" icon="puzzle" href="/zh-Hans/extend/overview" arrow="true">
    九个扩展点：recipe、benchmark、环境、rubric、插件。
  </Card>

  <Card title="我要运维这套东西" icon="server" href="/zh-Hans/ops/overview" arrow="true">
    四种执行器、233 项配置、认证、存储、升级。
  </Card>
</Columns>

## 一次完整的 run

<Steps>
  <Step title="搭骨架">
    `sf init` 创建项目。`sf new` 把方法模板拷进 `experiments/<name>/`，
    并在 `recipe.lock.json` 里固定确切的 recipe 和框架版本。
  </Step>

  <Step title="校验">
    `sf validate` 按方法声明检查类型、取值范围和 batch size 整除关系——在你的机器上，几秒钟，
    在任何东西入队之前。
  </Step>

  <Step title="提交">
    `sf submit` 打包工作树，拒绝把任何看起来像密钥的东西放进去，然后把作业交给服务端。
    准入检查配额、recipe 握手和镜像允许列表，通过后入队。
  </Step>

  <Step title="观察">
    作业通过 ingest 回传生命周期打点、指标、样本、日志和产物。控制台实时画出来。
  </Step>

  <Step title="决策">
    用 `sf bench` 打分、与之前的 run 对比、在 Playground 里聊一聊、导出成 HuggingFace 格式，
    或者注册成一个模型版本并部署。
  </Step>
</Steps>

## 什么东西在哪里跑

|        | 你的笔记本 | 控制平面 | 集群 |
| ------ | ----- | ---- | -- |
| 配置校验   | ✓     | ✓    |    |
| 集群凭据   |       | ✓    |    |
| 对象存储密钥 |       | ✓    |    |
| 训练代码   |       |      | ✓  |
| 插件代码   |       |      | ✓  |
| 数据集内容  |       |      | ✓  |

控制平面从不执行第三方代码，训练者也从不拿到受保护数据集的原始内容。
两者都是结构上的保证，不是制度上的约定：见[扩展点](/zh-Hans/extend/overview)。

## 两个仓库

| 仓库                     | 是什么                                                              |
| ---------------------- | ---------------------------------------------------------------- |
| **starforge**          | 平台本身：`starforge-console`（控制平面）和 `starforge-core`（`sf` CLI 与 SDK） |
| **starforge-tutorial** | 一个示例项目。你自己的项目由 `sf init` 生成，不是把它 clone 下来                        |

<Tip>
  提交要求 git 工作树干净，否则需要 `--allow-dirty`。这是让一个结果在半年后还能追溯到确切 commit
  最便宜的办法——而那时候它恰好很重要，也恰好没人记得了。
</Tip>
