Skip to main content

Aer - High performance simulators for Qiskit

Project description

Aer - high performance quantum circuit simulation for Qiskit

License Build Tests

Aer is a high performance simulator for quantum circuits written in Qiskit, that includes realistic noise models.

Installation

We encourage installing Aer via the pip tool (a python package manager):

pip install qiskit-aer

Pip will handle all dependencies automatically for us, and you will always install the latest (and well-tested) version.

To install from source, follow the instructions in the contribution guidelines.

Installing GPU support

In order to install and run the GPU supported simulators on Linux, you need CUDA® 11.2 or newer previously installed. CUDA® itself would require a set of specific GPU drivers. Please follow CUDA® installation procedure in the NVIDIA® web.

If you want to install our GPU supported simulators, you have to install this other package:

pip install qiskit-aer-gpu

The package above is for CUDA&reg 12, so if your system has CUDA® 11 installed, install separate package:

pip install qiskit-aer-gpu-cu11

This will overwrite your current qiskit-aer package installation giving you the same functionality found in the canonical qiskit-aer package, plus the ability to run the GPU supported simulators: statevector, density matrix, and unitary.

Note: This package is only available on x86_64 Linux. For other platforms that have CUDA support, you will have to build from source. You can refer to the contributing guide for instructions on doing this.

Simulating your first Qiskit circuit with Aer

Now that you have Aer installed, you can start simulating quantum circuits using primitives and noise models. Here is a basic example:

$ python
from qiskit import transpile
from qiskit.circuit.library import RealAmplitudes
from qiskit.quantum_info import SparsePauliOp
from qiskit_aer import AerSimulator

sim = AerSimulator()
# --------------------------
# Simulating using estimator
#---------------------------
from qiskit_aer.primitives import EstimatorV2

psi1 = transpile(RealAmplitudes(num_qubits=2, reps=2), sim, optimization_level=0)
psi2 = transpile(RealAmplitudes(num_qubits=2, reps=3), sim, optimization_level=0)

H1 = SparsePauliOp.from_list([("II", 1), ("IZ", 2), ("XI", 3)])
H2 = SparsePauliOp.from_list([("IZ", 1)])
H3 = SparsePauliOp.from_list([("ZI", 1), ("ZZ", 1)])

theta1 = [0, 1, 1, 2, 3, 5]
theta2 = [0, 1, 1, 2, 3, 5, 8, 13]
theta3 = [1, 2, 3, 4, 5, 6]

estimator = EstimatorV2()

# calculate [ [<psi1(theta1)|H1|psi1(theta1)>,
#              <psi1(theta3)|H3|psi1(theta3)>],
#             [<psi2(theta2)|H2|psi2(theta2)>] ]
job = estimator.run(
    [
        (psi1, [H1, H3], [theta1, theta3]),
        (psi2, H2, theta2)
    ],
    precision=0.01
)
result = job.result()
print(f"expectation values : psi1 = {result[0].data.evs}, psi2 = {result[1].data.evs}")

# --------------------------
# Simulating using sampler
# --------------------------
from qiskit_aer.primitives import SamplerV2
from qiskit import QuantumCircuit

# create a Bell circuit
bell = QuantumCircuit(2)
bell.h(0)
bell.cx(0, 1)
bell.measure_all()

# create two parameterized circuits
pqc = RealAmplitudes(num_qubits=2, reps=2)
pqc.measure_all()
pqc = transpile(pqc, sim, optimization_level=0)
pqc2 = RealAmplitudes(num_qubits=2, reps=3)
pqc2.measure_all()
pqc2 = transpile(pqc2, sim, optimization_level=0)

theta1 = [0, 1, 1, 2, 3, 5]
theta2 = [0, 1, 2, 3, 4, 5, 6, 7]

# initialization of the sampler
sampler = SamplerV2()

# collect 128 shots from the Bell circuit
job = sampler.run([bell], shots=128)
job_result = job.result()
print(f"counts for Bell circuit : {job_result[0].data.meas.get_counts()}")
 
# run a sampler job on the parameterized circuits
job2 = sampler.run([(pqc, theta1), (pqc2, theta2)])
job_result = job2.result()
print(f"counts for parameterized circuit : {job_result[0].data.meas.get_counts()}")

# --------------------------------------------------
# Simulating with noise model from actual hardware
# --------------------------------------------------
from qiskit_ibm_runtime import QiskitRuntimeService
provider = QiskitRuntimeService(channel='ibm_quantum', token="set your own token here")
backend = provider.get_backend("ibm_kyoto")

# create sampler from the actual backend
sampler = SamplerV2.from_backend(backend)

# run a sampler job on the parameterized circuits with noise model of the actual hardware
bell_t = transpile(bell, AerSimulator(basis_gates=["ecr", "id", "rz", "sx"]), optimization_level=0)
job3 = sampler.run([bell_t], shots=128)
job_result = job3.result()
print(f"counts for Bell circuit w/noise: {job_result[0].data.meas.get_counts()}")

Contribution Guidelines

If you'd like to contribute to Aer, please take a look at our contribution guidelines. This project adheres to Qiskit's code of conduct. By participating, you are expected to uphold this code.

We use GitHub issues for tracking requests and bugs. Please use our slack for discussion and simple questions. To join our Slack community use the link. For questions that are more suited for a forum, we use the Qiskit tag in the Stack Exchange.

Next Steps

Now you're set up and ready to check out some of the other examples from the Aer documentation.

Authors and Citation

Aer is the work of many people who contribute to the project at different levels. If you use Qiskit, please cite as per the included BibTeX file.

License

Apache License 2.0

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

qiskit_aer_gpu_cu11-0.15.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (18.0 MB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

qiskit_aer_gpu_cu11-0.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (18.0 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

qiskit_aer_gpu_cu11-0.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (18.0 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

qiskit_aer_gpu_cu11-0.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (18.0 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

qiskit_aer_gpu_cu11-0.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (18.0 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

File details

Details for the file qiskit_aer_gpu_cu11-0.15.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for qiskit_aer_gpu_cu11-0.15.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9a8536d8905bf653ae599caa06d9be969b407e99608ea4b3c118399aa9a73a82
MD5 da32236cc6e6dacc2e321432f798a87d
BLAKE2b-256 8214fb27751686c342327db34b2d1c8b689ef5f928ca63f924a43279a59bfaec

See more details on using hashes here.

File details

Details for the file qiskit_aer_gpu_cu11-0.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for qiskit_aer_gpu_cu11-0.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 afeb5c3882af8a18dfd8eb2ee11ff124b2ec614b2f6643cb87771eb872158b6c
MD5 3c63052167dd90f3f622bf2023622859
BLAKE2b-256 dd0775a393f9db88d373d945fa74e5ad3d98257b14f09b8844c3686c00a07891

See more details on using hashes here.

File details

Details for the file qiskit_aer_gpu_cu11-0.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for qiskit_aer_gpu_cu11-0.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 86c181613eb91f60d44e456b12ebe5a884c8097f7a098e4b565056694ae5017b
MD5 83e4a5027982974d44c209a76fc34465
BLAKE2b-256 3773d12161827bd1649a84a9187f22babc6dfa8fe390d240593073e31b18f50c

See more details on using hashes here.

File details

Details for the file qiskit_aer_gpu_cu11-0.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for qiskit_aer_gpu_cu11-0.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f976151c4a942f99baf48705afbb85c949f73e3a55519324ec58a3cef2916a94
MD5 d8554d1d25634b3176457f9faf9fdffa
BLAKE2b-256 3378b33741c99f1fffe071a79ed7c75e25a03e882b7c1b8903ce568bc0ba9ef7

See more details on using hashes here.

File details

Details for the file qiskit_aer_gpu_cu11-0.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for qiskit_aer_gpu_cu11-0.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 aa4e7a1a216ead4c860d99ffc8f6fc4be16b4d77ce376adbe3f040fc18fa375a
MD5 1323dc240eb671287754db68a0367dbc
BLAKE2b-256 a9cd79abd2d1ac1b4eeb1312b4bd9f9f5ddf4061ad9b843d1ca2e6e246c6dccd

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page