6 votes

L'installation de conda est-elle une opération à sécurité thread ?

Je voudrais installer des paquets dans plusieurs environnements Conda. Faire cela l'un après l'autre prend un certain temps, donc ce serait bien si je pouvais exécuter toutes les opérations de conda install pour chaque environnement en parallèle. Cela serait-il possible ou y a-t-il des conflits (concernant les liens durs et les fichiers de verrouillage, éventuellement) lorsque l'on essaie d'exécuter conda en parallèle ?

5voto

merv Points 14713

La réponse courte : Non, il ne doit pas être exécuté en même temps .

La majeure partie de la façon dont Conda gère la sécurité des transactions a été établie dans la version v4.3. Les notes de mise à jour de la v4.3.0 concernant les changements de verrous commentent explicitement l'exécution de processus multiples :

[Les utilisateurs sont avertis qu'un comportement non défini peut se produire lorsque conda est exécuté dans plusieurs processus et fonctionne sur les mêmes caches de paquets et/ou environnements.

Il semble que vous parlez d'environnements différents, donc cela ne devrait pas être un problème. Cependant, vous devez vous assurer que le ou les paquets à installer sont déjà téléchargés dans le cache des paquets, sinon ce n'est pas sûr.

Stratégie parallèle partielle

Il existe un --download-only qui ajoutera seulement le paquet au cache des paquets (c'est-à-dire la partie qui ne peut pas être faite simultanément). Mais le problème est que cela doit toujours être fait pour chaque environnement, puisque différents environnements peuvent avoir différentes contraintes (par exemple, différentes versions de Python) qui nécessitent différentes constructions du paquet.

Je pense que le mieux que vous puissiez faire au CLI est

  1. Exécuter conda install --download-only pkg séquentiellement sur chaque env, puis
  2. Exécuter conda install pkg en parallèle pour les envs.

Il ne s'agit toutefois pas d'une recommandation officielle, et des changements dans la façon dont Conda effectue les transactions pourraient faire en sorte que cela ne soit plus sûr. Je dirai également que je doute fort que cela vous fasse gagner beaucoup de temps ; en fait, cela pourrait même prendre plus de temps. Cette approche implique que chaque env doit résoudre et préparer les transactions deux fois, ce qui est généralement l'étape la plus exigeante en termes de calcul. La partie que vous finissez par paralléliser implique des transactions de disque, ce qui va être lié aux E/S, donc je doute un peu que vous gagniez du temps.

Des preuves que c'est sans danger

Bien que cela ne prouve pas positivement sa sécurité, nous pouvons examiner explicitement les transactions pour nous assurer que lorsque nous exécutons l'étape 2 ci-dessus, elle n'impliquera que des transactions LINK.

Pour tester cela, j'ai créé deux envs :

conda create -n foo -y python=3.6
conda create -n bar -y python=3.6

Ensuite, je vérifie la sortie de

conda install -n foo -d --json pandas

qui montre une liste des transactions FETCH et LINK. Les premières impliquent la manipulation du cache des paquets, tandis que les secondes ne concernent que l'environnement. Si je lance ensuite

conda install -n foo --download-only pandas

et vérifiez à nouveau,

conda install -n foo -d --json pandas

Je ne vois maintenant que les transactions LINK. Notamment, la même chose est maintenant vraie pour -n bar ce qui devrait renforcer le fait que l'étape 1 doit être réalisée de manière séquentielle. L'avantage de cette méthode est qu'elle n'entraîne pas le retéléchargement du même paquet ; l'inconvénient est qu'elle implique une résolution dans chaque environnement. Dans un environnement plus hétérogène, nous pourrions nous attendre à ce qu'il y ait différentes opérations FETCH dans chaque env.

Enfin, je peux exécuter l'installation finale parallèle

conda install -n foo -y pandas & conda install -n bar -y pandas &

ce qui est sûr si nous pouvons supposer que les transactions LINK dans différents environnements sont sûres.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X