Gurobi/fr: Difference between revisions

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 2: Line 2:
[[Category:Software]]
[[Category:Software]]


<div class="mw-translate-fuzzy">
[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. Des renseignements additionnels seront fournis dès que disponibles.
[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. Des renseignements additionnels seront fournis dès que disponibles.
</div>


==Limites de la licence==
==Limites de la licence==


<div class="mw-translate-fuzzy">
Calcul Canada dispense 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é.
Calcul Canada dispense 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>


===Academic Usage Agreement===
===Academic Usage Agreement===
Line 13: Line 17:
  My Compute Canada username is "_______" and I am a member of the academic institution "_____________________".  This message confirms that I will only use the Compute Canada Gurobi license provided on Compute Canada systems for the purpose of non-commercial research project(s) to be published in publicly available article(s).
  My Compute Canada username is "_______" and I am a member of the academic institution "_____________________".  This message confirms that I will only use the Compute Canada Gurobi license provided on Compute Canada systems for the purpose of non-commercial research project(s) to be published in publicly available article(s).


<div class="mw-translate-fuzzy">
===Configurer votre compte===
===Configurer votre compte===
Il n'est pas nécessaire de créer le fichier <code>~/.licenses/gurobi.lic</code>. Les paramètres pour l'utilisation de la licence Gurobi de Calcul Canada sont configurés par défaut quand un module Gurobi est chargé sur une grappe. Pour savoir si votre nom d'utilisateur a été ajouté à la licence et qu'elle fonctionne correctement, lancez la commande qui suit.
Il n'est pas nécessaire de créer le fichier <code>~/.licenses/gurobi.lic</code>. Les paramètres pour l'utilisation de la licence Gurobi de Calcul Canada sont configurés par défaut quand un module Gurobi est chargé sur une grappe. Pour savoir si votre nom d'utilisateur a été ajouté à la licence et qu'elle fonctionne correctement, lancez la commande qui suit.
</div>


  $ module load gurobi
  $ module load gurobi
Line 25: Line 31:
===Minimizing License Checkouts===
===Minimizing License Checkouts===


Note that all Gurobi license checkouts are handled by a single license server located in Ontario, so that it is important for you to assure that your use of Gurobi limits as much as possible license checkout attempts.  Rather than checking out a license for each invocation of Gurobi in a job - which may occur dozens or even hundreds of times - you should ensure that your program, whatever the language or computing environment used, only makes a single license checkout and then reuses this license token throughout the lifetime of the job. This will improve your job's performance since contacting a remote license server is very costly in time and also improve the responsiveness of our license server for everyone who is using Gurobi.  <span style="color:red">Failure to use Gurobi carefully in this regard may ultimately result in random intermittent license checkout failures for all users.  If this happens you will be contacted and asked to kill all your jobs until your program is fixed and tested to ensure the problem is gone.</span>    Some documentation on this subject for C++ programs may be found [https://www.gurobi.com/documentation/9.5/refman/cpp_env2.html here], explaining how to create a single Gurobi environment which can then be used for all your models. Python users can consult this [https://www.gurobi.com/documentation/9.5/refman/py_env_start.html page], which discusses how to implement this same idea of using a single environment and thus a single license token with multiple models.  Other programs when run in parallel that call Gurobi such as R can also easily trigger the problem especially when many simultaneous jobs are submitted and/or run in parallel.
Note that all Gurobi license checkouts are handled by a single license server located in Ontario; it is therefore important for you to make sure that your use of Gurobi limits as much as possible license checkout attempts.  Rather than checking out a license for each invocation of Gurobi in a job--which may occur dozens or even hundreds of times--you should ensure that your program, whatever the language or computing environment used, only makes a single license checkout and then reuses this license token throughout the lifetime of the job. This will improve your job's performance since contacting a remote license server is very costly in time and will also improve the responsiveness of our license server for everyone who is using Gurobi.  <span style="color:red">Failure to use Gurobi carefully in this regard may ultimately result in random intermittent license checkout failures for all users.  If this happens, you will be contacted and asked to kill all your jobs until your program is fixed and tested to ensure the problem is gone.</span>    Some documentation on this subject for C++ programs may be found [https://www.gurobi.com/documentation/9.5/refman/cpp_env2.html here], explaining how to create a single Gurobi environment which can then be used for all your models. Python users can consult this [https://www.gurobi.com/documentation/9.5/refman/py_env_start.html page], which discusses how to implement this same idea of using a single environment and thus a single license token with multiple models.  Other programs when run in parallel that call Gurobi such as R can also easily trigger the problem especially when many simultaneous jobs are submitted and/or run in parallel.


== Allocations interactives ==
== Allocations interactives ==
Line 59: Line 65:
  **** https://www.gurobi.com/documentation/8.1/refman/attributes.html
  **** https://www.gurobi.com/documentation/8.1/refman/attributes.html


<div class="mw-translate-fuzzy">
===Répéter des appels API===
===Répéter des appels API===
Il est possible d'enregistrer des appels API et de rejouer l'enregistrement avec la commande
Il est possible d'enregistrer des appels API et de rejouer l'enregistrement avec la commande
</div>


  [gra800:~] gurobi_cl recording000.grbr
  [gra800:~] gurobi_cl recording000.grbr
Line 68: Line 76:
== Soumettre une tâche en lots sur une grappe ==
== Soumettre une tâche en lots sur une grappe ==


<div class="mw-translate-fuzzy">
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.
</div>


=== Exemple de données ===  
=== Exemple de données ===  


<div class="mw-translate-fuzzy">
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].
{{File
{{File
Line 83: Line 94:
#SBATCH --mem=4G              # specify total memory
#SBATCH --mem=4G              # specify total memory
#SBATCH --nodes=1            # do not change
#SBATCH --nodes=1            # do not change
</div>


#module load StdEnv/2016      # for versions < 9.0.3  
#module load StdEnv/2016      # for versions < 9.0.3  
Line 95: Line 107:
=== Exemple avec Python ===  
=== Exemple avec Python ===  


<div class="mw-translate-fuzzy">
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] avec un fichier  [https://www.gurobi.com/documentation/9.5/quickstart_linux/using_a_grb_env_file.html gurobi.env] créé dynamiquement 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] avec un fichier  [https://www.gurobi.com/documentation/9.5/quickstart_linux/using_a_grb_env_file.html gurobi.env] créé dynamiquement quand vous utilisez [https://www.gurobi.com/documentation/9.5/refman/python_parameter_examples.html l'interface Gurobi Python].
Ceci doit être fait dans le répertoire de travail pour chaque tâche soumise, autrement Gurobi lancera par défaut autant de [https://www.gurobi.com/documentation/9.5/refman/threads.html#parameter:Threads fils d'exécution] qu'il y a de cœurs physiques dans le nœud de calcul plutôt que d'utiliser le nombre de cœurs physiques alloués à la tâche par l'ordonnanceur, ce qui risque de ralentir la tâche et nuire aux tâches exécutées sur le même nœud par les autres utilisateurs.  
Ceci doit être fait dans le répertoire de travail pour chaque tâche soumise, autrement Gurobi lancera par défaut autant de [https://www.gurobi.com/documentation/9.5/refman/threads.html#parameter:Threads fils d'exécution] qu'il y a de cœurs physiques dans le nœud de calcul plutôt que d'utiliser le nombre de cœurs physiques alloués à la tâche par l'ordonnanceur, ce qui risque de ralentir la tâche et nuire aux tâches exécutées sur le même nœud par les autres utilisateurs.  
Line 107: Line 120:
#SBATCH --mem=4G              # specify total memory
#SBATCH --mem=4G              # specify total memory
#SBATCH --nodes=1            # do not change
#SBATCH --nodes=1            # do not change
</div>


#module load StdEnv/2016      # for versions < 9.0.3  
#module load StdEnv/2016      # for versions < 9.0.3  
Line 124: Line 138:
</div>  
</div>  


<div class="mw-translate-fuzzy">
Avant de commencer, il faut déterminer la combinaison des versions de Gurobi et de Python à utiliser. Par exemple, comparez les versions Python prises en charge par les modules 8.11 et 9.0.1.
Avant de commencer, il faut déterminer la combinaison des versions de Gurobi et de Python à utiliser. Par exemple, comparez les versions Python prises en charge par les modules 8.11 et 9.0.1.
</div>


{{Commands|prompt=[name@server ~] $
{{Commands|prompt=[name@server ~] $
Line 150: Line 166:
Dans cet exemple, nous voulons créer un environnement Python basé sur <code>python/3.7</code> où nous voulons utiliser <code>gurobi/9.0.1</code> et installer le paquet Pandas. Il faut suivre les étapes suivantes une fois sur chaque système. Chargez d'abord les modules pour [[Python/fr#Créer_et_utiliser_un_environnement_virtuel|créer l'environnement virtuel]], puis activez cet environnement.
Dans cet exemple, nous voulons créer un environnement Python basé sur <code>python/3.7</code> où nous voulons utiliser <code>gurobi/9.0.1</code> et installer le paquet Pandas. Il faut suivre les étapes suivantes une fois sur chaque système. Chargez d'abord les modules pour [[Python/fr#Créer_et_utiliser_un_environnement_virtuel|créer l'environnement virtuel]], puis activez cet environnement.


<div class="mw-translate-fuzzy">
{{Commands|prompt=[name@server ~] $
{{Commands|prompt=[name@server ~] $
| module load gurobi/9.0.1 python/3.7
| module load gurobi/9.0.1 python/3.7
Line 160: Line 177:
}}
}}
Maintenant que l'environnement est activé, installez les paquets que nous voulons utiliser, ici <code>pandas</code>. Par exemple
Maintenant que l'environnement est activé, installez les paquets que nous voulons utiliser, ici <code>pandas</code>. Par exemple
</div>


{{Commands|prompt=(env_gurobi) [name@server ~] $
{{Commands|prompt=(env_gurobi) [name@server ~] $
Line 209: Line 227:
  }}
  }}


<div class="mw-translate-fuzzy">
Nous pouvons maintenant activer notre environnement Gurobi avec
Nous pouvons maintenant activer notre environnement Gurobi avec
</div>


{{Commands|prompt=[name@server ~] $
{{Commands|prompt=[name@server ~] $
Line 258: Line 278:
  == Utiliser Gurobi avec des notebooks Jupyter ==
  == Utiliser Gurobi avec des notebooks Jupyter ==


Vous trouverez de l'information sur [https://www.gurobi.com/resources/ Resources], [https://www.gurobi.com/resources/?category-filter=code-example Code and Modeling Examples] et [https://www.gurobi.com/resource/modeling-examples-using-the-gurobi-python-api-in-jupyter-notebook/ Optimization with Python – Jupyter Notebook Modeling Examples].  Sur le site [https://support.gurobi.com/ support.gurobi.com] faites une recherche avec <I>Jupyter Notebooks</I>.   
<div class="mw-translate-fuzzy">
Vous trouverez de l'information sur [https://www.gurobi.com/resources/ Resources], [https://www.gurobi.com/resources/?category-filter=code-example Code and Modeling Examples] et [https://www.gurobi.com/resource/modeling-examples-using-the-gurobi-python-api-in-jupyter-notebook/ Optimization with Python – Jupyter Notebook Modeling Examples].  Sur le site [https://support.gurobi.com/ support.gurobi.com] faites une recherche avec <I>Jupyter Notebooks</I>.
</div>  


<div class="mw-translate-fuzzy">
Voir aussi cette [https://youtu.be/Qk3Le5HBxeg?t=2310 démonstration, à 38min 28sec de la vidéo].
Voir aussi cette [https://youtu.be/Qk3Le5HBxeg?t=2310 démonstration, à 38min 28sec de la vidéo].
</div>


== Comment citer Gurobi ==
== Comment citer Gurobi ==


Voir [https://support.gurobi.com/hc/en-us/articles/360013195592-How-do-I-cite-Gurobi-software-for-an-academic-publication- ''How do I cite Gurobi software for an academic publication?'']
Voir [https://support.gurobi.com/hc/en-us/articles/360013195592-How-do-I-cite-Gurobi-software-for-an-academic-publication- ''How do I cite Gurobi software for an academic publication?'']
38,789

edits