Qiskit Backend implementation for QuBE devices. This repository contains source code that has been copied and modified from Qiskit.
Qiskit Experimentsに用意されているキャリブレーション実験コードをQuBEデバイス上で動かすために、ソフトウェア的な接続が可能かどうかを検証するための、試作コードです。
- QuBEデバイスを表現するQiskitの
Backend
オブジェクトを用意 Backend
オブジェクト内で、Qiskit Pulse APIで表現されたパルススケジュール (Schedule
) をe7awgswのWaveSequence
/CaptureParam
等の形式に変換- 実機で動作させるにはポートの対応関係や時刻の同期等についてデバッグが必要と予想される
- Qiskit Dynamicsのシミュレータを利用して、生成されるはずの測定結果を再現
- Qiskit Experimentsの各キャリブレーション実験について、QuBEデバイスに送受信されるはずのデータ (
send_recv()
の引数と戻り値) を記録、プロット、再生
ファイル名 | 機能 |
---|---|
backends.py | Qiskit DynamicsのためにBackend のセットアップを行うユーティリティ |
calibrations.py | Qiskit Experimentsのキャリブレーション実験のコレクション |
calibration_test.py | 実際にキャリブレーション実験を走らせてデータの生成や記録、プロット等をテストする実行可能コード |
circuits.py | テスト用の回路のコレクション |
qube_backend.py | QuBEデバイスを表現するQiskitのBackend |
recorder.py | 送受信データの記録と再生のためのユーティリティ |
backends.pyの中で、Qiskit Dynamicsのシミュレータのパラメータや各ゲートの波形等を仮に設定していますが、これらは実際のデバイスに応じて設定する必要があります。
リポジトリをクローンし、poetryで必要なpythonパッケージをインストールします。
git clone [email protected]:QunaSys/qiskit-qube-backend.git
cd qiskit-qube-backend
git submodule update --init --recursive
poetry shell
poetry install
Qiskit Experimentsに用意されているキャリブレーション実験 (Calibrations) を幾つか実行し、実験中に実行されるQiskitのパルススケジュール (Schedule) の内容の確認や、送受信されるはずのデータの記録、プロットなどを行います。
cd qiskit_pulse_backend
python calibration_test.py
以下のコードでどの実験を走らせるかを選択します。
def run_calibrations() -> None:
init_jax()
path = "record.pkl"
record_cals(cs.calibrate_frequency_with_spectroscopy, path)
play_cals(cs.calibrate_frequency_with_spectroscopy, path)
# record_cals(cs.calibrate_amplitude_with_rabi_experiment, path)
# play_cals(cs.calibrate_amplitude_with_rabi_experiment, path)
# record_cals(cs.calibrate_sx_pulse, path)
# play_cals(cs.calibrate_sx_pulse, path)
Qubit Spectroscopy
以下の行を有効にしてスクリプトを実行します。
record_cals(cs.calibrate_frequency_with_spectroscopy, path)
play_cals(cs.calibrate_frequency_with_spectroscopy, path)
ラビ振動実験
以下の行を有効にしてスクリプトを実行します。
record_cals(cs.calibrate_amplitude_with_rabi_experiment, path)
play_cals(cs.calibrate_amplitude_with_rabi_experiment, path)
ゲートファインチューニング
以下の行を有効にしてスクリプトを実行します。
record_cals(cs.calibrate_sx_pulse, path)
play_cals(cs.calibrate_sx_pulse, path)
各キャリブレーション実験では複数のパルススケジュールが実行されます。デフォルトではQiskitのパルススケジュールの概要がすべて標準出力に出力され、最初のパルススケジュールの結果が画像ファイルにプロットされます。以下のコードで、何番目の結果をプロットするかをカスタマイズできます。
def record_cals(calsf: Callable[[Backend], None], path: str) -> None:
recorder = SignalRecorder()
backend = gen_backend()
backend.qube = Qube()
backend.recorder = recorder
backend.mode = Mode.RECORD
calsf(backend)
setup, out_arr = recorder.history()[0] # 記録データから最初の結果を取得
plot_setup(setup)
plot_out_arr(out_arr)
plot_iq_plane(out_arr)
recorder.save(path)