Path: blob/main/translations/ja/ch-quantum-hardware/calibrating-qubits-pulse.ipynb
3857 views
Qiskit Pulseで量子ビットを較正する
Qiskitは量子コンピューティングのオープンソース化されたフレームワークです(参照 1)。Qiskitを使用して、量子回路を構築し、シミュレーションし、量子デバイス上で実行することが可能です。
Qiskit Pulseは、特定のハードウェアに依存しない一般の量子デバイスに対してパルスレベルの制御(例: 入力シグナルの連続時間ダイナミクスの制御)を指定する言語を提供します(参照 2)。
このチュートリアルでは、QiskitとQiskit Pulseを使った単一量子ビットのキャリブレーションと特性評価実験の実装について説明します。これらは通常、デバイスが製造されシステムに取り付けられた直後にラボで行われる最初の実験です。このチュートリアルは教育的であり、学生は二準位系のダイナミクスを実験的に調べることに使えます。すべての単位は標準SI系(つまり、Hz、秒など)です。
それぞれの実験でシステムに関する詳細情報を取得し、通常、それを後続の実験で使用します。そのため、このnotebookは基本的に順番に実行する必要があります。
バックエンドがPulse機能をサポートしていることを確認するため、バックエンドの構成をチェックします。この構成を確認することで、バックエンドのセットアップ構造に関する一般情報を知ることができます。
例えば、バックエンド構成内のバックエンド・パルスのサンプリング時間を見つけることができます。これは、キャリブレーションルーチンを構築して実行するときに非常に有用な値になります。
バックエンドの使い方を学ぶにはバックエンドのデフォルト値を知ることから始まります。バックエンドのデフォルト値には基本的な量子演算子を実行するための量子ビット周波数とデフォルトプログラムの推定値が含まれています。次の方法でそれらにアクセスできます:
2. 周波数スイープを使った量子ビット周波数の探索
まずは量子ビット周波数を探すことから始めます。量子ビット周波数は基底状態と励起状態間のエネルギーの差であり、それぞれとの状態としてラベル付けします。この周波数は、量子ビットに特定の量子演算子を実行するためのパルスを作成するのに重要で、この周波数を求めることがキャリブレーションの最終目標です!
超伝導量子ビットでは、より高いエネルギー準位も利用できますが、どの遷移を励起するかを制御できるようにシステムを非調和に作ります。このようにして、2つのエネルギー準位を分離し各量子ビットを基本的な二準位系として扱う事で、より高いエネルギー状態を無視することができます。
一般的な実験室の設定は、ネットワーク・アナライザーと呼ばれるツールを使用して特定の範囲の周波数をスイープし、吸収のサインを探すことで量子ビット周波数を見つけることができます。この測定により、量子ビット周波数の大まかな推定値が得られます。後半で、ラムゼイ・パルスシーケンスを使用してより正確な測定を行う方法について説明します。
まず、量子ビットを探すためスイープする周波数範囲を定義します。この範囲は任意に広げられるので、backend_defaultsを使って推定量子ビット周波数の周りの40MHzの幅に制限します。そして1MHz単位で周波数を変更します。
次に、実験に使用するパルスを定義します。ガウシアン・パルスである駆動パルスから始めます。
先述のdtの値を覚えていますか?パルスの持続時間はdtで与えられます。次のセルでは、駆動パルスの長さをdtで定義します。
量子ビットを適切に測定するには、測定マップを確認する必要があります。ハードウェアの制約の確認です。1つの量子ビットに対して取得されると、残りの量子ビットに対しても行われます。 Pulseでプログラムをビルドするときは、この制約を尊重する必要があります。私たちの量子ビットが入っている量子ビットのグループをチェックしましょう:
次に、測定パルスを定義します。パルスをハードコーディングするのではなく、バックエンドのデフォルトの命令スケジュールマップからキャリブレーション済みの測定パルスを取得できます。頻繁にキャリブレーションされるため、測定パルスを自分で定義するよりも正確です。この測定パルスには取得チャネルも含まれるため、取得チャネルは手動で追加する必要はありません。
最後に、パルスを適用するチャネルを指定します。駆動、測定、取得チャネルは、量子ビットのIDによってインデックス化されます。
パルスパラメータが定義され、実験用のパルス形状が作成されたので、パルススケジュールの作成に進むことができます。
各周波数で、その周波数の駆動パルスを量子ビットに送信し、そのパルスの直後に測定します。 パルスエンベロープは周波数に依存しないため、再利用可能なscheduleを作成し、周波数構成配列でドライブパルス周波数を指定します。
健全性チェックとして、常にパルススケジュールを確認することをお勧めします。 これは、以下のようにschedule.draw()を使って行われます。
上記のschedulesとschedule_frequenciesをQobjと呼ばれるプログラムオブジェクトにアセンブルし、量子デバイスに送信します。量子ビット応答の適切な推定値を得るために、各スケジュール(周波数スイープの各ポイント)をnum_shots_per_frequency回繰り返すように要求します。
測定設定も指定します。meas_level=0は生データ(ショットごとの複素数値の配列)を返し、meas_level=1はカーネルデータ(ショットごとに1つの複素数値)を返し、meas_level=2は分類されたデータ(ショットごとに0または1のビット)を返します。ラボにいて、0と1を分類するための識別器(discriminator)をまだキャリブレーションしていないと仮定して、meas_level=1を選択し、作業しているものを複製します。個々のショットではなく、結果の'avg'を求めます。
別のユニット変更警告が表示される場合がありますが、これは無視してかまいません。最後に、以下を使用して、アセンブルされたプログラムをバックエンドで実行できます:
後で結果を取り出すためにjob_idをプリントし、job_monitor()でジョブのステータスをモニターすると良いです。
ジョブが実行が完了したら、以下を使って結果を取得できます:
結果を抽出し、matplotlibを使ってプロットします:
上に見られるように、中心付近のピークは量子ビット周波数の位置に対応しています。信号はパワーブロードニングを示しています。これは、中心周波数に近づくと、量子ビットを非共振に駆動できることを示しています。ピーク周波数の値を取得するために、値を共鳴応答曲線に適合させます。これは通常、ローレンツ分布の形です。

駆動パルスの振幅を少しずつ変化させ、量子ビットの状態を毎回測定します。量子ビットがからへ行ったり来たりすること、つまりラビ振動と一般に呼ばれれいる振動が見られることが予想されます。
周波数スイープ実験の時と基本的に同じスケジュールに見えます。違いは、周波数を変化させているのではなく、駆動パルスの振幅を変化させる実験を実行していることです。
結果が得られたので、それらを抽出し、正弦曲線にフィットさせます。私たちが選んだ駆動振幅の範囲で、量子ビットがブロッホ球の上でから始めて完全に何回か回転すると予想されます。この正弦波の振幅は、状態を生成したラビ駆動振幅でのショットの割合を示します。信号が最大(すべて の状態)から最小(すべての状態)に振動するために必要な駆動振幅を求めます。 -- これによって、パルスを実行する振幅がキャルブレーションされます。
我々のパルス!
今、決定した振幅で我々のパルスを定義して、後の実験で使えるようにします。
我々のパルスがキャリブレーションされたので、適切な確率での状態を作ることができます。これを使って、 と を繰り返し測定してその測定されたシグナルをプロットすることで、測定でどのように見えるかを確認できます。 これは、識別器(discriminator)を構築するために使います。識別器とは、測定されカーネル化された複素数値(meas_level=1)を受け取り、それを0または1(meas_level=2)として分類する関数のことです。
基底状態と励起状態の準備スケジュールを1つのQobjにアセンブルします。これらはそれぞれnum_shots回実行されます。 今回は、結果がまたはに分類されていないため、meas_level=1を選択します。代わりに、カーネル化されたデータが必要です:つまり、カーネル関数を通過してショットごとに1つの複素数を生成した生の取得データです。(カーネルは、生の測定データに適用される内積と考えることができます。) exc_scheduleでのみ使用されますが、両方のスケジュールに同じ周波数を渡します。
これで結果が得られたので、準備した2つの母集団を単純な散布図で視覚化できます。基底状態プログラムの結果は青で、励起状態準備プログラムの結果は赤で表示されます。 注:母集団が不規則な形(ほぼ円形ではない)の場合は、ノートブックを再実行してみてください。
との2つの集団が独自のクラスターを形成していることがはっきりとわかります。カーネル化された測定結果(meas_level=1から)は、これら2つのクラスターを最適に分離する識別器を適用することによって(meas_level=2に)分類されます。最適な分離は、IQ平面の直線であり、上の図で大きなドットでプロットした平均結果から等距離にあり、2つのドットを結ぶ直線に垂直です。
与えられた点が基底状態の平均に近い場合は0を返し、励起状態の平均に近い場合は1を返すことにより、迅速な分類関数を設定できます。
3.3 反転回復法を使ったの測定
量子ビットの時間は、量子ビットが励起状態から基底状態に減衰するのにかかる時間です。量子コンピューターで実行する意味のあるプログラムの実行時間として、重要です。
の測定は以前の実験と同様であり、キャリブレーションしたパルスを使用します。再び、単一の駆動パルス、パルスを適用し、次に測定パルスを適用します。ただし、今回はすぐには測定を行いません。遅延を挿入し、その遅延を実験間で変化させます。遅延時間に対して測定されたシグナルをプロットすると、量子ビットがエネルギーで緩和するにつれて、シグナルが指数関数的に減衰することが分かります。減衰時間は、量子ビットのまたは緩和時間です!
T1のスケジュールも確認できます。この実験を実際に理解するには、sched_idxの値を変えて、次のセルを複数回実行して、いくつかのスケジュールを確認してみてください。sched_idxを増やすと、すこし後で測定パルスが開始するのがわかります。
We can then fit the data to a decaying exponential, giving us T1!

スケジュールと同じように、作ったスケジュールのいくつかを検査するために次のセルを何回か実行して明らかにできます。ramsey_schedulesが増えると、2つのパルスの間の遅延が増加します。
ここで、一般に使用される実験的なトリックを適用します。既知の量だけパルスをオフレゾナンス(非共振)に駆動します。これをdetuning_MHzと呼びます。測定されたラムゼー・シグナルは、detuning_MHz近くの周波数で少しのオフセットで共振を示すはずです。この小さなオフセットが、rough_qubit_frequencyが量子ビット周波数からどれだけ離れているかを正確に示しています。
データを正弦波に当てはめ、我々が関心のある情報-- つまり -- を抽出します。
これで、del_f_MHzが分かったので、量子ビット周波数の推定値をアップデートできます。
H. Abraham, I. Y. Akhalwaya, G. Aleksandrowicz, T. Alexander, G. Alexandrowics, E. Arbel, A. Asfaw, C. Azaustre, P. Barkoutsos, G. Barron, L. Bello, Y. Ben-Haim, L. S. Bishop, S. Bosch, D. Bucher, CZ, F. Cabrera, P. Calpin, L. Capelluto, J. Carballo, C.-F. Chen, A. Chen, R. Chen, J. M. Chow, C. Claus, A. W. Cross, A. J. Cross, J. Cruz- Benito, C. Culver, A. D. C ́orcoles-Gonzales, S. Dague, M. Dartiailh, A. R. Davila, D. Ding, E. Dumitrescu, K. Dumon, I. Duran, P. Eendebak, D. Egger, M. Everitt, P. M. Fern ́andez, A. Frisch, A. Fuhrer, J. Gacon, Gadi, B. G. Gago, J. M. Gambetta, L. Garcia, S. Garion, Gawel-Kus, L. Gil, J. Gomez-Mosquera, S. de la Puente Gonz ́alez, D. Green- berg,J.A.Gunnels,I.Haide,I.Hamamura,V.Havlicek,J.Hellmers,L.Herok,H.Horii, C. Howington, W. Hu, S. Hu, H. Imai, T. Imamichi, R. Iten, T. Itoko, A. Javadi-Abhari, Jessica, K. Johns, N. Kanazawa, A. Karazeev, P. Kassebaum, V. Krishnan, K. Kr- sulich, G. Kus, R. LaRose, R. Lambert, J. Latone, S. Lawrence, P. Liu, P. B. Z. Mac, Y. Maeng, A. Malyshev, J. Marecek, M. Marques, D. Mathews, A. Matsuo, D. T. Mc- Clure, C. McGarry, D. McKay, S. Meesala, A. Mezzacapo, R. Midha, Z. Minev, P. Mu- rali, J. Mu ̈ggenburg, D. Nadlinger, G. Nannicini, P. Nation, Y. Naveh, Nick-Singstock, P. Niroula, H. Norlen, L. J. O’Riordan, S. Oud, D. Padilha, H. Paik, S. Perriello, A. Phan, M. Pistoia, A. Pozas-iKerstjens, V. Prutyanov, J. P ́erez, Quintiii, R. Raymond, R. M.-C. Redondo, M. Reuter, D. M. Rodr ́ıguez, M. Ryu, M. Sandberg, N. Sathaye, B. Schmitt, C. Schnabel, T. L. Scholten, E. Schoute, I. F. Sertage, Y. Shi, A. Silva, Y. Siraichi, S. Sivarajah, J. A. Smolin, M. Soeken, D. Steenken, M. Stypulkoski, H. Takahashi, C. Taylor, P. Taylour, S. Thomas, M. Tillet, M. Tod, E. de la Torre, K. Trabing, M. Treinish, TrishaPe, W. Turner, Y. Vaknin, C. R. Valcarce, F. Varchon, D. Vogt- Lee, C. Vuillot, J. Weaver, R. Wieczorek, J. A. Wildstrom, R. Wille, E. Winston, J. J. Woehr, S. Woerner, R. Woo, C. J. Wood, R. Wood, S. Wood, J. Wootton, D. Yeralin, J. Yu, L. Zdanski, Zoufalc, azulehner, drholmie, fanizzamarco, kanejess, klinvill, merav aharoni, ordmoj, tigerjack, yang.luh, and yotamvakninibm, “Qiskit: An open-source framework for quantum computing,” 2019.
D. C. McKay, T. Alexander, L. Bello, M. J. Biercuk, L. Bishop, J. Chen, J. M. Chow, A. D. C ́orcoles, D. Egger, S. Filipp, J. Gomez, M. Hush, A. Javadi-Abhari, D. Moreda, P. Nation, B. Paulovicks, E. Winston, C. J. Wood, J. Wootton, and J. M. Gambetta, “Qiskit backend specifications for OpenQASM and OpenPulse experiments,” 2018.
Note: 'Qiskit Pulse' was formerly known as 'OpenPulse'.