Skip to content

Instantly share code, notes, and snippets.

@ivirshup
Created July 2, 2024 22:51
Show Gist options
  • Save ivirshup/8500d9a874ea9313ca87c0d5e46886e9 to your computer and use it in GitHub Desktop.
Save ivirshup/8500d9a874ea9313ca87c0d5e46886e9 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Access census with dask"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/ubuntu/miniforge3/envs/cellxgene-census-dev/lib/python3.11/site-packages/tiledb/cloud/config.py:96: UserWarning: You must first login before you can run commands. Please run tiledb.cloud.login.\n",
" warnings.warn(\n"
]
}
],
"source": [
"import multiprocessing\n",
"\n",
"multiprocessing.set_start_method(\"spawn\")\n",
"\n",
"from pathlib import Path\n",
"\n",
"import tiledb\n",
"import cellxgene_census\n",
"from tiledbsoma import SOMATileDBContext\n",
"\n",
"from dask.array.core import normalize_chunks, slices_from_chunks\n",
"import dask.array as da\n",
"from dask import delayed\n",
"import dask.distributed as dd\n",
"\n",
"from scipy import sparse\n",
"import numpy as np\n",
"\n",
"import anndata as ad, scanpy as sc\n",
"import zarr"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"SPARSE_CHUNK_SIZE = 10_000\n",
"DENSE_CHUNK_SIZE = 5_000"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/ubuntu/miniforge3/envs/cellxgene-census-dev/lib/python3.11/site-packages/distributed/node.py:182: UserWarning: Port 8787 is already in use.\n",
"Perhaps you already have a cluster running?\n",
"Hosting the HTTP server on port 36497 instead\n",
" warnings.warn(\n",
"/home/ubuntu/miniforge3/envs/cellxgene-census-dev/lib/python3.11/contextlib.py:144: UserWarning: Creating scratch directories is taking a surprisingly long time. (2.76s) This is often due to running workers on a network file system. Consider specifying a local-directory to point workers to write scratch data to a local disk.\n",
" next(self.gen)\n"
]
},
{
"data": {
"text/html": [
"<div>\n",
" <div style=\"width: 24px; height: 24px; background-color: #e1e1e1; border: 3px solid #9D9D9D; border-radius: 5px; position: absolute;\"> </div>\n",
" <div style=\"margin-left: 48px;\">\n",
" <h3 style=\"margin-bottom: 0px;\">Client</h3>\n",
" <p style=\"color: #9D9D9D; margin-bottom: 0px;\">Client-d0f0773b-38c2-11ef-8b21-023ca6c22285</p>\n",
" <table style=\"width: 100%; text-align: left;\">\n",
"\n",
" <tr>\n",
" \n",
" <td style=\"text-align: left;\"><strong>Connection method:</strong> Cluster object</td>\n",
" <td style=\"text-align: left;\"><strong>Cluster type:</strong> distributed.LocalCluster</td>\n",
" \n",
" </tr>\n",
"\n",
" \n",
" <tr>\n",
" <td style=\"text-align: left;\">\n",
" <strong>Dashboard: </strong> <a href=\"http://127.0.0.1:36497/status\" target=\"_blank\">http://127.0.0.1:36497/status</a>\n",
" </td>\n",
" <td style=\"text-align: left;\"></td>\n",
" </tr>\n",
" \n",
"\n",
" </table>\n",
"\n",
" \n",
"\n",
" \n",
" <details>\n",
" <summary style=\"margin-bottom: 20px;\"><h3 style=\"display: inline;\">Cluster Info</h3></summary>\n",
" <div class=\"jp-RenderedHTMLCommon jp-RenderedHTML jp-mod-trusted jp-OutputArea-output\">\n",
" <div style=\"width: 24px; height: 24px; background-color: #e1e1e1; border: 3px solid #9D9D9D; border-radius: 5px; position: absolute;\">\n",
" </div>\n",
" <div style=\"margin-left: 48px;\">\n",
" <h3 style=\"margin-bottom: 0px; margin-top: 0px;\">LocalCluster</h3>\n",
" <p style=\"color: #9D9D9D; margin-bottom: 0px;\">a498bb4b</p>\n",
" <table style=\"width: 100%; text-align: left;\">\n",
" <tr>\n",
" <td style=\"text-align: left;\">\n",
" <strong>Dashboard:</strong> <a href=\"http://127.0.0.1:36497/status\" target=\"_blank\">http://127.0.0.1:36497/status</a>\n",
" </td>\n",
" <td style=\"text-align: left;\">\n",
" <strong>Workers:</strong> 3\n",
" </td>\n",
" </tr>\n",
" <tr>\n",
" <td style=\"text-align: left;\">\n",
" <strong>Total threads:</strong> 33\n",
" </td>\n",
" <td style=\"text-align: left;\">\n",
" <strong>Total memory:</strong> 123.85 GiB\n",
" </td>\n",
" </tr>\n",
" \n",
" <tr>\n",
" <td style=\"text-align: left;\"><strong>Status:</strong> running</td>\n",
" <td style=\"text-align: left;\"><strong>Using processes:</strong> True</td>\n",
"</tr>\n",
"\n",
" \n",
" </table>\n",
"\n",
" <details>\n",
" <summary style=\"margin-bottom: 20px;\">\n",
" <h3 style=\"display: inline;\">Scheduler Info</h3>\n",
" </summary>\n",
"\n",
" <div style=\"\">\n",
" <div>\n",
" <div style=\"width: 24px; height: 24px; background-color: #FFF7E5; border: 3px solid #FF6132; border-radius: 5px; position: absolute;\"> </div>\n",
" <div style=\"margin-left: 48px;\">\n",
" <h3 style=\"margin-bottom: 0px;\">Scheduler</h3>\n",
" <p style=\"color: #9D9D9D; margin-bottom: 0px;\">Scheduler-60c3290e-c8f5-4459-b96d-7202052144fc</p>\n",
" <table style=\"width: 100%; text-align: left;\">\n",
" <tr>\n",
" <td style=\"text-align: left;\">\n",
" <strong>Comm:</strong> tcp://127.0.0.1:36791\n",
" </td>\n",
" <td style=\"text-align: left;\">\n",
" <strong>Workers:</strong> 3\n",
" </td>\n",
" </tr>\n",
" <tr>\n",
" <td style=\"text-align: left;\">\n",
" <strong>Dashboard:</strong> <a href=\"http://127.0.0.1:36497/status\" target=\"_blank\">http://127.0.0.1:36497/status</a>\n",
" </td>\n",
" <td style=\"text-align: left;\">\n",
" <strong>Total threads:</strong> 33\n",
" </td>\n",
" </tr>\n",
" <tr>\n",
" <td style=\"text-align: left;\">\n",
" <strong>Started:</strong> Just now\n",
" </td>\n",
" <td style=\"text-align: left;\">\n",
" <strong>Total memory:</strong> 123.85 GiB\n",
" </td>\n",
" </tr>\n",
" </table>\n",
" </div>\n",
" </div>\n",
"\n",
" <details style=\"margin-left: 48px;\">\n",
" <summary style=\"margin-bottom: 20px;\">\n",
" <h3 style=\"display: inline;\">Workers</h3>\n",
" </summary>\n",
"\n",
" \n",
" <div style=\"margin-bottom: 20px;\">\n",
" <div style=\"width: 24px; height: 24px; background-color: #DBF5FF; border: 3px solid #4CC9FF; border-radius: 5px; position: absolute;\"> </div>\n",
" <div style=\"margin-left: 48px;\">\n",
" <details>\n",
" <summary>\n",
" <h4 style=\"margin-bottom: 0px; display: inline;\">Worker: 0</h4>\n",
" </summary>\n",
" <table style=\"width: 100%; text-align: left;\">\n",
" <tr>\n",
" <td style=\"text-align: left;\">\n",
" <strong>Comm: </strong> tcp://127.0.0.1:35759\n",
" </td>\n",
" <td style=\"text-align: left;\">\n",
" <strong>Total threads: </strong> 11\n",
" </td>\n",
" </tr>\n",
" <tr>\n",
" <td style=\"text-align: left;\">\n",
" <strong>Dashboard: </strong> <a href=\"http://127.0.0.1:45939/status\" target=\"_blank\">http://127.0.0.1:45939/status</a>\n",
" </td>\n",
" <td style=\"text-align: left;\">\n",
" <strong>Memory: </strong> 41.28 GiB\n",
" </td>\n",
" </tr>\n",
" <tr>\n",
" <td style=\"text-align: left;\">\n",
" <strong>Nanny: </strong> tcp://127.0.0.1:35515\n",
" </td>\n",
" <td style=\"text-align: left;\"></td>\n",
" </tr>\n",
" <tr>\n",
" <td colspan=\"2\" style=\"text-align: left;\">\n",
" <strong>Local directory: </strong> /tmp/dask-scratch-space/worker-k33soctb\n",
" </td>\n",
" </tr>\n",
"\n",
" \n",
"\n",
" \n",
"\n",
" </table>\n",
" </details>\n",
" </div>\n",
" </div>\n",
" \n",
" <div style=\"margin-bottom: 20px;\">\n",
" <div style=\"width: 24px; height: 24px; background-color: #DBF5FF; border: 3px solid #4CC9FF; border-radius: 5px; position: absolute;\"> </div>\n",
" <div style=\"margin-left: 48px;\">\n",
" <details>\n",
" <summary>\n",
" <h4 style=\"margin-bottom: 0px; display: inline;\">Worker: 1</h4>\n",
" </summary>\n",
" <table style=\"width: 100%; text-align: left;\">\n",
" <tr>\n",
" <td style=\"text-align: left;\">\n",
" <strong>Comm: </strong> tcp://127.0.0.1:33917\n",
" </td>\n",
" <td style=\"text-align: left;\">\n",
" <strong>Total threads: </strong> 11\n",
" </td>\n",
" </tr>\n",
" <tr>\n",
" <td style=\"text-align: left;\">\n",
" <strong>Dashboard: </strong> <a href=\"http://127.0.0.1:40619/status\" target=\"_blank\">http://127.0.0.1:40619/status</a>\n",
" </td>\n",
" <td style=\"text-align: left;\">\n",
" <strong>Memory: </strong> 41.28 GiB\n",
" </td>\n",
" </tr>\n",
" <tr>\n",
" <td style=\"text-align: left;\">\n",
" <strong>Nanny: </strong> tcp://127.0.0.1:45185\n",
" </td>\n",
" <td style=\"text-align: left;\"></td>\n",
" </tr>\n",
" <tr>\n",
" <td colspan=\"2\" style=\"text-align: left;\">\n",
" <strong>Local directory: </strong> /tmp/dask-scratch-space/worker-rxeqpn9c\n",
" </td>\n",
" </tr>\n",
"\n",
" \n",
"\n",
" \n",
"\n",
" </table>\n",
" </details>\n",
" </div>\n",
" </div>\n",
" \n",
" <div style=\"margin-bottom: 20px;\">\n",
" <div style=\"width: 24px; height: 24px; background-color: #DBF5FF; border: 3px solid #4CC9FF; border-radius: 5px; position: absolute;\"> </div>\n",
" <div style=\"margin-left: 48px;\">\n",
" <details>\n",
" <summary>\n",
" <h4 style=\"margin-bottom: 0px; display: inline;\">Worker: 2</h4>\n",
" </summary>\n",
" <table style=\"width: 100%; text-align: left;\">\n",
" <tr>\n",
" <td style=\"text-align: left;\">\n",
" <strong>Comm: </strong> tcp://127.0.0.1:38625\n",
" </td>\n",
" <td style=\"text-align: left;\">\n",
" <strong>Total threads: </strong> 11\n",
" </td>\n",
" </tr>\n",
" <tr>\n",
" <td style=\"text-align: left;\">\n",
" <strong>Dashboard: </strong> <a href=\"http://127.0.0.1:46603/status\" target=\"_blank\">http://127.0.0.1:46603/status</a>\n",
" </td>\n",
" <td style=\"text-align: left;\">\n",
" <strong>Memory: </strong> 41.28 GiB\n",
" </td>\n",
" </tr>\n",
" <tr>\n",
" <td style=\"text-align: left;\">\n",
" <strong>Nanny: </strong> tcp://127.0.0.1:41677\n",
" </td>\n",
" <td style=\"text-align: left;\"></td>\n",
" </tr>\n",
" <tr>\n",
" <td colspan=\"2\" style=\"text-align: left;\">\n",
" <strong>Local directory: </strong> /tmp/dask-scratch-space/worker-usajy86k\n",
" </td>\n",
" </tr>\n",
"\n",
" \n",
"\n",
" \n",
"\n",
" </table>\n",
" </details>\n",
" </div>\n",
" </div>\n",
" \n",
"\n",
" </details>\n",
"</div>\n",
"\n",
" </details>\n",
" </div>\n",
"</div>\n",
" </details>\n",
" \n",
"\n",
" </div>\n",
"</div>"
],
"text/plain": [
"<Client: 'tcp://127.0.0.1:36791' processes=3 threads=33, memory=123.85 GiB>"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cluster = dd.LocalCluster(n_workers=3)\n",
"client = dd.Client(cluster)\n",
"client"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This code wraps the tiledb array in a dask array. I am creating a delayed function for each dask chunk, then reinterpreting that collection of delayed functions as a single dask array."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"def to_listed_chunks(chunk_size: int, dim_size: int) -> list[int]:\n",
" n_full, rem = divmod(dim_size, chunk_size)\n",
" chunk_list = [chunk_size] * n_full\n",
" if rem:\n",
" chunk_list += [rem]\n",
" return chunk_list\n",
"\n",
"\n",
"def make_sparse_chunk(array: tiledb.Array, tile_slices: list[slice]) -> da.Array:\n",
" shape = [(s.stop - s.start) for s in tile_slices]\n",
" def _inner(array, tile_slices):\n",
" res = array[tile_slices]\n",
" offsets = [s.start for s in tile_slices]\n",
" res[\"soma_dim_0\"] -= offsets[0]\n",
" res[\"soma_dim_1\"] -= offsets[1]\n",
" return sparse.csr_matrix((res[\"soma_data\"], (res[\"soma_dim_0\"], res[\"soma_dim_1\"])), shape=shape)\n",
" # return sparse.csr_matrix((res[\"soma_data\"], (res[\"soma_dim_0\"] - offsets[0], res[\"soma_dim_1\"] - offsets[1])), shape=shape)\n",
" return da.from_delayed(delayed(_inner)(array, tile_slices), shape=shape, meta=sparse.csr_matrix((0, 0), dtype=tiledb_array.dtype))\n",
"\n",
"def tiledb_sparse_as_dask(tdb_array: tiledb.Array) -> da.Array:\n",
" schema = tdb_array.schema\n",
" # chunks = list(schema.domain.dim(i).tile for i in range(schema.ndim))\n",
" chunks = [SPARSE_CHUNK_SIZE, tdb_array.shape[1]]\n",
" # Simplifying to have complete slices across rows\n",
" slices: list[list[slice]] = slices_from_chunks((to_listed_chunks(chunks[0], tdb_array.shape[0]), [tdb_array.shape[1]]))\n",
" return da.concatenate(\n",
" [make_sparse_chunk(tdb_array, s) for s in slices], axis=0\n",
" )"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"SOMA_URI= \"s3://cellxgene-census-public-us-west-2/cell-census/2023-12-15/soma\"\n",
"SPECIES = \"mus_musculus\"\n",
"\n",
"# need to specify anonymous access\n",
"ctx = {\n",
" \"vfs.s3.no_sign_request\": \"true\",\n",
" \"vfs.s3.region\": \"us-west-2\"\n",
"}\n",
"\n",
"tiledb_array = tiledb.open(\n",
" f\"{SOMA_URI}/census_data/{SPECIES}/ms/RNA/X/raw/\",\n",
" ctx=tiledb.Ctx(ctx),\n",
")\n",
"\n",
"X = tiledb_sparse_as_dask(tiledb_array)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"For the sake of time, I am going to slim this down to the first million cells"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"X = X[:1_000_000]"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"# Retrieving obs and var as pandas dataframes\n",
"census = cellxgene_census.open_soma(uri=SOMA_URI, context=SOMATileDBContext(tiledb_config=ctx))\n",
"obs = cellxgene_census.get_obs(census, SPECIES, coords=slice(X.shape[0] - 1))\n",
"var = cellxgene_census.get_var(census, SPECIES)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/ubuntu/github/anndata/src/anndata/_core/aligned_df.py:67: ImplicitModificationWarning: Transforming to str index.\n",
" warnings.warn(\"Transforming to str index.\", ImplicitModificationWarning)\n",
"/home/ubuntu/github/anndata/src/anndata/_core/aligned_df.py:67: ImplicitModificationWarning: Transforming to str index.\n",
" warnings.warn(\"Transforming to str index.\", ImplicitModificationWarning)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 553 ms, sys: 102 ms, total: 655 ms\n",
"Wall time: 646 ms\n"
]
},
{
"data": {
"text/plain": [
"AnnData object with n_obs × n_vars = 1000000 × 52417\n",
" obs: 'soma_joinid', 'dataset_id', 'assay', 'assay_ontology_term_id', 'cell_type', 'cell_type_ontology_term_id', 'development_stage', 'development_stage_ontology_term_id', 'disease', 'disease_ontology_term_id', 'donor_id', 'is_primary_data', 'self_reported_ethnicity', 'self_reported_ethnicity_ontology_term_id', 'sex', 'sex_ontology_term_id', 'suspension_type', 'tissue', 'tissue_ontology_term_id', 'tissue_general', 'tissue_general_ontology_term_id', 'raw_sum', 'nnz', 'raw_mean_nnz', 'raw_variance_nnz', 'n_measured_vars'\n",
" var: 'soma_joinid', 'feature_id', 'feature_name', 'feature_length', 'nnz', 'n_measured_obs'"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%%time\n",
"adata = ad.AnnData(X=X, obs=obs, var=var)\n",
"adata"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"# Writing out as zarr to compare compute times\n",
"if not Path(\"adata.zarr\").is_dir():\n",
" adata.write_zarr(\"adata.zarr\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Running preprocessing with zarr\n",
"\n",
"I am running this one first because it is faster and runs more reliably"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"# Using the helper function from https://github.com/scverse/anndata/pull/1469 at commit 717b997d0e33ddae066f72cc6495cdb64b88d175\n",
"from anndata._io.specs import read_elem_as_dask\n",
"from anndata.experimental import read_elem\n",
"import zarr"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"z = zarr.open(\"adata.zarr\")"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 750 ms, sys: 320 ms, total: 1.07 s\n",
"Wall time: 1.11 s\n"
]
},
{
"data": {
"text/plain": [
"AnnData object with n_obs × n_vars = 1000000 × 52417\n",
" obs: 'soma_joinid', 'dataset_id', 'assay', 'assay_ontology_term_id', 'cell_type', 'cell_type_ontology_term_id', 'development_stage', 'development_stage_ontology_term_id', 'disease', 'disease_ontology_term_id', 'donor_id', 'is_primary_data', 'self_reported_ethnicity', 'self_reported_ethnicity_ontology_term_id', 'sex', 'sex_ontology_term_id', 'suspension_type', 'tissue', 'tissue_ontology_term_id', 'tissue_general', 'tissue_general_ontology_term_id', 'raw_sum', 'nnz', 'raw_mean_nnz', 'raw_variance_nnz', 'n_measured_vars'\n",
" var: 'soma_joinid', 'feature_id', 'feature_name', 'feature_length', 'nnz', 'n_measured_obs'"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%%time\n",
"adata_zarr = ad.AnnData(\n",
" X=read_elem_as_dask(z[\"X\"], dataset_kwargs={\"chunks\": (SPARSE_CHUNK_SIZE, z[\"X\"].attrs[\"shape\"][1])}),\n",
" obs=read_elem(z[\"obs\"]),\n",
" var=read_elem(z[\"var\"]),\n",
")\n",
"adata_zarr"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 15.5 ms, sys: 6.61 ms, total: 22.1 ms\n",
"Wall time: 20.2 ms\n"
]
}
],
"source": [
"%%time\n",
"adata_zarr.layers[\"counts\"] = adata_zarr.X.copy()\n",
"sc.pp.normalize_total(adata_zarr, target_sum=10_000)\n",
"sc.pp.log1p(adata_zarr)"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 13.4 s, sys: 945 ms, total: 14.4 s\n",
"Wall time: 36.9 s\n"
]
}
],
"source": [
"%%time\n",
"sc.pp.highly_variable_genes(adata_zarr)"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"2024-07-02 22:34:10,867 - distributed.worker.memory - WARNING - Worker is at 80% memory usage. Pausing worker. Process memory: 33.03 GiB -- Worker memory limit: 41.28 GiB\n",
"2024-07-02 22:34:30,372 - distributed.worker.memory - WARNING - Worker is at 61% memory usage. Resuming worker. Process memory: 25.21 GiB -- Worker memory limit: 41.28 GiB\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 55.4 s, sys: 8 s, total: 1min 3s\n",
"Wall time: 2min 35s\n"
]
}
],
"source": [
"%%time\n",
"adata_zarr.layers[\"dense\"] = adata_zarr.X.rechunk((DENSE_CHUNK_SIZE, -1)).map_blocks(\n",
" lambda x: x.toarray(), dtype=adata_zarr.X.dtype, meta=np.array([])\n",
")\n",
"sc.pp.pca(adata_zarr, layer=\"dense\")"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 42.5 s, sys: 6.15 s, total: 48.7 s\n",
"Wall time: 1min 44s\n"
]
}
],
"source": [
"%%time\n",
"# dask-ml immediatley computes the variable embeddings, but not the observation ones\n",
"adata_zarr.obsm[\"X_pca\"] = adata_zarr.obsm[\"X_pca\"].compute()"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 6.92 s, sys: 786 ms, total: 7.71 s\n",
"Wall time: 7.1 s\n"
]
}
],
"source": [
"%%time\n",
"sc.pl.pca(adata_zarr)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Running with tiledb"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [],
"source": [
"adata.layers[\"counts\"] = adata.X.copy()\n",
"sc.pp.normalize_total(adata, target_sum=10_000)\n",
"sc.pp.log1p(adata)"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/ubuntu/miniforge3/envs/cellxgene-census-dev/lib/python3.11/site-packages/tiledb/cloud/config.py:96: UserWarning: You must first login before you can run commands. Please run tiledb.cloud.login.\n",
" warnings.warn(\n",
"/home/ubuntu/miniforge3/envs/cellxgene-census-dev/lib/python3.11/site-packages/tiledb/cloud/config.py:96: UserWarning: You must first login before you can run commands. Please run tiledb.cloud.login.\n",
" warnings.warn(\n",
"/home/ubuntu/miniforge3/envs/cellxgene-census-dev/lib/python3.11/site-packages/tiledb/cloud/config.py:96: UserWarning: You must first login before you can run commands. Please run tiledb.cloud.login.\n",
" warnings.warn(\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 3min 10s, sys: 5.47 s, total: 3min 15s\n",
"Wall time: 3min 48s\n"
]
}
],
"source": [
"%%time\n",
"sc.pp.highly_variable_genes(adata)"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"2024-07-02 22:42:19,087 - distributed.worker.memory - WARNING - Unmanaged memory use is high. This may indicate a memory leak or the memory may not be released to the OS; see https://distributed.dask.org/en/latest/worker-memory.html#memory-not-released-back-to-the-os for more information. -- Unmanaged memory: 29.90 GiB -- Worker memory limit: 41.28 GiB\n",
"2024-07-02 22:43:23,469 - distributed.worker.memory - WARNING - Unmanaged memory use is high. This may indicate a memory leak or the memory may not be released to the OS; see https://distributed.dask.org/en/latest/worker-memory.html#memory-not-released-back-to-the-os for more information. -- Unmanaged memory: 29.69 GiB -- Worker memory limit: 41.28 GiB\n",
"2024-07-02 22:43:31,000 - distributed.worker.memory - WARNING - Unmanaged memory use is high. This may indicate a memory leak or the memory may not be released to the OS; see https://distributed.dask.org/en/latest/worker-memory.html#memory-not-released-back-to-the-os for more information. -- Unmanaged memory: 25.34 GiB -- Worker memory limit: 41.28 GiB\n",
"/home/ubuntu/miniforge3/envs/cellxgene-census-dev/lib/python3.11/site-packages/tiledb/cloud/config.py:96: UserWarning: You must first login before you can run commands. Please run tiledb.cloud.login.\n",
" warnings.warn(\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"2024-07-02 22:49:08,601 - distributed.nanny.memory - WARNING - Worker tcp://127.0.0.1:33917 (pid=1903480) exceeded 95% memory budget. Restarting...\n",
"2024-07-02 22:49:13,548 - distributed.scheduler - WARNING - Removing worker 'tcp://127.0.0.1:33917' caused the cluster to lose already computed task(s), which will be recomputed elsewhere: {('getitem-4c3865ad76f5b918ea4bff00e9cc559f-q1', 14, 0), ('sub-75443a7e38afa768e3212e0543fc2179', 72, 0), ('sub-75443a7e38afa768e3212e0543fc2179', 61, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-q1', 146, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-q1', 135, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-q1', 170, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-r1', 89, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-r1', 128, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-r1', 115, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-q1', 38, 0), ('sub-75443a7e38afa768e3212e0543fc2179', 153, 0), ('sub-75443a7e38afa768e3212e0543fc2179', 164, 0), ('sub-75443a7e38afa768e3212e0543fc2179', 89, 0), ('sub-75443a7e38afa768e3212e0543fc2179', 179, 0), ('sub-75443a7e38afa768e3212e0543fc2179', 78, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-q1', 165, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-q1', 176, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-q1', 4, 0), ('sub-75443a7e38afa768e3212e0543fc2179', 62, 0), ('sub-75443a7e38afa768e3212e0543fc2179', 196, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-r1', 147, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-r1', 134, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-r1', 107, 0), ('standard_normal-ac93b4f2e5193fa6ccb32d644c625de2', 0, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-q1', 72, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-q1', 127, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-q1', 193, 0), ('sub-75443a7e38afa768e3212e0543fc2179', 13, 0), ('sub-75443a7e38afa768e3212e0543fc2179', 79, 0), ('sub-75443a7e38afa768e3212e0543fc2179', 147, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-q1', 153, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-r1', 85, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-q1', 89, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-r1', 164, 0), ('sub-75443a7e38afa768e3212e0543fc2179', 120, 0), ('sub-75443a7e38afa768e3212e0543fc2179', 85, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-r1', 126, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-r1', 113, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-q1', 62, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-q1', 128, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-q1', 196, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-q1', 106, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-q1', 11, 0), ('sub-75443a7e38afa768e3212e0543fc2179', 192, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-r1', 165, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-q1', 119, 0), ('sub-75443a7e38afa768e3212e0543fc2179', 190, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-q1', 185, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-q1', 13, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-q1', 79, 0), ('sub-75443a7e38afa768e3212e0543fc2179', 60, 0), ('sub-75443a7e38afa768e3212e0543fc2179', 128, 0), ('sub-75443a7e38afa768e3212e0543fc2179', 126, 0), ('sub-75443a7e38afa768e3212e0543fc2179', 115, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-q1', 134, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-q1', 68, 0), ('sub-75443a7e38afa768e3212e0543fc2179', 9, 0), ('sub-75443a7e38afa768e3212e0543fc2179', 64, 0), ('sub-75443a7e38afa768e3212e0543fc2179', 75, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-r1', 127, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-q1', 147, 0), ('sub-75443a7e38afa768e3212e0543fc2179', 11, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-q1', 85, 0), ('sub-75443a7e38afa768e3212e0543fc2179', 88, 0), ('sub-75443a7e38afa768e3212e0543fc2179', 77, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-q1', 107, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-r1', 105, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-q1', 111, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-r1', 120, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-q1', 43, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-q1', 164, 0), ('sub-75443a7e38afa768e3212e0543fc2179', 129, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-q1', 113, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-q1', 179, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-q1', 168, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-q1', 7, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-r1', 106, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-q1', 60, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-q1', 126, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-q1', 115, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-q1', 192, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-q1', 9, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-q1', 75, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-q1', 64, 0), ('sub-75443a7e38afa768e3212e0543fc2179', 146, 0), ('sub-75443a7e38afa768e3212e0543fc2179', 135, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-r1', 84, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-r1', 88, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-q1', 88, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-q1', 77, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-q1', 37, 0), ('sub-75443a7e38afa768e3212e0543fc2179', 7, 0), ('sub-75443a7e38afa768e3212e0543fc2179', 84, 0), ('sub-75443a7e38afa768e3212e0543fc2179', 73, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-r1', 112, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-q1', 105, 0), ('sub-75443a7e38afa768e3212e0543fc2179', 165, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-q1', 65, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-q1', 120, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-q1', 199, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-r1', 153, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-r1', 129, 0), ('sub-75443a7e38afa768e3212e0543fc2179', 178, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-q1', 12, 0), ('sub-75443a7e38afa768e3212e0543fc2179', 127, 0), ('sub-75443a7e38afa768e3212e0543fc2179', 193, 0), ('sub-75443a7e38afa768e3212e0543fc2179', 8, 0), ('sub-75443a7e38afa768e3212e0543fc2179', 76, 0), ('sub-75443a7e38afa768e3212e0543fc2179', 74, 0), ('sub-75443a7e38afa768e3212e0543fc2179', 63, 0), ('sub-75443a7e38afa768e3212e0543fc2179', 12, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-r1', 146, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-r1', 135, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-q1', 190, 0), ('sub-75443a7e38afa768e3212e0543fc2179', 10, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-q1', 84, 0), ('sub-75443a7e38afa768e3212e0543fc2179', 65, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-q1', 73, 0), ('sub-75443a7e38afa768e3212e0543fc2179', 199, 0), ('sub-75443a7e38afa768e3212e0543fc2179', 14, 0), ('sub-75443a7e38afa768e3212e0543fc2179', 170, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-r1', 119, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-q1', 112, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-q1', 178, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-q1', 61, 0), ('sub-75443a7e38afa768e3212e0543fc2179', 185, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-q1', 8, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-q1', 74, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-q1', 63, 0), ('sub-75443a7e38afa768e3212e0543fc2179', 134, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-q1', 129, 0), ('sub-75443a7e38afa768e3212e0543fc2179', 4, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-q1', 78, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-r1', 111, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-q1', 10, 0), ('getitem-4c3865ad76f5b918ea4bff00e9cc559f-q1', 76, 0)} (stimulus_id='handle-worker-cleanup-1719960553.5466065')\n",
"2024-07-02 22:49:13,980 - distributed.nanny - WARNING - Restarting worker\n",
"Task exception was never retrieved\n",
"future: <Task finished name='Task-403478' coro=<Client._gather.<locals>.wait() done, defined at /home/ubuntu/miniforge3/envs/cellxgene-census-dev/lib/python3.11/site-packages/distributed/client.py:2199> exception=AllExit()>\n",
"Traceback (most recent call last):\n",
" File \"/home/ubuntu/miniforge3/envs/cellxgene-census-dev/lib/python3.11/site-packages/distributed/client.py\", line 2208, in wait\n",
" raise AllExit()\n",
"distributed.client.AllExit\n",
"Task exception was never retrieved\n",
"future: <Task finished name='Task-403475' coro=<Client._gather.<locals>.wait() done, defined at /home/ubuntu/miniforge3/envs/cellxgene-census-dev/lib/python3.11/site-packages/distributed/client.py:2199> exception=AllExit()>\n",
"Traceback (most recent call last):\n",
" File \"/home/ubuntu/miniforge3/envs/cellxgene-census-dev/lib/python3.11/site-packages/distributed/client.py\", line 2208, in wait\n",
" raise AllExit()\n",
"distributed.client.AllExit\n",
"Task exception was never retrieved\n",
"future: <Task finished name='Task-403476' coro=<Client._gather.<locals>.wait() done, defined at /home/ubuntu/miniforge3/envs/cellxgene-census-dev/lib/python3.11/site-packages/distributed/client.py:2199> exception=AllExit()>\n",
"Traceback (most recent call last):\n",
" File \"/home/ubuntu/miniforge3/envs/cellxgene-census-dev/lib/python3.11/site-packages/distributed/client.py\", line 2208, in wait\n",
" raise AllExit()\n",
"distributed.client.AllExit\n"
]
},
{
"ename": "KeyboardInterrupt",
"evalue": "",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)",
"File \u001b[0;32m<timed exec>:4\u001b[0m\n",
"File \u001b[0;32m~/miniforge3/envs/cellxgene-census-dev/lib/python3.11/site-packages/scanpy/preprocessing/_pca.py:280\u001b[0m, in \u001b[0;36mpca\u001b[0;34m(***failed resolving arguments***)\u001b[0m\n\u001b[1;32m 276\u001b[0m X \u001b[38;5;241m=\u001b[39m X\u001b[38;5;241m.\u001b[39mtoarray()\n\u001b[1;32m 277\u001b[0m pca_ \u001b[38;5;241m=\u001b[39m PCA(\n\u001b[1;32m 278\u001b[0m n_components\u001b[38;5;241m=\u001b[39mn_comps, svd_solver\u001b[38;5;241m=\u001b[39msvd_solver, random_state\u001b[38;5;241m=\u001b[39mrandom_state\n\u001b[1;32m 279\u001b[0m )\n\u001b[0;32m--> 280\u001b[0m X_pca \u001b[38;5;241m=\u001b[39m \u001b[43mpca_\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfit_transform\u001b[49m\u001b[43m(\u001b[49m\u001b[43mX\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 281\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m issparse(X) \u001b[38;5;129;01mand\u001b[39;00m zero_center:\n\u001b[1;32m 282\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01msklearn\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mdecomposition\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m PCA\n",
"File \u001b[0;32m~/miniforge3/envs/cellxgene-census-dev/lib/python3.11/site-packages/sklearn/utils/_set_output.py:313\u001b[0m, in \u001b[0;36m_wrap_method_output.<locals>.wrapped\u001b[0;34m(self, X, *args, **kwargs)\u001b[0m\n\u001b[1;32m 311\u001b[0m \u001b[38;5;129m@wraps\u001b[39m(f)\n\u001b[1;32m 312\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mwrapped\u001b[39m(\u001b[38;5;28mself\u001b[39m, X, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[0;32m--> 313\u001b[0m data_to_wrap \u001b[38;5;241m=\u001b[39m \u001b[43mf\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mX\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 314\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(data_to_wrap, \u001b[38;5;28mtuple\u001b[39m):\n\u001b[1;32m 315\u001b[0m \u001b[38;5;66;03m# only wrap the first output for cross decomposition\u001b[39;00m\n\u001b[1;32m 316\u001b[0m return_tuple \u001b[38;5;241m=\u001b[39m (\n\u001b[1;32m 317\u001b[0m _wrap_data_with_container(method, data_to_wrap[\u001b[38;5;241m0\u001b[39m], X, \u001b[38;5;28mself\u001b[39m),\n\u001b[1;32m 318\u001b[0m \u001b[38;5;241m*\u001b[39mdata_to_wrap[\u001b[38;5;241m1\u001b[39m:],\n\u001b[1;32m 319\u001b[0m )\n",
"File \u001b[0;32m~/miniforge3/envs/cellxgene-census-dev/lib/python3.11/site-packages/dask_ml/decomposition/pca.py:402\u001b[0m, in \u001b[0;36mPCA.fit_transform\u001b[0;34m(self, X, y)\u001b[0m\n\u001b[1;32m 400\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m dask\u001b[38;5;241m.\u001b[39mis_dask_collection(X):\n\u001b[1;32m 401\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mTypeError\u001b[39;00m(_TYPE_MSG\u001b[38;5;241m.\u001b[39mformat(\u001b[38;5;28mtype\u001b[39m(X)))\n\u001b[0;32m--> 402\u001b[0m U, S, V \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_fit\u001b[49m\u001b[43m(\u001b[49m\u001b[43mX\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 403\u001b[0m U \u001b[38;5;241m=\u001b[39m U[:, : \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mn_components_]\n\u001b[1;32m 405\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mwhiten:\n\u001b[1;32m 406\u001b[0m \u001b[38;5;66;03m# X_new = X * V / S * sqrt(n_samples) = U * sqrt(n_samples)\u001b[39;00m\n",
"File \u001b[0;32m~/miniforge3/envs/cellxgene-census-dev/lib/python3.11/site-packages/dask_ml/decomposition/pca.py:298\u001b[0m, in \u001b[0;36mPCA._fit\u001b[0;34m(self, X)\u001b[0m\n\u001b[1;32m 289\u001b[0m total_variance \u001b[38;5;241m=\u001b[39m np\u001b[38;5;241m.\u001b[39mnan\n\u001b[1;32m 291\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 292\u001b[0m (\n\u001b[1;32m 293\u001b[0m (\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mn_samples_, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mn_features_in_),\n\u001b[1;32m 294\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mn_components_,\n\u001b[1;32m 295\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcomponents_,\n\u001b[1;32m 296\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msingular_values_,\n\u001b[1;32m 297\u001b[0m total_variance,\n\u001b[0;32m--> 298\u001b[0m ) \u001b[38;5;241m=\u001b[39m \u001b[43mcompute\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 299\u001b[0m \u001b[43m \u001b[49m\u001b[43mdelayed\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43;01mlambda\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mx\u001b[49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mx\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mshape\u001b[49m\u001b[43m)\u001b[49m\u001b[43m(\u001b[49m\u001b[43mX\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 300\u001b[0m \u001b[43m \u001b[49m\u001b[43mn_components\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 301\u001b[0m \u001b[43m \u001b[49m\u001b[43mcomponents\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 302\u001b[0m \u001b[43m \u001b[49m\u001b[43msingular_values\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 303\u001b[0m \u001b[43m \u001b[49m\u001b[43mtotal_variance\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 304\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 305\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 306\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m np\u001b[38;5;241m.\u001b[39misnan(X\u001b[38;5;241m.\u001b[39mshape)\u001b[38;5;241m.\u001b[39many():\n",
"File \u001b[0;32m~/miniforge3/envs/cellxgene-census-dev/lib/python3.11/site-packages/dask/base.py:662\u001b[0m, in \u001b[0;36mcompute\u001b[0;34m(traverse, optimize_graph, scheduler, get, *args, **kwargs)\u001b[0m\n\u001b[1;32m 659\u001b[0m postcomputes\u001b[38;5;241m.\u001b[39mappend(x\u001b[38;5;241m.\u001b[39m__dask_postcompute__())\n\u001b[1;32m 661\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m shorten_traceback():\n\u001b[0;32m--> 662\u001b[0m results \u001b[38;5;241m=\u001b[39m \u001b[43mschedule\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdsk\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mkeys\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 664\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m repack([f(r, \u001b[38;5;241m*\u001b[39ma) \u001b[38;5;28;01mfor\u001b[39;00m r, (f, a) \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mzip\u001b[39m(results, postcomputes)])\n",
"File \u001b[0;32m~/miniforge3/envs/cellxgene-census-dev/lib/python3.11/threading.py:629\u001b[0m, in \u001b[0;36mEvent.wait\u001b[0;34m(self, timeout)\u001b[0m\n\u001b[1;32m 627\u001b[0m signaled \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_flag\n\u001b[1;32m 628\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m signaled:\n\u001b[0;32m--> 629\u001b[0m signaled \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_cond\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mwait\u001b[49m\u001b[43m(\u001b[49m\u001b[43mtimeout\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 630\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m signaled\n",
"File \u001b[0;32m~/miniforge3/envs/cellxgene-census-dev/lib/python3.11/threading.py:331\u001b[0m, in \u001b[0;36mCondition.wait\u001b[0;34m(self, timeout)\u001b[0m\n\u001b[1;32m 329\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 330\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m timeout \u001b[38;5;241m>\u001b[39m \u001b[38;5;241m0\u001b[39m:\n\u001b[0;32m--> 331\u001b[0m gotit \u001b[38;5;241m=\u001b[39m \u001b[43mwaiter\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43macquire\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 332\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 333\u001b[0m gotit \u001b[38;5;241m=\u001b[39m waiter\u001b[38;5;241m.\u001b[39macquire(\u001b[38;5;28;01mFalse\u001b[39;00m)\n",
"\u001b[0;31mKeyboardInterrupt\u001b[0m: "
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"2024-07-02 22:49:32,100 - distributed.worker.memory - WARNING - gc.collect() took 1.022s. This is usually a sign that some tasks handle too many Python objects at the same time. Rechunking the work into smaller tasks might help.\n",
"2024-07-02 22:49:32,101 - distributed.worker.memory - WARNING - Worker is at 82% memory usage. Pausing worker. Process memory: 33.97 GiB -- Worker memory limit: 41.28 GiB\n",
"2024-07-02 22:49:41,430 - distributed.worker.memory - WARNING - Unmanaged memory use is high. This may indicate a memory leak or the memory may not be released to the OS; see https://distributed.dask.org/en/latest/worker-memory.html#memory-not-released-back-to-the-os for more information. -- Unmanaged memory: 33.97 GiB -- Worker memory limit: 41.28 GiB\n",
"2024-07-02 22:49:43,591 - distributed.worker.memory - WARNING - Worker is at 1% memory usage. Resuming worker. Process memory: 757.55 MiB -- Worker memory limit: 41.28 GiB\n"
]
}
],
"source": [
"%%time\n",
"adata.layers[\"dense\"] = adata.X.rechunk((DENSE_CHUNK_SIZE, -1)).map_blocks(\n",
" lambda x: x.toarray(), dtype=adata.X.dtype, meta=np.array([])\n",
")\n",
"sc.pp.pca(adata, layer=\"dense\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "cellxgene-census-dev",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.9"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment