Amazon Web Servicesの量子コンピュータサービス「Amazon Braket」の新機能「Braket Pulse」は、ユーザーによる低次元の通信命令の制御や変更に加え、性能の最適化やエラー抑制やエラー緩和を実現する新たな手法の開発も可能にします。一般的に量子コンピュータは、あらかじめ定義された量子ゲートを使用して演算を実行します。しかし、この方法は特定の量子デバイスのノイズ特性を調べたり、量子エラー緩和技術をテストしたりするユーザーには不十分です。より高度なテストには “パルスレベル制御 “と呼ばれるデバイス制御が必要です。
現在、Amazon BraketとOQCが提供するプライベートクラウドのユーザーは、OQCの超伝導量子デバイスにパルスレベルでアクセスできます。これにより、量子ゲートのキャリブレーションを正確に制御し、忠実度を示すメトリクスとシステムの特性についてよりきめ細かな見解を得られます。オープンソースの「OpenPulse」に基づくAmazon Braketのパルス制御は、現在はOQCに加えて複数の量子デバイスに拡張されています。
このような背景から、本稿ではQOCが提供するデバイスを量子物理学レベルで解き明かし、パルス制御のユースケース、デモとともに、デバイスを最大限に活用するためのベストプラクティスを紹介します。
パルスレベルの制御をユーザーの手に
一般的に量子コンピュータはその最も基礎的な部分ではアナログの信号によって制御されているので、ゲート型の量子プログラムをAmazon Braket経由でQOCに送ると、QOCのコンパイラはそれを通信パルスに変換します。QOCの超伝導デバイスの場合では、マイクロ波パルスが使用されます。しかし現在、ユーザーはコンパイルせずに直接パルスパラメータの精度で量子演算を実行することが可能です。これにより、周波数や位相、振幅、パルス時間、パルス形状などを迅速に特定できます。
パルスフレームとは
Braket Pulseのライブラリ内で重要なオブジェクトが「フレーム」です。フレームには量子コンピューターの「送信」「受信」に関する一連のパルスが含まれており、これによりキュビットの遷移を対象に、量子ビットの状態を「|0>から|1>」にフリップするような操作が行え、パルスの振幅や持続時間などのパラメーターを指定するとフレーム内のパルスを操作できます。フレームの種類はデバイス固有です。これらの取り組みをユーザーが行いやすくするために、Braket PulseはOQCのデバイス向けに一連のフレームを提供しています。
フレームタイプ | 説明 |
ドライブフレーム | 個々の量子ビットの第一励起状態(|0>→|1>)への遷移を制御 |
セカンドステートフレーム | 個々の量子ビットの第2励起状態(|1>→|2>)への遷移を制御 |
相互共振フレーム | 隣接する量子ビット間のもつれを制御 |
測定フレーム | 量子ビットの測定を実行 |
次に、OQCの量子ハードウェアの新機能を活用する際、これらのパラメータをどのように利用できるか、相関メトリクス、単一キュビットゲートのキャリブレーション、相互共振特性の3つに焦点を当てて紹介します。1つ目のBraket Pulseを使用した以下の例では、ドライブフレームと相互共振フレームが重要な役割を果たします。
デモ1 コヒーレンス・メトリクス
量子ビットの重要な指標の一つに「コヒーレンス時間」があります。これは、量子ビットの量子特性が環境との相互作用によって失われるまでの時間です。つまり、量子ビットを操作する際はコヒーレンス時間を確認し、どれくらいの時間その量子ビットと相互作用できるかを知る必要があります。コヒーレンス時間を確認する一つの指標が「エネルギー緩和時間」で、通称「T1」と呼ばれます。T1は、励起状態にある量子ビットが基底状態になるまでの時間を表します。
T1を知るために、まずは「Xゲート」を利用して励起状態の量子ビットを準備します。その後、特定の時間(遅延時間)待機し、量子ビットが励起状態にあるかどうかを測定します。遅延時間を変化させ、励起状態集団の指数関数的減衰を追跡することで、T1が出ます。Amazon Braketは手順として以下のコードを公開しています。Braket Pulseを使えば、同じプログラムの中でゲート(今回はXゲート)とパルス(遅延T)を混ぜて使うことも可能です。
from braket.aws import AwsDevice
from braket.circuits import Circuit, FreeParameter
from braket.pulse import PulseSequence, ConstantWaveform
import numpy as np
N_shots = 100
device = AwsDevice(“arn:aws:braket:eu-west-2::device/qpu/oqc/Lucy”)
def generate_circuit_t1(qubit: int) -> Circuit:
drive_frame = device.frames[f”q{qubit}_drive”]
delay_pulse = (
PulseSequence()
.delay(drive_frame, FreeParameter(“tau”))
)
# Generate a circuit that performs an X rotation and then adds a delay
return Circuit().x(qubit).pulse_gate(qubit, delay_pulse)
# Create an array of delays, from 0s to 80us
delays_t1 = np.linspace(start_delay_t1:=0, end_delay_t1:=80e-6, 50)
circuit_template_t1 = generate_circuit_t1(qubit=5)
circuits_t1 = [circuit_template_t1(tau=delay) for delay in delays_t1]
batch_t1 = device.run_batch(circuits_t1, shots=N_shots)
以下の図1は、指数関数的減衰「exp(-t/T1)」をフィッティングしてT1をモデル化したもので、赤線のT1は「〜23us」という数値を示しています。減衰時定数T1を理解すれば、エネルギー緩和が計算誤差の主な原因であるかどうかを判断できます。量子コンピュータはノイズに非常に敏感であり、ノイズが大きいと出力の品質に影響を与える可能性があります。このようなエラー原因を理解することで、より高品質な結果を出せます。

OQCは、Amazon Braketの詳細ページで最新のコヒーレンス時間を定期的に提供しており、ユーザーはこれを用いて詳細な調査を行えます。ユーザーはデバイス固有のノイズを調査し、その特性や量子ビットへの影響を理解することで、エラー緩和やノイズ適応コンパイル技術といったノイズの影響を打ち消す新たな手法を開発できるでしょう。
デモ2 単一量子ビット
次のデモでは、ユーザーが個々の量子ビットの状態をどのように操作できるかを紹介します。操作では「パルスレベルでどのように量子ビットを基底状態と第一励起状態の間で制御できるか」が重要になり、これを実現するにはシステムにエネルギーを加える必要があります。このエネルギーを加えるという作業は、特定の持続時間と周波数のマイクロ波制御パルスをシステムに加えることです。
以下のコードは、ドライブフレームを利用してマイクロ波のパルス時間を特定し、量子ビットを制御する方法を示しています。
このコードを実行したものが以下の図2です。

図2は、量子ビットが基底状態と励起状態の間をどのように回転するかを表すラビ振動の特徴的な正弦波形を示しています。この振動の速さを測定すると、特定の量子ビットの回転角度に対する正確なパルス持続時間を決定できます(キュビットを|0>から|1>へ遷移させるために、マイクロ波パルスでキュビットを駆動するために必要な時間)。これにより、低エラーの単一量子ビットゲートを実現します。
高品質の単一量子ビットゲートを出すには、マイクロ波パルス周波数を量子ビットの遷移周波数に一致させる必要があります。この点、Braket Pulseは量子ビットを駆動する周波数を操作できるため、フレームを少しデチューン(デフォルト値から周波数を変えること)することも可能です。それでは、同じドライブパルスを時間をかけて実行するとどうなるか、下のコードを適用して見てみましょう:
このコードを実行すると、量子ビットが駆動したときに得られる特徴的なデータ「シェブロンパターン」を確認できます(図3)。図からも分かるように、駆動フレームが量子ビットの周波数遷移と同じように共振しているとき、発振コントラストは最も高く、発振率は最も低くなります。図3のように調整すると、共振は0Hzの周波数離調で起こります。このような測定を行うことで、量子ビット制御動作のドライブフレームがどの程度調整されているかを確認できます。

低次元量子デバイスのさらなる応用方法
低次元のデバイス・キャリブレーションは、いくつかの方法で性能向上に寄与します。例えば「ゼロノイズ外挿法」では、様々なノイズレベルで量子演算を行い、その結果を仮想的な「ゼロノイズ」シナリオに外挿します。もう一つの方法は、量子計算中にゲートのキャリブレーション手順のロバスト性をリアルタイムで追跡することです。
デモ3 相互共振の特性評価
デモ3では、単一量子ビットの操作について説明し、その後に複数の量子ビットのもつれを操作する方法を解説します。
まず、量子ビットをもつれさせる方法はいくつかあり、OQCのシステムでは相互共振のマイクロ波パルスを通して量子ビットをエンタングルできます。「エンタングルゲート」では、マイクロ波パルスが第1量子ビットの物理制御ポートに適用されますが、その周波数は別の量子ビットと共振します。これにより、第2の量子ビットにラビ振動のような駆動効果が生じますが、その速度は第1量子ビットの状態に大きく依存します。OQCが特許を取得した量子ビットアーキテクチャ「コアクスモン」による、相互共振ゲートの調整に関する詳細は「Patterson, A.D., et al. (2019), Calibration of the cross-resonance twoqubit gate between directly-coupled transmons, Phys. Rev. Applied 12, 064013」に記載されています。
これを実践するには、ブラケットパルスを用いてこのゲートのダイナミクスを観察する必要があります。そのために、まずは励起状態(|1>)の4番量子ビット(別名「制御量子ビット」)を用意し、次に制御量子ビットに作用する交差共振フレームのパルスを変更します。駆動パルスの持続時間を長くすることで、「ターゲット量子ビット」(#5)への影響を測定できます。次にこのプロセスを反復しますが、両方の量子ビットは基底状態(0)から始まります。
def generate_drive_sequence(qubit: int, amplitude: float=0.03) -> PulseSequence: readout_frame = device.frames[f"r{qubit}_measure"] drive_frame = device.frames[f"q{qubit}_drive"] length = FreeParameter("length") constant_drive_wave = ConstantWaveform(length, amplitude) # Generate drive pulse of given duration and measure # Default pulse is a constant shaped pulse of amplitude 0.03 # This is approximately where Lucy's single qubit gates are calibrated return ( PulseSequence() .play(drive_frame, constant_drive_wave) .capture_v0(readout_frame) ) drive_lengths = np.linspace(drive_start:=8e-9, drive_end:=1e-6, 50) drive_pulse_template = generate_drive_sequence(qubit=2) drive_pulse_sequences = [drive_pulse_template(length=pulse_length) for pulse_length in drive_lengths] drive_pulse_batch = device.run_batch(drive_pulse_sequences, shots=N_shots)
図4はこの実験の結果を示しています。相互共振パルス中に制御量子ビットが初期状態(|0>〈青い点〉)、または(|1>〈オレンジの点〉)にあるときのターゲット量子ビットのダイナミクスが分かります。

図4は、制御量子ビットが与えられた時間だけ相互共振パルスで駆動し、その後のターゲット量子ビットの励起状態確率を示しています。制御量子ビットが「状態|1>」にあった場合、ターゲット量子ビットは(ノイズをある程度考慮すると)元の状態に戻っています。逆に、制御量子ビットが「状態|0|」であった場合、ターゲット量子ビットは異なる状態になります。図4で生成されたデータに2つのサインカーブを合わせたところ、図2のように異なる周波数のラビ振動が現れました。
デモ3では、エンタングルゲートのコア動作に加え、エンタングルメントを生成するのに使用するゲートのビルディングブロックの操作を実証しました。OQCの量子コンピューターであれば、OpenPulseを利用して「2量子ビットゲート方式」のキャリブレーションが可能で、パルスの持続時間や振幅、周波数を制御できます。例えば、振幅を大きくすると「2量子ビット」のゲートが全体的に速くなりますが、その代償として誤差が大きくなります。OQCであれば、このバランスを見つけて安定した調整を実現します。
新たなゲートのさらなる応用
パルス制御の技術を取り入れれば、相互共振ゲートの性能を大幅に向上させることができます。さらに「TensorFlow」を活用することで、複雑な制約条件下でもゲート設計を最適化でき、ゲート動作の調整と改良が容易になります。量子制御を最適化すれば、より効率的で正確な量子ビット操作が実現できます。パルスの最適化は、適用されるパルスを継続的に洗練・最適化することが重要で、これがゲート設計を改善する有望な手段になります。
まとめ
本稿では、コヒーレンスの測定方法や単一量子ビットゲートの調整方法、相互共振駆動の特徴など、パルスレベルにおける量子計算の基本について説明しました。
これらはOQCの量子コンピューティングハードウェアで実行され、量子プログラムの核になります。Braket Pulseによって、ユーザーはこのパルスレベルの制御を容易に利用することが可能です。
サンプル・ノートブックをご覧いただき、OQCの量子コンピューティングハードウェアでパルスレベルの制御をぜひ体験してみてください。