Skip to content

Job operations are not parallelizable #300

@george-moussa

Description

@george-moussa

I'm trying to submit and process results of multiple jobs in parallel but I'm noticing that, in many cases, jobs are submitted sequentially.

import datetime
import imp
from multiprocessing import Pool
from azure.quantum import Workspace
from azure.quantum.optimization import Problem, ProblemType, Term
from azure.quantum.target.toshiba import SimulatedBifurcationMachine
import logging


def create_problem():
    problem = Problem('Test_Problem', problem_type=ProblemType.pubo)
    problem.add_terms([
        Term(c=1, indices=[]),
        Term(c=2, indices=[1, 2]),
        Term(c=-3, indices=[1, 2]),
        Term(c=1, indices=[0, 2])
    ])
    return problem


def exec_job(no):
    workspace = Workspace (
        resource_id = "<workspace-id>",
        location= "<location>"
    )

    problem = create_problem()
    solver = SimulatedBifurcationMachine(workspace, loops=0, timeout=10)
    print(str(datetime.datetime.utcnow()), "\t[%d] solver.submit() start" % no)
    job = solver.submit(problem)
    print(str(datetime.datetime.utcnow()), "\t[%d] job.id=%s" % (no, str(job.id)))

    print(str(datetime.datetime.utcnow()), "\t[%d] job.get_results() start" % no)
    result = job.get_results()
    print(str(datetime.datetime.utcnow()), "\t[%d] job.details=%s" % (no, str(job.details)))


if __name__ == '__main__':
    logging.basicConfig(level=logging.DEBUG)

    njobs = 2
    with Pool(processes=njobs) as pool:
        pool.map(func=exec_job, iterable=range(njobs))

For the above, output is:
2022-04-21 18:40:23.466530 [0] solver.submit() start
2022-04-21 18:40:23.542727 [1] solver.submit() start
2022-04-21 18:40:28.752803 [1] job.id=810bc3bb-c1a2-11ec-baa1-b831b575aea6
2022-04-21 18:40:28.752803 [1] job.get_results() start
..........2022-04-21 18:40:52.826348 [1] job.details={..........}
2022-04-21 18:44:19.108243 [0] job.id=81018a8e-c1a2-11ec-adf4-b831b575aea6
2022-04-21 18:44:19.109211 [0] job.get_results() start
..........2022-04-21 18:44:42.799796 [0] job.details={..............}

You can see that job 1 was submitted and awaited while job 0 hasn't been submitted at the same time and was done 4 mins after the first job.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions