Commit 2bd4ab27 authored by Murali's avatar Murali
Browse files

Qiskit 1.0

parent 88695566
Loading
Loading
Loading
Loading
+17 −12
Original line number Diff line number Diff line
@@ -3,10 +3,11 @@ Sample code to test the GPU (and multi-GPU) capability of aer_simulator
Reference: https://qiskit.org/ecosystem/aer/howtos/running_gpu.html
'''

from qiskit import QuantumCircuit, transpile
from qiskit import QuantumCircuit
from qiskit_aer import AerSimulator
from qiskit.circuit.library import QuantumVolume
from qiskit.execute_function import execute
from qiskit_ibm_runtime import SamplerV2 as Sampler
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
import argparse
import time

@@ -16,22 +17,26 @@ parser.add_argument("--gpu", default=False, action='store_true', help="Use GPU b
parser.add_argument("--gpumultiple", default=False, action='store_true', help="Use multiple GPUs for the backend of Aer simulator.")
args = parser.parse_args()

if args.gpu: sim = AerSimulator(method='statevector', device='GPU')
elif args.gpumultiple: sim = AerSimulator(method='statevector', device='GPU', blocking_enable=True, blocking_qubits=18)
else: sim = AerSimulator(method='statevector')
print(f'Simulator: {sim}')
if args.gpu: backend = AerSimulator(method='statevector', device='GPU')
elif args.gpumultiple: backend = AerSimulator(method='statevector', device='GPU', blocking_enable=True, blocking_qubits=18)
else: backend = AerSimulator(method='statevector')
print(f'Simulator: {backend}')
pm = generate_preset_pass_manager(backend=backend, optimization_level=1)

qubits = args.NUM_QUBITS 
t = time.time()
circ = transpile(QuantumVolume(qubits, seed = 0))
circ.measure_all()
qc = QuantumVolume(qubits, seed = 0)
qc.measure_all()
elpsdt1 = time.time() - t

isa_circuit = pm.run(qc)
# setup Sampler
sampler = Sampler(backend)

t = time.time()
# if args.gpu: result = execute(circ, sim, shots=100, blocking_enable=True, blocking_qubits=23).result()
# else: result = execute(circ, sim, shots=100).result()
result = execute(circ, sim, shots=100).result()
# Run the job
job = sampler.run([isa_circuit])
# Grab results from the job
result = job.result()
elpsdt2 = time.time() - t

print(f'N qubits: {qubits}; GPU: {args.gpu}; multiple-GPU: {args.gpumultiple};\nTime elapsed 1:  {int(elpsdt1/60)} min {elpsdt1%60:.2f} sec\nTime elapsed 2:  {int(elpsdt2/60)} min {elpsdt2%60:.2f} sec')
+33 −41
Original line number Diff line number Diff line
import numpy as np
import time
import os
from qiskit import QuantumCircuit, transpile
from qiskit.providers.jobstatus import JobStatus
from qiskit import QuantumCircuit
from qiskit_ibm_runtime import SamplerV2 as Sampler
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager

import argparse
parser = argparse.ArgumentParser()
@@ -12,23 +13,21 @@ args = parser.parse_args()
backend_type = args.backend_type
# Choose the simulator or backend to run the quantum circuit
if backend_type=='ideal':
  # Using ideal simulator, Aer's qasm_simulator (works even without IBMQ account, don't have to wait in a queue)
  from qiskit.providers.aer import QasmSimulator
  backend = QasmSimulator()
    # Using ideal simulator, AerSimulator (works even without IBMQ account, don't have to wait in a queue)
    from qiskit_aer import AerSimulator
    backend = AerSimulator()
elif backend_type=='fake':
    # Using qiskit's fake provider (works even without IBMQ account, don't have to wait in a queue)
  from qiskit.providers import fake_provider
  backend = getattr(fake_provider, 'FakeNairobi')() #  FakePerth  FakeMumbai  FakeWashington
    from qiskit_ibm_runtime.fake_provider import FakeProviderForBackendV2  # or use FakeProvider for V1 fake backends - https://docs.quantum.ibm.com/api/qiskit-ibm-runtime/fake_provider
    backend = FakeProviderForBackendV2().backend("fake_sherbrooke")
elif backend_type=='real-ibm':
  # Using the latest qiskit_ibm_provider
    # Using the latest qiskit_ibm_runtime
    #### IF YOU HAVE AN IBMQ ACCOUNT (using an actual backend) #####
    
  from qiskit_ibm_provider import IBMProvider
    from qiskit_ibm_runtime import QiskitRuntimeService
  # save your IBMProvider accout for future loading
    # save your IBM accout for future loading
    API_KEY = os.getenv('IBMQ_API_KEY')
    instance = os.getenv('IBMQ_INSTANCE')
  IBMProvider.save_account(instance=instance, token=API_KEY, overwrite=True)
    
    # save your QiskitRuntimeService accout for future loading
    QiskitRuntimeService.save_account(
@@ -37,8 +36,8 @@ elif backend_type=='real-ibm':
      token=API_KEY,
      overwrite=True
    )
  provider = IBMProvider()
  backend = provider.get_backend("simulator_statevector")  # ibm_nairobi  simulator_statevector
    service = QiskitRuntimeService()
    backend = service.backend("ibm_sherbrooke")
else:
    raise Exception(f'Backend type \'{backend_type}\' not implemented.')

@@ -46,7 +45,7 @@ print(f'Backend: {backend}')
######################################

# Create a Quantum Circuit acting on the q register
circuit = QuantumCircuit(2, 2)
circuit = QuantumCircuit(2)

# Add a H gate on qubit 0
circuit.h(0)
@@ -55,28 +54,21 @@ circuit.h(0)
circuit.cx(0, 1)

# Map the quantum measurement to the classical bits
circuit.measure([0,1], [0,1])
circuit.measure_all()

# compile the circuit down to low-level QASM instructions
# supported by the backend (not needed for simple circuits)
compiled_circuit = transpile(circuit, backend)

# Execute the circuit on the qasm simulator
job = backend.run(compiled_circuit, shots=1000)

# Make a "waiting in queue" message
while job.status() is not JobStatus.DONE:
    print("Job status is", job.status() )
    time.sleep(30)

print("Job status is", job.status() )
# Circuits must obey the ISA of the backend.
# Convert to ISA circuits
pm = generate_preset_pass_manager(backend=backend, optimization_level=1)
isa_circuit = pm.run(circuit)

# setup Sampler
sampler = Sampler(backend)
# Run the job
job = sampler.run([isa_circuit])
# Grab results from the job
result = job.result()

# Returns counts
counts = result.get_counts(compiled_circuit)
print("\nTotal count for 00 and 11 are:",counts)
print(f"\nTotal count for 00 and 11 are: {result[0].data.meas.get_counts()}")

# Draw the circuit
print(circuit.draw())