New in 0.9.0 (2021-03-03)

This release features our new software development kit for building new probabilistic models. Our hope is that others will be able to develop new models by importing scvi-tools into their own packages.

Important changes

From the user perspective, there are two package-wide API breaking changes and one SCANVI specific breaking change enumerated below. From the method developer perspective, the entire model backend has been revamped using PyTorch Lightning, and no old code will be compatible with this and future versions. Also, we dropped support for Python 3.6.

Breaking change: The train method

  • n_epochs is now max_epochs for consistency with PytorchLightning and to better relect the functionality of the parameter.

  • use_cuda is now use_gpu for consistency with PytorchLightning.

  • frequency is now check_val_every_n_epoch for consistency with PytorchLightning.

  • train_fun_kwargs and kwargs throughout the train() methods in the codebase have been removed and various arguments have been reorganized into plan_kwargs and trainer_kwargs. Generally speaking, plan_kwargs deal with model optimization like kl warmup, while trainer_kwargs deal with the actual training loop like early stopping.

Breaking change: GPU handling

  • use_cuda was removed from the init of each model and was not replaced by use_gpu. By default every model is intialized on CPU but can be moved to a device via model.to_device(). If a model is trained with use_gpu=True the model will remain on the GPU after training.

  • When loading saved models, scvi-tools will always attempt to load the model on GPU unless otherwise specified.

  • We now support specifying which GPU device to use if there are multiple available GPUs.

Breaking change: SCANVI

  • SCANVI no longer pretrains an SCVI model by default. This functionality however is preserved via the new from_scvi_model() method.

  • n_epochs_unsupervised and n_epochs_semisupervised have been removed from train. It has been replaced with max_epochs for semisupervised training.

  • n_samples_per_label is a new argument which will subsample the number of labelled training examples to train on per label each epoch.

New Model Implementations


  • SCANVI bug fixes (#879)

  • GIMVI moved to external api (#885)

  • TOTALVI, SCVI, and SCANVI now support multiple covariates (#886)

  • Added callback for saving the best state of a model (#887)

  • Option to disable progress bar (#905)

  • load() documentation improvements (#913)

  • updated tutorials, guides, documentation (#924, #925, #929, #934, #947, #971)

  • track is now public (#938)

  • SCANVI now logs classficiation loss (#966)

  • get_likelihood_parameter() bug (#967)

  • model.history are now pandas DataFrames (#949)