チュートリアル: QIR プログラムを Azure Quantum Resource Estimator に送信する
Azure Quantum Resource Estimator は、量子プログラムの完全に相互運用可能な仕様である (QIR) に基づいてQuantum Intermediate Representation構築されています。 QIR は、量子プログラミング言語とフレームワーク、および targeted 量子計算プラットフォーム間の共通インターフェイスとして機能します。 Resource Estimator は QIR プログラムを入力として受け取るため、QIR に変換されるすべての言語をサポートします。 たとえば、一般的な量子 SDK や Q# や Qiskit などの言語で使用できます。 このチュートリアルでは、QIR プログラムを作成して Resource Estimator に送信します。 このチュートリアルでは PyQIR を使用して QIR を生成しますが、QIR の他のソースを使用できます。
このチュートリアルで学習する内容は次のとおりです。
- Azure Quantum サービスに接続します。
- QIR ビットコードからリソース推定ジョブを作成する関数を定義する
- PyQIR ジェネレーターを使用して QIR ビットコードを作成する
- リソース推定器に QIR ジョブを送信する
無料の Azure 試用版サブスクリプションに 30 日間サインアップします。
前提条件
- アクティブなサブスクリプションが含まれる Azure アカウント。 Azure アカウントをお持ちでない場合は、無料で登録し、 従量課金制サブスクリプションにサインアップします。
- Azure Quantum ワークスペース。 詳細については、「Azure Quantum ワークスペースを作成する」を参照してください。
- ワークスペースに追加された Microsoft Quantum Computing プロバイダー。
ワークスペースに新しいノートブックを作成する
- Azure portal にログインし、Azure Quantum ワークスペースを選択します。
- [ 操作] で[ノートブック] を選択 します。
- [マイ ノートブック] をクリックし、[新規追加] をクリックします。
- [カーネルの種類] で、[IPython] を選択します。
- ファイルの名前を入力し、[ファイルの 作成] をクリックします。
新しいノートブックが開くと、サブスクリプションとワークスペースの情報に基づいて、最初のセルのコードが自動的に作成されます。
from azure.quantum import Workspace
workspace = Workspace (
resource_id = "", # Your resource_id
location = "" # Your workspace location (for example, "westus")
)
Note
特に記載がない限り、コンパイルの問題が発生しないように、各セルは作成した順序で実行する必要があります。
セルの左側にある三角形の [再生] アイコンをクリックして、このコードを実行します。
必要なインポートを読み込む
まず、、、および からazure.quantum
qiskit
いくつかの Python クラスと関数をインポートするpyqir
必要があります。 Qiskit を使用して量子回路を直接構築することはありませんが、Qiskit エコシステムの上に構築された を使用 AzureQuantumJob
します。 Qiskit の最新バージョンを使用していることを確認します。 詳細については、「 Azure-quantum Python パッケージを更新する」を参照してください。
from azure.quantum.qiskit import AzureQuantumProvider
from azure.quantum.qiskit.job import AzureQuantumJob
from pyqir.generator import BasicQisBuilder, SimpleModule
Azure Quantum サービスに接続する
次に、前の AzureQuantumProvider
セルの オブジェクトを workspace
使用してオブジェクトを作成し、Azure Quantum ワークスペースに接続します。
provider = AzureQuantumProvider(workspace)
QIR からリソース推定ジョブを作成する関数を定義する
Resource Estimator は、 target Microsoft Quantum Computing プロバイダーの です。 Resource Estimator の使用は、Azure Quantum で他のソフトウェアおよびハードウェア プロバイダー targets に対してジョブを送信するのとまったく同じです。プログラムを定義し、を設定 targetし、計算のためにジョブを送信します。
プログラムのリソース見積もり要求を送信するときに、いくつかの target パラメーターを指定できます。
errorBudget
- 許容される全体的なエラー予算qecScheme
- 量子エラー修正 (QEC) スキームqubitParams
- 物理量子ビット パラメーターconstraints
- コンポーネント レベルの制約
入力パラメーターの詳細については、「 Resource Estimator のターゲット パラメーター」を参照してください。
この例では、Azure Quantum ワークスペースに接続するオブジェクトと量子プログラムの provider
QIR ビットコードを入力として受け取るジェネリック関数を実装します。 その結果、Azure Quantum ジョブが返されます。
Resource Estimator target パラメーターは、キーワード (keyword)引数を使用して関数に渡すことができます。
def resource_estimation_job_from_qir(provider: AzureQuantumProvider, bitcode: bytes, **kwargs):
"""A generic function to create a resource estimation job from QIR bitcode"""
# Find the Resource Estimator target from the provider
backend = provider.get_backend('microsoft.estimator')
# You can provide a name for the job via keyword arguments; if not,
# use QIR job as a default name
name = kwargs.pop("name", "QIR job")
# Wxtract some job specific arguments from the backend's configuration
config = backend.configuration()
blob_name = config.azure["blob_name"]
content_type = config.azure["content_type"]
provider_id = config.azure["provider_id"]
output_data_format = config.azure["output_data_format"]
# Finally, create the Azure Quantum jon object and return it
return AzureQuantumJob(
backend=backend,
target=backend.name(),
name=name,
input_data=bitcode,
blob_name=blob_name,
content_type=content_type,
provider_id=provider_id,
input_data_format="qir.v1",
output_data_format=output_data_format,
input_params = kwargs,
metadata={}
)
サンプル量子プログラムを実行する
次に、PyQIR ジェネレーターを使用して QIR ビットコードをいくつか作成します。 この例では、3 つの T ゲートと 2 つの CNOT ゲートを使用して制御された S ゲートを構築します。
module = SimpleModule("Controlled S", num_qubits=2, num_results=0)
qis = BasicQisBuilder(module.builder)
[a, b] = module.qubits[0:2]
qis.t(a)
qis.t(b)
qis.cx(a, b)
qis.t_adj(b)
qis.cx(a, b)
上記で定義した関数を PyQIR の bitcode()
関数と共に使用して、リソース推定ジョブを生成できます。 Resource Estimator 固有の引数を渡すこともできます。 この例では、 を使用 errorBudget
してエラー率を 5% に設定します。 パラメーターの target 詳細については、「 Resource Estimator のターゲット パラメーター」を参照してください。
job = resource_estimation_job_from_qir(provider, module.bitcode(), errorBudget=0.05)
result = job.result()
result
この関数は、物理リソースの全体的な数を示すテーブルを作成します。 より多くの情報を持つグループを折りたたむことで、コストの詳細をさらに調べることができます。 たとえば、[ 論理量子ビット パラメーター] グループを折りたたんだ場合、エラー修正コードの距離が 15 であることがわかります。
論理量子ビット パラメーター | 値 |
---|---|
QEC スキーム | surface_code |
コード距離 | 5 |
物理量子ビット | 50 |
論理サイクル時間 | 2us |
論理量子ビット エラー率 | 3.00E-5 |
交差の前要素 | 0.03 |
エラー修正しきい値 | 0.01 |
論理サイクル時間の数式 | (4 * twoQubitGateTime + 2 * oneQubitMeasurementTime ) * codeDistance |
物理量子ビットの数式 | 2 * codeDistance * codeDistance |
[物理量子ビット パラメーター] グループでは、この推定で想定されていた物理量子ビット プロパティを確認できます。 たとえば、単一量子ビット測定と単一量子ビット ゲートを実行する時間は、それぞれ 100 ns と 50 ns であると見なされます。
物理量子ビット パラメーター | 値 |
---|---|
量子ビット名 | qubit_gate_ns_e3 |
命令セット | GateBased |
単一量子ビット測定時間 | 100 ns |
T ゲート時間 | 50 ns |
T ゲート エラー率 | 0.001 |
単一量子ビット測定エラー率 | 0.001 |
単一量子ビット ゲート時間 | 50 ns |
単一量子ビットエラー率 | 0.001 |
2 量子ビット ゲート時間 | 50 ns |
2 量子ビット エラー率 | 0.001 |
詳細については、Resource Estimator の出力データの完全な一覧 を参照してください。
関連コンテンツ
引き続き他の量子アルゴリズムおよび手法を調査します。
- 「 グローバーの検索アルゴリズムを実装 する」チュートリアルでは、グローバーの検索アルゴリズムを使用してグラフの色分けの問題を解決する Q# プログラムを記述する方法を示します。
- チュートリアル「 Q# を使用した量子エンタングルメントの探索 」では、Q# を使用して量子ビットを操作して状態を変更する方法と、重ね合わせとエンタングルメントの効果を示します。
- Quantum Katas は、量子コンピューティングと Q# プログラミングの要素を同時に教えることを目的とした、Jupyter Notebookベースのマイペースのチュートリアルとプログラミング演習です。
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示