Qiskit Runtime
qiskit_ibm_runtime
Qiskit Runtime IBM クライアントに関連するモジュール。
Qiskit Runtime は、多くの反復を必要とする計算を効率化する新しいアーキテクチャである。 これらの実験は、改良された量子/古典のハイブリッド・プロセスの中で大幅に高速化される。
プリミティブとセッション
Qiskit Runtime には、 Sampler と Estimator という2つの定義済みプリミティブがある。 これらのプリミティブは、量子コンピューティングの基本的なタスクを実行するための簡素化されたインターフェイスを提供すると同時に、量子ハードウェアと量子ソフトウェアの最新開発にも対応している。
Qiskit Runtime にもセッションの概念がある。 セッション内に投入されたジョブは、スケジューラーによって優先順位がつけられる。 セッションを利用すれば、量子コンピュータを効率よく繰り返し呼び出すことができる。
以下は、セッション内でプリミティブを使用する例である:
from qiskit_ibm_runtime import QiskitRuntimeService, Session
from qiskit_ibm_runtime import SamplerV2 as Sampler
from qiskit_ibm_runtime import EstimatorV2 as Estimator
from qiskit.circuit.library import real_amplitudes
from qiskit.circuit import QuantumCircuit, QuantumRegister, ClassicalRegister
from qiskit.quantum_info import SparsePauliOp
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
# Initialize account.
service = QiskitRuntimeService()
# Prepare inputs.
psi = real_amplitudes(num_qubits=2, reps=2)
H1 = SparsePauliOp.from_list([("II", 1), ("IZ", 2), ("XI", 3)])
theta = [0, 1, 1, 2, 3, 5]
# Bell Circuit
qr = QuantumRegister(2, name="qr")
cr = ClassicalRegister(2, name="cr")
qc = QuantumCircuit(qr, cr, name="bell")
qc.h(qr[0])
qc.cx(qr[0], qr[1])
qc.measure(qr, cr)
backend = service.least_busy(operational=True, simulator=False)
pm = generate_preset_pass_manager(target=backend.target, optimization_level=1)
bell_isa_circuit = pm.run(qc)
psi_isa_circuit = pm.run(psi)
isa_observables = H1.apply_layout(psi_isa_circuit.layout)
with Session(backend=backend) as session:
# Submit a request to the Sampler primitive within the session.
sampler = Sampler(mode=session)
job = sampler.run([bell_isa_circuit])
pub_result = job.result()[0]
print(f"Counts: {pub_result.data.cr.get_counts()}")
# Submit a request to the Estimator primitive within the session.
estimator = Estimator(mode=session)
estimator.options.resilience_level = 1 # Set options.
job = estimator.run(
[(psi_isa_circuit, isa_observables, theta)]
)
pub_result = job.result()[0]
print(f"Expectation values: {pub_result.data.evs}")ローカルテストモード
ローカル・テスト・モードを使用すれば、物理システムに送信する前に量子プログラムを検証することができる。 プリミティブまたはセッションをインスタンス化する際に、 qiskit_ibm_runtime.fake_provider の偽バックエンドまたは Qiskit Aer バックエンドインスタンスのいずれかが使用されると、ローカルテストモードが有効になります。 例:
from qiskit_aer import AerSimulator
from qiskit.circuit.library import real_amplitudes
from qiskit.circuit import QuantumCircuit, QuantumRegister, ClassicalRegister
from qiskit.quantum_info import SparsePauliOp
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
from qiskit_ibm_runtime import Session
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)
sampler = Sampler(backend=fake_manila)
result = sampler.run([isa_qc]).result()
# Run the sampler job locally using AerSimulator.
# Session syntax is supported but ignored.
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()バックエンドデータ
least_busy()``backends()``backend()QiskitRuntimeService また、使用するターゲットバックエンドを照会できる、、、などのメソッドも備えています。 これらのメソッドは、バックエンドを記述するメソッドや属性を含む1つ以上の IBMBackend インスタンスを返します。
補足情報
アカウント初期化
Qiskit Runtime サービスの利用を開始するには、まずアカウントを初期化する必要があります。 これを行うには、アカウントの認証情報を使用してインスタンスを QiskitRuntimeService 初期化します。 毎回認証情報を渡すのが面倒な場合は、この QiskitRuntimeService.save_account() メソッドを使って認証情報をディスクに保存することができます。
Qiskit Runtime は IBM Cloud で利用可能で、 channel="ibm_cloud" または channel="ibm_quantum_platform" でチャンネルを指定できます。
ランタイムジョブ
の メソッド、あるいは Estimator の Samplerrun() メソッドを使用してプリミティブを呼び出すと、 のインスタンスが RuntimeJobV2 返されます。 RuntimeJobV2.cancel()RuntimeJobV2.result()RuntimeJobV2.status()このクラスには、、、などの基本的なジョブメソッドがすべて備わっています。
ロギング
qiskit-ibm-runtime は qiskit_ibm_runtime のロガーを使用する。
つの環境変数を使ってロギングをコントロールできる:
QISKIT_IBM_RUNTIME_LOG_LEVEL:使用するログレベルを指定します。無効なレベルが設定された場合、ログレベルのデフォルトは
WARNINGになります。 有効なログレベルは、DEBUG、INFO、WARNING、ERROR、CRITICAL(大文字と小文字は区別されない)。 環境変数が設定されていない場合、親ロガーのレベルが使われ、これもデフォルトはWARNINGです。
QISKIT_IBM_RUNTIME_LOG_FILE:使用するログファイル名を指定します。 指定された場合、メッセージはファイルにのみ記録される。 そうでない場合、メッセージは標準エラー(通常は画面)に記録される。
より高度な使用については、ロガー自体を変更できます。 例えば、手動でレベルを WARNING に設定する:
import logging
logging.getLogger('qiskit_ibm_runtime').setLevel(logging.WARNING)クラス
QiskitRuntimeService | Qiskit Runtime サービスと対話するためのクラス。 |
Estimator | 別名 EstimatorV2 |
EstimatorV2 | Qiskit Runtime Estimator プリミティブサービスと対話するためのクラス。 |
Sampler | 別名 SamplerV2 |
SamplerV2 | Qiskit Runtime Sampler プリミティブ・サービスと対話するためのクラス。 |
Executor | QuantumProgram\s を実行するためのクラス。 |
Session | Qiskit Runtime セッションを作成するためのクラス。 |
Batch | バッチ実行モードでジョブを実行するためのクラス。 |
IBMBackend | IBM Quantum バックエンドと連携するバックエンドクラス。 |
RuntimeJobV2 | 実行時の表現 V2 プリミティブの実行。 |
RuntimeEncoder | ランタイムサービスが使用するJSONエンコーダ。 |
RuntimeDecoder | ランタイムサービスが使用するJSONデコーダー。 |