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

2025年5月5日月曜日

IBM Quantum無料枠の利用可能時間の計算が変更になった!

 IBM Quantum無料利用枠の新しい計算方法:最近気付いたことだが、私にとってはちょっと重要事項なので書き留める!

 IBM Quantumの無料プラン(Open Plan)における利用時間の計算方法は、これまでの「28日毎にリセットされる固定制」から、「直近28日間のローリングウィンドウ制」に変更さた!ただし、IBM Quantum の新しいプラットフォーム(early access)の場合である。6月末まで利用可能な旧プラットフォームはそのままのようだが。
Here’s the image illustrating the change in IBM Quantum’s free usage calculation method.
An example

🟢変更前:固定制(28日毎に自動リセット)
 これまでは、Open Planの利用時間は28日毎に0:00 UTCにリセットされ、28日あたり最大10分間の量子計算時間が提供されていた。

🟢変更後:ローリングウィンドウ制(直近28日間)
 現在は、直近28日間の累積利用時間が10分間に制限される「ローリングウィンドウ制」が採用されている。28日経過しても、自動的にまた10分間使えるようにリセットされることはない!

 この変更により、過去28日間の利用状況に応じて残り時間が変動するので、それを念頭に量子コンピュータ実機を使わなければならない。これが本来の姿かも知れない。

2024年11月11日月曜日

量子コンピューティング開発環境Qiskitでの実行方法

English version here
【要旨】
量子コンピューティングの代表的な開発環境として、IBM Qiskitを利用している。そのバージョンアップは頻繁になされて、すぐにdeprecated(非推奨、または廃止)となる部分が多く、困惑する場合がある。量子ゲートや量子回路の記述などはほとんど変わらないが、シミュレータ、および実機での実行方法などの変更が多発する。ここでは、現時点(2024-11-10)での典型的な実行方法3つをメモして置きたい。

🔴例題:Shorの素因数分解アルゴリズムの量子計算部分
 ここでは、Shorのアルゴリズムの主要部である位数計算(order finding)量子回路を動かすことだけに注目する。Fig.1は、デモとして動かすための、極く小さな整数15の素因数分解(15 = 3 × 5)の場合である。Shorのアルゴリズム全体とFIg.1の量子回路との関係などは今回は説明しないので、例えば以下のような過去記事をご覧いただきたい。

🔴[1]Qiskit Samplerによるシミュレーション(ローカルPCで実行)
 Fig.1のような量子回路(名称:qc)の実行(下位3量子ビットの測定を含む)を行うための最も一般的なシミュレータとして、Qiskit Samplerがある。その利用の要点は以下のとおりである。このシミュレーションの結果(1,000 shotsの測定結果)をFig.2に示す。

# シミュレーションの実行
from qiskit_aer.primitives import Sampler
sampler = Sampler()
result = sampler.run(qc, shots=1000).result()

# 測定結果の取り出しと図示
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]実機のノイズモデルを組み込んだシミュレーション(ローカルPCで実行)
 上記では、シミュレーション結果(Fig.2)として、4つの基底に対応するカウントがほぼ25%づつで、それ以外の基底のカウントは、ノイズがないので、理論通りゼロとなった。このような通常のSamplerによる以外に、量子コンピュータ実機で発生するノイズを反映させたシミュレーションを行うこともできる。
 Fig.3は、ibm_sherbrookeという名の実機(127-qubits)で発生するノイズモデルを、AerSimulatorに組み込んで実行した結果である。確かに、Fig.2では発生しなかったノイズによる影響が出ている。実機で実行する前の事前検討などに有用であろう。

# 重要なimport
from qiskit_aer import AerSimulator
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
from qiskit_ibm_runtime import QiskitRuntimeService, SamplerV2 as Sampler

# リアルマシンのノイズモデルをセット
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
sampler = Sampler(mode=aer)
result = sampler.run([isa_qc],shots=1000).result() # 実行

# 測定結果の取り出しと図示
pub_result = result[0]
counts = pub_result.data.c.get_counts() # 'c'を指定することに注意!
plot_histogram(counts)

🔴[3]IBM Quantumマシン実機での実行(web経由でジョブを投入)
 次に、IBM Quantumマシン実機へweb経由でジョブを投入し、実行を行った。マシンは、上記のノイズモデルで与えたものと同じibm_sherbrookeである。ジョブはバッチ形式で実行されるので、その終了後にWeb経由で実行結果を取り出す。それを表示したものがFig.4である。上記のノイズモデルを反映したシミュレーション結果Fig.3とほぼ同一であることが確認できた。

# 負荷の少なそうなマシンを自動選択
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バックエンド:{be}")

# 実マシン向けのtranspileを行い、Jobを投入
pm = generate_preset_pass_manager(optimization_level=1, backend=be)
ic = pm.run(qc) # Transpile結果
job = Sampler(be).run([ic], shots= 1000)
print(f"ジョブID: {job.job_id()}")
print(f"ジョブI状態: {job.status()}")

# 実行終了後に、結果を取り出し、表示。
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService(
    channel='ibm_quantum',
    instance='ibm-q/open/main',
    token='jobに対応するトークン'
)
job = service.job('jab ID')
job_result = job.result()
counts = job.result()[0].data.c.get_counts()
plot_histogram(counts)

 この実行の状況をFig.5に示した。Usage = 2 secとなっている。無償ユーザは、毎月10分までのUsageという制約がある。簡単な量子回路の試験には十分であるが、少し複雑な量子回路になると想定外に多くのUsageを使うことになるので、注意が必要である。なお、現時点では、無償で使える実機はFig.6に示すとおり、3機種であった。有償の場合は、これらの他にさらに8機種の実機が利用できる。


🔴実マシンとシミュレータの結果の相違について
 現状では、量子コンピュータは種々のノイズが発生するので誤りが起こる。例えば、純粋のシミュレータの結果Fig.2と、実マシンによる結果Fig.4の相違がそれを示している。一概には言えないが、実機で起こる誤りが、必要な計算に与える影響は大きい場合がある。だが、本例題に限って言えば、確率的に位数(order)を探すという性質上、Fig.2とFig.4の差はほとんど問題にならないと言える。

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年4月9日火曜日

かなり残念:IBM Quantum Labの廃止...

 😖量子コンピューティングに関して、続けてまた、残念なことが起こった。人生と同じで、量子コンピュータの世界も波乱万丈である。それにしても、かなりショックである。これまで数年間愛用してきたIBM Quantum Labが約1ヶ月後(2024-5-15)に廃止になるとのアナウンスが...これによって、ibm_qsam_simulatorなどのシミュレータが使えなくなるのである!

 悲しい。instructions to download filesが示されている。これを使って、既存のあなたのプロジェクト(ソースコード)をダウンロードして、これ以降は、自分でローカルマシンにQiskit環境を設定してシミュレーションして下さい、とのことである。

 IBMは、今後、開発競争が激化する量子コンピュータ(ハードウェア)に注力するために、今回のようにシミュレータのサービスを停止するとのことのようだ。素人の邪推だが、昨年末のハーバード大学からの衝撃的発表(中性原子方式の量子コンピュータ)によって、戦略を変更する必要が生じたのかもしれない。

 これまで、無償でクラウドでシミュレータを提供してくれたことに感謝するしかない。多分、グラフィカルインタフェースで試すことができるQuantam Composerはサポートし続けるようである。特に心配なのは、これまで使えていた実機の無償提供は続行されるのか否かである。多分、Yesだとは思うが。でも、Quantum Lab自体が削除されるとすれば、どのように実機にアクセスできるのだろうか。

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


2022年8月26日金曜日

量子もつれをIBM Quantum実機で体験

 前報のアダマールゲートの模型まで行ったところで、今回は、そのような量子ゲートを使った簡単な量子回路を試してみる。ここに出現するのは「量子のもつれ」である。これは、複数量子ビットのうちのあるビットを量子ゲートで操作した時に、別の量子ビットの状態に瞬時に影響を与える現象のようだ。これを利用して、演算結果として得たい状態を作り出す(結果を絞り込む)量子回路を作ることができる。これは重要な機能となるだろう。

2量子ビット回路による結果の絞り込み
  まず、図1(a)の量子回路だが、これは2つの量子ビットを共に確定値 |0>に初期化し、それらにアダマールゲートとCNOTゲートを適用している。これらのゲートの機能から、最初のビットを観測すると|0>|1>がそれぞれ50%の確率で得られる。それが |0>ならば、2番目のビットは何も影響を受けないが、|1>ならば、2番目のビットは反転して |1>となる。すなわち、この回路の実行結果としては、"00"と"11"がそれぞれ確率50%で得られる。これを、量子シミュレータQniでやってみると、図1(b)(c)のように、確かにそうなるようだ。

3量子ビット回路による結果の絞り込み
 次に、図2(a)は、3量子ビットで量子もつれを引き起こす回路である。今度は、アダマールゲートとCNOTゲートに加えて、パウリXゲートも使われている。この回路の実行結果を予測する手計算も可能ではある。というのも、前回の記事で実施したアダマールゲートの2回適用と同様の計算をすれば良いからである。しかしながら、かなり入り込んだ計算となるので、ちょっとやめておく。

 そこで、図1の場合と同じく、量子シミュレータQniでやってみた。図2 (b) (c)のように、この量子回路の実行結果として、"000"と"111"がそれぞれ50%の確率で得られるようだ。すなわち、量子重ね合わせ状態 (|000> + |111>) / √2 が得られる。ただ、本当にその確率になることを知るには、何度もこの回路を実行して観測する必要がある。

IBM Quantum実機による3量子ビット回路の実行
 この3量子ビット回路の量子もつれによる、上記のような"000"と"111"への絞り込みを実際に確認するため、IBM Quantum実機(5量子ビットのmanilaというマシン)を使ってみた。回路の作成は、図2と同じようなインタフェースで行える。実際、それは図3のようになり、量子シミュレータQniとあまり差はないようだ。
 そして、その実行結果が図4である。ここで注意すべきは、黒枠内の"computational basis states"のグラフである。これは回路を構成(compose)した後に得られたものだ。回路の実行前である。従って、これは事前予測なのだろう。これから試行する1024回のうち、確かに、"000"と"111"がそれぞれ確率50%で得られることを示している。

一方、外側の赤枠の結果が、このIBM機での実際の実行結果である。確かに、"000"と"111"がそれぞれ確率50%近い出現状況となっているが、少し歪んでいる。また、"110"や"101"などの他のビット組み合わせも僅かながら観測された。これは現実の量子コンピュータには種々のノイズが生ずることを示唆しているのかも知れない。
 これは、5量子ビットのmanila機の場合だが、別の7量子ビットのoslo機でも状況は同じようだ。下図も参照願いたい。
 しかしながら、量子コンピュータは、従来のコンピュータとは全く異なり、このように確率の概念の上に組み立てられているのだろう。その特性を把握して、利用価値を見出して行くものなのだろう。
 量子コンピュータは、量子状態の重ね合わせと波の干渉の両方をうまく活かすことができて初めてその真価を発揮すると言われる。上記のように量子ゲートを用いて量子回路を作るという現状は、従来コンピュータで言えば、まだアセンプラかそれ以下の低水準の操作に留まる。しかし、ここまでくると、「波の干渉」を直接考慮する場面は多分少ないので、情報系技術者にとって良いことであろう。