scGPT 完整教學

Repository: https://github.com/bowang-lab/scGPT Stars: 1577 | Tags: single-cell, foundation-model License: MIT | Language: Python (Jupyter Notebook) | Version: 0.2.5 Documentation: https://scgpt.readthedocs.io/en/latest/ Paper: scGPT: Towards Building a Foundation Model for Single-Cell Multi-omics Using Generative AI (Nature Methods, 2024)

2. 核心架構

2.1 整體架構圖


flowchart TB
    subgraph INPUT["輸入層 Input Layer"]
        RAW["scRNA-seq / scATAC-seq
Raw Count Matrix"] PREP["Preprocessor
normalize + log1p + binning"] RAW --> PREP end subgraph TOKENIZE["Token 化 Tokenization"] GV["GeneVocab
基因詞彙表
gene name → token ID"] GE["GeneEncoder
Gene Embedding"] VE["ValueEncoder
Expression Value Embedding"] BE["BatchEncoder
Batch Label Embedding
(optional)"] GV --> GE PREP --> VE PREP --> GV end subgraph TRANSFORMER["Transformer Backbone"] EMB["Gene Emb + Value Emb + Batch Emb
→ Combined Embedding"] CLS["[CLS] Token
Cell-level Representation"] LAYERS["N × Transformer Encoder Layer
(Flash Attention optional)"] DSBN["DSBN
Domain-Specific
Batch Normalization"] GE --> EMB VE --> EMB BE --> EMB CLS --> LAYERS EMB --> LAYERS DSBN -.-> LAYERS end subgraph HEADS["下游任務頭 Task Heads"] MVC["MVC Head
Masked Value
Prediction"] DAB["DAB Head
Domain Adaptation
via Batch Discriminator"] CLF["Classification Head
Cell Type Annotation"] GRN_H["GRN Head
Attention-based
Gene Regulation"] PERT["Perturbation Head
Gene Perturbation
Prediction"] end LAYERS --> MVC LAYERS --> DAB LAYERS --> CLF LAYERS --> GRN_H LAYERS --> PERT style INPUT fill:#e8f4f8,stroke:#2196F3 style TOKENIZE fill:#fff3e0,stroke:#FF9800 style TRANSFORMER fill:#f3e5f5,stroke:#9C27B0 style HEADS fill:#e8f5e9,stroke:#4CAF50

2.2 關鍵設計決策

基因作為 Token (Gene-as-Token):與 NLP 中的 word token 類似,scGPT 將每個基因視為一個 token。每個細胞的基因表達譜就是一條「句子」,其中 token 順序由非零基因的排列決定。

雙重編碼 (Dual Encoding)

  • GeneEncoder:將基因 ID 映射為 d_model 維向量(透過 nn.Embedding
  • ValueEncoder:將基因表達值映射為同維度向量(支援 continuous / category / scaling 三種模式)
  • 兩者相加後輸入 Transformer

CLS Token:插入於序列開頭的特殊 token,其最終表徵即為整個細胞的嵌入向量 (Cell Embedding)。

訓練目標 (Training Objectives)

目標縮寫說明
Masked Value PredictionMVC遮蔽部分基因的表達值並預測,類似 BERT 的 MLM
Elastic Cell SimilarityECS鼓勵同類型細胞的嵌入彼此靠近
Domain Adaptation by BatchDAB對抗式訓練消除批次效應
Generative TrainingGEN自回歸方式逐基因生成表達值

2.3 檔案結構

 1scGPT/
 2├── scgpt/
 3│   ├── __init__.py              # v0.2.5, 匯出核心模組
 4│   ├── model/
 5│   │   ├── model.py             # TransformerModel 主模型
 6│   │   ├── generation_model.py  # TransformerGenerator 擾動預測
 7│   │   ├── multiomic_model.py   # MultiOmicTransformerModel 多體學
 8│   │   ├── flash_attn_compat.py # Flash Attention 相容層
 9│   │   ├── dsbn.py              # Domain-Specific BatchNorm
10│   │   └── grad_reverse.py      # Gradient Reversal Layer
11│   ├── tokenizer/
12│   │   ├── gene_tokenizer.py    # GeneVocab 基因詞彙表
13│   │   ├── default_gene_vocab.json
14│   │   └── default_census_vocab.json
15│   ├── tasks/
16│   │   ├── cell_emb.py          # Cell Embedding 推論
17│   │   └── grn.py               # GRN 推斷 (GeneEmbedding)
18│   ├── scbank/                  # 資料管理模組
19│   ├── preprocess.py            # Preprocessor 資料前處理
20│   ├── loss.py                  # masked_mse_loss 等損失函數
21│   ├── trainer.py               # 訓練迴圈
22│   ├── data_collator.py         # DataCollator
23│   └── data_sampler.py          # SubsetsBatchSampler
24├── tutorials/                   # 7 個 Jupyter Notebook 教學
25│   ├── Tutorial_Integration.ipynb
26│   ├── Tutorial_Annotation.ipynb
27│   ├── Tutorial_Perturbation.ipynb
28│   ├── Tutorial_GRN.ipynb
29│   ├── Tutorial_Attention_GRN.ipynb
30│   ├── Tutorial_Reference_Mapping.ipynb
31│   ├── Tutorial_Multiomics.ipynb
32│   └── zero-shot/               # Zero-shot 應用教學
33├── examples/
34│   └── finetune_integration.py  # 批次整合微調範例
35├── data/
36│   └── cellxgene/               # CellXGene 資料下載腳本
37└── docs/                        # ReadTheDocs 文件

3. 安裝與設定

3.1 環境需求

需求最低版本建議版本
Python>= 3.7.133.10+
PyTorch>= 1.13.02.2+
CUDA11.7+12.x(若使用 Flash Attention)
R>= 3.6.14.x(部分評估指標需要)
GPU 記憶體8 GB16+ GB(全模型微調)

3.2 使用 uv 安裝(推薦)

 1# 建立隔離環境
 2uv venv scgpt-env --python 3.10
 3source scgpt-env/bin/activate
 4
 5# 安裝 scGPT
 6uv pip install scgpt
 7
 8# [可選] 安裝 Flash Attention 2(需 CUDA 12.x + Ampere 以上 GPU)
 9uv pip install "flash-attn>=2.8.0" einops
10
11# [可選] 安裝 wandb 用於訓練監控
12uv pip install wandb
13
14# [可選] 安裝 FAISS 用於 Reference Mapping
15uv pip install faiss-gpu  # 或 faiss-cpu

3.3 從原始碼安裝(開發用)

1git clone https://github.com/bowang-lab/scGPT.git
2cd scGPT
3uv venv .venv --python 3.10
4source .venv/bin/activate
5uv pip install -e ".[dev]"

3.4 下載預訓練模型

1# 建議下載 whole-human 模型(最通用)
2mkdir -p save/scGPT_human
3# 從 Google Drive 下載 checkpoint 資料夾:
4# https://drive.google.com/drive/folders/1oWh_-ZRdhtoGQ2Fw24HP41FgLoomVo-y
5
6# 下載後應有以下檔案:
7ls save/scGPT_human/
8# best_model.pt  args.json  vocab.json

注意:每個 checkpoint 資料夾內含 vocab.json(基因名稱到 ID 的映射)。若需要 ENSEMBL ID 轉換,可使用官方提供的 gene_info.csv

3.5 驗證安裝

1import scgpt
2print(f"scGPT version: {scgpt.__version__}")
3
4import torch
5print(f"PyTorch: {torch.__version__}, CUDA: {torch.cuda.is_available()}")
6
7from scgpt.model import TransformerModel
8from scgpt.tokenizer import GeneVocab
9print("Core modules imported successfully.")

4. 使用方式與程式碼範例

4.1 範例一:Zero-shot Cell Embedding (零樣本細胞嵌入)

此範例展示如何使用預訓練模型直接取得細胞嵌入向量,無需微調。適用於快速探索新資料集。

 1import numpy as np
 2import scanpy as sc
 3import torch
 4from scgpt.tasks.cell_emb import get_batch_cell_embeddings
 5from scgpt.model import TransformerModel
 6from scgpt.tokenizer import GeneVocab
 7from scgpt.utils import load_pretrained
 8
 9# === 1. 載入資料 ===
10adata = sc.datasets.pbmc3k_processed()
11sc.pp.filter_genes(adata, min_cells=3)
12
13# === 2. 載入預訓練模型與詞彙表 ===
14model_dir = "save/scGPT_human"
15vocab = GeneVocab.from_file(f"{model_dir}/vocab.json")
16vocab.set_default_index(vocab["<pad>"])
17
18# 比對基因名稱與詞彙表
19gene_ids_in_vocab = np.array([
20    vocab[gene] if gene in vocab else vocab["<pad>"]
21    for gene in adata.var_names
22])
23adata.var["id_in_vocab"] = gene_ids_in_vocab
24
25# 篩選詞彙表中存在的基因
26valid_genes = adata.var["id_in_vocab"] >= 0
27adata = adata[:, valid_genes].copy()
28
29# === 3. 模型設定 ===
30model_configs = {
31    "embsize": 512,
32    "nhead": 8,
33    "d_hid": 512,
34    "nlayers": 12,
35    "nlayers_cls": 3,
36    "n_cls": 1,
37    "pad_value": -2,
38}
39
40model = TransformerModel(
41    ntoken=len(vocab),
42    d_model=model_configs["embsize"],
43    nhead=model_configs["nhead"],
44    d_hid=model_configs["d_hid"],
45    nlayers=model_configs["nlayers"],
46    nlayers_cls=model_configs["nlayers_cls"],
47    n_cls=model_configs["n_cls"],
48    vocab=vocab,
49    pad_value=model_configs["pad_value"],
50    cell_emb_style="cls",
51)
52
53# 載入預訓練權重
54load_pretrained(model, torch.load(f"{model_dir}/best_model.pt"))
55model.eval()
56device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
57model.to(device)
58
59# === 4. 取得細胞嵌入 ===
60cell_embeddings = get_batch_cell_embeddings(
61    adata,
62    cell_embedding_mode="cls",
63    model=model,
64    vocab=vocab,
65    max_length=1200,
66    batch_size=64,
67    model_configs=model_configs,
68    gene_ids=np.array(adata.var["id_in_vocab"]),
69)
70
71# === 5. 視覺化 ===
72adata.obsm["X_scGPT"] = cell_embeddings
73sc.pp.neighbors(adata, use_rep="X_scGPT")
74sc.tl.umap(adata)
75sc.pl.umap(adata, color="louvain", title="scGPT Zero-shot Embedding")

4.2 範例二:Fine-tuning for Batch Integration (批次整合微調)

此範例展示 scGPT 最核心的使用情境——微調模型以整合來自不同實驗批次的 scRNA-seq 資料。

 1import scanpy as sc
 2import scvi
 3import torch
 4import numpy as np
 5from scgpt.preprocess import Preprocessor
 6from scgpt.model import TransformerModel, AdversarialDiscriminator
 7from scgpt.tokenizer import GeneVocab
 8from scgpt.tokenizer import tokenize_and_pad_batch, random_mask_value
 9from scgpt.loss import masked_mse_loss, criterion_neg_log_bernoulli
10from scgpt.utils import set_seed, eval_scib_metrics
11
12set_seed(42)
13
14# === 1. 載入多批次資料 ===
15adata = scvi.data.pbmc_dataset()  # 含多個批次的 PBMC 資料
16adata.obs["celltype"] = adata.obs["str_labels"].astype("category")
17adata.var = adata.var.set_index("gene_symbols")
18
19# === 2. 前處理 ===
20preprocessor = Preprocessor(
21    use_key="X",
22    filter_gene_by_counts=3,
23    filter_cell_by_counts=False,
24    normalize_total=1e4,
25    log1p=True,
26    subset_hvg=1200,           # 選取 1200 個高變異基因
27    hvg_flavor="seurat_v3",
28    binning=51,                # 離散化為 51 個 bin
29)
30preprocessor(adata, batch_key="batch")
31
32# === 3. 載入詞彙表並建立模型 ===
33model_dir = "save/scGPT_human"
34vocab = GeneVocab.from_file(f"{model_dir}/vocab.json")
35vocab.set_default_index(vocab["<pad>"])
36
37special_tokens = ["<pad>", "<cls>", "<eoc>"]
38for token in special_tokens:
39    if token not in vocab:
40        vocab.append_token(token)
41
42# 比對基因
43gene2idx = {gene: vocab[gene] for gene in adata.var_names if gene in vocab}
44adata = adata[:, list(gene2idx.keys())].copy()
45gene_ids = np.array([gene2idx[g] for g in adata.var_names])
46
47# 建立模型(參數從 checkpoint 的 args.json 讀取)
48model = TransformerModel(
49    ntoken=len(vocab),
50    d_model=512,
51    nhead=8,
52    d_hid=512,
53    nlayers=12,
54    nlayers_cls=3,
55    n_cls=len(adata.obs["batch"].unique()),
56    vocab=vocab,
57    dropout=0.2,
58    pad_value=-2,
59    do_mvc=True,              # 啟用 Masked Value Prediction
60    do_dab=True,              # 啟用 Domain Adaptation
61    use_batch_labels=True,
62    num_batch_labels=len(adata.obs["batch"].unique()),
63    domain_spec_batchnorm="dsbn",
64    input_emb_style="continuous",
65    n_input_bins=51,
66    cell_emb_style="cls",
67    explicit_zero_prob=True,
68    use_fast_transformer=True,
69    fast_transformer_backend="flash",
70    pre_norm=False,
71)
72
73# === 4. 微調訓練(簡化版) ===
74optimizer = torch.optim.Adam(model.parameters(), lr=1e-4)
75scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=2, gamma=0.9)
76
77# 訓練迴圈(此處為概念示意,完整版請見 examples/finetune_integration.py)
78device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
79model.to(device)
80
81for epoch in range(30):
82    model.train()
83    # ... DataLoader, tokenize_and_pad_batch, random_mask_value ...
84    # loss = masked_mse_loss(...) + dab_weight * dab_loss + ecs_loss
85    # loss.backward(); optimizer.step()
86    pass
87
88# === 5. scIB 指標評估 ===
89# results = eval_scib_metrics(adata, embed_key="X_scGPT", ...)

4.3 範例三:Gene Regulatory Network Inference (基因調控網路推斷)

此範例展示如何從 scGPT 的 Attention 權重中萃取 GRN (Gene Regulatory Network; 基因調控網路)。

 1import numpy as np
 2import scanpy as sc
 3from scgpt.tasks.grn import GeneEmbedding
 4
 5# === 1. 假設已完成微調,取得基因嵌入 ===
 6# gene_embeddings_dict 是 {gene_name: embedding_vector} 的字典
 7# 可從微調後模型的 GeneEncoder 權重取得:
 8#   gene_embeddings = model.encoder.embedding.weight.detach().cpu().numpy()
 9#   gene_names = vocab.get_itos()
10#   gene_embeddings_dict = {
11#       gene_names[i]: gene_embeddings[i]
12#       for i in range(len(gene_names))
13#       if gene_names[i] not in special_tokens
14#   }
15
16# 模擬範例資料
17np.random.seed(42)
18gene_names = ["TP53", "BRCA1", "MYC", "CDK4", "RB1", "MDM2", "CDKN2A", "E2F1"]
19gene_embeddings_dict = {
20    gene: np.random.randn(512).astype(np.float32)
21    for gene in gene_names
22}
23
24# === 2. 建立 GeneEmbedding 物件 ===
25ge = GeneEmbedding(gene_embeddings_dict)
26
27# === 3. 計算基因相似度(推斷調控關係) ===
28# 找出與 TP53 最相似的基因
29sim_df = ge.compute_similarities("TP53")
30print(sim_df.head(10))
31
32# === 4. 建立基因嵌入的 AnnData 並聚類 ===
33gdata = ge.get_adata(resolution=5)
34sc.pl.umap(gdata, color="leiden", title="Gene Embedding Clusters (Metagenes)")
35
36# === 5. 視覺化特定 Metagene ===
37ge.plot_metagene(gdata, mg="0", title="Metagene 0: Cell Cycle Regulators")
38
39# === 6. 匯出為 NetworkX 圖(進階) ===
40import networkx as nx
41from sklearn.metrics.pairwise import cosine_similarity
42
43embeddings_matrix = np.array([gene_embeddings_dict[g] for g in gene_names])
44sim_matrix = cosine_similarity(embeddings_matrix)
45
46G = nx.Graph()
47threshold = 0.3  # 相似度閾值
48for i in range(len(gene_names)):
49    for j in range(i + 1, len(gene_names)):
50        if sim_matrix[i, j] > threshold:
51            G.add_edge(gene_names[i], gene_names[j], weight=float(sim_matrix[i, j]))
52
53print(f"GRN edges: {G.number_of_edges()}, nodes: {G.number_of_nodes()}")

5. 在蛋白質設計/基因組模擬生態系中的定位

5.1 Bio-SDG Domain 5 定位

在 Bio-SDG 生態系的 Domain 5「蛋白質設計與基因組模擬」中,scGPT 屬於 B. Genomics & Single-cell Simulation (基因組與單細胞模擬) 子領域的核心工具:

 1Domain 5: 蛋白質設計與基因組模擬
 2├── A. Protein Design & Generation (14 repos)
 3   ├── Language Models: ESM, ProstT5, AbLang, ProGen2
 4   ├── Diffusion: RFdiffusion, Chroma, EvoDiff, SE3-diffusion, ...
 5   └── Antibody: DiffAb, AbLang
 6
 7└── B. Genomics & Single-cell Simulation (8 repos)
 8    ├── scGPT  單細胞基礎模型(本教學)
 9    ├── scvi-tools     機率式單細胞分析框架
10    ├── scgen          單細胞擾動建模
11    ├── splatter       scRNA-seq 模擬
12    ├── HyenaDNA       長序列基因組模型
13    ├── wgsim          全基因組序列模擬
14    ├── biomed-multi-alignment  多體學對齊
15    └── PyFeat         基因組特徵生成

5.2 在藥物開發管線中的角色

管線階段scGPT 貢獻具體應用
WP1 標的識別 (Target ID)從患者 scRNA-seq 中識別疾病特異性細胞亞群Cell Embedding + Annotation 找出腫瘤微環境中的關鍵免疫細胞
WP2 標的驗證 (Target Validation)GRN 推斷揭示標的基因的調控網路Attention-based GRN 顯示 drug target 的上下游訊號
WP3 先導化合物優化 (Lead Optimization)擾動預測評估 drug target 敲除效果Perturbation Prediction 預測 KO/KD 後的轉錄組變化
WP7 生物製劑設計 (Biologics)與蛋白質設計工具互補scGPT 識別的 surface marker → AbLang/DiffAb 設計抗體

5.3 Blue Ocean 機會

  1. 合成單細胞資料生成 (Synthetic scRNA-seq Generation):scGPT 的生成式能力(TransformerGenerator)可產生合成的單細胞表達譜,用於增強訓練資料不足的罕見細胞類型,這在 pre-IND 階段的 patient stratification (患者分層) 特別有價值。

  2. 跨物種遷移學習 (Cross-species Transfer):目前 scGPT 主要在人類資料上預訓練,但其架構可直接擴展至動物實驗資料。這為 pre-IND 的動物試驗到人體試驗的轉譯 (Translation) 提供了計算橋樑。

  3. 多體學藥物反應預測:結合 MultiOmicTransformerModel 與蛋白質語言模型(如 ESM),可建立從基因組到蛋白質組的端到端藥物反應預測管線。


6. 與其他工具的整合

6.1 與 Domain 5 生態系工具的整合

整合對象整合方式用途
scvi-toolsscGPT 依賴 scvi-tools 做為資料載入後端scvi.data.pbmc_dataset() 等標準資料集載入
scgenscGPT Perturbation → scgen 驗證交叉驗證擾動預測結果
splattersplatter 模擬資料 → scGPT 測試在已知 ground truth 的模擬資料上評估 scGPT 準確性
HyenaDNAHyenaDNA 序列特徵 → scGPT 整合基因組序列層級特徵 + 表達量層級特徵的多模態融合
ESM / ProstT5scGPT 標的基因 → 蛋白質結構預測從 GRN 中識別的標的蛋白質進行結構分析
RFdiffusion / DiffAbscGPT 識別 surface marker → 抗體設計表面標記蛋白識別後,設計針對性抗體

6.2 與 scanpy 生態系的整合

scGPT 原生建立在 scanpy/AnnData 之上,所有輸入輸出均使用 AnnData 物件:

 1import scanpy as sc
 2
 3# scGPT 的 cell embedding 存入 adata.obsm
 4adata.obsm["X_scGPT"] = cell_embeddings
 5
 6# 可直接使用 scanpy 的下游分析
 7sc.pp.neighbors(adata, use_rep="X_scGPT")
 8sc.tl.leiden(adata, resolution=0.5)
 9sc.tl.umap(adata)
10sc.tl.rank_genes_groups(adata, "leiden", method="wilcoxon")

6.3 與 AIKT Pipeline 的整合

 1AIKT Pipeline 整合路徑:
 2
 3paper-search (Layer 9)
 4  → 找到相關 scRNA-seq 資料集的 paper
 5  → paper-tutorial (Layer 15) 精讀方法論
 6
 7scGPT 分析
 8  → Cell Embedding / Annotation / GRN
 9  → 結果存為 AnnData (.h5ad)
10
11paper-qa-lite (Layer 10)
12  → 對 scGPT 結果 + paper 做 RAG 問答
13
14graphify (Layer 4)
15  → 從分析程式碼建立知識圖
16
17quarkdown (Layer 7) / kami (Layer 11)
18  → 將分析報告轉為 HTML/PDF 交付物

6.4 與 FAISS 的整合(Reference Mapping)

1import faiss
2
3# 建立 3,300 萬細胞的 FAISS 索引
4# (官方教學:tutorials/build_atlas_index_faiss.py)
5index = faiss.read_index("cellxgene_atlas.index")  # < 1GB 記憶體
6
7# 查詢 10,000 個細胞,GPU 上 < 1 秒
8query_embeddings = cell_embeddings  # shape: (10000, 512)
9distances, indices = index.search(query_embeddings, k=50)

7. 優缺點分析

7.1 優點

面向說明
大規模預訓練3,300 萬細胞的預訓練賦予強大的遷移學習能力,少量樣本即可微調
多任務統一架構同一個 Transformer backbone 支援 embedding / annotation / GRN / perturbation 多種任務
Zero-shot 能力無需微調即可取得有意義的細胞嵌入,適合快速探索
Nature Methods 驗證頂級期刊發表,有充分的 benchmark 數據支撐
豐富的 Model Zoo器官特異性模型(brain / blood / lung / kidney / heart)+ pan-cancer 模型
FAISS Reference Mapping可將查詢細胞映射至 3,300 萬細胞 atlas,效率極高
Flash Attention 支援可選 Flash Attention 加速,大幅降低記憶體消耗
MIT 授權商業友善授權,適合企業內部研發

7.2 缺點與限制

面向說明
預訓練程式碼未公開To-do list 中「Provide the pretraining code with generative attention masking」尚未完成
Flash Attention 安裝困難對 CUDA 版本與 GPU 架構有嚴格要求,安裝常失敗
基因組大小限制序列長度受限於 ~1,200 基因(HVG),無法涵蓋全基因組
人類中心預訓練資料以人類為主,跨物種泛化能力未經充分驗證
Poetry 安裝損壞官方文件指出 poetry 安裝已不同步,僅能用 pip
依賴版本衝突orbax<0.1.8 等特定版本限制可能與其他套件衝突
HuggingFace 整合未完成integrate-huggingface-model 分支仍為 preliminary
文件與程式碼不一致部分 tutorial notebook 可能需要手動調整路徑與參數

7.3 與同類工具的比較

特性scGPTscvi-tools (scVI/scANVI)scgenGeneformer
架構Transformer (GPT-like)VAEVAE + GANTransformer (BERT-like)
預訓練規模3,300 萬細胞無大規模預訓練3,000 萬細胞
主要優勢多任務統一機率建模嚴謹擾動建模基因排序創新
GRN 推斷有(Attention-based)
擾動預測間接支援核心功能
Reference Mapping有(FAISS)有(scArches)
商業授權MITBSD-3MITApache-2.0

7.4 建議使用策略

  • 快速探索:使用 whole-human 模型 + zero-shot embedding,無需微調即可分析新資料集
  • 批次整合:啟用 DSBN + DAB 進行微調,配合 scIB metrics 評估整合品質
  • 標的識別:結合 cell annotation + GRN inference,從 Attention 權重中萃取潛在 drug target
  • 癌症研究:使用 pan-cancer 模型作為微調起點,可更快收斂
  • 生產管線:建議固定 checkpoint 版本、使用 FAISS 建立離線索引,降低推論延遲

一句話總結:scGPT 是首個登上 Nature Methods 的單細胞基礎模型,以 GPT 式 Transformer 在 3,300 萬細胞上預訓練,統一支援 cell embedding、annotation、batch integration、GRN inference 與 perturbation prediction 五大任務,為藥物開發管線的標的識別(WP1-WP2)提供了強大的計算基礎設施。