Skip to content

QunaSys/qiskit-qube-backend

Repository files navigation

qiskit-qube-backend

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)

About

Qiskit Backend implementation for QuBE devices

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages