1. 简介
cell2fate是一个用于velocity分析的软件,相比传统的scvelo建模方法,能建立更符合生物学过程的时序,详情可阅读原文:Cell2fate infers RNA velocity modules to improve cell fate prediction | Nature Methods。需要注意的是,该工具刚需GPU进行训练,如果你没有GPU,那就别浪费时间了。
2. 安装
参考官方文档:Installation — cell2fate documentation
需要注意的是,在使用pip安装的时候,可以考虑使用清华镜像,参考博客:【Python】设置pip源为国内源及简单操作 - 爱啦啦 - 博客园
conda create -y -n cell2fate_env python=3.9
conda activate cell2fate_env
pip install git+https://github.com/BayraktarLab/cell2fate
当然,如果向通过jupyter notebook进行代码调试,需要添加本环境为kernel
conda activate cell2fate_env
pip install ipykernel
python -m ipykernel install --user --name=cell2fate_env --display-name='Environment (cell2fate_env)'
3. 运行
3.1 加载包
import cell2fate as c2f
import scanpy as sc
import numpy as np
import matplotlib.pyplot as plt
import os
3.2 导入数据
velocity分析需要unspliced及spliced两种counts,这个文件可以从bam文件,利用velocyto等工具生成。不同的工具可能对结果有一定的影响,参考:Preprocessing choices affect RNA velocity results for droplet scRNA-seq data | PLOS Computational Biology
从bam通过velocyto得到包含spliced及unspliced counts的loom文件过程省略,可以参考velocyto官方教程。
使用R的seurat object,及包含这些细胞剪切信息的loom文件来生成用于velocity分析的adata对象,可以参考scvelo官方教程,大致流程如下:
#1. 导入loom
ldata = sc.read(filename.loom, cache=True)
#2. 导入adata
#2.1 在R中将seurat object先保存为h5ad:
SeuratDisk::SaveH5Seurat(seurat_obj, filename = h5Seurat_filename)
SeuratDisk::Convert(h5Seurat_filename, dest = "h5ad", overwrite = T)
#2.2 读入adata
adata = sc.read(h5ad_filename, cache=True)
#2.3 Merge
adata = scv.utils.merge(adata, ldata)
4. 运行注意事项。
详细的运行过程就不赘述了,直接参考官方流程。这里只记录需要注意的点:
4.1 数据过滤
对数据的过滤还是可以考虑一下的,如果数据过多可能训练时间会更长,这个我没有具体测试。
adata = c2f.utils.get_training_data(adata, cells_per_cluster = 10**5, cluster_column = 'clusters',
remove_clusters = clusters_to_remove,
min_shared_counts = 20, n_var_genes= 3000)
4.2 mod.train
不刚需GPU,CPU也能训练,但是时间非常长,我自己测试用上4090能比cpu快15倍以上。cpu需要用5h,4090需要20min。(cpu型号忘了)。
mod.train()
另外需要注意的是,cell2fate默认安装pytorch=1.11.0,cuda=10.2,如果你的GPU是40系及其以上的话,会调用不了。报错及具体解决方式参考上一篇文章:解决error:CUDA error: no kernel image is available for execution on the device - 简书
4.3 刚需GPU
adata = mod.export_posterior(adata) #没有GPU就会报错无法继续运行
4.4 scvelo报错
运行以下代码的时候会调用scvelo中代码,此时,如果numpy,pandas环境冲突,可能会报错:
"ValueError: setting an array element with a sequence. The requested array has an inhomogeneous shape after 2 dimensions. The detected shape was (1, 4) + inhomogeneous part."
这也是scvelo之前版本的问题,据说最新版本以及修复了。社区里大多通过安装特定版本的python及其他依赖包来解决,不过jacobrepucci在MultiVelo-issues36提到可以修改scvelo的源代码来解决该问题,我测试了以下的确可行,不过需要重新跑一遍流程,因为环境中的函数已经加载了。
mod.compute_and_plot_total_velocity_scvelo(adata, save = results_path + data_name + 'total_velocity_plots.png', delete = False)
修改源码方式如下:
Alternatively, you could edit the local scvelo code so that the line
res = np.array(res) if as_array else res
in scvelo/core/_parallelize.py is insteadres = np.array(res, dtype=object) if as_array else res
在我的scvelo中,位于_parallelize.py的第138行,当然,python也会告诉你具体在哪一行。