Gurobi/fr: Difference between revisions

4,020 bytes added ,  5 months ago
Updating to match new version of source page
No edit summary
Tag: Manual revert
(Updating to match new version of source page)
Line 96: Line 96:
=== 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 108: Line 109:
#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>


<div class="mw-translate-fuzzy">
#module load StdEnv/2016      # for versions < 9.0.3  
#module load StdEnv/2016      # for versions < 9.0.3  
module load StdEnv/2020      # for versions > 9.0.2
module load StdEnv/2020      # for versions > 9.0.2
</div>


<div class="mw-translate-fuzzy">
module load gurobi/9.5.0
module load gurobi/9.5.0
</div>


echo "Threads ${SLURM_CPUS_ON_NODE:-1}" > gurobi.env
echo "Threads ${SLURM_CPUS_ON_NODE:-1}" > gurobi.env
Line 121: Line 127:
== Environnements virtuels Python ==
== Environnements virtuels Python ==


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>.  
<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>.
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>


<div class="mw-translate-fuzzy">
{{Commands|prompt=[name@server ~] $
{{Commands|prompt=[name@server ~] $
|module load StdEnv/2016  (not needed for gurobi>9.0.2)
|module load StdEnv/2016  (not needed for gurobi>9.0.2)
Line 141: Line 148:
   python3.5_utf32  python3.8_utf32  python3.6_utf32  python3.7_utf32
   python3.5_utf32  python3.8_utf32  python3.6_utf32  python3.7_utf32
}}
}}
</div>


Nous remarquons que <code>gurobi/8.1.1</code> apporte sa propre installation de <code>python2.7/</code> et des paquets pour Python 2.7, 3.5, 3.6 et 3.7 (<code>pythonX.Y_utf32/</code>),
=== Installing Gurobi for Python ===
alors que <code>gurobi/9.0.1</code> utilise par défaut <code>python3.7/</code> et les paquets pour Python 2.7, 3.5, 3.6, 3.7 et 3.8 (<code>pythonX.Y_utf32/</code>).


As mentioned near the bottom of this official document [[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 howto simultaneously download a compatible binary wheel from [[pypi.org/project/gurobipy|pypi.org]] and simultaneously 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">
=== Créer un environnement virtuel ===
=== Créer un environnement virtuel ===
</div>


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


<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 159: Line 173:
}}
}}
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>


<div class="mw-translate-fuzzy">
{{Commands|prompt=(env_gurobi) [name@server ~] $
{{Commands|prompt=(env_gurobi) [name@server ~] $
|  pip install --no-index  pandas
|  pip install --no-index  pandas
Line 173: Line 189:
}}
}}
La troisième et dernière étape est d'installer gurobipy dans l'environnement&nbsp;:
La troisième et dernière étape est d'installer gurobipy dans l'environnement&nbsp;:
</div>
{{Commands|prompt=(env_gurobi) [name@server ~] $
| mkdir /tmp/$USER
| cp -r $EBROOTGUROBI/{lib,setup.py} /tmp/$USER
| cd /tmp/$USER
| python setup.py install
(env_gurobi) [roberpj@gra-login1:/tmp/roberpj] python setup.py install
/home/roberpj/env_gurobi/lib/python3.11/site-packages/setuptools/_core_metadata.py:158: SetuptoolsDeprecationWarning: Invalid config.
!!
        ********************************************************************************
        newlines are not allowed in `summary` and will break in the future
        ********************************************************************************
!!
  write_field('Summary', single_line(summary))
removing /tmp/roberpj/build
(env_gurobi) [roberpj@gra-login1:/tmp/roberpj]
| deactivate
[name@server ~]
}}
=== Gurobi Versions 11.0.0 (and newer) ===
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.
{{Commands|prompt=[name@server ~] $
| module load gurobi/11.0.1 python
| virtualenv --no-download  ~/env_gurobi
| source ~/env_gurobi/bin/activate
}}
As before, install any needed Python packages.  Since the following matrix example requires <code>numpy</code> we install the pandas package :
{{Commands|prompt=(env_gurobi) [name@server ~] $
|  pip install --no-index  pandas
}}
Next install gurobipy into the environment. As mentioned above and in [[https://support.gurobi.com/hc/en-us/articles/360044290292-How-do-I-install-Gurobi-for-Python|this article]] the use of setup.py to install Gurobi for python is deprecated starting with Gurobi 11.  Both pip and conda are given as alternatives, however since conda should not be used on alliance systems, the pip approach will be demonstrated here. The installation of gurobipy is slightly complicated since Alliance linux systems are setup with gentoo prefix.  As a result neither A) the recommended command to download and install the gurobipy extension from the public PyPI server <code>pip install gurobipy==11.0.1</code> mentioned in the article line or B) the offline command to install the wheel with <code>python -m pip install --find-links <wheel-dir> --no-index gurobipy</code>, will work.  Instead a script available from the alliance maybe utilized to download and simultaneously convert the existing wheel into an usable format with a new name.  There is one caveat, for each new Gurobi version the researcher must go into https://pypi.org/project/gurobipy/11.0.1/#history and click on the desired version followed by the <code>Download files</code> button located in the left hand menu.  Finally click to copy the https link for the wheel file (named gurobipy-11.0.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl in the case of Gurobi 11.0.1) and paste it as the --url argument as shown below :


<div class="mw-translate-fuzzy">
{{Commands|prompt=(env_gurobi) [name@server ~] $
{{Commands|prompt=(env_gurobi) [name@server ~] $
| cd $EBROOTGUROBI
| cd $EBROOTGUROBI
Line 194: Line 249:
| cd
| cd
}}
}}
</div>
<div class="mw-translate-fuzzy">
=== Environnement virtuel pour Gurobi ===
</div>


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


<div class="mw-translate-fuzzy">
{{Commands|prompt=[name@server ~] $
| module load gurobi/9.0.1
  source ~/env_gurobi/bin/activate
  (env_gurobi) python my_gurobi_script.py
}}
</div>
<div class="mw-translate-fuzzy">
module load StdEnv/2016.4
module load gurobi/9.0.1
</div>
{{Commands|prompt=(env_gurobi) [name@server ~] $
| python $EBROOTGUROBI/examples/python/matrix1.py
}}
<div class="mw-translate-fuzzy">
Les scripts Python peuvent maintenant importer Pandas et Gurobi.
Les scripts Python peuvent maintenant importer Pandas et Gurobi.
</div>


{{Commands|prompt=[name@server ~] $
{{Commands|prompt=[name@server ~] $
Line 206: Line 287:
   from gurobipy import *
   from gurobipy import *
   etc
   etc
}}
Nous pouvons maintenant activer notre environnement Gurobi avec
{{Commands|prompt=[name@server ~] $
| module load gurobi/9.0.1
  source ~/env_gurobi/bin/activate
  (env_gurobi) python my_gurobi_script.py
}}
}}


Remarquez que nous utilisons maintenant <code>python</code> plutôt que <code>gurobi.sh</code>. L'exemple suivant est un script que nous pouvons utiliser pour une tâche&nbsp;:
Submit your script to the queue by running <code>sbatch my_slurm_script.sh</code> as per usual :


<div class="mw-translate-fuzzy">
{{File
{{File
   |name=gurobi-py_example.sh
   |name=gurobi-py_example.sh
Line 226: Line 300:
#SBATCH --cpus-per-task=1    # number of CPUs to use
#SBATCH --cpus-per-task=1    # number of CPUs to use
#SBATCH --mem-per-cpu=1000M  # memory per CPU (in MB)
#SBATCH --mem-per-cpu=1000M  # memory per CPU (in MB)
</div>
module load StdEnv/2023
module load gurobi/11.0.1
# module load scipy-stack      # uncomment if needed


module load StdEnv/2016.4
echo "Threads ${SLURM_CPUS_ON_NODE:-1}" > gurobi.env
module load gurobi/9.0.1


source ~/env_gurobi/bin/activate
source ~/env_gurobi/bin/activate
python my_gurobi_script.py
}}


echo "Threads ${SLURM_CPUS_ON_NODE:-1}" > gurobi.env  # set number of threads
<div class="mw-translate-fuzzy">
 
source ~/env_gurobi/bin/activate
python  my_gurobi_script.py
</div>
}}


== Utiliser Gurobi avec Java ==
== Utiliser Gurobi avec Java ==
38,789

edits