Skip to main content

SCDL, a Dataset class for Single Cell data.

Project description

Bionemo-scdl: Single Cell Data Loading for Scalable Training of Single Cell Foundation Models.

Package Overview

Bionemo-scdl provides an independent pytorch-compatible dataset class for single cell data with a consistent API. Bionemo-scdl is developed and maintained by NVIDIA. This package can be run independently from bionemo. It improves upon simple AnnData-based dataset classes in the following ways:

  • A consistent API across input formats that is promised to be consistent across package versions.
  • Improved performance when loading large datasets.
  • [Future] Full support for ragged arrays (i.e., datasets with different feature counts; currently only a subset of the API functionality is supported for ragged arrays).
  • Ability to use datasets that are much, much larger than memory.
  • [Future] Support for improved compression.

Bionemo-scdl's API resembles that of AnnData, so code changes are minimal. In most places a simple swap from an attribute to a function is sufficient (i.e., swapping data.n_obs for data.number_of_rows()).

Installation

This package can be installed with

pip install bionemo-scdl

Usage

Getting example data

Here is how to process an example dataset from CellxGene with ~25,000 cells:

Download "https://datasets.cellxgene.cziscience.com/97e96fb1-8caf-4f08-9174-27308eabd4ea.h5ad" to hdf5s/97e96fb1-8caf-4f08-9174-27308eabd4ea.h5ad

Loading a single cell dataset from an H5AD file

from bionemo.scdl.io.single_cell_memmap_dataset import SingleCellMemMapDataset

data = SingleCellMemMapDataset("97e_scmm", "hdf5s/97e96fb1-8caf-4f08-9174-27308eabd4ea.h5ad")

This creates a SingleCellMemMapDataset that is stored at 97e_scmm in large, memory-mapped arrays that enables fast access of datasets larger than the available amount of RAM on a system.

Interrogating single cell datasets and exploring the API

data.number_of_rows()
## 25382

data.number_of_variables()
## [34455]

data.number_of_values()
## 874536810

data.number_nonzero_values()
## 26947275

Saving SCDL (Single Cell Dataloader) datasets to disk

When you open a SCDL dataset, you must choose a path where the backing data structures are stored. However, these structures are not guaranteed to be in a valid serialized state during runtime.

Calling the save method guarantees the on-disk object is in a valid serialized state, at which point the current python process can exit and the object can be loaded by another process later.

data.save()

Loading SCDL datasets from a SCDL archive

When you're ready to reload a SCDL dataset, just pass the path to the serialized data:

reloaded_data = SingleCellMemMapDataset("97e_scmm")

Using SCDL datasets in model training

SCDL implements the required functions of the PyTorch Dataset abstract class. You can use PyTorch-compatible DataLoaders to load batches of data from a SCDL class. With a batch size of 1 this can be run without a collating function. With a batch size greater than 1, there is a collation function (collate_sparse_matrix_batch), that will collate several sparse arrays into the CSR (Compressed Sparse Row) torch tensor format.

from torch.utils.data import DataLoader
from bionemo.scdl.util.torch_dataloader_utils import collate_sparse_matrix_batch

## Mock model: you can remove this and pass the batch to your own model in actual code.
model = lambda x : x

dataloader = DataLoader(data, batch_size=8, shuffle=True, collate_fn=collate_sparse_matrix_batch)
n_epochs = 2
for e in range(n_epochs):
    for batch in dataloader:
        model(batch)

Examples

The examples directory contains various examples for utilizing SCDL.

Converting existing Cell x Gene data to SCDL

To convert existing AnnData files from CellxGene, you can either write your own script using the SCDL API or utilize the convenience script convert_h5ad_to_scdl.

This script crawls the filesystem to recursively find AnnData files (with the h5ad extension) and converts them to a single SingleCellMemMapDataset. Here's an example:

convert_h5ad_to_scdl --data-path hdf5s --save-path example_dataset

Future Work and Roadmap

SCDL is currently in public beta. In the future, expect improvements in data compression and data loading performance.

LICENSE

Bionemo-scdl has an Apache 2.0 license, as found in the LICENSE file.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

bionemo_scdl-0.0.1.tar.gz (27.5 kB view details)

Uploaded Source

Built Distribution

bionemo_scdl-0.0.1-py3-none-any.whl (33.9 kB view details)

Uploaded Python 3

File details

Details for the file bionemo_scdl-0.0.1.tar.gz.

File metadata

  • Download URL: bionemo_scdl-0.0.1.tar.gz
  • Upload date:
  • Size: 27.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.10.14

File hashes

Hashes for bionemo_scdl-0.0.1.tar.gz
Algorithm Hash digest
SHA256 f556247801b6505c7de21b3d14d5899387dc9483ae72dfcacd23d55785259232
MD5 0336a841290091bc467b6d3ba6cd13f8
BLAKE2b-256 4ec4503ba1769feababac077edafc12ff111f90bd15a9140bfa33eb0534ab40e

See more details on using hashes here.

File details

Details for the file bionemo_scdl-0.0.1-py3-none-any.whl.

File metadata

  • Download URL: bionemo_scdl-0.0.1-py3-none-any.whl
  • Upload date:
  • Size: 33.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.10.14

File hashes

Hashes for bionemo_scdl-0.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 1dd01f8d889ab232c1fa41c76868a99dc8b5d929024c96010c8470b7399e259c
MD5 c12f2187bb9d6347f707fd1d5d1dabe4
BLAKE2b-256 36e688c6c08b56fd4f5c690c118dd87e2829e6d331fc6f547e44c63412eb88f0

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page