{ "cells": [ { "cell_type": "markdown", "id": "5588660c", "metadata": {}, "source": [ "# HPCA 2023 Supermarq Tutorial using `qiskit-superstaq`" ] }, { "attachments": {}, "cell_type": "markdown", "id": "approximate-aurora", "metadata": {}, "source": [ "[](https://colab.research.google.com/github/Infleqtion/client-superstaq/blob/main/docs/source/apps/supermarq/examples/Supermarq_HPCA_Tutorial_css.ipynb) [](https://mybinder.org/v2/gh/Infleqtion/client-superstaq/HEAD?labpath=docs/source/apps/supermarq/examples/Supermarq_HPCA_Tutorial_css.ipynb)" ] }, { "cell_type": "markdown", "id": "71b6a205", "metadata": {}, "source": [ "You can run this notebook on [Colab](https://colab.research.google.com/github/Infleqtion/client-superstaq/blob/main/docs/source/apps/supermarq/examples/Supermarq_HPCA_Tutorial_css.ipynb) or [Binder](https://mybinder.org/v2/gh/Infleqtion/client-superstaq/main?urlpath=git-pull%3Frepo%3Dhttps%253A%252F%252Fgithub.com%252FInfleqtion%252FSupermarQ%252Ftree%252Fmain%252Fexamples%26urlpath%3Dtree%252Fexamples%252FSupermarQ_HPCA_Tutorial.ipynb%26branch%3Dmain). The Colab requires sign in while Binder does not." ] }, { "cell_type": "code", "execution_count": 1, "id": "9599fca0", "metadata": {}, "outputs": [], "source": [ "try:\n", " import qiskit\n", " import qiskit_superstaq as qss\n", "except ImportError:\n", " print(\"Installing qiskit-superstaq...\")\n", " %pip install --quiet 'qiskit-superstaq[examples]'\n", " print(\"Installed qiskit-superstaq.\")\n", " print(\"You may need to restart the kernel to import newly installed packages.\")\n", " import qiskit\n", " import qiskit_superstaq as qss" ] }, { "cell_type": "code", "execution_count": 2, "id": "9a704403", "metadata": {}, "outputs": [], "source": [ "try:\n", " import supermarq\n", "except ImportError:\n", " print(\"Installing supermarq...\")\n", " %pip install --quiet supermarq\n", " print(\"Installed supermarq.\")\n", " print(\"You may need to restart the kernel to import newly installed packages.\")\n", " import supermarq" ] }, { "cell_type": "markdown", "id": "79996440", "metadata": {}, "source": [ "## Basics:" ] }, { "cell_type": "markdown", "id": "320767be", "metadata": {}, "source": [ "### 1. Provider creation" ] }, { "cell_type": "code", "execution_count": 3, "id": "696ded37", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "20 credits\n" ] } ], "source": [ "# Provide your api key to `qss.SuperstaqProvider()` using the `api_key=` argument if\n", "# the SUPERSTAQ_API_KEY environment variable is not set.\n", "\n", "# Submit qiskit circuits via `qiskit-superstaq`\n", "provider = qss.SuperstaqProvider()\n", "print(provider.get_balance())" ] }, { "cell_type": "code", "execution_count": 4, "id": "4551cfe4", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[Target(target='aqt_keysight_qpu', supports_submit=False, supports_submit_qubo=False, supports_compile=True, available=True, retired=False, accessible=True),\n", " Target(target='aqt_zurich_qpu', supports_submit=False, supports_submit_qubo=False, supports_compile=True, available=True, retired=False, accessible=True),\n", " Target(target='aws_dm1_simulator', supports_submit=True, supports_submit_qubo=False, supports_compile=True, available=True, retired=False, accessible=True),\n", " Target(target='aws_sv1_simulator', supports_submit=True, supports_submit_qubo=False, supports_compile=True, available=True, retired=False, accessible=True),\n", " Target(target='aws_tn1_simulator', supports_submit=True, supports_submit_qubo=False, supports_compile=True, available=True, retired=False, accessible=True),\n", " Target(target='cq_sqale_qpu', supports_submit=True, supports_submit_qubo=False, supports_compile=True, available=True, retired=False, accessible=True),\n", " Target(target='cq_sqale_simulator', supports_submit=True, supports_submit_qubo=False, supports_compile=True, available=True, retired=False, accessible=True),\n", " Target(target='eeroq_wonderlake_qpu', supports_submit=False, supports_submit_qubo=False, supports_compile=True, available=True, retired=False, accessible=True),\n", " Target(target='ibmq_brisbane_qpu', supports_submit=True, supports_submit_qubo=False, supports_compile=True, available=True, retired=False, accessible=True),\n", " Target(target='ibmq_fez_qpu', supports_submit=True, supports_submit_qubo=False, supports_compile=True, available=True, retired=False, accessible=True),\n", " Target(target='ibmq_kingston_qpu', supports_submit=True, supports_submit_qubo=False, supports_compile=True, available=True, retired=False, accessible=True),\n", " Target(target='ibmq_marrakesh_qpu', supports_submit=True, supports_submit_qubo=False, supports_compile=True, available=True, retired=False, accessible=True),\n", " Target(target='ibmq_sherbrooke_qpu', supports_submit=True, supports_submit_qubo=False, supports_compile=True, available=True, retired=False, accessible=True),\n", " Target(target='ibmq_torino_qpu', supports_submit=True, supports_submit_qubo=False, supports_compile=True, available=True, retired=False, accessible=True),\n", " Target(target='ionq_forte-1_qpu', supports_submit=True, supports_submit_qubo=False, supports_compile=True, available=True, retired=False, accessible=True),\n", " Target(target='ionq_ion_simulator', supports_submit=True, supports_submit_qubo=False, supports_compile=True, available=True, retired=False, accessible=True),\n", " Target(target='qscout_peregrine_qpu', supports_submit=False, supports_submit_qubo=False, supports_compile=True, available=True, retired=False, accessible=True),\n", " Target(target='qtm_h1-1_qpu', supports_submit=True, supports_submit_qubo=False, supports_compile=True, available=True, retired=False, accessible=True),\n", " Target(target='qtm_h1-1e_simulator', supports_submit=True, supports_submit_qubo=False, supports_compile=True, available=True, retired=False, accessible=True),\n", " Target(target='qtm_h2-1_qpu', supports_submit=True, supports_submit_qubo=False, supports_compile=True, available=True, retired=False, accessible=True),\n", " Target(target='rigetti_ankaa-3_qpu', supports_submit=True, supports_submit_qubo=False, supports_compile=True, available=True, retired=False, accessible=True),\n", " Target(target='ss_unconstrained_simulator', supports_submit=True, supports_submit_qubo=True, supports_compile=True, available=True, retired=False, accessible=True)]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# See which targets are available\n", "provider.get_targets(available=True)" ] }, { "cell_type": "markdown", "id": "5d96ed7f", "metadata": {}, "source": [ "### 2. Benchmark instantiation\n", "NOTE: after executing a benchmark circuit, the score should always be evaluated using the same `Benchmark` object that was used to generate the circuit.\n", "\n", "All of the benchmarks can be found in `supermarq/benchmarks/`.\n", "\n", "Think about other circuits/benchmarks you would like to implement and run!" ] }, { "cell_type": "code", "execution_count": 5, "id": "67da9bdb", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
┌───┐ ┌─┐ \n",
"q_0: ┤ H ├──■───────┤M├──────────────────────\n",
" └───┘┌─┴─┐ └╥┘ ┌─┐ \n",
"q_1: ─────┤ X ├──■───╫──────┤M├──────────────\n",
" └───┘┌─┴─┐ ║ └╥┘ ┌─┐ \n",
"q_2: ──────────┤ X ├─╫───■───╫──────┤M├──────\n",
" └───┘ ║ ┌─┴─┐ ║ └╥┘┌─┐ \n",
"q_3: ────────────────╫─┤ X ├─╫───■───╫─┤M├───\n",
" ║ └───┘ ║ ┌─┴─┐ ║ └╥┘┌─┐\n",
"q_4: ────────────────╫───────╫─┤ X ├─╫──╫─┤M├\n",
" ║ ║ └───┘ ║ ║ └╥┘\n",
"c: 5/════════════════╩═══════╩═══════╩══╩══╩═\n",
" 0 1 2 3 4 "
],
"text/plain": [
" ┌───┐ ┌─┐ \n",
"q_0: ┤ H ├──■───────┤M├──────────────────────\n",
" └───┘┌─┴─┐ └╥┘ ┌─┐ \n",
"q_1: ─────┤ X ├──■───╫──────┤M├──────────────\n",
" └───┘┌─┴─┐ ║ └╥┘ ┌─┐ \n",
"q_2: ──────────┤ X ├─╫───■───╫──────┤M├──────\n",
" └───┘ ║ ┌─┴─┐ ║ └╥┘┌─┐ \n",
"q_3: ────────────────╫─┤ X ├─╫───■───╫─┤M├───\n",
" ║ └───┘ ║ ┌─┴─┐ ║ └╥┘┌─┐\n",
"q_4: ────────────────╫───────╫─┤ X ├─╫──╫─┤M├\n",
" ║ ║ └───┘ ║ ║ └╥┘\n",
"c: 5/════════════════╩═══════╩═══════╩══╩══╩═\n",
" 0 1 2 3 4 "
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Create your benchmark using qiskit circuits\n",
"ghz = supermarq.ghz.GHZ(5)\n",
"ghz_circuit = ghz.qiskit_circuit()\n",
"ghz_circuit.draw()"
]
},
{
"cell_type": "markdown",
"id": "7366ec76",
"metadata": {},
"source": [
"### 3. Circuit evaluation\n",
"The generated circuits can be evaluated on a backend using any compatible service: AWS Braket, IBM Qiskit, `cirq-superstaq`, `qiskit-superstaq`, etc. Here we use `qiskit-superstaq`"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "ea1693e7",
"metadata": {},
"outputs": [],
"source": [
"backend = provider.get_backend(\"ss_unconstrained_simulator\")\n",
"job_qss = backend.run(ghz_circuit, shots=1000, method=\"dry-run\")"
]
},
{
"cell_type": "markdown",
"id": "2839ee4f",
"metadata": {},
"source": [
"### 4. Compute the score\n",
"NOTE: after executing a benchmark circuit, the score should always be evaluated using the same `Benchmark` object that was used to generate the circuit."
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "4e1c5b9a",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"