Nobisuke
Dekisugi
RAG
Privacy policy
2022/10/13 15:58
blueqatSDKを作るモチベーションを上げるためにAmazon Braketにチャレンジします。
実はあんまり使ったことありません。。。
まずは準備運動でもつれ回路を作ってみます。こちらを参考にしています。
Copy from braket.circuits import Circuit from braket.devices import LocalSimulator import matplotlib.pyplot as plt %matplotlib inline
まずは回路を描画してみます。
Copy bell = Circuit().h(0).cnot(0,1) print(bell)
T : |0|1|
q0 : -H-C-
|
q1 : ---X-
T : |0|1|
次にローカルシミュレータを使って計算をしてみます。
Copy #デバイス指定 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>
できました。結構簡単ですね。次は早速実機を使ってみたいと思います。実機は種類によって得意なゲートが違うはずです。実際にはトランスパイラで変換されますので、問題はないと思いますが、一応念のため見てみます。
まずはIonQから。イオントラップ型です。
Copy 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を見てみます。
Copy 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
Copy 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をみてみます。
Copy 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を見てみます。こちらは連続量でほかの量子ゲートは違いますがゲートセットがあります。
Copy 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のマシンで量子もつれを計算してみます。
Copy 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})
比較的早く戻ってきました。結構間違えますが答えも出ました。是非頑張って使いましょう!以上です。
© 2024, blueqat Inc. All rights reserved