common.title

Docs
Quantum Circuit
TYTAN CLOUD

QUANTUM GAMING


Overview
Contact
Event
Project
Research

Terms of service (Web service)

Terms of service (Quantum and ML Cloud service)

Privacy policy


Sign in
Sign up
common.title

最新版のamazon braketで、IonQのAria1プロセッサ25量子ビットを稼働させてみる。

Yuichiro Minato

2023/10/12 23:34

こんにちは、最新の量子コンピュータを使ってみます。

Amazon BraketのAria1プロセッサを使いました。最新のイオントラップ25量子ビットです。

ツールを読み込みます。

import numpy as np
import matplotlib.pyplot as plt

%matplotlib inline
import string
import time

from braket.circuits import Circuit, Gate, Observable, FreeParameter
from braket.devices import LocalSimulator
from braket.aws import AwsDevice, AwsQuantumTask

まずは簡単な量子もつれ回路を。

bell = Circuit().h(0).cnot(0, 1)
print(bell)

回路を描画します。

T : |0|1|

q0 : -H-C-
|
q1 : ---X-

T : |0|1|

シミュレーターを使ってまずは結果を見ます。

device = LocalSimulator()
result = device.run(bell, shots=1000).result()
counts = result.measurement_counts
print(counts)

Counter({'11': 505, '00': 495})

プロットしてみます。

plt.bar(counts.keys(), counts.values())
plt.xlabel('bitstrings')
plt.ylabel('counts')

次にシミュレーターではなく実機でAria1を指定します。

aria = AwsDevice("arn:aws:braket:us-east-1::device/qpu/ionq/Aria-1")
aria.queue_depth().quantum_tasks

上記の回路を投げます。

aria_task = aria.run(bell, shots=1000)
aria_task_id = aria_task.id
aria_status = aria_task.state()
print('Status of quantum task:', aria_status)

Status of quantum task: CREATED

以前と違って待ち番号が見れます。

aria_task.queue_position().queue_position

終わると結果が見れます。

task_load_aria = AwsQuantumTask(arn=aria_task_id)

status_aria = task_load_aria.state()
print('Status of (reconstructed) quantum task:', status_aria)

if status_aria == 'COMPLETED':
  results = task_load_aria.result()
   
  metadata = task_load_aria.metadata()
  shots = metadata['shots']
  machine = metadata['deviceArn']
  print("{} shots taken on machine {}.".format(shots, machine))
   
  counts = results.measurement_counts
  print('Measurement counts:', counts)

plt.bar(counts.keys(), counts.values())
  plt.xlabel('bitstrings')
  plt.ylabel('counts')
  plt.tight_layout()
  plt.savefig('bell_ionq.png', dpi=700)
   
elif status in ['FAILED', 'CANCELLED']:
  print('Your quantum task is in terminal status, but has not completed.')

else:
  print('Sorry, your quantum task is still being processed and has not been finalized yet.')

しばらく待つと結果が出ました。だいたいシミュレータと同じです。エラーが少ないですね。

Status of (reconstructed) quantum task: COMPLETED
1000 shots taken on machine arn:aws:braket:us-east-1::device/qpu/ionq/Aria-1.
Measurement counts: Counter({'11': 496, '00': 478, '01': 17, '10': 9})

次にもちょい大きな回路でやってみます。

ghz = Circuit().h(0)

for i in range(24):
  ghz.cnot(i, i+1)
   
print(ghz)

T : |0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|

q0 : -H-C--------------------------------------------------------------
|
q1 : ---X-C------------------------------------------------------------
|
q2 : -----X-C----------------------------------------------------------
|
q3 : -------X-C--------------------------------------------------------
|
q4 : ---------X-C------------------------------------------------------
|
q5 : -----------X-C----------------------------------------------------
|
q6 : -------------X-C--------------------------------------------------
|
q7 : ---------------X-C------------------------------------------------
|
q8 : -----------------X-C----------------------------------------------
|
q9 : -------------------X-C--------------------------------------------
|
q10 : ---------------------X--C-----------------------------------------
|
q11 : ------------------------X--C--------------------------------------
|
q12 : ---------------------------X--C-----------------------------------
|
q13 : ------------------------------X--C--------------------------------
|
q14 : ---------------------------------X--C-----------------------------
|
q15 : ------------------------------------X--C--------------------------
|
q16 : ---------------------------------------X--C-----------------------
|
q17 : ------------------------------------------X--C--------------------
|
q18 : ---------------------------------------------X--C-----------------
|
q19 : ------------------------------------------------X--C--------------
|
q20 : ---------------------------------------------------X--C-----------
|
q21 : ------------------------------------------------------X--C--------
|
q22 : ---------------------------------------------------------X--C-----
|
q23 : ------------------------------------------------------------X--C--
|
q24 : ---------------------------------------------------------------X--

T : |0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|

まずはローカルシミュレータで。

result = device.run(ghz, shots=1000).result()
counts = result.measurement_counts
print(counts)

Counter({'0000000000000000000000000': 507, '1111111111111111111111111': 493})

早速実機で

ionq_task_ghz = ionq.run(ghz, shots=1000)

ionq_task_id_ghz = ionq_task_ghz.id
ionq_status_ghz = ionq_task_ghz.state()
print('Status of quantum task:', ionq_status_ghz)

結構25量子ビットにしては衝撃的な結果が。。。かなり精度いいですね!

Status of (reconstructed) quantum task: COMPLETED
1000 shots taken on machine arn:aws:braket:us-east-1::device/qpu/ionq/Aria-1.
Measurement counts: Counter({'0000000000000000000000000': 285, '1111111111111111111111111': 276, '0000000000000000010000000': 11, '1111111111111111110000000': 11, '0000000000000000000000010': 10, '1111111111110000000000000': 9, '0111111111111111111111111': 9, '0000000000000000000111111': 8, '1111111111111111101111111': 8, '0000000000111111111111111': 8, '1111111111111111100000000': 7, '1111111111111111111000000': 7, '0000000000000000000001000': 7, '1111111111111111111111110': 7, '1111111111111000000000000': 6, '0000000000000000000000011': 6, '1111111111111111111011111': 6, '0000000000000000001111111': 6, '1111111111110111111111111': 6, '0000000000001111111111111': 6, '0000001000000000000000000': 5, '0000000000001000000000000': 5, '0000000000000000100000000': 5, '0000000000000000000000001': 5, '1111111111111111110111111': 5, '1111111111111111011111111': 5, '1111111111111110111111111': 5, '0000100000000000000000000': 4, '0000010000000000000000000': 4, '0000000000100000000000000': 4, '0000000000000000001000000': 4, '0000000000000000000100000': 4, '0000000000000000000010000': 4, '0000000000000000000000111': 4, '1111111111111111111110111': 4, '1111111111111111111101111': 4, '1111111111111101111111111': 4, '1111111111111011111111111': 4, '0000000000000111111111111': 4, '1111111111011111111111111': 4, '1101111111111111111111111': 4, '0011111111111111111111111': 4, '0100000000000000000000000': 3, '1110000000000000000000000': 3, '0001000000000000000000000': 3, '0000000010000000000000000': 3, '1111111111000000000000000': 3, '1111111111100000000000000': 3, '0000000000000100000000000': 3, '0000000000000001000000000': 3, '1111111111111111111111000': 3, '1111111111111111111111100': 3, '0000000000000000000011111': 3, '0000000000000000011111111': 3, '1111111111101111111111111': 3, '0000000000011111111111111': 3, '0000000001111111111111111': 3, '1111110111111111111111111': 3, '1110111111111111111111111': 3, '1011111111111111111111111': 3, '1100000000000000000000000': 2, '1111110000000000000000000': 2, '0000000100000000000000000': 2, '0000000000010000000000000': 2, '0000000000000010000000000': 2, '1111111111111111000000000': 2, '0000000000100000010000000': 2, '0111111111111111111000000': 2, '0000000000000000000000100': 2, '0111111111111111111111101': 2, '1111111111111111111111101': 2, '0000000000000000010000011': 2, '1111111111110000000000111': 2, '1111111111111111011011111': 2, '0000000000000001111111111': 2, '1111111101111111111111111': 2, '1111111011111111111111111': 2, '1111011111111111111111111': 2, '1000000000000000000000000': 1, '0010000000000000000000000': 1, '1111111100000000000000000': 1, '1000000010000000000000000': 1, '1110111110000000000000000': 1, '1111111110000000000000000': 1, '0000000001000000000000000': 1, '1111101111000000000000000': 1, '0001000000100000000000000': 1, '1101111111100000000000000': 1, '0010000000010000000000000': 1, '0000000001111100000000000': 1, '1111111111111100000000000': 1, '1000000000000010000000000': 1, '0100000000000010000000000': 1, '0000000001000110000000000': 1, '0000001000000001000000000': 1, '0000000000001111000000000': 1, '1000000000000000100000000': 1, '1000000010000000100000000': 1, '1111111111111101100000000': 1, '0000000000011111100000000': 1, '0000001000000000010000000': 1, '0000000010000000010000000': 1, '0000000000010000010000000': 1, '1111111111111010110000000': 1, '0000000000001111110000000': 1, '0001111111101111110000000': 1, '1111111111101111110000000': 1, '0000000000011111110000000': 1, '0000000000000001001000000': 1, '0000000000000000011000000': 1, '0000000000001000011000000': 1, '1111111111111111011000000': 1, '1111111111101111111000000': 1, '0001111111111111111000000': 1, '0000000000000100000100000': 1, '0000000000000000100100000': 1, '1111111111111111111100000': 1, '1111111111111111111110000': 1, '1100000000001000000001000': 1, '0000000000000010000001000': 1, '0000111111111111110001000': 1, '0101000011001011111101000': 1, '0000000000000000000011000': 1, '0000000000000000111111000': 1, '0000000000111111111111000': 1, '0111111111111111111111000': 1, '0000000000000100000000100': 1, '1111111111111111111101100': 1, '1111111111110110111111100': 1, '1111111111111110111111100': 1, '1000000000000000000000010': 1, '0000000001000000000000010': 1, '1011111111111110100000010': 1, '1111111111111111110000010': 1, '0000000001111111111111010': 1, '0000000000011000000000110': 1, '0000000000000010000001110': 1, '0000000010000000000011110': 1, '0000000000000001000011110': 1, '0000000000000000011111110': 1, '0000000000000111111111110': 1, '0001000000000000000000001': 1, '1111111111100000000000001': 1, '1101111111110000000000001': 1, '1111111111111010000000001': 1, '1111111111111111111001101': 1, '1111111111111111110111101': 1, '0000000000001111111111101': 1, '1111111111111000000000011': 1, '1111111111111111111000011': 1, '0000000000011111111110011': 1, '1111111111111111010111011': 1, '0000000111111111101111011': 1, '1111111111111111111111011': 1, '0010000000000000000000111': 1, '0000000010000000000000111': 1, '1111111111100000010110111': 1, '0000000000000000011110111': 1, '1111111111101111111110111': 1, '1011111111111111111110111': 1, '0000000000000000000001111': 1, '0010000000000000000001111': 1, '0000000000000000000101111': 1, '1111111110111111111101111': 1, '1111111111111111110011111': 1, '1101111111111111111011111': 1, '1000000000000000000111111': 1, '0001100000000000000111111': 1, '1111111111111000000111111': 1, '1100000000000000001111111': 1, '1111111111011100001111111': 1, '1111111111111110101111111': 1, '0000000000000111101111111': 1, '0000000001000000011111111': 1, '1111111111000000011111111': 1, '0000000000001000111111111': 1, '0000000000011101111111111': 1, '0000000000011011111111111': 1, '1111110000000111111111111': 1, '0000000001110111111111111': 1, '0000001111110111111111111': 1, '1111000000001111111111111': 1, '0000000000101111111111111': 1, '1111110111101111111111111': 1, '0000000100011111111111111': 1, '1111110111011111111111111': 1, '1001111111011111111111111': 1, '1000000000111111111111111': 1, '1111111110111111111111111': 1, '0111111101111111111111111': 1, '0000000111111111111111111': 1, '1111101111111111111111111': 1, '0000011111111111111111111': 1, '0001111111111111111111111': 1})

両側にきちんとGHZが実行できてるのが見えます。結構革命的にすごいです。よだれが出ますね。。。量子コンピュータは着実に開発が進んでいるようです。。。

© 2025, blueqat Inc. All rights reserved