The first question I have is what kind of machine are you running on? What CPU exists, with how many cores and threads, and how much RAM.
Why is num_search_workers = 6 being chosen?
If you really have just 6 threads on your CPU, then running multiple jobs will just slow everything down.
Is there any chance to spin up virtual machines in somebody's cloud (Google/AWS/Azure/etc)?
I usually try to get as fast a machine as possible (currently my workstation is 16 cores, 32 threads AMD ryzen thing) with sufficient RAM, which in turn makes processing one job as fast as possible. If I have multiple jobs, then they get lined up sequentially, and my fast machine does them as fast as it can. I found using 32 workers per task is much faster--for my work, ymmv--than splitting them into, say, 4 jobs with 8 workers each.
Others I'm sure have more experience running on cloud machines with essentially unlimited CPUs.
James
-- You received this message because you are subscribed to the Google Groups "or-tools-discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email to or-tools-discu...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/or-tools-discuss/e5ef5087-ff00-4eac-8fea-f432c7d0d2d7n%40googlegroups.com.
James E. Marca
Activimetrics LLC
By task I meant complete job. So suppose I want to try out 3 different parameter settings. I would run the three jobs sequentially. not in parallel, and would use all available cores. I let CPSAT use the parallelism to its best advantage.
So on mine I usually use 0 workers. Setting
num_search_workers=0 means use all available, but that may
be a problem on a virtual machine, so you might want to set it to
32.
If I know in advance how to break up a problem...for example, partition some tasks/resources into one run, and the others into another because they are mostly independent...then I break up the problem manually/programmatically, run job A, then run job B.
If I had a server with, say, 128 threads, I would just use python to launch 4 solver process runs in parallel with completely different calling rules, and then explicitly set search workers to 32 each, so that the concurrent jobs do not get into fights over using CPUs.
I do that with the routing solver more often, because it is single-threaded. So, for example, if I have routing jobs for a client in Pittsburgh, Philadelphia, and Peoria, then I'll set up three jobs with the relevant calling parameters along with a worker pool in python, collect the results, then report results when all the jobs are done.
James
To view this discussion on the web visit https://groups.google.com/d/msgid/or-tools-discuss/a2c05482-d6b4-497a-a56a-c722e0114428n%40googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/or-tools-discuss/b8e26c67-283c-4357-bc0d-adbd2a98f188n%40googlegroups.com.