scGPT
模型介绍
scGPT(single-cell Generative Pre-trained Transformer)是由多伦多大学 Bo Wang 团队研发的单细胞组学基础模型。模型在超过 3300 万个细胞的单细胞 RNA 测序数据上预训练,通过基因级 Token 化与生成式预训练学习细胞与基因的通用表征,可迁移到细胞类型注释、批次整合、多组学整合、扰动预测等下游任务。
论文:scGPT: toward building a foundation model for single-cell multi-omics using generative AI
https://www.nature.com/articles/s41592-024-02201-0
OneScience 完成了 scGPT 在 GPU/DCU 上的移植适配与合入,本仓库提供其中的细胞嵌入推理与细胞类型注释微调能力。
模型描述
scGPT 将基因表达矩阵转换为基因 Token 序列,以 Transformer 为主干,通过掩码值预测(MVC)、细胞嵌入对比(CCE)等生成式目标在大规模单细胞数据上预训练,输出细胞与基因两个层级的通用表征,并可挂接下游任务头(如细胞类型分类 CLS)进行微调。
本仓库的模型结构位于 model/ 目录,为自包含实现;数据管线(datapipes)、评估指标(metrics)与训练/推理工具(utils)通过环境中已安装的 onescience 包提供。
适用场景
| 场景 | 说明 |
|---|---|
| 细胞嵌入推理 | 输入单细胞 AnnData(h5ad),输出 obsm["X_scGPT"] 细胞嵌入 |
| 细胞类型注释微调 | 在带标签的单细胞数据上微调,输出 best_model.pt、args.json、vocab.json、metrics.json |
| 本地快速验证 | 使用少量细胞(--max-cells)快速验证数据读取、模型加载、训练与推理全链路 |
| ModelScope/OneCode 运行 | 作为独立模型包下载后直接安装依赖并运行脚本 |
使用说明
1. OneCode 使用
可通过 OneCode 在线环境体验智能化一键式 AI4S 编程:
2. 手动安装使用
硬件要求
- 推荐使用 GPU 或 DCU 运行。
- CPU 可以用于导入和小配置连通性验证,完整训练和推理速度较慢。
- DCU 用户需要预先安装 DTK,建议使用 DTK 25.04.2 以上版本或与当前集群匹配的 OneScience 推荐版本。
下载模型包
modelscope download --model OneScience/scGPT --local_dir ./scGPT
cd scGPT
安装运行环境
DCU环境
# 请首先激活DTK及CONDA
conda create -n onescience311 python=3.11 -y
conda activate onescience311
pip install -r requirements.txt
pip install onescience[bio-dcu] -i http://mirrors.onescience.ai:3141/pypi/simple/ --trusted-host mirrors.onescience.ai
权重与数据准备
权重
将预训练模型目录(包含 args.json、best_model.pt、vocab.json)放到 weight/scGPT_human,或通过环境变量 SCGPT_MODEL_DIR 指定其它位置。
数据
将 demo_test.h5ad、demo_train.h5ad 放到 data/annotation_pancreas/,或通过以下环境变量覆盖具体位置,无需修改脚本:
| 环境变量 | 默认值 | 说明 |
|---|---|---|
SCGPT_MODEL_DIR |
weight/scGPT_human |
包含 args.json、best_model.pt、vocab.json 的模型目录 |
SCGPT_DATASET_ROOT |
data |
数据集根目录 |
SCGPT_INFERENCE_DATA |
data/annotation_pancreas/demo_test.h5ad |
嵌入推理输入 |
SCGPT_FINETUNE_DATA |
data/annotation_pancreas/demo_train.h5ad |
微调输入 |
SCGPT_OUTPUT_ROOT |
outputs |
输出根目录 |
SCGPT_DEVICE |
cuda |
PyTorch 计算设备 |
细胞嵌入推理
bash scripts/infer.sh
默认输出文件为 outputs/pancreas_embeddings.h5ad,归一化后的细胞嵌入保存在 obsm["X_scGPT"] 中。可以在 Bash 命令后追加 Python 脚本支持的参数。例如,仅对 64 个细胞执行推理:
bash scripts/infer.sh \
--max-cells 64 \
--max-length 256 \
--batch-size 8 \
--output outputs/pancreas_embeddings_64.h5ad
细胞类型注释微调
共享胰腺数据集使用 Celltype 作为标签列,使用 Gene Symbol 作为基因符号列,脚本已将其设为默认值:
bash scripts/finetune.sh \
--epochs 5 \
--batch-size 32
默认输出目录为 outputs/pancreas_finetune,其中包含:
best_model.pt:验证指标最优的模型权重。args.json:模型配置、标签名称和数据处理信息。vocab.json:模型使用的基因词表。metrics.json:验证集指标。
进行较长时间的训练前,可以先运行以下短流程验证完整链路:
bash scripts/finetune.sh \
--max-cells 64 \
--n-hvg 200 \
--max-length 201 \
--batch-size 8 \
--epochs 1 \
--max-steps 2 \
--freeze-encoder \
--output-dir outputs/pancreas_finetune_64
对于元数据字段不同的数据集,可以使用 --gene-column 或 --label-column 指定相应列。未指定基因列时,程序会依次检查 Gene Symbol、feature_name、gene_name、gene_symbols 和 symbol,均不存在时使用 AnnData 的 var_names。可以使用 --data-is-raw 或 --data-is-normalized 显式指定表达矩阵为原始计数或已归一化数据。
单卡与多卡运行
推理和微调入口会通过 torch.cuda.device_count() 自动检测可见计算设备数量:单卡直接运行,多卡自动使用 torchrun 每卡一个进程。
- 多卡推理按连续的细胞区间将数据分配给各张卡,最后由主进程按原始顺序合并嵌入。
- 多卡微调使用 DistributedDataParallel 和 DistributedSampler,
--batch-size表示每张卡的批量大小(例如 8 张卡且--batch-size 4时,有效全局批量大小为 32),--max-steps表示所有 rank 同步执行的优化步数。
注意力后端
默认使用 PyTorch 注意力实现,以保证检查点兼容性。只有在确认已安装的 Flash Attention 扩展与当前运行时匹配时,才建议设置以下环境变量并为嵌入推理传入 --use-fast-transformer:
export ONESCIENCE_SCGPT_ENABLE_FLASH_ATTN=1
bash scripts/infer.sh --use-fast-transformer
微调示例默认使用 PyTorch 注意力实现。
OneScience 官方信息
| 平台 | OneScience 主仓库 | Skills 仓库 |
|---|---|---|
| Gitee | https://gitee.com/onescience-ai/onescience | https://gitee.com/onescience-ai/oneskills |
| GitHub | https://github.com/onescience-ai/OneScience | https://github.com/onescience-ai/oneskills |
引用与许可证
-
scGPT 原始代码使用 MIT License(详见
model/LICENSE.scgpt)。本仓库保留来源说明,并面向 OneScience ModelScope 自动运行场景进行整理。 -
如果在科研工作中使用 scGPT 结果,建议引用:
@article{cui2024scgpt,
title = {scGPT: toward building a foundation model for single-cell multi-omics using generative AI},
author = {Cui, Haotian and Wang, Chloe and Maan, Hassaan and Pang, Kuan and Luo, Fengning and Duan, Nan and Wang, Bo},
journal = {Nature Methods},
year = {2024},
doi = {10.1038/s41592-024-02201-0},
}