Rigetti プロバイダー
ヒント
Azure Quantum ワークスペースを作成すると、量子ハードウェア プロバイダーごとに自動的に USD500 無料 Azure Quantum クレジット が取得されます。 Azure Quantum クレジットを使用して、最初の量子プログラムを実際の量子ハードウェアに送信できます。
Note
Ankaa-2 QPU は、2024 年 10 月 4 日の時点で Azure Quantum サービスから非推奨になりました。
Rigetti 量子プロセッサは、調整可能な超伝導量子ビットに基づくユニバーサルなゲートモデル マシンです。 システムの特徴とデバイス特性には、読み出し機能の強化、量子処理時間の高速化、複数のエンタングリング ゲート ファミリでの高速ゲート時間、アクティブ レジスタ リセットによる迅速なサンプリング、パラメトリック制御が含まれます。
- 発行元: Rigetti
- プロバイダー ID:
rigetti
Rigetti プロバイダーは、次の targets を使用できるようにします。
Target 名 | Target 身分証明書 | 量子ビット数 | 説明 |
---|---|---|---|
Quantum Virtual Machine (QVM) | rigetti.sim.qvm | - | Quil、Q#、および Qiskit プログラム用のオープンソース シミュレーター。 無料。 |
Note
Rigetti シミュレーターとハードウェア targets は、Cirq プログラムをサポートしていません。
Rigetti の targets は、 QIR Base プロファイルに対応します。 このtarget プロファイルとその制限の詳細については、「Azure Quantum でのtarget プロファイルの種類のの理解」を参照してください。
シミュレーター
Quantum Virtual Machine (QVM) は、Quil 用のオープンソース シミュレーターです。 rigetti.sim.qvm
targetは、Quil プログラムをテキストとして受け入れ、クラウドでホストされている QVM でそのプログラムを実行し、シミュレートされた結果を返します。
- ジョブの種類:
Simulation
- データ形式:
rigetti.quil.v1
、rigetti.qir.v1
- Target 身分証明書:
rigetti.sim.qvm
- Target 実行プロファイル: QIR Base
- 価格: 無料 ($0)
価格
Rigetti の課金プランを確認するには、「Azure Quantum の価格」を参照してください。
入力形式
現在、すべての Rigetti targets は次の 2 つの形式を受け入れます。
rigetti.quil.v1
。これは Quil プログラムのテキストです。rigetti.qir.v1
。これは QIR ビットコードです。
すべての targets は、実行するショットの数を定義するための省略可能な count
整数パラメーターも受け取ります。 省略した場合、プログラムは 1 回だけ実行されます。
Quil
すべての Rigetti targets 、 rigetti.quil.v1
入力形式を受け入れます。これは、Quantum Instruction Language を表す Quil プログラムのテキストです。 既定では、プログラムは実行前に quilc を使用してコンパイルされます。 ただし、quilc はパルス レベルの制御機能 (Quil-T) をサポートしていないため、これらの機能を使用する場合は、入力としてネイティブ Quil プログラム (Quil-T も含む) を指定し、入力パラメーター skipQuilc: true
を指定する必要があります。
Quil プログラムの構築を容易にするために、pyquil-for-azure-quantum
パッケージと共に pyQuil
を使用できます。 このパッケージがない場合、Quil プログラムを "構築" するために pyQuil
を使用できますが、Azure Quantum に送信することはできません。
QIR
すべての Rigetti ハードウェアは、rigetti.qir.v1
としてQIR Base プロファイル v1 を使用して、Quantum Intermediate Representation (QIR) に準拠したジョブの実行をサポートします。 QIR は、量子計算のために多くの量子言語と target プラットフォームをサポートし、高レベルの言語とマシン間の通信を可能にする共通インターフェイスを提供します。 たとえば、Q#、Quil、または Qiskit ジョブを Rigetti ハードウェアに送信すると、Azure Quantum によって自動的に入力が処理されます。 詳細については、Quantum Intermediate Representationを参照してください。
適切な入力形式の選択
Quil または別の QIR 準拠言語を使用する必要がありますか? これは最終的なユース ケースで決まります。 QIR は多くのユーザーにとってアクセスしやすい一方で、現在は Quil の方がより強力です。
QIR の生成をサポートする Qiskit、Q#、または別のツールキットを使用していて、アプリケーションが Azure Quantum 経由で Rigetti targets で動作する場合は、QIR が適しています。 QIR の仕様は急速に進化しており、Rigetti は時間が経つにつれて、より高度な QIR プログラムのサポートを増やし続けています。今日コンパイルできないものは、明日もコンパイルされる可能性があります。
一方、Quil プログラムは、Azure Quantum を含む任意のプラットフォームから Rigetti システムのユーザーが利用できる機能の完全なセットを表現します。 量子ゲートの分解を調整したり、パルス レベルでプログラムを記述したりする場合は、QIR ではこれらの機能がまだ使用できないため、Quil で作業する必要があります。
例
Quil ジョブを送信する最も簡単な方法は、pyquil-for-azure-quantum
パッケージを使用することです。これは、pyQuil
ライブラリのツールとドキュメントを使用できるためです。
また、Quil プログラムを手動で構築し、azure-quantum
パッケージを直接使用して送信することもできます。
from pyquil.gates import CNOT, MEASURE, H
from pyquil.quil import Program
from pyquil.quilbase import Declare
from pyquil_for_azure_quantum import get_qpu, get_qvm
# Note that some environment variables must be set to authenticate with Azure Quantum
qc = get_qvm() # For simulation
program = Program(
Declare("ro", "BIT", 2),
H(0),
CNOT(0, 1),
MEASURE(0, ("ro", 0)),
MEASURE(1, ("ro", 1)),
).wrap_in_numshots_loop(5)
# Optionally pass to_native_gates=False to .compile() to skip the compilation stage
result = qc.run(qc.compile(program))
data_per_shot = result.readout_data["ro"]
# Here, data_per_shot is a numpy array, so you can use numpy methods
assert data_per_shot.shape == (5, 2)
ro_data_first_shot = data_per_shot[0]
assert ro_data_first_shot[0] == 1 or ro_data_first_shot[0] == 0
# Let's print out all the data
print("Data from 'ro' register:")
for i, shot in enumerate(data_per_shot):
print(f"Shot {i}: {shot}")