cell2fate流程探索

1. 简介

cell2fate是一个用于velocity分析的软件,相比传统的scvelo建模方法,能建立更符合生物学过程的时序,详情可阅读原文:Cell2fate infers RNA velocity modules to improve cell fate prediction | Nature Methods。需要注意的是,该工具刚需GPU进行训练,如果你没有GPU,那就别浪费时间了。

Fig2b

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及其他依赖包来解决,不过jacobrepucciMultiVelo-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 instead res = np.array(res, dtype=object) if as_array else res

在我的scvelo中,位于_parallelize.py的第138行,当然,python也会告诉你具体在哪一行。

待续

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容