Skip to content

工作空间隔离

每个项目一个目录

AutoResearch 的每个研究项目都有独立的工作空间:

~/Claude/Research/
├── fine-grained-recognition/    # 项目 A
│   ├── CLAUDE.md                # 项目级配置 + Pipeline Status
│   ├── .omc/research/           # 研究状态
│   ├── findings.md              # 过程发现
│   ├── Experiment.md            # 实验记录
│   ├── IDEA.md                  # 候选 idea
│   ├── docs/                    # 文档(论文笔记等)
│   ├── papers/                  # 论文 PDF
│   ├── tools/                   # watchdog 等工具
│   └── src/                     # 项目代码
├── video-understanding/         # 项目 B
│   ├── CLAUDE.md
│   ├── .omc/research/
│   └── ...
└── CLAUDE.md                    # 全局科研配置

隔离的好处

  1. 状态不冲突 — 每个项目有自己的 Pipeline Status,互不影响
  2. 可独立操作 — 一个项目在训练,另一个可以在做 idea 探索
  3. 可整体迁移 — 需要协作时,整个目录可以 git push
  4. 可安全清理 — 项目结束后,删除目录即可

infrastructure.yaml

跨项目的基础设施配置放在全局位置:

yaml
# ~/Claude/Research/.omc/infrastructure.yaml

servers:
  ic2:
    ssh: ic2
    ip: 146.179.45.207
    gpus:
      - { id: 0, type: "RTX 6000 Ada", vram: 48 }
      - { id: 1, type: "RTX 6000 Ada", vram: 48 }
      - { id: 2, type: "RTX 6000 Ada", vram: 48 }
    workdir: /data/Jingxuan/
    conda: /home/jingxuan/miniconda3

  ic:
    ssh: ic
    ip: 172.22.231.169
    gpus:
      - { id: 0, type: "A5000", vram: 24 }
      - { id: 1, type: "A5000", vram: 24 }
      - { id: 2, type: "A5000", vram: 24 }
      - { id: 3, type: "A5000", vram: 24 }
      - { id: 4, type: "A5000", vram: 24 }
      - { id: 5, type: "A5000", vram: 24 }
    workdir: /bigdata/Jingxuan/data/
    conda: /home/jingxuan/miniconda3

defaults:
  preferred_server: ic2    # 大显存优先
  fallback_server: ic
  rsync_exclude:
    - .git/
    - wandb/
    - output/
    - outputs/
    - models/
    - sessions/
    - "*.pyc"
    - __pycache__/
  wandb:
    mode: online            # 绝不离线
    entity: jingxuan

gpu_budget:
  max_gpus: 8
  max_vram_per_gpu: 24      # GB(以最小显存为准)
  max_wall_time: 24h        # 主实验
  explore_wall_time: 8h     # 探索实验

服务器选择是 late-binding 的

不在项目创建时绑定服务器。而是在即将训练时,根据当前 GPU 可用情况选择。infrastructure.yaml 定义了有哪些服务器可选,不是指定必须用哪个。

跨项目共享资源

有些资源是跨项目共享的:

工具脚本

~/Claude/Research/
├── tools/                       # 共享工具
│   ├── watchdog.py              # 训练监控
│   └── wandb-guard.sh           # WandB 模式检查

新项目创建时,会复制一份 watchdog.py 到项目目录:

bash
cp ~/.claude/bin/watchdog.py ~/Claude/Research/<project>/tools/

为什么复制而不是软链接?因为项目可能需要定制化 watchdog 配置,独立副本避免影响其他项目。

conda 环境

bash
# 服务器上的 conda 环境可以在项目间共享
# 新项目优先复制已有环境,而非从头安装
conda create --clone existing-env --name new-project-env

数据集

数据集存放在服务器的公共目录,不在项目目录内:

# 服务器上
/data/Jingxuan/datasets/
├── CUB-200/
├── ImageNet/
└── ...

# 项目代码中用软链接或配置路径指向

HuggingFace 缓存

先查本地缓存再下载。如果数据集已在本地,设 HF_HUB_OFFLINE=1 避免不必要的网络请求。

项目创建流程

bash
# 1. 创建目录
mkdir -p ~/Claude/Research/<project-name>/tools
mkdir -p ~/Claude/Research/<project-name>/docs
mkdir -p ~/Claude/Research/<project-name>/papers

# 2. 复制工具
cp ~/.claude/bin/watchdog.py ~/Claude/Research/<project-name>/tools/

# 3. 初始化 CLAUDE.md(含 Pipeline Status)
# 4. git init
cd ~/Claude/Research/<project-name>
git init && git add -A && git commit -m "init: project scaffold"

每个项目从创建开始就有 git 版本控制。实验代码、配置、文档都在版本控制内。大文件(权重、数据集)通过 .gitignore 排除。

代码同步

本地开发,远程训练。代码同步通过 rsync:

bash
rsync -avz --delete --filter=':- .gitignore' \
  --exclude='.git/' --exclude='wandb/' \
  --exclude='output/' --exclude='outputs/' \
  --exclude='models/' --exclude='sessions/' \
  --exclude='findings.md' --exclude='*.pyc' \
  --exclude='__pycache__/' \
  ~/Claude/Research/<project>/ <server>:<workdir>/<project>/

只同步代码和小文件

权重和数据集在服务器直接下载,不通过 rsync 传输。rsync 只负责代码、配置和脚本。

下一步

AutoResearch — Multi-agent Deep Learning Research System