Gurobi/fr: Difference between revisions

480 bytes added ,  3 months ago
Updating to match new version of source page
(Updating to match new version of source page)
(Updating to match new version of source page)
Line 4: Line 4:
[http://www.gurobi.com/ Gurobi] est une suite logicielle commerciale qui permet de résoudre des problèmes complexes d'optimisation. Nous abordons ici son utilisation pour la recherche sur nos grappes.
[http://www.gurobi.com/ Gurobi] est une suite logicielle commerciale qui permet de résoudre des problèmes complexes d'optimisation. Nous abordons ici son utilisation pour la recherche sur nos grappes.


<div class="mw-translate-fuzzy">
==Limites de la licence==
==Limites de la licence==
</div>


Nous dispensons le soutien technique pour la licence gratuite disponible sur [[Graham/fr|Graham]], [[Cedar/fr|Cedar]], [[Béluga]] et [[Niagara/fr|Niagara]]. Cette licence permet 4096 utilisations simultanées (avec jetons) et l'optimisation distribuée sur un maximum de 100 nœuds. Un utilisateur peut faire exécuter plusieurs tâches en simultané.
Nous dispensons le soutien technique pour la licence gratuite disponible sur [[Graham/fr|Graham]], [[Cedar/fr|Cedar]], [[Béluga]] et [[Niagara/fr|Niagara]]. Cette licence permet 4096 utilisations simultanées (avec jetons) et l'optimisation distribuée sur un maximum de 100 nœuds. Un utilisateur peut faire exécuter plusieurs tâches en simultané.
Vous devez cependant accepter certaines conditions. Faites parvenir un courriel au [[Technical_support/fr | soutien technique]] avec l'entente (''Academic Usage Agreement'') dûment complétée; vous pourrez ensuite utiliser les applications après un délai de quelques jours.
Vous devez cependant accepter certaines conditions. Faites parvenir un courriel au [[Technical_support/fr | soutien technique]] avec l'entente (''Academic Usage Agreement'') dûment complétée; vous pourrez ensuite utiliser les applications après un délai de quelques jours.


<div class="mw-translate-fuzzy">
===Academic Usage Agreement===
===Academic Usage Agreement===
</div>


My Alliance username is "_______" and I am a member of the academic institution "_____________________".  This message confirms that I will only use the Gurobi license provided on Digital Research Alliance of Canada systems for the purpose of non-commercial research project(s) to be published in publicly available article(s).
My Alliance username is "_______" and I am a member of the academic institution "_____________________".  This message confirms that I will only use the Gurobi license provided on Digital Research Alliance of Canada systems for the purpose of non-commercial research project(s) to be published in publicly available article(s).
Line 24: Line 28:
Si vous obtenez toujours ''Fail'', contactez le [[Technical_support/fr | soutien technique]] pour de l'assistance.
Si vous obtenez toujours ''Fail'', contactez le [[Technical_support/fr | soutien technique]] pour de l'assistance.


<div class="mw-translate-fuzzy">
===Utiliser un minimum de licences===
===Utiliser un minimum de licences===
</div>


Les licences peuvent être obtenues d’un seul serveur situé en Ontario; il est donc important de limiter les demandes autant que possible. Plutôt que d’obtenir une licence chaque fois que votre tâche requiert Gurobi, ce qui peut être des centaines, voire même des milliers de fois, '''faites en sorte que votre code fonctionne avec une seule licence pour toute la durée de la tâche, et ce, peu importe l’environnement que vous utilisez'''. Vous y gagnerez en performance puisque le temps de communication avec un serveur à distance est très long et de plus, notre serveur sera plus accessible aux autres utilisateurs de Gurobi.  <span style="color:red">Si votre code n’est pas adapté en conséquence, le serveur pourrait ne pas pouvoir émettre de licence de façon intermittente; si ceci se produit, nous vous demanderons de mettre fin à toutes vos tâches et de corriger votre programme.</span> Voyez comment créer un environnement pour tous vos modèles avec vos programmes en [https://www.gurobi.com/documentation/9.5/refman/cpp_env2.html C++] ou en [https://www.gurobi.com/documentation/9.5/refman/py_env_start.html Python]. Le même problème peut aussi survenir avec d’autres programmes qui fonctionnent en parallèle comme R, surtout quand plusieurs tâches simultanées sont soumises à l'ordonnanceur,
Les licences peuvent être obtenues d’un seul serveur situé en Ontario; il est donc important de limiter les demandes autant que possible. Plutôt que d’obtenir une licence chaque fois que votre tâche requiert Gurobi, ce qui peut être des centaines, voire même des milliers de fois, '''faites en sorte que votre code fonctionne avec une seule licence pour toute la durée de la tâche, et ce, peu importe l’environnement que vous utilisez'''. Vous y gagnerez en performance puisque le temps de communication avec un serveur à distance est très long et de plus, notre serveur sera plus accessible aux autres utilisateurs de Gurobi.  <span style="color:red">Si votre code n’est pas adapté en conséquence, le serveur pourrait ne pas pouvoir émettre de licence de façon intermittente; si ceci se produit, nous vous demanderons de mettre fin à toutes vos tâches et de corriger votre programme.</span> Voyez comment créer un environnement pour tous vos modèles avec vos programmes en [https://www.gurobi.com/documentation/9.5/refman/cpp_env2.html C++] ou en [https://www.gurobi.com/documentation/9.5/refman/py_env_start.html Python]. Le même problème peut aussi survenir avec d’autres programmes qui fonctionnent en parallèle comme R, surtout quand plusieurs tâches simultanées sont soumises à l'ordonnanceur,


<div class="mw-translate-fuzzy">
== Allocations interactives ==
== Allocations interactives ==
</div>


<div class="mw-translate-fuzzy">
===Ligne de commande===
===Ligne de commande===
</div>


  [gra-login2:~] salloc --time=1:00:0 --cpus-per-task=8 --mem=1G --account=def-xyz
  [gra-login2:~] salloc --time=1:00:0 --cpus-per-task=8 --mem=1G --account=def-xyz
Line 37: Line 47:
  [gra800:~] gurobi_cl --help
  [gra800:~] gurobi_cl --help


<div class="mw-translate-fuzzy">
===Interpréteur interactif ===
===Interpréteur interactif ===
   
   
Line 53: Line 64:
  gurobi> m.runtime                          see ****
  gurobi> m.runtime                          see ****
  gurobi> help()
  gurobi> help()
</div>


Line 67: Line 79:
Référence : https://www.gurobi.com/documentation/8.1/refman/recording_api_calls.html
Référence : https://www.gurobi.com/documentation/8.1/refman/recording_api_calls.html


<div class="mw-translate-fuzzy">
== Soumettre une tâche en lots sur une grappe ==
== Soumettre une tâche en lots sur une grappe ==
</div>


Une fois que votre script Slurm est prêt, vous pouvez le soumettre à la queue avec la commande <code>sbatch script-name.sh</code>. Vous pouvez vérifier l'état de vos tâches dans la queue avec la commande <code>sq</code>. Les scripts suivants solutionnent deux problèmes qui se trouvent dans le répertoire <tt> examples</tt> de chaque module Gurobi.
Une fois que votre script Slurm est prêt, vous pouvez le soumettre à la queue avec la commande <code>sbatch script-name.sh</code>. Vous pouvez vérifier l'état de vos tâches dans la queue avec la commande <code>sq</code>. Les scripts suivants solutionnent deux problèmes qui se trouvent dans le répertoire <tt> examples</tt> de chaque module Gurobi.


=== Exemple de données ===  
<div class="mw-translate-fuzzy">
=== Exemple de données ===
</div>


Le script Slurm suivant utilise l' [https://www.gurobi.com/documentation/9.5/quickstart_linux/solving_the_model_using_th.html interface ligne de commande] pour résoudre un [https://www.gurobi.com/documentation/9.5/quickstart_linux/solving_a_simple_model_the.html modèle simple pour produire des pièces de monnaie] écrit en [https://www.gurobi.com/documentation/9.5/refman/lp_format.html format LP]. La dernière ligne montre comment des [https://www.gurobi.com/documentation/9.5/refman/parameters.html paramètres] peuvent être passés directement à l'outil ligne de commande <code>gurobi_cl</code> avec des arguments simples. Pour sélectionner les meilleurs [https://www.gurobi.com/documentation/9.5/refman/parameters.html paramètres] pour un problème particulier et pour choisir les valeurs optimales, voyez les sections <i>Performance and Parameters</i> et <i>Algorithms and Search</I> dans la page [https://support.gurobi.com/hc/en-us/categories/360000840331-Knowledge-Base Knowledge Base] et dans la [https://www.gurobi.com/documentation/ documentation Gurobi].
Le script Slurm suivant utilise l' [https://www.gurobi.com/documentation/9.5/quickstart_linux/solving_the_model_using_th.html interface ligne de commande] pour résoudre un [https://www.gurobi.com/documentation/9.5/quickstart_linux/solving_a_simple_model_the.html modèle simple pour produire des pièces de monnaie] écrit en [https://www.gurobi.com/documentation/9.5/refman/lp_format.html format LP]. La dernière ligne montre comment des [https://www.gurobi.com/documentation/9.5/refman/parameters.html paramètres] peuvent être passés directement à l'outil ligne de commande <code>gurobi_cl</code> avec des arguments simples. Pour sélectionner les meilleurs [https://www.gurobi.com/documentation/9.5/refman/parameters.html paramètres] pour un problème particulier et pour choisir les valeurs optimales, voyez les sections <i>Performance and Parameters</i> et <i>Algorithms and Search</I> dans la page [https://support.gurobi.com/hc/en-us/categories/360000840331-Knowledge-Base Knowledge Base] et dans la [https://www.gurobi.com/documentation/ documentation Gurobi].
Line 94: Line 110:
}}
}}


=== Exemple avec Python ===  
<div class="mw-translate-fuzzy">
=== Exemple avec Python ===
</div>


Le script Slurm suivant solutionne un [https://www.gurobi.com/documentation/9.5/examples/a_list_of_the_grb_examples.html modèle simple de l'emplacement de divers sites] avec [https://www.gurobi.com/documentation/9.5/examples/facility_py.html Gurobi Python]. L'exemple montre comment  [https://www.gurobi.com/documentation/9.5/refman/parameters.html#sec:Parameters paramétrer les fils] en nombre égal à celui des coeurs alloués à la tâche en générant un fichier  [https://www.gurobi.com/documentation/9.5/quickstart_linux/using_a_grb_env_file.html gurobi.env] dans le répertoire de travail quand vous utilisez [https://www.gurobi.com/documentation/9.5/refman/python_parameter_examples.html l'interface Gurobi Python].
Le script Slurm suivant solutionne un [https://www.gurobi.com/documentation/9.5/examples/a_list_of_the_grb_examples.html modèle simple de l'emplacement de divers sites] avec [https://www.gurobi.com/documentation/9.5/examples/facility_py.html Gurobi Python]. L'exemple montre comment  [https://www.gurobi.com/documentation/9.5/refman/parameters.html#sec:Parameters paramétrer les fils] en nombre égal à celui des coeurs alloués à la tâche en générant un fichier  [https://www.gurobi.com/documentation/9.5/quickstart_linux/using_a_grb_env_file.html gurobi.env] dans le répertoire de travail quand vous utilisez [https://www.gurobi.com/documentation/9.5/refman/python_parameter_examples.html l'interface Gurobi Python].
Line 121: Line 139:
== Environnements virtuels Python ==
== Environnements virtuels Python ==


<div class="mw-translate-fuzzy">
Gurobi a sa propre version de Python qui ne contient aucun autre paquet de tiers autre que Gurobi. Pour utiliser Gurobi avec d'autres paquets Python comme NumPy, Matplotlib, Pandas et autres, il faut [[Python/fr#Créer_et_utiliser_un_environnement_virtuel|créer un environnement virtuel Python]] dans lequel seront installés <code>gurobipy</code> et par exemple <code>pandas</code>.<br>
Gurobi a sa propre version de Python qui ne contient aucun autre paquet de tiers autre que Gurobi. Pour utiliser Gurobi avec d'autres paquets Python comme NumPy, Matplotlib, Pandas et autres, il faut [[Python/fr#Créer_et_utiliser_un_environnement_virtuel|créer un environnement virtuel Python]] dans lequel seront installés <code>gurobipy</code> et par exemple <code>pandas</code>.<br>
Avant de commencer, il faut décider quelle combinaison des versions Gurobi et Python nous voulons utiliser. La liste suivante montre les versions de Python supportées par les versions principales de Gurobi dans les environnements standards (StdEnv).
Avant de commencer, il faut décider quelle combinaison des versions Gurobi et Python nous voulons utiliser. La liste suivante montre les versions de Python supportées par les versions principales de Gurobi dans les environnements standards (StdEnv).
</div>


  [name@server ~] module load StdEnv/2016; module load gurobi/8.1.1; cd $EBROOTGUROBI/lib; ls -d python*
  [name@server ~] module load StdEnv/2016; module load gurobi/8.1.1; cd $EBROOTGUROBI/lib; ls -d python*
Line 140: Line 160:
As mentioned near the bottom of this official document [http://support.gurobi.com/hc/en-us/articles/360044290292-How-do-I-install-Gurobi-for-Python How-do-I-install-Gurobi-for-Python] the previously recommended method for installing Gurobi for Python with <code>setup.py</code> has been deprecated to be only usable with Gurobi 10 versions (and older).  Therefore a new section has been added below which shows how to simultaneously download a compatible binary wheel from [[pypi.org/project/gurobipy|pypi.org]] and convert it into a format usable with a newly recommended command to install Gurobi for Python with Gurobi 11 versions (and newer).
As mentioned near the bottom of this official document [http://support.gurobi.com/hc/en-us/articles/360044290292-How-do-I-install-Gurobi-for-Python How-do-I-install-Gurobi-for-Python] the previously recommended method for installing Gurobi for Python with <code>setup.py</code> has been deprecated to be only usable with Gurobi 10 versions (and older).  Therefore a new section has been added below which shows how to simultaneously download a compatible binary wheel from [[pypi.org/project/gurobipy|pypi.org]] and convert it into a format usable with a newly recommended command to install Gurobi for Python with Gurobi 11 versions (and newer).


<div class="mw-translate-fuzzy">
=== Versions Gurobi 10.0.3 et moins récentes ===
=== Versions Gurobi 10.0.3 et moins récentes ===
</div>


Il faut suivre les étapes suivantes une fois sur chaque système avec StdEnv2023 et moins récents. Chargez d'abord les modules pour [[Python/fr#Créer_et_utiliser_un_environnement_virtuel|créer l'environnement virtuel]], puis activez cet environnement.
Il faut suivre les étapes suivantes une fois sur chaque système avec StdEnv2023 et moins récents. Chargez d'abord les modules pour [[Python/fr#Créer_et_utiliser_un_environnement_virtuel|créer l'environnement virtuel]], puis activez cet environnement.
Line 179: Line 201:
}}
}}


<div class="mw-translate-fuzzy">
=== Versions Gurobi 11.0.0 (et plus récentes) ===
=== Versions Gurobi 11.0.0 (et plus récentes) ===
</div>


Once again, following steps need to be done once per system and are usable with StdEnv/2023 and older.  First load the modules to [[Python#Creating_and_using_a_virtual_environment|create the virtual environment]] and activate it.  Version 11.0.0 is skipped since it has been observed to seg fault in at least one example versus Version 11.0.1 which runs smoothly.
Once again, following steps need to be done once per system and are usable with StdEnv/2023 and older.  First load the modules to [[Python#Creating_and_using_a_virtual_environment|create the virtual environment]] and activate it.  Version 11.0.0 is skipped since it has been observed to seg fault in at least one example versus Version 11.0.1 which runs smoothly.
38,789

edits