suggestions to pick a computing server
AnsweredHi all,
I would like to buy a computing server. Any suggestions are very welcome.
Currently, I have AMPL/GUROBI installed on my desktop computer with an Intel(R) Core(TM) i99900 CPU running at 3.10 GHz. It is an eightcore 16thread CPU. Since solving MILP occupies almost all CPU power for a long time which largely affects my using the computer for other business, I now consider purchasing a server/PC. Please give me suggestions on choosing a computing server/PC that better suits for AMPL/GUROBI to solve MILP. Any suggestions are welcome. For example, for the choice of CPU, which brand is a better choice, Intel or AMD? The computing server I can afford is around the price of one using an Intel Xeon 4210R.
Thanks in advance.
Regards,
Anliang

Hi Anliang,
It is very hard to recommend specific hardware without knowing the kind of problems you like to solve. I hope these articles help guide your decision:
 How does Gurobi perform on different computer hardware? – Gurobi Support Portal
 Why does Gurobi perform differently on different machines? – Gurobi Support Portal
Generally, we recommend faster processors over more cores because often the singlecore performance is more important than better multithreading support.
In any case, you should spend some time on parameter tuning to cut down on the solving time. Refer to this section in our documentation for further information:
Parameter Tuning Tool (gurobi.com)
Cheers,
Matthias0 
Hi Matthias,
Thank you very much for the information, it is really helpful. Problems I like to solve are mostly integer linear programming (ILP), and sometimes I deal with mixed ILP.
If I understand it correctly, singlethread performance is very important to Gurobi performance. This means a higher clock frequency takes a higher priority over multicore. For commercial CPUs, desktop PCs normally have higher clock frequency than servers. Also, PCs usually support higher frequency RAM than servers do. In this way, it is better to choose highperformance PCs, right? Feel free to correct me if I am wrong.
For parameter tuning, I recently tried to move one instance that cannot be solved within three hours on my PC to neos server. And thanks to the free resources. The instance was solved within an hour where the method was changed from 5 on my PC (deterministic concurrent simplex) to 1 on neos servers (dual simplex). For the following solving info, could you please give more advice on parameter tuning for the same model with some other similar data files? Also, I find for most cases the optimal results came out very fast but the bound increased very slow (for a minimization problem). Which one is a better choice, proving optimality or improving the bound? Thanks again.
Checking ampl.mod for gurobi_options...
Checking ampl.com for gurobi_options...
Executing AMPL.
processing data.
processing commands.
Executing on prodexec7.neosserver.org
Presolve eliminates 24 constraints and 48 variables.
Adjusted problem:
2281 variables:
1608 binary variables
649 integer variables
24 linear variables
9162 constraints, all linear; 36252 nonzeros
894 equality constraints
8268 inequality constraints
1 linear objective; 1 nonzero.
Gurobi 9.1.1: bestbound=1
mipfocus=3
method=1
timing=1
wantsol=1
outlev=1
logfreq=100
logfile = RESULT\log\trail_N6S66method.txt
threads=4
Gurobi Optimizer version 9.1.1 build v9.1.1rc0 (linux64)
Thread count: 32 physical cores, 64 logical processors, using up to 4 threads
Optimize a model with 9162 rows, 2281 columns and 36252 nonzeros
Model fingerprint: 0x5403a7ad
Variable types: 24 continuous, 2257 integer (1608 binary)
Coefficient statistics:
Matrix range [1e+00, 1e+04]
Objective range [1e+00, 1e+00]
Bounds range [1e+00, 4e+03]
RHS range [1e+00, 3e+04]
Presolve removed 4008 rows and 300 columns
Presolve time: 0.05s
Presolved: 5154 rows, 1981 columns, 20868 nonzeros
Variable types: 0 continuous, 1981 integer (1332 binary)
Presolve removed 606 rows and 288 columns
Presolved: 4548 rows, 1693 columns, 19475 nonzeros
Root relaxation: objective 2.000000e+00, 318 iterations, 0.02 seconds
Nodes  Current Node  Objective Bounds  Work
Expl Unexpl  Obj Depth IntInf  Incumbent BestBd Gap  It/Node Time
0 0 2.00000 0 365  2.00000   0s
0 0 5.33333 0 446  5.33333   0s
H 0 0 272.0000000 5.33333 98.0%  1s
H 0 0 208.0000000 5.33333 97.4%  1s
H 0 0 192.0000000 5.33333 97.2%  1s
0 0 6.00000 0 304 192.00000 6.00000 96.9%  1s
H 0 0 191.0000000 6.00000 96.9%  1s
0 0 6.22222 0 281 191.00000 6.22222 96.7%  1s
H 0 0 160.0000000 6.22222 96.1%  1s
H 0 0 144.0000000 6.22222 95.7%  2s
0 0 8.00000 0 267 144.00000 8.00000 94.4%  2s
H 0 0 139.0000000 8.00000 94.2%  2s
H 0 0 128.0000000 8.00000 93.8%  2s
H 0 0 112.0000000 8.00000 92.9%  2s
0 0 8.00000 0 322 112.00000 8.00000 92.9%  2s
H 0 0 91.0000000 8.00000 91.2%  2s
H 0 0 75.0000000 8.00000 89.3%  3s
H 0 0 64.0000000 8.00000 87.5%  3s
0 0 8.00000 0 272 64.00000 8.00000 87.5%  3s
0 0 8.00000 0 360 64.00000 8.00000 87.5%  3s
0 0 8.00000 0 258 64.00000 8.00000 87.5%  4s
0 0 8.00000 0 338 64.00000 8.00000 87.5%  4s
0 0 9.00000 0 291 64.00000 9.00000 85.9%  5s
0 0 9.00000 0 378 64.00000 9.00000 85.9%  5s
0 0 10.00000 0 311 64.00000 10.00000 84.4%  6s
0 0 10.00000 0 329 64.00000 10.00000 84.4%  7s
0 0 11.00000 0 187 64.00000 11.00000 82.8%  7s
0 0 11.00000 0 274 64.00000 11.00000 82.8%  7s
0 0 11.00000 0 308 64.00000 11.00000 82.8%  8s
0 0 11.00000 0 341 64.00000 11.00000 82.8%  8s
0 0 11.00000 0 297 64.00000 11.00000 82.8%  9s
0 0 11.00000 0 297 64.00000 11.00000 82.8%  9s
0 2 11.00000 0 249 64.00000 11.00000 82.8%  9s
H 39 52 63.0000000 11.00000 82.5% 2931 15s
H 82 147 62.0000000 11.00000 82.3% 1550 17s
H 83 147 59.0000000 11.00000 81.4% 1532 17s
H 307 317 58.0000000 11.00000 81.0% 623 21s
H 399 435 55.0000000 11.00000 80.0% 581 24s
H 477 461 54.0000000 11.00000 79.6% 534 24s
H 917 833 51.0000000 11.00000 78.4% 409 32s
1228 1079 27.00000 38 264 51.00000 27.00000 47.1% 442 100s
1981 1336 27.47447 38 404 51.00000 27.00000 47.1% 688 202s
H 1993 1285 48.0000000 27.00000 43.8% 701 202s
H 2020 1236 47.0000000 27.00000 42.6% 711 209s
H 2029 1182 43.0000000 27.00000 37.2% 720 209s
2575 1316 38.00000 41 251 43.00000 29.00000 32.6% 1130 305s
3297 1528 32.02026 45 512 43.00000 30.00000 30.2% 1429 405s
3984 1657 35.00000 38 494 43.00000 32.00000 25.6% 1570 519s
4794 2124 33.18760 57 436 43.00000 32.00000 25.6% 1708 629s
5432 2597 35.00000 38 427 43.00000 32.00000 25.6% 1796 722s
6163 3010 33.37547 43 508 43.00000 33.00000 23.3% 1837 821s
6792 3293 34.00000 54 327 43.00000 34.00000 20.9% 1853 913s
8924 3816 38.00000 44 171 43.00000 35.00000 18.6% 1636 1046s
9480 3997 39.33925 44 306 43.00000 35.00000 18.6% 1629 1100s
10541 4390 38.00000 39 180 43.00000 35.00000 18.6% 1618 1214s
11765 4868 38.00000 45 193 43.00000 35.00000 18.6% 1610 1324s
13108 5325 36.50000 57 459 43.00000 35.00000 18.6% 1586 1428s
14094 5655 38.11023 51 375 43.00000 35.00000 18.6% 1580 1512s
15374 5830 38.00000 58 121 43.00000 37.00000 14.0% 1559 1652s
17702 5762 infeasible 47 43.00000 38.00000 11.6% 1431 1725s
20476 5616 38.00000 51 185 43.00000 38.00000 11.6% 1300 1802s
24142 5583 38.00000 45 117 43.00000 38.00000 11.6% 1181 1905s
28070 5607 38.00000 53 170 43.00000 38.00000 11.6% 1087 2005s
31601 5690 infeasible 53 43.00000 38.00000 11.6% 1022 2112s
33979 5836 38.00000 50 90 43.00000 38.00000 11.6% 989 2200s
36998 5897 38.00000 50 241 43.00000 38.00000 11.6% 958 2316s
39858 5879 38.00000 63 238 43.00000 38.00000 11.6% 936 2428s
41895 5887 38.00000 48 93 43.00000 38.00000 11.6% 922 2510s
44671 5851 38.00000 42 150 43.00000 38.00000 11.6% 905 2621s
47103 5818 38.00000 53 265 43.00000 38.00000 11.6% 893 2720s
49708 5224 infeasible 54 43.00000 39.00000 9.30% 876 2803s
53356 3370 infeasible 48 43.00000 40.00000 6.98% 847 2915s
55584 2718 infeasible 51 43.00000 40.00000 6.98% 840 3000s
59580 0 cutoff 51 43.00000 41.83569 2.71% 818 3106s
Cutting planes:
Gomory: 170
Cover: 2407
Implied bound: 116
Projected implied bound: 7
Clique: 12
MIR: 4507
StrongCG: 934
Flow cover: 8693
GUB cover: 30
Inf proof: 4
Zero half: 2998
Network: 86
RLT: 609
Relaxandlift: 433
Explored 60530 nodes (49361318 simplex iterations) in 3106.59 seconds
Thread count was 4 (of 64 available processors)
Solution count 10: 43 47 48 ... 63
Optimal solution found (tolerance 1.00e04)
Best objective 4.300000000000e+01, best bound 4.300000000000e+01, gap 0.0000%
Gurobi Optimizer version 9.1.1 build v9.1.1rc0 (linux64)
Thread count: 32 physical cores, 64 logical processors, using up to 4 threads
Optimize a model with 9162 rows, 2281 columns and 36252 nonzeros
Model fingerprint: 0x6fd81fbe
Coefficient statistics:
Matrix range [1e+00, 1e+04]
Objective range [1e+00, 1e+00]
Bounds range [1e+00, 4e+03]
RHS range [1e+00, 3e+04]
Iteration Objective Primal Inf. Dual Inf. Time
0 4.3000000e+01 2.025000e+03 0.000000e+00 0s
13 4.3000000e+01 0.000000e+00 0.000000e+00 0s
Solved in 13 iterations and 0.00 seconds
Optimal objective 4.300000000e+01
Times (seconds):
Input = 0.00859651
Solve = 11869.1 (summed over threads)
Output = 0.0454882
Elapsed = 3107
Gurobi 9.1.1: optimal solution; objective 43
49361318 simplex iterations
60530 branchandcut nodes
plus 13 simplex iterations for intbasis
suffix bestbound OUT;Regards,
Anliang0 
Hi Anliang,
I recommend trying out a few parameters to see how the solver performs (Cuts, Presolve, MIPFocus). Ideally, you should find a similar but smaller model that is faster to solve, so you don't have to invest so much time.
Please understand that we cannot do parameter tuning based on a single log file.
Cheers,
Matthias0 
Hi Matthias,
Thank you very much. One more question, I tend to buy machines with AMD CPUs. Is there any difference between machines with AMD and INTEL CPUs? The problems I solve are mostly Integer Linear Programming (ILP), and might also involve mixed ILP. The OS is usually WIN10 or WIN server. The software I use is AMPL/Gurobi, might switch to python with Gurobi.
Thank you for your time.
All the best,
Anliang
0 
Hi Anliang,
I don't think any of the two is clearly better than the other and they both produce capable CPUs. Note that I am by no means an expert concerning cuttingedge CPU hardware specifics, so please take my advice with a grain of salt.
Cheers,
Matthias0 
You might also try to continue using your current machine and restrict Gurobi to 6 cores. The remaining 2 cores might be sufficient for your other work. The difference between 6 and 8 cores for Gurobi might be less than you expect. Just give it a try.
0 
Thanks Matthias and Thomas. Currently, I am following the advice by limiting threads to 14. It works well.
0
Please sign in to leave a comment.
Comments
7 comments