# 运行

> 运行状态、可对运行执行的操作，以及运行如何停止。

一次运行就是一次优化。它有一个状态、一个支出上限和一组已保存的版本。本页说明运行的状态、你可以对运行执行的操作，以及运行停止的原因。

## 运行状态

每次运行都处于以下状态之一：

| 状态         | 含义                                                     |
| ------------ | -------------------------------------------------------- |
| `pending`    | 运行在队列中。                                           |
| `validating` | Skynet 在优化开始前检查设置。                            |
| `running`    | 优化器正在提出新版本并为其打分。                         |
| `success`    | 运行已完成。最佳版本已保存。                             |
| `failed`     | 一个错误使运行停止。                                     |
| `cancelled`  | 有人取消了运行。                                         |
| `paused`     | 运行在某个检查点停止。你可以继续它。                     |
| `stopped`    | 运行因达到预算而停止。它保留已找到的最佳版本。           |

`success`、`failed`、`cancelled`、`stopped` 和 `paused` 是终止状态。优化器不会处理处于终止状态的运行。`paused` 是唯一一个专门用于继续的终止状态。

## 操作

运行页面会显示适用于当前状态和你的角色的操作。API 提供相同的操作。

| 操作       | 何时可以使用                                                                                    | 作用                                                   |
| ---------- | ----------------------------------------------------------------------------------------------- | ------------------------------------------------------ |
| **暂停**   | 运行正在进行，并且有已保存的检查点。                                                            | 在检查点处停止运行。状态变为 `paused`。                |
| **取消**   | 运行处于 `pending`、`validating` 或 `running`。                                                 | 停止运行。取消无法撤销。                               |
| **继续**   | 运行处于 `failed`、`cancelled`、`paused`，或因达到预算而 `stopped`，并且有已保存的检查点。     | 从最后一个检查点继续同一次运行。运行保留其 id。        |
| **克隆**   | 只要你能看到该运行，随时可用。                                                                  | 打开提交向导，并带入配置的副本。                       |
| **删除**   | 运行处于终止状态。仅限所有者。                                                                  | 永久删除运行及其所有数据。                             |

对于处于 `failed` 或 `cancelled` 的运行，API 还提供两个额外操作：

- **重试** 以相同的配置启动一次新运行。新运行会获得新的 id。
- **重新运行** 从头再次启动同一次运行。运行保留其 id。

> [!NOTE]
> 重试、重新运行和 API 克隆会拒绝带有自身支出上限的运行。请在提交向导中打开配置，并在启动新运行之前设置新的预算。运行页面上的 **克隆** 按钮会替你完成这些。

API 克隆一次请求可以创建 1 到 5 个副本。每个副本都会计入你的运行限制。请参阅[限制](/docs/zh-Hans/limits)。

### 谁可以执行操作

你在运行中的角色决定了你能看到哪些操作：

- **所有者** 可以执行所有操作、管理分享并删除运行。
- **编辑者** 可以暂停、取消、继续和重试运行，并提高其支出上限。
- **查看者** 可以打开运行并克隆它。

关于角色的更多信息，请阅读[分享与发布](/docs/zh-Hans/guides/sharing)。

## 运行如何停止

运行会因以下四个原因之一而停止。

### 完成

优化器完成工作。状态变为 `success`。Skynet 保存最佳版本并执行最终测试。请阅读[查看结果](/docs/zh-Hans/guides/results)。

### 预算

运行在开始之前没有费用估算。它的支出上限就是它可以使用的预算。Skynet 在运行过程中测量每次评分器运行的实际费用：

1. Skynet 等待 10 次已结算的评分器运行。在此之前，单次调用的费用波动太大，无法使用。
2. Skynet 用目前为止的平均费用为下一次迭代定价。它把价格乘以 1.5，因为后面的迭代通常花费更多。
3. 当剩余预算不足以支付下一次迭代时，Skynet 停止接纳新工作。优化器会在下一次付费调用时停止。

此后运行的状态为 `stopped`，停止原因为 `budget_reached`。运行页面会显示 **已达到预算上限** 通知。通知会告诉你 Skynet 保存了哪个版本：

- 你经过评估的最佳版本。
- 如果没有找到更好的版本，则为你经过评估的起始版本。
- 如果在任何候选完成评估之前预算就已用完，则不保存任何版本。你的输入和日志仍会保存。

要继续，请使用通知上的 **提高上限并继续**。Skynet 会从最后一个检查点继续运行。

> [!TIP]
> 设为 **不设上限** 的运行会一直使用你的账户余额，直到完成。如果余额用完，运行会停止并保留已有的结果。此时通知会显示 **账户余额已用尽**。充值后再继续运行。

一些较早的运行以停止原因 `budget_projected` 暂停。你可以用同样的方式继续它们。

### 失败

一个错误使运行停止。状态变为 `failed`。**日志** 标签页会显示发生了什么。如果运行有已保存的检查点，你可以继续它。你也可以重试它。

如果某个 worker 在执行你的作业时停止，Skynet 会恢复该作业并重试。尝试 3 次后，Skynet 会把该作业标记为失败。在失败或取消之后继续运行也算作一次尝试。在暂停或因预算停止之后继续运行则不计入。

### 取消

你取消了运行。状态变为 `cancelled`。取消无法撤销。之后，你可以从已保存的检查点继续运行，或者重试它。

## 相关页面

- [预算与计费](/docs/zh-Hans/concepts/billing)
- [使用向导启动运行](/docs/zh-Hans/guides/submit)
- [限制](/docs/zh-Hans/limits)

---

Source: https://staging.skynetml.com/docs/zh-Hans/concepts/runs
