本文是 科研服务器工作站使用指南 的实验侧补充,专门约定:数据怎么共享、路径怎么写、仓库放哪里、怎样把实验交给下一位同学继续跑。登录、GPU 礼仪、conda、tmux、代理仍以工作站指南为准。
为什么要单独写这一条
工作站家目录默认是 750(drwxr-x---)。别人进不了 /home/你的用户名。把 Visium、HEST 等原始数据放在自己 home 里再 symlink,看起来本机能跑,组里下一个人完全读不到。互相再拷一份又会吃掉本就紧张的 1.8 TB NVMe。
因此约定三句话:
- 原始数据只留一份,放进全员可读的
/srv/datasets。 - 代码进 Gitea 的
research组织,不要把实验室现场推到公开 GitHub(除非论文代码本来就该公开)。 - Python 环境、训练日志、
results/留在各人 home,不要共享 venv。
三层放置
| 放哪 | 放什么 | 谁能写 | 谁能读 |
|---|---|---|---|
/srv/datasets/(别名 /server/datasets/) |
原始或已抽取的公共数据:Visium h5、空间坐标、HEST metadata/patches/st |
users 组(新建文件继承组权限) |
全机账号 |
Gitea research/<项目> |
代码、配置、论文用表格/图、实验说明 | 仓库协作者 | research 成员 |
/home/<你>/<项目>/ |
.venv、results/、日志、自己的 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,那等于公开家目录。 - 不要共享
.venv或outputs/。 - 不要为了「交给同学」再复制一份 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/某项目」发给对方是不够的,她进不去。
正确交接:
- 原始数据已在
/srv/datasets(按上一节捐好)。 - 代码在
research/<项目>,对方已是组织成员或协作者。 - 她在 自己的 home
git clone,按「项目目录怎么搭」自建 venv、自链数据。 - 方法产物(
image_feat.csv、已发表的results/表)若还需要,放到共享盘或让她从仓库已提交的 json/图继续,而不是拷整个 11 G 工作树。 - 冒烟:对方用自己的环境跑 2 epoch 或
read_visium能读到/srv/datasets即算交接完成。 - 你这边删掉重复的实验克隆,避免两套现场。
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