Qiskit / qiskit-aer

Aer is a high performance simulator for quantum circuits that includes noise models
https://qiskit.github.io/qiskit-aer/
Apache License 2.0
488 stars 360 forks source link

Error with mpi and cp gate #1592

Open anavasca opened 2 years ago

anavasca commented 2 years ago

Informations

What is the current behavior?

when I launch the following program I get an error when distributing it with mpi:

from IPython.display import clear_output from qiskit import * from qiskit.visualization import plot_histogram import numpy as np from qiskit.tools.monitor import job_monitor from qiskit.providers.aer import AerSimulator import sys import warnings from qiskit.utils import algorithm_globals

warnings.filterwarnings('ignore', category=DeprecationWarning) pi = np.pi

algorithm_globals.random_seed = 1

###############################################################################################

def qftdagger(circ, n_qubits): """n-qubit QFTdagger the first n qubits in circ""" for qubit in range(int(nqubits/2)): circ.swap(qubit, n_qubits-qubit-1) for j in range(0,nqubits): for m in range(j): circ.cp(-np.pi/float(2**(j-m)), m, j) circ_.h(j)

###############################################################################################

def qpepre(circ, nqubits): circ.h(range(nqubits)) circ.x(n_qubits)

for x in reversed(range(n_qubits)):
    for _ in range(2**(n_qubits-1-x)):
        circ_.cp(1, n_qubits-1-x, n_qubits)

###############################################################################################

def run_job(circ, backend, shots=10000): job=execute(circ, backend, shots =shots,blocking_enable=True, blocking_qubits=15,seed_simulator=1) return job.result().get_counts()

###############################################################################################

simulator = AerSimulator(method="statevector")

###############################################################################################

def get_pi_estimate(n_qubits):

# create the circuit
circ = QuantumCircuit(n_qubits + 1, n_qubits)
# create the input state
qpe_pre(circ, n_qubits)
# apply a barrier
circ.barrier()
# apply the inverse fourier transform
qft_dagger(circ, n_qubits)
# apply  a barrier
circ.barrier()
# measure all but the last qubits
circ.measure(range(n_qubits), range(n_qubits))

# run the job and get the results
counts = run_job(circ, backend=simulator, shots=10000)
# print(counts) 

# get the count that occurred most frequently
max_counts_result = max(counts, key=counts.get)
max_counts_result = int(max_counts_result, 2)

# solve for pi from the measured counts
theta = max_counts_result/2**n_qubits
return (1./(2*theta))

###############################################################################################

nqs = 20

thisnq_pi_estimate = get_pi_estimate(nqs) print(f"{nqs} qubits, pi ≈ {thisnq_pi_estimate}")

###############################################################################################

Steps to reproduce the problem

when I launch the following program with the statement :

!time mpirun -np 1 -quiet -hostfile /home/ubuntu/qiskit_pruebas/host/all_hosts_gas python /home/ubuntu/qiskit_pruebas/scripts/QPE/qpe.py

I get the following terminal error:

terminate called after throwing an instance of 'std::invalid_argument' what(): QubitUnitary::State::invalid instruction 'cp'. [ip-172-31-31-126:03815] Process received signal [ip-172-31-31-126:03815] Signal: Aborted (6) [ip-172-31-31-126:03815] Signal code: (-6) [ip-172-31-31-126:03815] [ 0] /lib/x86_64-linux-gnu/libc.so.6(+0x43090)[0x7f49a71eb090] [ip-172-31-31-126:03815] [ 1] /lib/x86_64-linux-gnu/libc.so.6(gsignal+0xcb)[0x7f49a71eb00b] [ip-172-31-31-126:03815] [ 2] /lib/x86_64-linux-gnu/libc.so.6(abort+0x12b)[0x7f49a71ca859] [ip-172-31-31-126:03815] [ 3] /lib/x86_64-linux-gnu/libstdc++.so.6(+0x9e911)[0x7f499e4f0911] [ip-172-31-31-126:03815] [ 4] /lib/x86_64-linux-gnu/libstdc++.so.6(+0xaa38c)[0x7f499e4fc38c] [ip-172-31-31-126:03815] [ 5] /lib/x86_64-linux-gnu/libstdc++.so.6(+0xa9369)[0x7f499e4fb369] [ip-172-31-31-126:03815] [ 6] /lib/x86_64-linux-gnu/libstdc++.so.6(gxx_personality_v0+0x2a1)[0x7f499e4fbd21] [ip-172-31-31-126:03815] [ 7] /lib/x86_64-linux-gnu/libgcc_s.so.1(+0x10bef)[0x7f49a5015bef] [ip-172-31-31-126:03815] [ 8] /lib/x86_64-linux-gnu/libgcc_s.so.1(_Unwind_Resume+0x12a)[0x7f49a50165aa] [ip-172-31-31-126:03815] [ 9] /home/ubuntu/.local/lib/python3.8/site-packages/qiskit/providers/aer/backends/controller_wrappers.cpython-38-x86_64-linux-gnu.so(+0x2e8c3)[0x7f499a3208c3] [ip-172-31-31-126:03815] [10] /home/ubuntu/.local/lib/python3.8/site-packages/qiskit/providers/aer/backends/controller_wrappers.cpython-38-x86_64-linux-gnu.so(+0x4e6da)[0x7f499a3406da] [ip-172-31-31-126:03815] [11] /home/ubuntu/.local/lib/python3.8/site-packages/qiskit/providers/aer/backends/controller_wrappers.cpython-38-x86_64-linux-gnu.so(+0x4e7fd)[0x7f499a3407fd] [ip-172-31-31-126:03815] [12] /lib/x86_64-linux-gnu/libgomp.so.1(+0x1a78e)[0x7f499801878e] [ip-172-31-31-126:03815] [13] /lib/x86_64-linux-gnu/libpthread.so.0(+0x8609)[0x7f49a718d609] [ip-172-31-31-126:03815] [14] /lib/x86_64-linux-gnu/libc.so.6(clone+0x43)[0x7f49a72c7133] [ip-172-31-31-126:03815] End of error message terminate called after throwing an instance of 'std::invalid_argument' what(): QubitUnitary::State::invalid instruction 'cp'. [ip-172-31-24-171:03726] Process received signal [ip-172-31-24-171:03726] Signal: Aborted (6) [ip-172-31-24-171:03726] Signal code: (-6) [ip-172-31-24-171:03726] [ 0] /lib/x86_64-linux-gnu/libc.so.6(+0x43090)[0x7f1d0ab20090] [ip-172-31-24-171:03726] [ 1] /lib/x86_64-linux-gnu/libc.so.6(gsignal+0xcb)[0x7f1d0ab2000b] [ip-172-31-24-171:03726] [ 2] /lib/x86_64-linux-gnu/libc.so.6(abort+0x12b)[0x7f1d0aaff859] [ip-172-31-24-171:03726] [ 3] /lib/x86_64-linux-gnu/libstdc++.so.6(+0x9e911)[0x7f1d01e25911] [ip-172-31-24-171:03726] [ 4] /lib/x86_64-linux-gnu/libstdc++.so.6(+0xaa38c)[0x7f1d01e3138c] [ip-172-31-24-171:03726] [ 5] /lib/x86_64-linux-gnu/libstdc++.so.6(+0xa9369)[0x7f1d01e30369] [ip-172-31-24-171:03726] [ 6] /lib/x86_64-linux-gnu/libstdc++.so.6(__gxx_personality_v0+0x2a1)[0x7f1d01e30d21] [ip-172-31-24-171:03726] [ 7] /lib/x86_64-linux-gnu/libgcc_s.so.1(+0x10bef)[0x7f1d0894abef] [ip-172-31-24-171:03726] [ 8] /lib/x86_64-linux-gnu/libgcc_s.so.1(_Unwind_Resume+0x12a)[0x7f1d0894b5aa] [ip-172-31-24-171:03726] [ 9] /home/ubuntu/.local/lib/python3.8/site-packages/qiskit/providers/aer/backends/controller_wrappers.cpython-38-x86_64-linux-gnu.so(+0x2e8c3)[0x7f1cfdc558c3] [ip-172-31-24-171:03726] [10] /home/ubuntu/.local/lib/python3.8/site-packages/qiskit/providers/aer/backends/controller_wrappers.cpython-38-x86_64-linux-gnu.so(+0x4e6da)[0x7f1cfdc756da] [ip-172-31-24-171:03726] [11] /home/ubuntu/.local/lib/python3.8/site-packages/qiskit/providers/aer/backends/controller_wrappers.cpython-38-x86_64-linux-gnu.so(+0x4e7fd)[0x7f1cfdc757fd] [ip-172-31-24-171:03726] [12] /lib/x86_64-linux-gnu/libgomp.so.1(+0x1a78e)[0x7f1cfb94d78e] [ip-172-31-24-171:03726] [13] /lib/x86_64-linux-gnu/libpthread.so.0(+0x8609)[0x7f1d0aac2609] [ip-172-31-24-171:03726] [14] /lib/x86_64-linux-gnu/libc.so.6(clone+0x43)[0x7f1d0abfc133] [ip-172-31-24-171:03726] End of error message terminate called after throwing an instance of 'std::invalid_argument' what(): QubitUnitary::State::invalid instruction 'cp'. [ip-172-31-27-140:04166] Process received signal [ip-172-31-27-140:04166] Signal: Aborted (6) [ip-172-31-27-140:04166] Signal code: (-6) [ip-172-31-27-140:04166] [ 0] /lib/x86_64-linux-gnu/libc.so.6(+0x43090)[0x7f1288d38090] [ip-172-31-27-140:04166] [ 1] /lib/x86_64-linux-gnu/libc.so.6(gsignal+0xcb)[0x7f1288d3800b] [ip-172-31-27-140:04166] [ 2] /lib/x86_64-linux-gnu/libc.so.6(abort+0x12b)[0x7f1288d17859] [ip-172-31-27-140:04166] [ 3] /lib/x86_64-linux-gnu/libstdc++.so.6(+0x9e911)[0x7f128003d911] [ip-172-31-27-140:04166] [ 4] /lib/x86_64-linux-gnu/libstdc++.so.6(+0xaa38c)[0x7f128004938c] [ip-172-31-27-140:04166] [ 5] /lib/x86_64-linux-gnu/libstdc++.so.6(+0xa9369)[0x7f1280048369] [ip-172-31-27-140:04166] [ 6] /lib/x86_64-linux-gnu/libstdc++.so.6(gxx_personality_v0+0x2a1)[0x7f1280048d21] [ip-172-31-27-140:04166] [ 7] /lib/x86_64-linux-gnu/libgcc_s.so.1(+0x10bef)[0x7f1286b62bef] [ip-172-31-27-140:04166] [ 8] /lib/x86_64-linux-gnu/libgcc_s.so.1(_Unwind_Resume+0x12a)[0x7f1286b635aa] [ip-172-31-27-140:04166] [ 9] /home/ubuntu/.local/lib/python3.8/site-packages/qiskit/providers/aer/backends/controller_wrappers.cpython-38-x86_64-linux-gnu.so(+0x2e8c3)[0x7f127be6d8c3] [ip-172-31-27-140:04166] [10] /home/ubuntu/.local/lib/python3.8/site-packages/qiskit/providers/aer/backends/controller_wrappers.cpython-38-x86_64-linux-gnu.so(+0x4e6da)[0x7f127be8d6da] [ip-172-31-27-140:04166] [11] /home/ubuntu/.local/lib/python3.8/site-packages/qiskit/providers/aer/backends/controller_wrappers.cpython-38-x86_64-linux-gnu.so(+0x4e7fd)[0x7f127be8d7fd] [ip-172-31-27-140:04166] [12] /lib/x86_64-linux-gnu/libgomp.so.1(+0x1a78e)[0x7f1279b6578e] [ip-172-31-27-140:04166] [13] /lib/x86_64-linux-gnu/libpthread.so.0(+0x8609)[0x7f1288cda609] [ip-172-31-27-140:04166] [14] /lib/x86_64-linux-gnu/libc.so.6(clone+0x43)[0x7f1288e14133] [ip-172-31-27-140:04166] End of error message

however when I launch the program with the statement :

!time mpirun -np 1 -quiet -hostfile /home/ubuntu/qiskit_pruebas/host/all_hosts_gas python /home/ubuntu/qiskit_pruebas/scripts/QPE/qpe.py

I get the right result:

20 qubits, pi ≈ 3.1415936627398344

What is the expected behavior?

should get the same result but in less time.

Suggested solutions

as the error indicates, I think the problem is related to the cp gate.

anavasca commented 2 years ago

as in the past, I believe that @doichanj can solve the problem. Thank you very much for everything.

hhorii commented 1 year ago

@doichanj investigated this issue and found that it is from gate fusion and not from GPU/MPI implementation. I created a new issue #1657. Once it is resolved, please check the above problem can be resolved.