common.title

Docs
Quantum Circuit
TYTAN CLOUD

QUANTUM GAMING


Desktop RAG

Overview
Terms of service

Privacy policy

Contact
Research

Sign in
Sign up
common.title

[概要]Amazon Braketの使い方を見てみる。Rigetti/IonQ/OQC Lucy/Xanadu Borealisの実機の使用ゲート、D-Waveも確認。

Yuichiro Minato

2022/10/13 15:58

blueqatSDKを作るモチベーションを上げるためにAmazon Braketにチャレンジします。
実はあんまり使ったことありません。。。

まずは準備運動でもつれ回路を作ってみます。こちらを参考にしています。

https://github.com/aws-samples/amazon-braket-examples-jp

from braket.circuits import Circuit
from braket.devices import LocalSimulator
import matplotlib.pyplot as plt
%matplotlib inline

まずは回路を描画してみます。

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=10).result()

#計算結果の表示
counts = result.measurement_counts
print(counts)

#そのまま描画
# plot using Counter
plt.bar(counts.keys(), counts.values());
Counter({'00': 7, '11': 3})
<Figure size 432x288 with 1 Axes>

image

できました。結構簡単ですね。次は早速実機を使ってみたいと思います。実機は種類によって得意なゲートが違うはずです。実際にはトランスパイラで変換されますので、問題はないと思いますが、一応念のため見てみます。

まずはIonQから。イオントラップ型です。

from braket.aws import AwsDevice

device = AwsDevice("arn:aws:braket:::device/qpu/ionq/ionQdevice")
print(device.properties.action['braket.ir.jaqcd.program'].supportedOperations)
['x', 'y', 'z', 'rx', 'ry', 'rz', 'h', 'cnot', 's', 'si', 't', 'ti', 'v', 'vi', 'xx', 'yy', 'zz', 'swap', 'i']

次はイギリスのOQCのLucyを見てみます。

device = AwsDevice("arn:aws:braket:eu-west-2::device/qpu/oqc/Lucy")
print(device.properties.action['braket.ir.jaqcd.program'].supportedOperations)
['ccnot', 'cnot', 'cphaseshift', 'cswap', 'cy', 'cz', 'h', 'i', 'phaseshift', 'rx', 'ry', 'rz', 's', 'si', 'swap', 't', 'ti', 'v', 'vi', 'x', 'y', 'z', 'ecr', 'start_verbatim_box', 'end_verbatim_box']

そして日本時間の昼間も使えるようになりましたRigetti

device = AwsDevice("arn:aws:braket:us-west-1::device/qpu/rigetti/Aspen-M-2")
print(device.properties.action['braket.ir.jaqcd.program'].supportedOperations)
['cz', 'xy', 'ccnot', 'cnot', 'cphaseshift', 'cphaseshift00', 'cphaseshift01', 'cphaseshift10', 'cswap', 'h', 'i', 'iswap', 'phaseshift', 'pswap', 'rx', 'ry', 'rz', 's', 'si', 'swap', 't', 'ti', 'x', 'y', 'z', 'start_verbatim_box', 'end_verbatim_box']

次はD-Waveです。アニーラですのでゲートの指定はありません。システム6.1をみてみます。

device = AwsDevice('arn:aws:braket:us-west-2::device/qpu/d-wave/Advantage_system6')

topology = device.properties.dict()['provider']['topology']
qubit_number = device.properties.dict()['provider']['qubitCount']
print(topology)
print('qubit number = ', qubit_number)
{'type': 'pegasus', 'shape': [16]}
qubit number =  5760

こちらはペガサス結合の5760量子ビットと情報が出ました。

最後にあまり情報のないBolearisを見てみます。こちらは連続量でほかの量子ゲートは違いますがゲートセットがあります。

device = AwsDevice('arn:aws:braket:us-east-1::device/qpu/xanadu/Borealis')
print(device.properties.action['braket.ir.blackbird.program'].supportedOperations)
['s', 'r0', 'r1', 'r2', 'bs0', 'bs1', 'bs2', 'loop0_phase', 'loop1_phase', 'loop2_phase']

このように様々な種類のマシンがあります。最後の二つはD-WaveとBolearisはほかのマシンと使い方が異なります。また、近々もう一台特殊な使い方をするマシンが出ますので、そちらも楽しみです。一応実機での実行方法を確認してみます。

Rigettiのマシンで量子もつれを計算してみます。

device = AwsDevice("arn:aws:braket:us-west-1::device/qpu/rigetti/Aspen-M-2")

bell = Circuit().h(0).cnot(0, 1)
task = device.run(bell) 
print(task.result().measurement_counts)
Counter({'00': 447, '11': 432, '10': 65, '01': 56})

比較的早く戻ってきました。結構間違えますが答えも出ました。是非頑張って使いましょう!以上です。

© 2025, blueqat Inc. All rights reserved