Skip to content

准备代码、数据与输出目录

提交训练任务前,先让代码、数据、checkpoint 和日志都落在任务 Worker 能访问且任务结束后仍保留的位置。这样任务启动后只负责训练,不在 GPU 节点上临时下载数据、临时补代码或把结果写到会被销毁的本地目录。

把训练代码放到任务能访问的位置

训练任务启动后只会执行您填写的 启动命令,不会自动同步本地代码。请选择一种代码来源,并在 启动命令 中使用稳定路径:

  • 将代码放入自定义镜像:适合团队已有固定训练代码和依赖版本,启动时只需要进入代码目录并执行脚本。
  • 将代码放到共享高性能存储:适合仍在迭代的训练脚本,开发机、AICoder 和训练任务都挂载同一个存储卷后,可以使用同一路径访问代码。
  • 启动命令 中拉取代码:只适合轻量代码和稳定网络。不要在训练任务启动时拉取大仓库、大模型或大数据集。

如果使用共享存储,建议在开发机或 AICoder 中先完成代码准备,例如:

language-bash
mkdir -p /mnt/public/projects/llama-sft
cd /mnt/public/projects/llama-sft
git clone https://example.com/team/train-repo.git .
chmod +x scripts/*.sh

提前准备训练数据

团队自有训练数据应提前放到共享高性能存储中;如果使用平台提供的公共数据,在创建任务时挂载 公共数据 后只读访问。不要把下载、解压、格式转换等耗时操作放在训练任务的第一步,否则 GPU 已经分配完成,却在等待 CPU、网络或磁盘操作。

  • 使用平台公共模型或数据集时,在创建任务时挂载 公共数据,任务内从 /infini-data/ 只读读取。
  • 使用团队自有数据时,先用 AICoder开发机把数据放到共享高性能存储。
  • 使用多 Worker 训练时,所有 Worker 应使用同一个数据路径;如果路径依赖挂载点,请在开发机试跑和任务创建时保持挂载路径一致。

为输出和 checkpoint 准备持久目录

任务 Worker 的系统盘固定为 50 GiB,任务停止、成功或失败后不会保留。模型权重、checkpoint、TensorBoard 日志和排障日志都应写入共享高性能存储。

例如:

language-bash
export PROJECT_DIR=/mnt/public/projects/llama-sft
export OUTPUT_DIR=/mnt/public/outputs/llama-sft/run-001
export CHECKPOINT_DIR=${OUTPUT_DIR}/checkpoints
export LOG_DIR=${OUTPUT_DIR}/logs

mkdir -p "$CHECKPOINT_DIR" "$LOG_DIR"

警告

不要把重要结果只写到 /tmp/root/workspace 或容器内临时目录。任务结束后,这些目录中的数据无法找回。

在分布式代码中同步数据状态

多 Worker 训练中,如果某个 Worker 会生成或修改其他 Worker 要读取的共享状态,应在训练开始前同步状态。常见用法是只让 rank 0 准备共享数据或保存 checkpoint,然后用 barrier 确认其他 Worker 不会提前开始读取未完成的数据。否则,其他 Worker 可能读到未完成的数据,或在第一个 batch 的 DDP 通信处等待到超时。

PyTorch DDP 示例:

language-python
if dist.get_rank() == 0:
    prepare_dataset_once()

dist.barrier()

validate_dataset_readable()
train()

如果数据准备很耗时,应把它移到训练任务之前完成,只在训练任务里做轻量校验。

提交前核对路径

在开发机或 AICoder 中用与训练任务相同的挂载路径检查一次:

language-bash
test -d /mnt/public/projects/llama-sft
test -d /mnt/public/datasets/my-dataset
mkdir -p /mnt/public/outputs/llama-sft/run-001/checkpoints
python - <<'PY'
from pathlib import Path
for path in [
    "/mnt/public/projects/llama-sft",
    "/mnt/public/datasets/my-dataset",
    "/mnt/public/outputs/llama-sft/run-001/checkpoints",
]:
    print(path, Path(path).exists())
PY

路径确认完成后,再继续准备并验证容器镜像编写可靠启动命令