Premiers pas avec CellProfiler en lot
Fonctionnement CellProfiler dans temps différé est le moyen idéal pour automatiser les analyses à grande échelle. Ou pas des analyses à si grande échelle que vous préférez automatiser!
L’un des avantages de l’exécution de CellProfiler en lot est que vous pouvez fractionner votre analyse. Cela est utile lorsque vous disposez d’un très grand ensemble de données. Supposons que vous ayez un grand ensemble de données qui prendrait 1 heure. Vous pouvez diviser cette analyse en 4 morceaux, et chacun se terminera en 15 minutes.
C’est également une considération importante si vous manquez de mémoire ou de CPU. Plus l’ensemble de données que vous analysez est volumineux, plus il consomme de mémoire. Si vous devez trouver un moyen de réduire vos ressources de calcul, vous pouvez souvent diviser votre ensemble de données. Les instructions du module CreateBatchFiles décrivent comment configurer un pipeline CellProfiler et le soumettre à un cluster. Voici un didacticiel de l’étape 7, soumettez vos lots au cluster. Commençons!
Si vous préférez regarder, voici une vidéo où je passe par les étapes décrites.
Docker est un moyen de conditionner des applications. Un conteneur Docker est comme une machine virtuelle, sauf sans interface visuelle. Une fois que vous avez tout configuré, vous le traitez comme vous le feriez avec un ordinateur ordinaire.
Avertissement rapide, si vous êtes très mal à l’aise avec la ligne de commande, vous pouvez demander de l’aide. Cela ne nécessite pas trop de connaissances en ligne de commande Linux, mais vous devrez être en mesure de taper des commandes et de naviguer dans une structure de répertoires. Voici une explication rapide et un tutoriel de Ubuntu pour vous aider à démarrer.
Nous utiliserons la valeur par défaut Image Docker de CellProfiler avec quelques changements. Nous apportons ces modifications parce que l’image est configurée de telle manière qu’elle convient très bien à un environnement de file d’attente de travaux, mais ce que nous voulons ici, c’est creuser avec une analyse exploratoire.
Créez un répertoire de projet, cellprofiler-batch-tutorial et insérez-y un CD.
mkdir cellprofiler-batch-tutorial
cd cellprofiler-batch-tutorial
Créez ensuite un fichier appelé Dockerfile avec ceci:
FROM cellprofiler/cellprofiler:3.1.9RUN apt-get update -y; apt-get install -y unzip imagemagickENV TINI_VERSION v0.16.1 ADD
https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini /usr/bin/tini
RUN chmod +x /usr/bin/tini
Nous allons maintenant construire notre nouvelle image CellProfiler!
docker build -t cellprofiler .
Nous allons commencer par un exemple très simple, juste pour avoir une idée de la façon dont nous allons exécuter les choses en mode batch. Une fois que nous y serons, nous passerons à des pipelines plus complexes. (WOOOO!)
Prenons également les premiers jeux de données.
wget http://cellprofiler-examples.s3.amazonaws.com/ExampleHuman.zip
unzip ExampleHuman
Voici à quoi ressemble l’ensemble de données –
.
├── ExampleHuman.cppipe
├── README.md
└── images
├── AS_09125_050116030001_D03f00d0.tif
├── AS_09125_050116030001_D03f00d1.tif
└── AS_09125_050116030001_D03f00d2.tif
Le `ExampleHuman.cppipe` est un pipeline CellProfiler, le` README` est le README habituel, et les images sont les images que nous voulons analyser avec le pipeline CellProfiler!
Plus tôt, j’ai dit que votre image Docker était un ordinateur. C’est (surtout). Nous allons maintenant l’utiliser comme ordinateur.
Vous utilisez maintenant le conteneur Docker comme shell. Cd dans votre répertoire de projet et vérifiez que vos fichiers attendus s’y trouvent.
cd /project/ExampleHuman
ls -lah # Should show the ExampleHuman dataset
Assurez-vous que vous pouvez exécuter la CLI CellProfiler en exécutant cellprofiler avec de l’aide. (C’est toujours un bon chèque.)
cellprofiler — run — run-headless — help
Maintenant, exécutons notre ensemble de données ExampleHuman!
cellprofiler — run — run-headless
-p ExampleHuman.cppipe
-o output -i images
Tout d’abord, cette analyse CellProfiler n’utilise qu’un seul ensemble d’images, donc ce n’est pas intéressant, mais c’est informatif.
Vous pouvez utiliser les indicateurs -f et -l pour indiquer à CellProfiler de démarrer, ou utiliser -f pour les premier et dernier -l pour diviser votre ensemble de données.
Une fois cela terminé, vous devriez voir une image avec quelques fichiers csv dans le répertoire de sortie!
Si vous concevez un pipeline par lots à grande échelle avec CellProfiler, vous devez connaître la quantité de mémoire et de CPU que vous utilisez. Nous allons récupérer ces informations à l’aide d’un outil appelé Portainer.
Portainer fait BEAUCOUP de choses, et ces choses sont très cool, mais pour le moment nous ne l’utilisons que pour profiler notre processus cellprofiler s’exécutant dans un conteneur docker.
Démarrez le service de portage comme suit:
docker volume create portainer_data
docker run -d -p 8000:8000 -p 9000:9000 — name=portainer — restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer
Accédez à votre navigateur et ouvrez localhost: 9000 pour voir le service Portainer. Vous pouvez être invité à créer un nom d’utilisateur et un mot de passe. Si c’est le cas, faites cela, et vous devriez voir une page d’accueil qui ressemble à ceci:
Maintenant, profilez votre jeu de données comme suit:
Notez que la commande pour exécuter une seule image se ferme très rapidement. Vous devrez voir rapidement le profilage de la mémoire en temps réel, ou vous devrez peut-être le relancer plusieurs fois.
Nous avons maintenant discuté de la façon dont nous commençons à planifier et à penser à regrouper notre pipeline CellProfiler avec un exemple simple. Passons maintenant à un véritable ensemble de données! Utilisons le BBBC021 de la vaste collection de références de bio-images. Nous allons utiliser les données de la semaine 1, soit environ 15 Go.
Je vais vous montrer comment j’ai exécuté cet ensemble de données, mais CellProfiler est très flexible et je suis sûr qu’il existe d’autres façons.
Vous devriez toujours être dans votre conteneur Docker. Une fois sur place, récupérons quelques données!
cd /project
mkdir -p BBBC021/Week1
mkdir -p BBBC021/Week1_output
cd BBBC021/Week1
wget https://data.broadinstitute.org/bbbc/BBBC021/BBBC021_v1_images_Week1_22123.zip
wget https://data.broadinstitute.org/bbbc/BBBC021/BBBC021_v1_images_Week1_22141.zip
wget https://data.broadinstitute.org/bbbc/BBBC021/BBBC021_v1_images_Week1_22161.zip
wget https://data.broadinstitute.org/bbbc/BBBC021/BBBC021_v1_images_Week1_22361.zip
wget https://data.broadinstitute.org/bbbc/BBBC021/BBBC021_v1_images_Week1_22381.zip
wget https://data.broadinstitute.org/bbbc/BBBC021/BBBC021_v1_images_Week1_22401.zip
find $(pwd) -name "*zip" | xargs -I {} unzip {}
# Clean up the zips, we don't need them anymore
find $(pwd) -name "*zip" | xargs -I {} rm -rf {}
cd ../..
# Run $(pwd) to check where you are. You should be in /project/BBBC021
wget https://data.broadinstitute.org/bbbc/BBBC021/BBBC021_v1_image.csv
wget https://data.broadinstitute.org/bbbc/BBBC021/BBBC021_v1_compound.csv
wget https://data.broadinstitute.org/bbbc/BBBC021/BBBC021_v1_moa.csv
wget https://data.broadinstitute.org/bbbc/BBBC021/analysis.cppipe
wget https://data.broadinstitute.org/bbbc/BBBC021/illum.cppipe
Je pense que c’est mieux expliqué ensemble de données lui-même.
Vous verrez également qu’il y a 2 pipelines, un pipeline de correction d’éclairage, puis un pipeline d’analyse. J’ai dû jouer avec les entrées et sorties exactes pour que cela fonctionne sans erreurs, mais comment cela fonctionne:
illum.cppipe
Week1/Week1_22123/
# Inputs to the Illumination AND Analysis Pipeline
Week1*.tif
# Outputs to the Illumination Pipeline
# Inputs to the Analysis Pipeline
Week1_22123_Illumctin.npy
Week1_222123_IllumActinAvg.npy
Week1_222123_IllumDAPI.npy
Week1_222123_IllumDAPIAvg.npy
Week1_222123_IllumTubulin.npy
Week1_222123_IllumTubulinAvg.npy
# Outputs to the Analysis Pipeline
overlay
labels
measurements
illum_corrected
Vous devriez avoir des images dans les répertoires illum_corrected, labels et overlay, et des fichiers csv dans le répertoire de mesures.
Le pipeline d’analyse semble s’attendre à ce que la sortie du pipeline d’éclairage existe dans le même répertoire.
Le fichier de données fourni avec l’ensemble comprend des données pour toutes les semaines. Nous utilisons uniquement la semaine 1 parce que je le fais sur mon ordinateur portable.
cd /project/BBBC021
head -n 1 BBBC021_v1_image.csv > images_week1.csv
cat BBBC021_v1_image.csv | grep Week1_ >> images_week1.csv
Nous n’utiliserons pas réellement ce fichier, mais il est utile de comprendre la structure de l’analyse.
Assurons-nous que nous pouvons traiter au moins la première image.
Vous devriez voir une sortie qui ressemble à ceci:
Ceci est un chèque, et seulement un chèque. Étant donné que le pipeline d’éclairage calcule certains fichiers d’éclairage moyens, nous ne devons pas utiliser l’approche diviser pour régner. Lorsque vous souhaitez exécuter l’intégralité du pipeline dans son ensemble, vous devez réexécuter illum.cpipe sans -f ou -l. Pour le dépannage et la réflexion sur la façon dont vous souhaitez regrouper votre analyse, vous pouvez simplement exécuter le premier ensemble d’images.
# Rerun this when you want to run the entire analysis
# It will take some time, so don’t run until you’re sure!
cellprofiler — run — run-headless
-p illum.cppipe
-o Week1/Week1_22123 -i Week1/Week1_22123
Cet ensemble de données est fourni avec un BBBC021_v1_image.csv, qui est un fichier de données CSV CellProfiler. Ceux-ci sont créés en fonction des regroupements de l’expérience, et les détails exacts qui entrent dans leur création sont particuliers à votre situation. Vous pouvez également utiliser les indicateurs -f et -l pour choisir le premier et le dernier à traiter par lots, ou une combinaison des deux. Avertissement, je ne suis pas biologiste, et la création de ces pipelines me dépasse. 😉
Puisque nous pouvons diviser l’analyse, nous voulons nous assurer que chaque division obtient son propre répertoire de sortie. Ceci est nécessaire pour s’assurer que nous n’encombrons pas la sortie à chaque fois!
Cela prendra un certain temps. Sur mon ordinateur portable, il a fallu environ 10 minutes pour terminer. Pour le plaisir, regardons les statistiques de Portainer!
Les images HCS apparaissent souvent très sombres lorsqu’elles sont ouvertes dans une visionneuse de fichiers standard. Ils sont bien lorsqu’ils sont ouverts avec CellProfiler, mais très foncés sinon. Si vous souhaitez pouvoir visualiser vos images à l’aide de la visionneuse d’images de votre système ou via un navigateur Web, vous pouvez utiliser imagemagick pour les convertir.
cd /project/BBBC021/Week1/Week1_22123/f1-l1/labels/Week1_22123
find -name ‘*tiff’ | sed ‘s/tiff//g’ | xargs -I {} convert -auto-level -quality 100 {}tiff {}png
Veuillez noter que les images .png produites ne seront pas adaptées à une nouvelle analyse ultérieure dans CellProfiler. Ils ne sont que pour une visualisation humaine!
C’est ça! J’espère que vous comprendrez mieux comment exécuter votre lot de pipeline CellProfiler!
Un merci spécial au Carpenter Lab, pour ses conseils et commentaires sur le contenu et la publication d’invités!
Nous avons utilisé un ensemble d’images BBBC021v1 [Caie et al., Molecular Cancer Therapeutics, 2010], disponible auprès de la Broad Bioimage Benchmark Collection [Ljosa et al., Nature Methods, 2012].
le Exemple de jeu de données humain vient directement du https://cellprofiler.org/examples/ page.