cell2fate流程探索

1. 簡介

cell2fate是一個(gè)用于velocity分析的軟件,相比傳統(tǒng)的scvelo建模方法,能建立更符合生物學(xué)過程的時(shí)序,詳情可閱讀原文:Cell2fate infers RNA velocity modules to improve cell fate prediction | Nature Methods。需要注意的是,該工具剛需GPU進(jìn)行訓(xùn)練,如果你沒有GPU,那就別浪費(fèi)時(shí)間了。

Fig2b

2. 安裝

參考官方文檔:Installation — cell2fate documentation
需要注意的是,在使用pip安裝的時(shí)候,可以考慮使用清華鏡像,參考博客:【Python】設(shè)置pip源為國內(nèi)源及簡單操作 - 愛啦啦 - 博客園

conda create -y -n cell2fate_env python=3.9

conda activate cell2fate_env
pip install git+https://github.com/BayraktarLab/cell2fate

當(dāng)然,如果向通過jupyter notebook進(jìn)行代碼調(diào)試,需要添加本環(huán)境為kernel

conda activate cell2fate_env
pip install ipykernel
python -m ipykernel install --user --name=cell2fate_env --display-name='Environment (cell2fate_env)'

3. 運(yùn)行

3.1 加載包

import cell2fate as c2f
import scanpy as sc
import numpy as np
import matplotlib.pyplot as plt
import os

3.2 導(dǎo)入數(shù)據(jù)

velocity分析需要unspliced及spliced兩種counts,這個(gè)文件可以從bam文件,利用velocyto等工具生成。不同的工具可能對(duì)結(jié)果有一定的影響,參考:Preprocessing choices affect RNA velocity results for droplet scRNA-seq data | PLOS Computational Biology
從bam通過velocyto得到包含spliced及unspliced counts的loom文件過程省略,可以參考velocyto官方教程。
使用R的seurat object,及包含這些細(xì)胞剪切信息的loom文件來生成用于velocity分析的adata對(duì)象,可以參考scvelo官方教程,大致流程如下:

#1. 導(dǎo)入loom
ldata = sc.read(filename.loom, cache=True)
#2. 導(dǎo)入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. 運(yùn)行注意事項(xiàng)。

詳細(xì)的運(yùn)行過程就不贅述了,直接參考官方流程。這里只記錄需要注意的點(diǎn):

4.1 數(shù)據(jù)過濾

對(duì)數(shù)據(jù)的過濾還是可以考慮一下的,如果數(shù)據(jù)過多可能訓(xùn)練時(shí)間會(huì)更長,這個(gè)我沒有具體測試。

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也能訓(xùn)練,但是時(shí)間非常長,我自己測試用上4090能比cpu快15倍以上。cpu需要用5h,4090需要20min。(cpu型號(hào)忘了)。

mod.train()

另外需要注意的是,cell2fate默認(rèn)安裝pytorch=1.11.0,cuda=10.2,如果你的GPU是40系及其以上的話,會(huì)調(diào)用不了。報(bào)錯(cuò)及具體解決方式參考上一篇文章:解決error:CUDA error: no kernel image is available for execution on the device - 簡書

4.3 剛需GPU

adata = mod.export_posterior(adata) #沒有GPU就會(huì)報(bào)錯(cuò)無法繼續(xù)運(yùn)行

4.4 scvelo報(bào)錯(cuò)

運(yùn)行以下代碼的時(shí)候會(huì)調(diào)用scvelo中代碼,此時(shí),如果numpy,pandas環(huán)境沖突,可能會(huì)報(bào)錯(cuò):
"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之前版本的問題,據(jù)說最新版本以及修復(fù)了。社區(qū)里大多通過安裝特定版本的python及其他依賴包來解決,不過jacobrepucciMultiVelo-issues36提到可以修改scvelo的源代碼來解決該問題,我測試了以下的確可行,不過需要重新跑一遍流程,因?yàn)榄h(huán)境中的函數(shù)已經(jīng)加載了。

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行,當(dāng)然,python也會(huì)告訴你具體在哪一行。

待續(xù)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容