磁盘与存储
部署时选择容量
部署页面上有一个磁盘滑块。它从 50 GB 起步,以 10 GB 为步长移动,最小 10 GB,最大取决于你选中的机器能给你多少。滑块下方的提示文字会写明这个上限。不同机器的上限不同,所以换一个报价,滑块的顶端也会跟着变。
在 API 中,这个字段是 POST /v1/instances 上的 disk_gb,取值范围为 10 到 20,000。超出所选机器容量的取值会被拒绝,返回 422 DISK_TOO_LARGE,错误信息会告诉你那台机器最大能给多少。
{
"offer_id": "…",
"template_id": "…",
"disk_gb": 200,
"label": "llama-finetune"
}
按整个任务来估算容量:镜像、你的数据集、包缓存,以及你打算同时保留的每一个检查点。撑爆磁盘的通常是检查点——一次训练如果每个 epoch 写一个又从不删除,会把看起来很宽裕的磁盘塞满。
之后无法调整容量
控制台里没有调整容量的控件,任何接口上也没有能在部署之后修改 disk_gb 的字段。磁盘在实例的整个生命周期内是固定的。
如果容量选小了,换到更大磁盘的唯一途径就是开一个新实例:把数据拷贝出来,销毁旧实例,再用更大的磁盘重新部署。参见数据的传入与传出。
存储费率按每 GB 每小时计费,所以多要 50 GB 只是一笔小而可预期的开销。训练跑到一半磁盘满了则不是。
什么东西存在哪里
磁盘承载着容器的文件系统。没有主机挂载,也没有额外挂载的卷——容器写入的一切都落在你付费的这块磁盘上。
| 路径 | 存放什么 |
|---|---|
/workspace | 按约定存放你的数据和代码,也是 JupyterLab 的默认根目录 |
/root/.ssh/authorized_keys | 你在部署时附加的公钥,每次启动都会写入 |
/var/log/superheat/jupyter.log | notebook 服务器的输出 |
/var/log/superheat/onstart.log | 模板 onstart 脚本的输出 |
整个文件系统在停止之后依然存在,启动时原封不动地回来。整个文件系统会在销毁时被删除,/workspace 也不例外。这里的任何东西都没有备份。
你付什么费,什么时候付
| 实例状态 | 费用 |
|---|---|
running | 该切片的 GPU 费率,按秒计量 |
stopped | 存储费率,按你开通的磁盘每 GB 每小时计费 |
creating、starting、stopping、destroying | 不收费 |
destroyed | 不收费 |
大家忘掉的往往是存储费。已停止的实例每停一小时都在花钱,一块大磁盘停一个月就是一笔实打实的账单,而这期间根本没有任何任务在跑。费用大约每分钟结算一次,因此计费页面上的余额基本是实时的。
实例一被销毁,存储费立即停止计算,因为磁盘已经不存在了。这就是其中的取舍:停止与销毁的对比会讲清楚你该选哪一个。