Envie de gagner du temps quand tu lances un pipeline de tractographie ? Il suffit d’activer le mode parrallel de pyAFQ : ajoute ou modifie la clé parallel_params et choisis le nombre de cœurs. Voilà la méthode détaillée, expliquée pas à pas.
Sommaire
TogglePourquoi choisir le mode parrallel ?
Tractographier un cerveau complet peut prendre des heures sur un ordinateur portable. Le mode parrallel répartit les étapes sur plusieurs cœurs ou machines. Chaque cœur calcule une partie des fibres, puis pyAFQ rassemble le résultat. Ainsi :
- la durée totale baisse presque à proportion du nombre de cœurs ;
- le ventilateur de l’ordinateur souffle moins longtemps ;
- la file d’attente sur un serveur partagé est plus courte.
Le gain dépend de la taille des données et du disque. Sur un jeu de données standard (10 sujets, 60 directions, résolution 1,5 mm), passer de engine: 'serial' à engine: 'ray' avec 8 cœurs divise souvent le temps par quatre.
Qu’est-ce que parallel_params ?
parallel_params est un petit dictionnaire placé dans le fichier de configuration ou donné directement dans le code Python. Il contient trois éléments clés :
- engine : type de moteur (
'serial','joblib','ray','slurm'). - n_jobs : nombre de cœurs à utiliser,
-1signifie tous les cœurs disponibles. - backend : option avancée pour
'joblib'(par exemple'loky'pour la plupart des systèmes Linux).
Si rien n’est précisé, pyAFQ travaille en mode serial.
Comment adapter le fichier de configuration ?
Voici la marche à suivre pas à pas :
- Ouvre ton fichier
config.toml. - Ajoute la section
[BIDS_PARAMS]si elle n’existe pas encore. - Place la clé
parallel_paramsà l’intérieur :
tomlCopierModifier[BIDS_PARAMS]
parallel_params = "{'engine': 'ray', 'n_jobs': -1}"
- Sauvegarde le fichier.
- Lance le pipeline comme d’habitude. pyAFQ lit le fichier, détecte l’option et démarre plusieurs acteurs Ray en arrière-plan.
Tu préfères le faire dans un script ? Déclare simplement :
pythonCopierModifiermy_afq = GroupAFQ(
bids_path='subj_data',
parallel_params={'engine': 'joblib', 'n_jobs': 4, 'backend': 'loky'}
)
Exemple pas à pas pour un script ?
Imaginons que tu veuilles traiter trois sujets sur un serveur disposant de 32 cœurs.
- Importe les modules principaux :
pythonCopierModifierfrom AFQ.api.group import GroupAFQ
- Définis les chemins :
pythonCopierModifierbids = "/data/my_study"
out = "/data/afq_out"
- Prépare les paramètres :
pythonCopierModifierpar = {'engine': 'ray', 'n_jobs': 28}
- Instancie l’objet :
pythonCopierModifierpipe = GroupAFQ(bids_path=bids, output_dir=out,
parallel_params=par)
- Lance le pipeline :
pythonCopierModifierpipe.run()
À ce stade Ray ouvre un gestionnaire interne et distribue les tâches, tandis que pyAFQ suit leur progression.
Tableau des moteurs disponibles
| Moteur | Point fort principal | Quand l’utiliser |
|---|---|---|
| Serial | Simplicité totale | Debug, machines à 1 cœur |
| Joblib | Bonne compatibilité, peu de dépendances | Postes locaux, tests rapides |
| Ray | Excellente montée en charge | Stations multi-cœurs, petits clusters |
| Slurm | Gestion de files, planification sur cluster universitaire | Grands centres de calcul |
Les moteurs sont interchangeables : change simplement la valeur d’engine et assure-toi que la bibliothèque correspondante est installée.

Astuces pour accélérer le calcul
- Choisis n_jobs = -1 pour laisser pyAFQ utiliser tous les cœurs disponibles.
- Place les données et la sortie sur un SSD pour limiter l’attente liée au disque.
- Réduis le nombre de graines si tu veux seulement un test rapide.
- Vérifie que ta RAM est suffisante : 16 Go pour un sujet moyen, 64 Go pour des cohortes plus grandes.
- Sur un cluster, réserve un nœud entier plutôt que plusieurs cœurs éparpillés : tu éviteras le trafic réseau interne.
Erreurs courantes et solutions ?
- Message : “Engine not found”
- Vérifie que la bibliothèque correspondante (
ray,joblibou l’outil Slurm) est bien installée.
- Vérifie que la bibliothèque correspondante (
- Blocage à 0 %
- Sur certains systèmes, le backend
'multiprocessing'de joblib se heurte à la sécurité. Passe à'loky'ou teste Ray.
- Sur certains systèmes, le backend
- Mémoire saturée
- Diminue
n_jobsou le nombre de graines, ou ajoute un fichier d’échange.
- Diminue
- Sortie vide
- Assure-toi que le dossier de sortie est accessible en écriture et n’est pas déjà rempli de fichiers verrouillés.
Garde ces points en tête : la plupart des soucis viennent d’un mauvais chemin ou d’une version de bibliothèque obsolète.
En appliquant ces étapes, tu passeras d’une analyse longue et linéaire à un traitement rapide et fluide. Ajoute simplement la clé parallel_params, choisis le moteur qui correspond à ton matériel, et profite !



