> ## 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.

# 跑一次评测

> 用 GSM8K、MMLU、C-Eval 等给一次完成的 run 打分，落在同一张可比的看板上。

```bash theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
sf new my-bench --method evalkit/benchmark      # 每个项目做一次
sf bench run my-bench -m run:run-4f2a91 --suites gsm8k,mmlu
```

分数落在控制台的 Benchmarks 页，和所有其他 run 在同一个矩阵里——
跨 run、跨方法、跨基座模型都可比。

<Frame caption="评测矩阵：纵向是 run，横向是基准，最高分高亮。">
  <img src="https://mintcdn.com/starforge/GatXR2rI5-_Vm4_H/images/console/benchmarks.png?fit=max&auto=format&n=GatXR2rI5-_Vm4_H&q=85&s=4c566bdcc2e13ced6378a9d975671356" alt="StarForge 评测页" width="2160" height="1350" data-path="images/console/benchmarks.png" />
</Frame>

## 能给什么打分

| `-m` 接受   | 例子                                   |
| --------- | ------------------------------------ |
| 一次 run    | `run:run-4f2a91` —— 自动解析这次 run 导出的权重 |
| 一个 Hub 模型 | `Qwen/Qwen2.5-7B`                    |
| 共享存储上的路径  | `/mnt/shared/models/qwen-support-v3` |

给 run 打分要求它已经导出过。提交时加 `--then export` 就不用记着这件事了。

## 有哪些基准可用

```bash theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
sf bench ls
```

内置：`gsm8k`、`math`、`humaneval`、`mmlu`、`ceval`、`ifeval`，加上 RTL 系列。
所有以 [benchmark 包](/zh-Hans/extend/benchmark-packs)发布的也会出现在这里。

这几个轴是刻意挑的——数学、代码、知识、中文、指令遵循。
后训练会稳定地改进其中一个，同时悄悄损伤另一个，
而同时跑好几个，正是让这件事在进入生产之前而不是之后被看见。

## 常用选项

| 参数             | 什么时候用                                  |
| -------------- | -------------------------------------- |
| `--suites`     | 逗号分隔的基准名                               |
| `--runner`     | `lm-eval`（默认）或 `evalscope`，后者对中文基准覆盖更好 |
| `--limit`      | 限制每个基准的样本数。只用于冒烟测试——绝不要用于你会拿出去说的分数     |
| `--profile`    | 资源，和训练一样                               |
| `--extra-args` | 透传给 runner                             |

<Warning>
  带 `--limit` 的分数和完整跑出来的分数不可比，而且下游没有任何地方会标注它是截断的。
  用它确认流程能跑通，然后去掉它再跑一次。
</Warning>

两个 runner 产出**同一套分数契约**，所以同一个基准无论谁跑的都直接可比。
选哪个 runner 不会扭曲这个数。

## 让每次 run 都自动打分

手动跑一次没问题。让它在每次 run 上都发生，才是阻止回退进入生产的东西：

```bash theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
sf submit my-grpo --profile h200:8 --then eval
```

或者在实验配置里声明评测门禁，让低于阈值的 run 被标记为未通过门禁——
见你所用方法模板里的 `eval:` 段。

## 读懂这个矩阵

分数是幂等入库的：同一个 run 和同一个基准再报一次是更新那一行，而不是多出一行。

每个指标都带声明好的方向，所以对比视图不用猜哪边算好。
一个基准声明了多个指标时，它们之间的差往往才是有用的那部分——
GSM8K 的严格与宽松匹配拉开差距，意味着模型会算，但没按要求的格式输出。

## 在平台之外打分

harness 在这里跑不了时——有授权限制的工具、真实的测试台架——把分数报回来：

```bash theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
sf bench external create -m run:run-4f2a91 --harness cvdp --train-run run-4f2a91
sf bench external submit <RUN_ID> --file scores.json
```

`create` 返回一个 run id，`submit` 把分数文件报给它。`--train-run` 是让评测门禁和模型版本
接受这些分数的关键——不带它，分数会被记录，但不具备权威性。

它们进同一个矩阵，并标记为外部产生。

## 确认成功

```bash theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
sf job ls          # 评测作业，和其他作业一样
sf job logs
```

然后打开 Benchmarks 页。你那次 run 出现了一行、每个申请的列都有分数，就说明成功了。
某一列是空的说明那个 suite 失败了——作业日志里会说明是哪个。

## 下一步

<Columns cols={2}>
  <Card title="写一个 benchmark 包" icon="package" href="/zh-Hans/extend/benchmark-packs" arrow="true">
    声明你自己的评测集：跑什么、读哪些数。
  </Card>

  <Card title="Rubric" icon="ruler" href="/zh-Hans/guides/rubrics" arrow="true">
    规则打不了分的东西，用 LLM 裁判按成文标准打。
  </Card>
</Columns>
