Usage Principles#
Import#
import cupyx.scipy.sparse as cpx_sparse
import rapids_singlecell as rsc
import scanpy as sc
Workflow#
The workflow of rapids-singlecell is broadly the same as scanpy’s. For more information, see the tutorials and API documentation.
AnnData setup#
AnnData supports GPU-enabled cupy arrays and sparse matrices.
Rapids-singlecell leverages this capability to perform analyses directly on AnnData objects with cupy arrays.
To get your AnnData object onto the GPU via cupy, you can move X or each layers to a GPU based matrix.
adata.X = cpx_sparse.csr_matrix(adata.X) # Move `.X` to the GPU
adata.X = adata.X.get() # Move `.X` back to the CPU
You can also use rapids_singlecell.get to move arrays and matrices.
rsc.get.anndata_to_GPU(adata) # Move `.X` to the GPU
rsc.get.anndata_to_CPU(adata) # Move `.X` to the CPU
Preprocessing#
The preprocessing can be handled by the functions in pp. They offer accelerated versions of functions within scanpy.pp.
Example:
rsc.pp.highly_variable_genes(
adata,
n_top_genes=5000,
flavor="seurat_v3",
batch_key="PatientNumber",
layer="counts",
)
adata = adata[:, adata.var["highly_variable"]].copy()
rsc.pp.regress_out(adata, keys=["total_counts", "pct_counts_MT"])
rsc.pp.scale(adata, max_value=10)
Tools#
The functions provided in tl are designed as near drop-in replacements for the functions in scanpy.tl, but offer significantly improved performance.
Consequently, you can continue to use scanpy’s plotting API.
Example:
rsc.tl.tsne(adata)
sc.pl.tsne(adata, color="leiden")
Decoupler-GPU#
dcg offers accelerated drop-in replacements for mlm(), ulm(), and aucell():
import decoupler as dc
model = dc.op.resource("PanglaoDB", organism="human")
rsc.dcg.ulm(adata, model, tmin=3)
acts_ulm = dc.pp.get_obsm(adata, key="score_ulm")
sc.pl.umap(acts_ulm, color=["NK cells"], cmap="coolwarm", vcenter=0)
Pertpy-compatible API (use rsc.ptg)#
rapids_singlecell exposes a pertpy-compatible, GPU-accelerated API under rapids_singlecell.ptg like:
from rapids_singlecell import ptg
distance = ptg.Distance(metric="edistance", obsm_key="X_pca")
result = distance.pairwise(adata, groupby="perturbation")
res, res_var = distance.pairwise(
adata, groupby="perturbation", bootstrap=True, n_bootstrap=100, multi_gpu=None
)
Squidpy-compatible API (use rsc.gr)#
rapids_singlecell includes GPU-accelerated implementations of common squidpy workflows under rapids_singlecell.gr like:
rsc.gr.spatial_autocorr(
adata,
connectivity_key="spatial_connectivities",
mode="moran",
n_perms=500,
)
rsc.gr.co_occurrence(adata, cluster_key="labels", interval=50)
rsc.gr.ligrec(adata, cluster_key="labels", n_perms=1000)