ラベル Qiskit の投稿を表示しています。 すべての投稿を表示
ラベル Qiskit の投稿を表示しています。 すべての投稿を表示

2025年4月8日火曜日

IBM量子コンピュータ(Heronプロセッサ)におけるエラー発生の低減

【要旨】量子もつれを用いた例題Mermin-Peres-Magicを、IBM量子コンピュータ新鋭機ibm_torino (Heron r1プロセッサ)で実行させた結果、ノイズ等によるエラーの発生率が、以前のibm_brisbane (Eagle r3プロセッサ)に比べて、ほぼ半減することが分かった。これにより、所望の正解が得られる成功率は、86%から92%に大きく改善された。今後出現するであろう華々しい成果は、このような長年の地道な研究開発によるものなのだと実感できた気がする。

🔴誤り低減を目指す量子コンピュータの進展
 Eagle(鷲)は攻撃的で強く、Heron(鷺)はしなやかで強いというイメージがあるという。IBMがそれを念頭において量子コンピュータに命名したのかは定かではない。IBMはこれまで、無償で量子プロセッサEagle r3(マシン名 ibm_kyiv, ibm_brisbane)を提供してきたが、この3月から、新鋭機Heron r1(マシン名 ibm_torino)を追加した。Heronは、Eaglelよりも、大幅にエラー発生率が低減されて強力になったという。そのハードウェアの仕組みは私には分からないが、最大の難題の一つであるエラー低減に向けて着実に進展していることが窺える。

🔴量子コンピューティングプラットフォームQiskitの更新
 IBMは量子コンピューティング開発環境Qiskitを頻繁にバージョンアップしているが、今回、Heronプロセッサの無償公開に合わせて、さらに大幅な改訂を行なった。そのための移行説明会もオンラインで行われた。実際、これまでの量子プログラムは環境を色々と修正しないと動かない状況である。だが、そこを何とか調べて、Heronプロセッサもようやく使えるようになった!!!

🔴量子もつれの例題「Mermin-Peres-Magic」をHeronプロセッサで動かす
 このHeronプロセッサの性能を十分に発揮できるような量子アプリを見つけることは容易ではない。しかし、自分がやれるアプリを少しづつ動かして、自分のスキルを高めることができるだろう。そういう思いで、量子もつれが本質的に効いている「Mermin-Peres-Magic」をやってみた。それがどんな問題かは、過去に書いたこちらの記事をご覧いただきたい。
 ごく簡単に言えば、この問題に対しては、古典的には100%成功する方法は無いが、量子的方法(量子もつれ)では、必ず100%成功させることができる。ただし、実際の量子コンピュータでは、ノイズ等による誤り発生のため、失敗するケースも出てくる。

🔴Heronプロセッサではエラー発生が着実に低減されていた!
 詳しいことは省略するが、図1をご覧いただきたい。この例題を実行した場合のエラーの発生率が、Eagleプロセッサに対して、約半減されることが分かった。すなわち、本来の得たい正解を得る場合の失敗率は、14.0%から7.9%に大幅に低減されたのである。これによって、正解を得る成功率は、86%から92%に上昇した。私自身の、しかも一つの例題の実測結果に過ぎないのだが、これによってモチベーションは確実に高まった!こうして、技術は進歩するものなのだと。


2024年11月11日月曜日

How to run quantum circuits on the development platform Qiskit

[Abstract] IBM Qiskit is used as a typical development environment for quantum computing. Its version is frequently updated, and some parts are soon deprecated, which can be confusing. The description of quantum gates and quantum circuits remains almost the same, but there are frequent changes in simulations and execution methods on actual machines. Here, I would like to note three typical execution methods at the present time (2024-11-10).

🔴Example: Quantum computation part of Shor's prime factorization algorithm

Here, we will focus only on running the order finding quantum circuit, which is the main part of Shor's algorithm. Fig.1 shows the prime factorization of the very small integer 15 (15 = 3 × 5) for demonstration purposes. We will not explain the relationship between the entire Shor algorithm and the quantum circuit in Fig.1 this time, so if necessary, please refer to the following past articles.

🔴[1] Simulation with Qiskit Sampler (run on local PC)

Qiskit Sampler is the most common simulator for running a quantum circuit (name: qc) like the one in Fig.1 (including measuring the lower three qubits). The main points of its use are as follows. The results of this simulation (measurement results of 1,000 shots) are shown in Fig.2.

# Running the Simulation
from qiskit_aer.primitives import Sampler
sampler = Sampler()
result = sampler.run(qc, shots=1000).result()

# Extraction and visualization of measurement results
quasi_dists = result.quasi_dists
binary_quasi_dist = quasi_dists[0].binary_probabilities()
counts_dict = quasi_dists[0].binary_probabilities()
counts = Counts(counts_dict)
plot_histogram(counts)


🔴[2] Simulation incorporating a noise model of the actual machine (run on a local PC)

In the above, the simulation results (Fig.2) show that the counts corresponding to the four bases are approximately 25% each, and the counts of the other bases are zero as expected because there is no noise. In addition to using a normal sampler like this, it is also possible to perform simulations that reflect the noise generated by the actual quantum computer.

Fig. 3 shows the result of incorporating a noise model generated by a real machine (127-qubits) named ibm_sherbrooke into AerSimulator and running it. Indeed, the effects of noise that did not occur in Fig. 2 are apparent. This may be useful for preliminary examination before running on a real machine.

# important imports
from qiskit_aer import AerSimulator
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
from qiskit_ibm_runtime import QiskitRuntimeService, SamplerV2 as Sampler

# Set the noise model of the real machine
real_backend = service.backend("ibm_sherbrooke")
aer = AerSimulator.from_backend(real_backend)
pm = generate_preset_pass_manager(backend=aer, optimization_level=1)
isa_qc = pm.run(qc) # transpile for the real machine
sampler = Sampler(mode=aer)
result = sampler.run([isa_qc],shots=1000).result() # execution

# Extraction and visualization of measurement results
pub_result = result[0]
counts = pub_result.data.c.get_counts() # Note the 'c' !
plot_histogram(counts)

🔴[3] Execution on an actual IBM Quantum machine (submitting a job via the web)

Next, the job was submitted to an actual IBM Quantum machine via the web and executed. The machine was ibm_sherbrooke, the same as that given in the noise model above. The job was executed in batch mode, so the execution results were retrieved via the web after it was completed. This is shown in Fig. 4, and it was found to be almost identical to the simulation results shown in Fig. 3, which reflect the above noise model.

# Automatically select machines with low load
from qiskit_ibm_runtime import SamplerV2 as Sampler
service = QiskitRuntimeService(channel="ibm_quantum", token= "***")
be = service.least_busy(simulator=False, operational=True)
print(f"QPU backend:{be}")

# Transpile for real machine and submit the job
pm = generate_preset_pass_manager(optimization_level=1, backend=be)
ic = pm.run(qc) # Transpiled circuit
job = Sampler(be).run([ic], shots= 1000)
print(f"job ID: {job.job_id()}")
print(f"job statusI: {job.status()}")

# After execution, the results are retrieved and displayed
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService(
    channel='ibm_quantum',
    instance='ibm-q/open/main',
    token='token for the job'
)
job = service.job('jab ID')
job_result = job.result()
counts = job.result()[0].data.c.get_counts()
plot_histogram(counts)

The execution status is shown in Fig. 5. Usage = 2 sec. Free users are limited to 10 minutes of usage per month. This is sufficient for testing simple quantum circuits, but caution is required when testing slightly more complex quantum circuits, as this can result in unexpectedly high usage. At present, there are three models of actual machines available for free use, as shown in Fig. 6. For paid users, eight more models of actual machines can be used in addition to these.


🔴 Differences between the results of a real machine and a simulator

Currently, quantum computers generate various noises, which causes errors. For example, the difference between the results of a pure simulator (Fig. 2) and the results of a real machine (Fig. 4) shows this. Although it cannot be said in general, errors that occur on a real machine can have a large impact on the necessary calculations. However, in the case of this example problem, due to the nature of probabilistically searching for an order, it can be said that the difference between Fig. 2 and Fig. 4 is almost no problem.

2024年5月16日木曜日

IBM Quantum Labは廃止、だが新Composerがある

 【要旨】予告通り本日(現地時間 2024-5-15)、IBM Quantum Labのサービスが停止。これまでWeb上でQiskitコード(with Python)で量子回路を編集し、シミュレータや実機で実行できた環境がなくなってしまった!そのかわり、従来のComposerと呼ばれるビジュアル量子回路編集のサービスの質向上が図られた。そこから、実機で実行することもできるので、全体としては、ユーザサービスは向上したと言える。

🔴IBM Quantumからのアナウンス

 図1に示す通りだが、アナウンスはこのサイトの中にある。今後は、Qiskitコード編集、および実行環境はユーザ自身がローカルマシンに構築しなければならない。Webでのサービスは終了したのである。量子コンピュータハードウェア開発競争が激化し、IBMもハードウエア開発により注力するためらしい。
 Qiskitで作成した量子回路は、ユーザのローカル環境からもIBM Quantumマシン実機で実行できるので、中級以上のユーザには特に問題ないであろう。一方、初級ユーザ(および中級ユーザ)は、従来のビジュアル型のComposerが利用でき、今回はそのサービス内容もかなり向上したようである。

 ローカルにQiskit環境を構築後は、こちらのドキュメントが参考になる。

🔴新しいIBM Quantum Composerを使ってみる

 前向きに捉えて、新しくなったComposerを使ってみた。簡単な例題として、先のポストで示した「位相キックバックの量子回路」を使う。図2上部のように、量子回路の編集において、その各フェースで、確率振幅と位相を分かりやすく円盤で表示できる。また、図2下部に示すように、基底ベクトル毎の確率計算結果も表示される。

 このようにビジュアルに編集した量子回路に対して生成されるQiskitコードも見ることができる。図3にそれを示す。このコードをコピーして、自分のQiskit環境で使うこともできる。そして、注目すべきは、この画面から、IBM Quantumマシン実機で実行させることができることだ。特に嬉しいことに、利用可能なマシンそれぞれの混み具合(キューに何個のジョブが実行待ちか)を確認できるので、早く実行できそうなマシンを指定できる。性能(誤り発生率など)指標も表示されるので選択の参考にもなる。

 今回は、ibm_brisbaneという名称のマシンを指定したところ、まもなく実行された。実行結果として、1024ショット(デフォルト試行回数)のうちの、各基底ベクトルの出現頻度(Frequency)がヒストグラムで表示される。

 ここで良いことがある。この実行の結果、基底ベクトル|01>の頻度は図4の通り、94%であった。本来は、図2に示した通り、この頻度は理論計算上100%のはずだが、実際のマシンでは、このように数%程度の誤差が生ずる。

 もう一例示そう。図5は、3-qubitの強い量子もつれを起こすGHZと呼ばれる量子回路である。そのシミュレータ(小生自作のアプリ)とQuantumマシン実機(ibm_brisbane)の結果も図4の場合と同様に若干の差異が生じている。理論計算では、右側のシミュレータが示す通り、基底ベクトル|000>と|111>以外の基底ベクトルの頻度はゼロになるはずである。

 現状の本物の量子コンピュータとはこういうものである。それを実感することはとても重要なのではないか。現在の量子コンピュータ開発競争ではこのような誤差の低減を目指しているのだが、量子物理の世界はそういうものだ、として受け入れて利用したいという気にもなる。もちろん、幾つか分野の数理アルゴリズムでは、このような少しの誤差も許容できない場合があることも事実だ。

 IBMは、こういう状況ではあっても、ユーザには、「シミュレータよりも量子コンピュータ実機を使って欲しい」と言っているように思える。そこから得られる知見を今後の研究開発に生かしていくのであろう。

2024年3月13日水曜日

Qiskit API for IBM Quantumが変更になった!

 数週間までまで正常に動いていた、Qiskitコードが、2024-03-10現在、突然エラーが出て動かなくなった。これはどうしたことか。Qiskitドキュメントを調べると、Qiskit 1.0.1になって、かなりの変更があったことが分かった。よくみると、migration guideもあるではないか。それに従って、以下のような点を修正する必要があった。

●シミュレータを使う場合:以下のようにして解決
 qiskitからAer, executeなどをimportできなくなった。
 qiskit.tools.visualizationからplot_histogramなどがimportできなくなった。等々。
→別のライブラリから、QiskitRuntimeService等のimportが必要。

●IBM Quantum実機を使う場合:以下のようにして解決
 Qiskitの素晴らしい点として、シミュレータibmq_qasm_simulatorで動かしていた量子回路はそのままIBM Quantum実機でも動くことであった。シミュレータの名前を単に、実機の名前、例えばibm_brisbane等に変更するだけであった。

 しかし、こちらも、突然動かなくなったのである。実機で動かす前に、まず、無償で利用できる実機を確認した。登録ユーザの地域で異なるのだろうが、私の場合、ibm_brisbane、ibm_osaka、ibm_kyotoの3つであったが、いずれも、127量子ビットを装備した新鋭機 Eagle r3である。素晴らしい!だが、早速実行させてみると、以下のエラーが発生。しかも、"CX (CNOT) is not supported"という信じ難いエラーメッセージが!

 最初は、戸惑ったのだが、すぐにピンと来ました。このCXやHなどという量子ゲートは数学モデルにすぎない。実機がそのまま実装している訳ではないということだろうと。案の定そのその通りでした。シミュレータで動かしていた時の量子回路をtranspileというツールで変換した後に実機で実行すると成功しました!
 これまでは、実機で使う場合にはシステムが自動transpileをやっていたが、それを止めたと言うことであろう。

 このような状況は、確実な量子コンピュータの進歩の一面と言えるだろう。今後の色々な量子コンピュータ実機はそれぞれ独自の命令セットを持つはずだ。だから、論理レベルと物理レベルを明確に分離しているのだ。従来のプログラミング言語のコンパイラみたいなものが必須になってくる。

●Transpileが1分間でわかるビデオ解説
 以下のビデオはとても良いのではないか!最適化レベルもいくつかある!
How can I Transpile a Quantum Circuit? 1 Minute Qiskit
https://www.youtube.com/watch?v=8mrPNSctRIg


2023年9月3日日曜日

量子テレポーテーションをQiskitでもやってみる

 量子テレポーテーションに関しては、これまでに何度か記事を書きました。例えば次のようなものです:
 これらの記事では、主に量子回路シミュレータQniを使って、説明してきました。内容はほぼ同じなのですが、今回は、Qiskitを使ってみました。新たに分かったこともあるので、記録しておきたいと思った次第です。
地球と月の間の量子テレポーテーション

●量子ビットと古典ビットの並び順の相違
 これは(Qiskitに限らず)混乱しやすいので、改めて図1にまとめた。(本図は、私のオリジナル作品)まず、複数の量子ビットシステムのテンソル積での並び順であるが、量子回路図では、これを右側に起こして直立させたものになる。次に、これらの量子ビットの測定結果(古典ビット列)の並び順は、これを右側へ倒して水平にしたものと対応する。すなわち、テンソル積と古典ビット列では、上位と下位が逆転する。これは、慣例となっているので、注意する必要がある。図3にもこれが表れる。

●量子テレポーテーションで転送したい量子ビット状態の設定
 任意の量子ビット状態を転送できるのだが、ここでは、一例として、図2に示す量子状態とする。すなわち、量子ビット|0>に対して、Y軸周りに60°回転、さらにZ軸周りに60°回転させた状態を設定した。
 QiskitではComposerとQuantum Labの2つが使える。どちらでも、量子状態ベクトルを表示できる。何か詳細な設定が必要であれば、上図のように、Quantum Labでコーディングすることができる。もちろん、次の図3と同じ量子回路図も、Quantum Labで書くこともできる。

●量子テレポーテーションをQiskit Composerでシミュレートする
 さて、ここからが本論なのであるが、原理的なことはすでに上記ブログ記事に十分書いているので、重複する部分は省略する。図3は、図2で設定した量子ビット状態を、AlcieからBobへ転送する様子である。下段には、Aliceの測定結果としての古典2ビット情報の発生確率と、AliceとBobの3量子ビットシステムの確率振幅が表示されている。
 この図で最も重要な点は、Aliceの量子ビット状態①が、Bobの量子ビットに設定されることである。つまり、①と⑥は全く同一の状態である。しかし、①の状態はすでに消滅して⑦のようになっている。これは量子複製不可定理に則っていることなのである。

 すでに既報では、Aliceが②で測定を行う直前の状態は、4通りあり、それぞれ1/4の確率で発生することを示した。図下段の③からそのことが確認できる。これは、Composerが自動的に②の測定を1024回実行(shot)した結果なのである。つまり、測定結果の古典ビット列000、001、010、011の出現確率がそれぞれほぼ等しく、25%程度となっており、それらの合計は100%であることが実証された。なお、3ビットの並びの最上位は0となっているが、これは、Bobの量子ビットがこの時点では測定されていないことによる。また、②の測定の直前に、Aliceが自分の2量子ビットに逆Bell回路を適用していることにも注意する。

 最後に、右端の3量子ビットシステムの状態をみてみよう。この例では、②の測定結果が10であり、|q[2]>|1>|0>という状態になっている。測定結果によらず、q[2]の状態は必ず⑥(すなわち①)となる。そうなるように、Bobによる④の操作(制御付き量子ゲート)が設定されているのである。q[2]が|1>となる確率が0.25(|0>となる確率は0.75)であることは図2に示したので、⑤の確率振幅の分布は納得できるであろう。

●Qiskit Composerのその他の機能
 図3の②での一回の測定結果として、特定の2ビットパタンが必要な場合は、図4上部のVisualizations seedを変更して試すことができる。また、図中の量子ビット状態を示す円盤には、量子ビットのpurity(量子もつれの有無)を示す情報も含まれるので、量子回路の検証に利用することができるだろう。