scvi-tools Deep Learning Skill
This skill provides guidance for deep learning-based single-cell analysis using scvi-tools, the leading framework for probabilistic models in single-cell genomics.
How to Use This Skill
- Identify the appropriate workflow from the model/workflow tables below
- Read the corresponding reference file for detailed steps and code
- Use scripts in
scripts/ to avoid rewriting common code
- For installation or GPU issues, consult
references/environment_setup.md
- For debugging, consult
references/troubleshooting.md
When to Use This Skill
- When scvi-tools, scVI, scANVI, or related models are mentioned
- When deep learning-based batch correction or integration is needed
- When working with multi-modal data (CITE-seq, multiome)
- When reference mapping or label transfer is required
- When analyzing ATAC-seq or spatial transcriptomics data
- When learning latent representations of single-cell data
Model Selection Guide
| Data Type |
Model |
Primary Use Case |
| scRNA-seq |
scVI |
Unsupervised integration, DE, imputation |
| scRNA-seq + labels |
scANVI |
Label transfer, semi-supervised integration |
| CITE-seq (RNA+protein) |
totalVI |
Multi-modal integration, protein denoising |
| scATAC-seq |
PeakVI |
Chromatin accessibility analysis |
| Multiome (RNA+ATAC) |
MultiVI |
Joint modality analysis |
| Spatial + scRNA reference |
DestVI |
Cell type deconvolution |
| RNA velocity |
veloVI |
Transcriptional dynamics |
| Cross-technology |
sysVI |
System-level batch correction |
Workflow Reference Files
| Workflow |
Reference File |
Description |
| Environment Setup |
references/environment_setup.md |
Installation, GPU, version info |
| Data Preparation |
references/data_preparation.md |
Formatting data for any model |
| scRNA Integration |
references/scrna_integration.md |
scVI/scANVI batch correction |
| ATAC-seq Analysis |
references/atac_peakvi.md |
PeakVI for accessibility |
| CITE-seq Analysis |
references/citeseq_totalvi.md |
totalVI for protein+RNA |
| Multiome Analysis |
references/multiome_multivi.md |
MultiVI for RNA+ATAC |
| Spatial Deconvolution |
references/spatial_deconvolution.md |
DestVI spatial analysis |
| Label Transfer |
references/label_transfer.md |
scANVI reference mapping |
| scArches Mapping |
references/scarches_mapping.md |
Query-to-reference mapping |
| Batch Correction |
references/batch_correction_sysvi.md |
Advanced batch methods |
| RNA Velocity |
references/rna_velocity_velovi.md |
veloVI dynamics |
| Troubleshooting |
references/troubleshooting.md |
Common issues and solutions |
CLI Scripts
Modular scripts for common workflows. Chain together or modify as needed.
Pipeline Scripts
| Script |
Purpose |
Usage |
prepare_data.py |
QC, filter, HVG selection |
python scripts/prepare_data.py raw.h5ad prepared.h5ad --batch-key batch |
train_model.py |
Train any scvi-tools model |
python scripts/train_model.py prepared.h5ad results/ --model scvi |
cluster_embed.py |
Neighbors, UMAP, Leiden |
python scripts/cluster_embed.py adata.h5ad results/ |
differential_expression.py |
DE analysis |
python scripts/differential_expression.py model/ adata.h5ad de.csv --groupby leiden |
transfer_labels.py |
Label transfer with scANVI |
python scripts/transfer_labels.py ref_model/ query.h5ad results/ |
integrate_datasets.py |
Multi-dataset integration |
python scripts/integrate_datasets.py results/ data1.h5ad data2.h5ad |
validate_adata.py |
Check data compatibility |
python scripts/validate_adata.py data.h5ad --batch-key batch |
Example Workflow
# 1. Validate input data
python scripts/validate_adata.py raw.h5ad --batch-key batch --suggest
# 2. Prepare data (QC, HVG selection)
python scripts/prepare_data.py raw.h5ad prepared.h5ad --batch-key batch --n-hvgs 2000
# 3. Train model
python scripts/train_model.py prepared.h5ad results/ --model scvi --batch-key batch
# 4. Cluster and visualize
python scripts/cluster_embed.py results/adata_trained.h5ad results/ --resolution 0.8
# 5. Differential expression
python scripts/differential_expression.py results/model results/adata_clustered.h5ad results/de.csv --groupby leiden
Python Utilities
The scripts/model_utils.py provides importable functions for custom workflows:
| Function |
Purpose |
prepare_adata() |
Data preparation (QC, HVG, layer setup) |
train_scvi() |
Train scVI or scANVI |
evaluate_integration() |
Compute integration metrics |
get_marker_genes() |
Extract DE markers |
save_results() |
Save model, data, plots |
auto_select_model() |
Suggest best model |
quick_clustering() |
Neighbors + UMAP + Leiden |
Critical Requirements
Raw counts required: scvi-tools models require integer count data
adata.layers["counts"] = adata.X.copy() # Before normalization
scvi.model.SCVI.setup_anndata(adata, layer="counts")
HVG selection: Use 2000-4000 highly variable genes
sc.pp.highly_variable_genes(adata, n_top_genes=2000, batch_key="batch", layer="counts", flavor="seurat_v3")
adata = adata[:, adata.var['highly_variable']].copy()
Batch information: Specify batch_key for integration
scvi.model.SCVI.setup_anndata(adata, layer="counts", batch_key="batch")
Quick Decision Tree
Need to integrate scRNA-seq data?
├── Have cell type labels? → scANVI (references/label_transfer.md)
└── No labels? → scVI (references/scrna_integration.md)
Have multi-modal data?
├── CITE-seq (RNA + protein)? → totalVI (references/citeseq_totalvi.md)
├── Multiome (RNA + ATAC)? → MultiVI (references/multiome_multivi.md)
└── scATAC-seq only? → PeakVI (references/atac_peakvi.md)
Have spatial data?
└── Need cell type deconvolution? → DestVI (references/spatial_deconvolution.md)
Have pre-trained reference model?
└── Map query to reference? → scArches (references/scarches_mapping.md)
Need RNA velocity?
└── veloVI (references/rna_velocity_velovi.md)
Strong cross-technology batch effects?
└── sysVI (references/batch_correction_sysvi.md)
Key Resources
1---2name: scvi-tools-23description: Deep learning for single-cell analysis using scvi-tools. This skill should be used when users need (1) data integration and batch correction with scVI/scANVI, (2) ATAC-seq analysis with PeakVI, (3) CITE-seq multi-modal analysis with totalVI, (4) multiome RNA+ATAC analysis with MultiVI, (5) spatial transcriptomics deconvolution with DestVI, (6) label transfer and reference mapping with scANVI/scArches, (7) RNA velocity with veloVI, or (8) any deep learning-based single-cell method. Triggers include mentions of scVI, scANVI, totalVI, PeakVI, MultiVI, DestVI, veloVI, sysVI, scArches, variational autoencoder, VAE, batch correction, data integration, multi-modal, CITE-seq, multiome, reference mapping, latent space.4---5# scvi-tools Deep Learning Skill67This skill provides guidance for deep learning-based single-cell analysis using scvi-tools, the leading framework for probabilistic models in single-cell genomics.89## How to Use This Skill10111. Identify the appropriate workflow from the model/workflow tables below122. Read the corresponding reference file for detailed steps and code133. Use scripts in `scripts/` to avoid rewriting common code144. For installation or GPU issues, consult `references/environment_setup.md`155. For debugging, consult `references/troubleshooting.md`1617## When to Use This Skill1819- When scvi-tools, scVI, scANVI, or related models are mentioned20- When deep learning-based batch correction or integration is needed21- When working with multi-modal data (CITE-seq, multiome)22- When reference mapping or label transfer is required23- When analyzing ATAC-seq or spatial transcriptomics data24- When learning latent representations of single-cell data2526## Model Selection Guide2728| Data Type | Model | Primary Use Case |29|-----------|-------|------------------|30| scRNA-seq | **scVI** | Unsupervised integration, DE, imputation |31| scRNA-seq + labels | **scANVI** | Label transfer, semi-supervised integration |32| CITE-seq (RNA+protein) | **totalVI** | Multi-modal integration, protein denoising |33| scATAC-seq | **PeakVI** | Chromatin accessibility analysis |34| Multiome (RNA+ATAC) | **MultiVI** | Joint modality analysis |35| Spatial + scRNA reference | **DestVI** | Cell type deconvolution |36| RNA velocity | **veloVI** | Transcriptional dynamics |37| Cross-technology | **sysVI** | System-level batch correction |3839## Workflow Reference Files4041| Workflow | Reference File | Description |42|----------|---------------|-------------|43| Environment Setup | `references/environment_setup.md` | Installation, GPU, version info |44| Data Preparation | `references/data_preparation.md` | Formatting data for any model |45| scRNA Integration | `references/scrna_integration.md` | scVI/scANVI batch correction |46| ATAC-seq Analysis | `references/atac_peakvi.md` | PeakVI for accessibility |47| CITE-seq Analysis | `references/citeseq_totalvi.md` | totalVI for protein+RNA |48| Multiome Analysis | `references/multiome_multivi.md` | MultiVI for RNA+ATAC |49| Spatial Deconvolution | `references/spatial_deconvolution.md` | DestVI spatial analysis |50| Label Transfer | `references/label_transfer.md` | scANVI reference mapping |51| scArches Mapping | `references/scarches_mapping.md` | Query-to-reference mapping |52| Batch Correction | `references/batch_correction_sysvi.md` | Advanced batch methods |53| RNA Velocity | `references/rna_velocity_velovi.md` | veloVI dynamics |54| Troubleshooting | `references/troubleshooting.md` | Common issues and solutions |5556## CLI Scripts5758Modular scripts for common workflows. Chain together or modify as needed.5960### Pipeline Scripts6162| Script | Purpose | Usage |63|--------|---------|-------|64| `prepare_data.py` | QC, filter, HVG selection | `python scripts/prepare_data.py raw.h5ad prepared.h5ad --batch-key batch` |65| `train_model.py` | Train any scvi-tools model | `python scripts/train_model.py prepared.h5ad results/ --model scvi` |66| `cluster_embed.py` | Neighbors, UMAP, Leiden | `python scripts/cluster_embed.py adata.h5ad results/` |67| `differential_expression.py` | DE analysis | `python scripts/differential_expression.py model/ adata.h5ad de.csv --groupby leiden` |68| `transfer_labels.py` | Label transfer with scANVI | `python scripts/transfer_labels.py ref_model/ query.h5ad results/` |69| `integrate_datasets.py` | Multi-dataset integration | `python scripts/integrate_datasets.py results/ data1.h5ad data2.h5ad` |70| `validate_adata.py` | Check data compatibility | `python scripts/validate_adata.py data.h5ad --batch-key batch` |7172### Example Workflow7374```bash75# 1. Validate input data76python scripts/validate_adata.py raw.h5ad --batch-key batch --suggest7778# 2. Prepare data (QC, HVG selection)79python scripts/prepare_data.py raw.h5ad prepared.h5ad --batch-key batch --n-hvgs 20008081# 3. Train model82python scripts/train_model.py prepared.h5ad results/ --model scvi --batch-key batch8384# 4. Cluster and visualize85python scripts/cluster_embed.py results/adata_trained.h5ad results/ --resolution 0.88687# 5. Differential expression88python scripts/differential_expression.py results/model results/adata_clustered.h5ad results/de.csv --groupby leiden89```9091### Python Utilities9293The `scripts/model_utils.py` provides importable functions for custom workflows:9495| Function | Purpose |96|----------|---------|97| `prepare_adata()` | Data preparation (QC, HVG, layer setup) |98| `train_scvi()` | Train scVI or scANVI |99| `evaluate_integration()` | Compute integration metrics |100| `get_marker_genes()` | Extract DE markers |101| `save_results()` | Save model, data, plots |102| `auto_select_model()` | Suggest best model |103| `quick_clustering()` | Neighbors + UMAP + Leiden |104105## Critical Requirements1061071. **Raw counts required**: scvi-tools models require integer count data108 ```python109 adata.layers["counts"] = adata.X.copy() # Before normalization110 scvi.model.SCVI.setup_anndata(adata, layer="counts")111 ```1121132. **HVG selection**: Use 2000-4000 highly variable genes114 ```python115 sc.pp.highly_variable_genes(adata, n_top_genes=2000, batch_key="batch", layer="counts", flavor="seurat_v3")116 adata = adata[:, adata.var['highly_variable']].copy()117 ```1181193. **Batch information**: Specify batch_key for integration120 ```python121 scvi.model.SCVI.setup_anndata(adata, layer="counts", batch_key="batch")122 ```123124## Quick Decision Tree125126```127Need to integrate scRNA-seq data?128├── Have cell type labels? → scANVI (references/label_transfer.md)129└── No labels? → scVI (references/scrna_integration.md)130131Have multi-modal data?132├── CITE-seq (RNA + protein)? → totalVI (references/citeseq_totalvi.md)133├── Multiome (RNA + ATAC)? → MultiVI (references/multiome_multivi.md)134└── scATAC-seq only? → PeakVI (references/atac_peakvi.md)135136Have spatial data?137└── Need cell type deconvolution? → DestVI (references/spatial_deconvolution.md)138139Have pre-trained reference model?140└── Map query to reference? → scArches (references/scarches_mapping.md)141142Need RNA velocity?143└── veloVI (references/rna_velocity_velovi.md)144145Strong cross-technology batch effects?146└── sysVI (references/batch_correction_sysvi.md)147```148149## Key Resources150151- [scvi-tools Documentation](https://docs.scvi-tools.org/)152- [scvi-tools Tutorials](https://docs.scvi-tools.org/en/stable/tutorials/index.html)153- [Model Hub](https://huggingface.co/scvi-tools)154- [GitHub Issues](https://github.com/scverse/scvi-tools/issues)