Gurobi
- Description
- Gurobi Optimizer is a tool for mathematical programming, also known as mathematical optimization. It includes capabilities in linear programming (LP), mixed-integer linear programming (MILP), mixed-integer quadratic programming (MIQP), quadratic programming (QP), quadratically constrained programming (QCP), and mixed-integer quadratically constrained programming (MIQCP).
- Modulefile
gurobi
- Documentation
- Vendor documentation
Contents
License conditions
Gurobi is a commercial product and controlled by a license that restricts who can use it. The user must be a researcher at the university which hosts the computers on which the software is running. So, only Dalhousie University researchers may use Gurobi on Glooscap (which is located at Dalhousie), Memorial University researchers may only use Gurobi on Placentia, and so on. In order to ensure compliance, we restrict access to the software using access control lists. If you wish to use Gurobi, contact support via email and we will add you to the access control list if you are at a qualified institution.
Presently Gurobi is only installed and licensed at Glooscap and Placentia. If you are at another institution which hosts an ACENET cluster and wish to use Gurobi, contact support and we will try to arrange a license for that cluster.
Examples
Serial jobs
Here is an example script to use with the job scheduler, and how to submit it:
$ cat gurobi-sample-job #$ -l h_rt=0:5:0,test=true #$ -cwd #$ -j y # Create environment file in current directory setting the number of threads: echo "Threads $NSLOTS" > gurobi.env module load gurobi gurobi_cl /usr/local/gurobi-7.5.1/linux64/examples/data/coins.lp $ qsub gurobi-sample-job Your job 12345678 ("gurobi-sample-job") has been submitted.
Gurobi/Python jobs using can be submitted as follows:
$ cat gurobi-py-sample-job #$ -l h_rt=0:5:0,test=true #$ -cwd #$ -j y # Create environment file in current directory setting the number of threads: echo "Threads $NSLOTS" > gurobi.env module load gurobi gurobi.sh /usr/local/gurobi-7.5.1/linux64/examples/python/facility.py $ qsub gurobi-py-sample-job Your job 12345679 ("gurobi-py-sample-job") has been submitted.
Parallel jobs
Gurobi can utilize multiple threads, which can increase the performance.
This example submission script will create a Gurobi environment file in the current working directory to tell Gurobi how many Threads have been requested for the job. Note: This can cause interference between jobs that are running in the same directory but request different numbers of threads.
#$ -cwd #$ -j y #$ -l h_rt=0:30:0,test=true #$ -pe openmp 4 # Create environment file in current directory setting the number of threads: echo "Threads $NSLOTS" > gurobi.env module load gurobi echo "Example job from .lp file:" gurobi_cl ${GUROBI_HOME}/examples/data/coins.lp echo "Example job from .py file:" gurobi.sh ${GUROBI_HOME}/examples/python/facility.py
Other ways of managing how many threads Gurobi is using
Clusters are usually set up so that by default all jobs run on one core only. However Gurobi doesn’t ‘honor’ all of the normal ways of telling software about that (primarily OMP_NUM_THREADS environment variable). For some solvers Gurobi will by default try to use all cores on the compute node, which possibly performs much worse than it should be.
...more content coming soon...
Interactive jobs
For interactive work, we recommend asking for an interactive job:
$ module load gurobi $ qrsh -l h_rt=1:0:0,test=true gurobi.sh Python 2.7.13 (default, Jun 8 2017, 07:12:38) [GCC 4.4.7 20120313 (Red Hat 4.4.7-18)] on linux2 Type "help", "copyright", "credits" or "license" for more information. Gurobi Interactive Shell (linux64), Version 7.5.1 Copyright (c) 2017, Gurobi Optimization, Inc. Type "help()" for help gurobi> m = read('/usr/local/gurobi-7.5.1/linux64/examples/data/coins.lp') gurobi> m.optimize() ...
See Job Control for more on running and monitoring jobs. See Modules for more on module load
and related commands.