实验规范:服务器数据共享与可复现实验现场

本文是 科研服务器工作站使用指南 的实验侧补充,专门约定:数据怎么共享、路径怎么写、仓库放哪里、怎样把实验交给下一位同学继续跑。登录、GPU 礼仪、conda、tmux、代理仍以工作站指南为准。


为什么要单独写这一条

工作站家目录默认是 750drwxr-x---)。别人进不了 /home/你的用户名。把 Visium、HEST 等原始数据放在自己 home 里再 symlink,看起来本机能跑,组里下一个人完全读不到。互相再拷一份又会吃掉本就紧张的 1.8 TB NVMe。

因此约定三句话:

  1. 原始数据只留一份,放进全员可读的 /srv/datasets
  2. 代码进 Gitea 的 research 组织,不要把实验室现场推到公开 GitHub(除非论文代码本来就该公开)。
  3. Python 环境、训练日志、results/ 留在各人 home,不要共享 venv。

三层放置

放哪 放什么 谁能写 谁能读
/srv/datasets/(别名 /server/datasets/ 原始或已抽取的公共数据:Visium h5、空间坐标、HEST metadata/patches/st users 组(新建文件继承组权限) 全机账号
Gitea research/<项目> 代码、配置、论文用表格/图、实验说明 仓库协作者 research 成员
/home/<你>/<项目>/ .venvresults/、日志、自己的 checkpoint 仅你 仅你(家目录 750)

脚本里的默认路径写 /srv/datasets/...,不要写 /home/chenx/.../home/xiezy/...


共享数据根

规范路径是 /srv/datasets/server 是指向 /srv 的软链,所以 /server/datasets 同样可用。

当前已共享(会继续增加,以盘上 README.md 为准):

/srv/datasets/DLPFC/<slice>/          # 12 张 DLPFC Visium
/srv/datasets/Human_Breast_Cancer/    # BRCA Visium
/srv/datasets/hest_local/             # HeroST 用的 HEST 镜像
    metadata/<ID>.json
    patches/<ID>.h5
    st/<ID>.h5ad

权限约定:目录 2775、文件 664、属组 users。根目录已设默认 ACL,之后拷进去的新文件会带上组可读写。

ls /srv/datasets
# 确认别人也能读(换成自己的测试文件)
namei -l /srv/datasets/DLPFC/151674/filtered_feature_bc_matrix.h5

兼容旧路径:/home/chenx/spGCRC/dataset/DLPFC 等仍是指向共享盘的软链,只保证 chenx 自己的旧脚本还能跑。新代码不要再依赖这条链,因为别人走不进 /home/chenx

HeroST 加载顺序:HEROST_HEST_LOCAL_ROOT/srv/datasets/hest_local → 仓库内 data/hest_local。GPU 上 ~/HeroST/data/hest_local 也已链到共享盘。


项目目录怎么搭

每位同学在 自己的 home 建实验现场,数据用软链,不要把 6 G Visium 再复制一份。

# 例:接续 MMSpa-ST
cd ~
git clone http://<gitea>/research/MMSpa-ST.git
cd MMSpa-ST

mkdir -p data/dlpfc/151674
ln -s /srv/datasets/DLPFC/151674/filtered_feature_bc_matrix.h5 data/dlpfc/151674/
ln -s /srv/datasets/DLPFC/151674/spatial data/dlpfc/151674/
ln -s /srv/datasets/DLPFC/151674/metadata.tsv data/dlpfc/151674/

# 方法产物(如 image_feat.csv)可以:
#   1) 留在仓库的 data/ 里(gitignore),或
#   2) 征得同意后放进 /srv/datasets 对应切片,避免每人再抽一遍 ResNet

Python 环境按 工作站指南 自建 conda / venv,不要去用别人 home 里的 .venv。长任务放进 tmux。跑之前 nvidia-smi,占用时在 Lark 协调。

.gitignore 至少应排除:

data/
results/**/*.npy
results/**/*.pt
results/**/*.h5ad
results/logs/
.venv/

论文表、汇总 json、矢量图可以进 git,权重和中间 embedding 不要进。


向共享盘捐数据

盘只剩约两百 GB 量级时,搬(mv)不要拷(cp。同一块系统盘上 mv 几乎不占额外空间。

# 1. 确认将要共享的是原始数据,不是 results/ 或 venv
du -sh /path/to/MyDataset

# 2. 搬进共享根(目录名用稳定的公开名,不要用 my_tmp)
mv /path/to/MyDataset /srv/datasets/MyDataset

# 3. 属组与权限
chown -R "$USER":users /srv/datasets/MyDataset
find /srv/datasets/MyDataset -type d -exec chmod 2775 {} +
find /srv/datasets/MyDataset -type f -exec chmod 664 {} +

# 4. 若旧脚本还写死了 home 路径,只给自己留兼容链
ln -sfn /srv/datasets/MyDataset ~/old/project/dataset/MyDataset

# 5. 改仓库默认路径,推到 research/<项目>
#    SRC = Path("/srv/datasets/MyDataset")

不要做的事:

  • 不要把整个 /home/你 改成 755,那等于公开家目录。
  • 不要共享 .venvoutputs/
  • 不要为了「交给同学」再复制一份 DLPFC / HEST。
  • 不要把 HuggingFace 缓存目录直接 symlink 到 /srv/datasets(路径仍经过你的 750 home,别人打不开)。需要共享时,把 metadata/patches/st 硬链接或搬进 /srv/datasets/hest_local

受许可限制的数据(gated HEST 等)可以放进共享盘供组内实验,不要再打包上传到 Gitea 或公开网盘。仓库里只写路径和获取方式。


Gitea 与公开仓库

  • 新仓库所有者设为 research,不要建在个人命名空间后忘记转移。
  • 组内实验仓库(MMSpa-ST、HeroST 等)默认私有;公开复现代码另说。
  • 本机若同时有公开 origin 和 Gitea 远程,推实验改动只用 Gitea
  • 路径改动(/home/某人/srv/datasets)要进仓库,否则下一位同学拉代码仍指向已不可达的目录。

把实验现场交给另一位同学

只把「来 cd /home/chenx/某项目」发给对方是不够的,她进不去。

正确交接:

  1. 原始数据已在 /srv/datasets(按上一节捐好)。
  2. 代码在 research/<项目>,对方已是组织成员或协作者。
  3. 她在 自己的 home git clone,按「项目目录怎么搭」自建 venv、自链数据。
  4. 方法产物(image_feat.csv、已发表的 results/ 表)若还需要,放到共享盘或让她从仓库已提交的 json/图继续,而不是拷整个 11 G 工作树。
  5. 冒烟:对方用自己的环境跑 2 epoch 或 read_visium 能读到 /srv/datasets 即算交接完成。
  6. 你这边删掉重复的实验克隆,避免两套现场。

chown 到别人需要 sudo。没有管理员操作时,由对方从她读得到的位置 rsync 到自己 home,文件所有权才会变成她的。


现有项目对照

项目 共享数据 代码
MMSpa-ST /srv/datasets/DLPFC/srv/datasets/Human_Breast_Cancer Gitea research/MMSpa-ST
HeroST /srv/datasets/hest_local Gitea research/HeroST

MMSpa 的 image_feat.csv 仍在各人实验树的 data/(gitignore)。若多人复现 HE-fusion,应把该 csv 也放进对应 /srv/datasets/DLPFC/<slice>/


磁盘与卫生(补工作站指南)

df -h / 长期在 85% 以上时,先查自己的 home,再查是否有人把数据集复制进了项目目录。

du -sh ~
du -sh /srv/datasets
# 项目里若 data/ 不是软链而是实体拷贝,应删拷贝、改链到 /srv/datasets

仍应清理:不用的 conda 环境、pip/conda 缓存、过期 checkpoint。
不应再把「大型公共数据集用完就删」当成默认动作——公共基准应进 /srv/datasets 留作组内复现。


检查清单

交接或开新实验前过一遍:

  • 原始数据在 /srv/datasets/<公开名>,且 users 组可读
  • 脚本默认路径不再出现 /home/<某个具体用户>
  • 仓库在 research/ 下,.gitignore 排除了 data/venv/大 npy
  • 各人 home 里只有软链 + 自己的 venv + results
  • 长任务在 tmux 里,GPU 使用前看过 nvidia-smi / Lark
  • 受许可数据没有被推进 git

联系

数据共享盘结构变更、需要 sudo 建新挂载点,或要把 gated 数据扩进 /srv/datasets,联系管理员 (chenx),并在 Lark @全体 说一声,避免两人同时 mv 同一份数据。

最后更新:2026-09-04  |  维护人:chenx