From 85327920ad2c3779b82d0cf15d9965689934d611 Mon Sep 17 00:00:00 2001 From: jessieyu Date: Fri, 17 Apr 2020 16:27:17 -0400 Subject: [PATCH 1/4] pace job submit --- qiskit/aqua/utils/run_circuits.py | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/qiskit/aqua/utils/run_circuits.py b/qiskit/aqua/utils/run_circuits.py index b5c2deac71..36645008de 100644 --- a/qiskit/aqua/utils/run_circuits.py +++ b/qiskit/aqua/utils/run_circuits.py @@ -26,11 +26,13 @@ from qiskit.providers.jobstatus import JOB_FINAL_STATES from qiskit.providers.basicaer import BasicAerJob from qiskit.qobj import QasmQobj +from qiskit.exceptions import QiskitError from qiskit.aqua.aqua_error import AquaError from qiskit.aqua.utils.backend_utils import (is_aer_provider, is_basicaer_provider, is_simulator_backend, - is_local_backend) + is_local_backend, + is_ibmq_provider) MAX_CIRCUITS_PER_JOB = os.environ.get('QISKIT_AQUA_MAX_CIRCUITS_PER_JOB', None) MAX_GATES_PER_JOB = os.environ.get('QISKIT_AQUA_MAX_GATES_PER_JOB', None) @@ -134,15 +136,24 @@ def _maybe_split_qobj_by_gates(qobjs, qobj): def _safe_submit_qobj(qobj, backend, backend_options, noise_config, skip_qobj_validation): # assure get job ids while True: - job = run_on_backend(backend, qobj, backend_options=backend_options, - noise_config=noise_config, - skip_qobj_validation=skip_qobj_validation) try: + job = run_on_backend(backend, qobj, backend_options=backend_options, + noise_config=noise_config, + skip_qobj_validation=skip_qobj_validation) job_id = job.job_id() break - except JobError as ex: - logger.warning("FAILURE: Can not get job id, Resubmit the qobj to get job id." + except QiskitError as ex: + logger.warning("FAILURE: Can not get job id, Resubmit the qobj to get job id. " "Terra job error: %s ", ex) + if is_ibmq_provider(backend) and 'Error code: 3458' in str(ex): + # TODO Use IBMQBackendJobLimitError when new ibmq-provider is released. + oldest_running = backend.jobs(limit=1, descending=False, + status=['QUEUED', 'VALIDATING', 'RUNNING']) + if oldest_running: + oldest_running = oldest_running[0] + logger.warning("Job limit reached, waiting for job %s to finish " + "before submitting the next one.", oldest_running.job_id()) + oldest_running.wait_for_final_state(timeout=300) except Exception as ex: # pylint: disable=broad-except logger.warning("FAILURE: Can not get job id, Resubmit the qobj to get job id." "Error: %s ", ex) From 8fa175f0d4b85b773c4a26d0e176288fce5cfae9 Mon Sep 17 00:00:00 2001 From: jessieyu Date: Fri, 17 Apr 2020 17:05:55 -0400 Subject: [PATCH 2/4] spelling --- qiskit/aqua/utils/run_circuits.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qiskit/aqua/utils/run_circuits.py b/qiskit/aqua/utils/run_circuits.py index 36645008de..ff274b4d36 100644 --- a/qiskit/aqua/utils/run_circuits.py +++ b/qiskit/aqua/utils/run_circuits.py @@ -146,7 +146,7 @@ def _safe_submit_qobj(qobj, backend, backend_options, noise_config, skip_qobj_va logger.warning("FAILURE: Can not get job id, Resubmit the qobj to get job id. " "Terra job error: %s ", ex) if is_ibmq_provider(backend) and 'Error code: 3458' in str(ex): - # TODO Use IBMQBackendJobLimitError when new ibmq-provider is released. + # TODO Use IBMQBackendJobLimitError when new IBM Q provider is released. oldest_running = backend.jobs(limit=1, descending=False, status=['QUEUED', 'VALIDATING', 'RUNNING']) if oldest_running: From 169397c148ce61830158588b3a41e0411b28ff74 Mon Sep 17 00:00:00 2001 From: jessieyu Date: Tue, 21 Apr 2020 12:54:52 -0400 Subject: [PATCH 3/4] changelog --- CHANGELOG.md | 2 ++ requirements.txt | 2 +- setup.py | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9a9fe80b07..2ce42748b6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -36,6 +36,8 @@ Changed - Classical algorithms renamed, former names deprecated (#851) - Chemistry process algorithm result returns result object, lines, dict return deprecated (#861) - Measurement error mitigation supports different output orders on same qubits (#865) +- If ibmq-provider is used and job limit is reached, `run_circuit` now waits for a previous job + to finish before submitting the next one. Removed ------- diff --git a/requirements.txt b/requirements.txt index 9d2dd7eb30..74bf8c0966 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ -qiskit-terra>=0.11.0 +qiskit-terra>=0.13.0 qiskit-ignis>=0.2.0 scipy>=1.0 sympy>=1.3 diff --git a/setup.py b/setup.py index 4cbf228553..15f1b2f340 100644 --- a/setup.py +++ b/setup.py @@ -26,7 +26,7 @@ Qiskit Finance, Qiskit Machine Learning and Qiskit Optimization to experiment with real-world applications to quantum computing.""" requirements = [ - "qiskit-terra>=0.11.0", + "qiskit-terra>=0.13.0", "qiskit-ignis>=0.2.0", "scipy>=1.0", "sympy>=1.3", From bbd4e30dcbf1664b41bb07de618425b3b585c8b3 Mon Sep 17 00:00:00 2001 From: jessieyu Date: Tue, 21 Apr 2020 12:59:20 -0400 Subject: [PATCH 4/4] add PR number --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9306d63d16..30fe8f1c2d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -37,7 +37,7 @@ Changed - Chemistry process algorithm result returns result object, lines, dict return deprecated (#861) - Measurement error mitigation supports different output orders on same qubits (#865) - If ibmq-provider is used and job limit is reached, `run_circuit` now waits for a previous job - to finish before submitting the next one. + to finish before submitting the next one. (#906) Removed -------