ローカルテストモード
このページのコードは、以下の要件に基づいて開発された。 これらのバージョンまたは新しいバージョンの使用をお勧めします。
qiskit[all]~=2.5.1 qiskit-ibm-runtime~=0.47.0 qiskit-aer~=0.17
ローカルテストモード( qiskit-ibm-runtime v0.22.0 以降で利用可能)を使用すると、プログラムを微調整して実際の量子ハードウェアに送信する前に、プログラムをテストすることができます。 ローカル・テスト・モードを使ってプログラムを検証した後、QPUで実行するために必要なのはバックエンド名を変更することだけだ。
Executorプリミティブはローカルテストモードに対応していません。
ローカルテストモードを使用するには、 IBM Quantum プリミティブまたはセッションをインスタンス化する際に、のいずれかのフェイクバックエンドを指定するか qiskit_ibm_runtime.fake_provider 、Qiskit Aerバックエンドを指定してください。
-
偽のバックエンド :
qiskit_ibm_runtime.fake_providerの偽のバックエンドは、QPUスナップショットを使用することで、 IBM® QPUの動作を模倣している。 QPUスナップショットには、結合マップ、基底ゲート、量子ビットの特性など、QPUに関する重要な情報が含まれており、トランスパイラのテストやQPUのノイジーシミュレーションの実行に役立ちます。 スナップショットのノイズモデルは、シミュレーション中に自動的に適用されます。 -
Aerシミュレータ : Qiskit Aerのシミュレータは、より大規模な回路やカスタムノイズモデルを扱うことができる、より高性能なシミュレーションを提供します。
AerSimulatorをローカル・テスト・モードで使用する場合、シミュレーション方法のオプション・リストが利用できます。 多数の量子ビットを持つクリフォード回路を効率的にシミュレーションする方法を示すクリフォード・シミュレーション・モードの例を参照してください。詳しくは
AerSimulatorドキュメントを参照のこと。-
"automatic":デフォルトのシミュレーション方法。 回路とノイズモデルに基づいて、シミュレーション方法を自動的に選択します。 -
"statevector": 理想的な回路から測定結果をサンプリングできる高密度な状態ベクトルシミュレーション。 ノイズの多いシミュレーションでは、各ショットがノイズモデルからランダムにサンプリングされたノイズ回路をサンプリングする。 -
"density_matrix": ノイズの多い回路から測定結果をサンプリングできる密度行列シミュレーション。 -
"stabilizer":ノイズモデル中のすべての誤差がクリフォード誤差でもある場合、ノイズの多いクリフォード回路をシミュレートできる効率的なクリフォード・スタビライザ状態シミュレータ。 -
"extended_stabilizer":ランク付けされた安定化状態に状態を分解することに基づくクリフォード+T回路の近似シミュレータ。 項数は、非クリフォード(T)ゲートの数とともに増加する。 -
"matrix_product_state":テンソルネットワークの状態ベクトルシミュレータで、状態に行列積状態(MPS)表現を用いる。 これは、シミュレータのオプションによって、MPSのボンド寸法を切り捨てるかどうかで行うことができます。 デフォルトの動作は切り捨てなしである。 -
"unitary":理想回路の密なユニタリー行列シミュレーション。 これは、初期量子状態の進化ではなく、回路自体のユニタリー行列をシミュレートしている。 この方法はゲートのシミュレーションしかできない。測定、リセット、ノイズはサポートしない。 -
"superop":理想回路またはノイズ回路の高密度スーパーオペレータ行列シミュレーション。 これは、初期量子状態の発展ではなく、回路自体のスーパーオペレータ行列をシミュレートするものである。 この方法は、理想的でノイズの多いゲートとリセットをシミュレートできるが、測定には対応していない。 -
"tensor_network":状態ベクトルと密度行列の両方をサポートするテンソルネットワークベースのシミュレーション。 現在のところ、これはGPUでのみ利用可能で、 cuQuantumcuTensorNetAPIを使用することで高速化されている。
-
- ローカルテストモードでは、 IBM Quantum のすべてのComputeオプションを指定できます。 ただし、ローカルシミュレータで実行する場合、ショット以外のすべてのオプションは無視されます。
- 偽のバックエンドやAerシミュレータを使用する前に、
pip install qiskit-aerを実行してQiskit Aerをインストールすることをお勧めします。 偽のバックエンドは、Aerのシミュレーターが利用可能であれば、その性能を利用するために、隠れてAerのシミュレーターを使用する。
偽のバックエンドの例
from qiskit.circuit import QuantumCircuit
from qiskit.transpiler import generate_preset_pass_manager
from qiskit_ibm_runtime import SamplerV2 as Sampler
from qiskit_ibm_runtime.fake_provider import FakeManilaV2
# Bell Circuit
qc = QuantumCircuit(2)
qc.h(0)
qc.cx(0, 1)
qc.measure_all()
# Run the Sampler job locally using FakeManilaV2
fake_manila = FakeManilaV2()
pm = generate_preset_pass_manager(backend=fake_manila, optimization_level=1)
isa_qc = pm.run(qc)
# You can use a fixed seed to get fixed results.
options = {"simulator": {"seed_simulator": 42}}
sampler = Sampler(mode=fake_manila, options=options)
result = sampler.run([isa_qc]).result()AerSimulator 例
ノイズのないセッションの例:
from qiskit_aer import AerSimulator
from qiskit.circuit import QuantumCircuit
from qiskit.transpiler import generate_preset_pass_manager
from qiskit_ibm_runtime import Session, SamplerV2 as Sampler
# Bell Circuit
qc = QuantumCircuit(2)
qc.h(0)
qc.cx(0, 1)
qc.measure_all()
# Run the Sampler job locally using AerSimulator.
# Session syntax is supported but ignored because local mode doesn't support sessions.
aer_sim = AerSimulator()
pm = generate_preset_pass_manager(backend=aer_sim, optimization_level=1)
isa_qc = pm.run(qc)
with Session(backend=aer_sim) as session:
sampler = Sampler(mode=session)
result = sampler.run([isa_qc]).result()ノイズを含むシミュレーションを行うには、QPU(量子ハードウェア)を指定し、それをAerに提出する。 Aerは、そのQPUからの校正データに基づいてノイズモデルを構築し、そのモデルを使ってAerバックエンドをインスタンス化する。 お望みなら、 ノイズモデルを作ることもできる。
QPUはさまざまな種類のノイズの影響を受ける可能性がある。 ここで使用しているQiskit Aerのノイズモデルは、その一部をシミュレートしているに過ぎないため、実際のQPUのノイズよりも深刻度は低いと思われる。
QPUからノイズ・モデルを初期化する際にどのようなエラーが含まれるかについての詳細は、Aer NoiseModel APIリファレンスを参照してください。
ノイズのある例:
from qiskit_aer import AerSimulator
from qiskit.circuit import QuantumCircuit
from qiskit.transpiler import generate_preset_pass_manager
from qiskit_ibm_runtime import SamplerV2 as Sampler, QiskitRuntimeService
# Bell Circuit
qc = QuantumCircuit(2)
qc.h(0)
qc.cx(0, 1)
qc.measure_all()
service = QiskitRuntimeService()
# Specify a QPU to use for the noise model
real_backend = service.backend("ibm_fez")
aer = AerSimulator.from_backend(real_backend)
# Run the Sampler job locally using AerSimulator.
pm = generate_preset_pass_manager(backend=aer, optimization_level=1)
isa_qc = pm.run(qc)
sampler = Sampler(mode=aer)
result = sampler.run([isa_qc]).result()クリフォードシミュレーション
クリフォード回路は効率的にシミュレーションでき、検証可能な結果が得られるため、クリフォード・シミュレーションは非常に有用なツールである。 詳細な例については、 Qiskit Aerプリミティブによるスタビライザー回路の効率的なシミュレーションを参照してください。
例:
import numpy as np
from qiskit.circuit.library import efficient_su2
from qiskit_ibm_runtime import SamplerV2 as Sampler
n_qubits = 500 # <---- note this uses 500 qubits!
circuit = efficient_su2(n_qubits)
circuit.measure_all()
rng = np.random.default_rng(1234)
params = rng.choice(
[0, np.pi / 2, np.pi, 3 * np.pi / 2],
size=circuit.num_parameters,
)
# Tell Aer to use the stabilizer (Clifford) simulation method
aer_sim = AerSimulator(method="stabilizer")
pm = generate_preset_pass_manager(backend=aer_sim, optimization_level=1)
isa_qc = pm.run(qc)
sampler = Sampler(mode=aer_sim)
result = sampler.run([isa_qc]).result()次のステップ
- この
Neatクラスを使用して、Estimator ワークロードに対するノイズの影響を分析します。 - 詳細なサンプル例を確認してください。
- 見積書の詳細な例を確認してください。
- IBM Quantum Learningの Cost functionのレッスンを通して、プリミティブの練習をしましょう。
- ローカルでトランスパイルする方法については、 トランスパイルセクションをご覧ください。
- トランスパイラ設定の比較チュートリアルを試してみてください。