教學課程:將 QIR 程式提交至 Azure Quantum Resource 估算器
Azure Quantum Resource Estimator 建置在 Quantum Intermediate Representation (QIR) 上,這是量子程式的完整互操作性規格。 QIR 可作為量子程式設計語言和架構,以及 targeted量子計算平臺之間的通用介面。 由於資源估算器會採用 QIR 程式做為輸入,因此它支援任何翻譯為 QIR 的語言。 例如,它可供熱門的量子 SDK 和語言使用,例如 Q# 和 Qiskit。 在本教學課程中,您將撰寫 QIR 程式並提交至資源估算器。 本教學課程使用 PyQIR 來產生 QIR,不過,您可以使用任何其他的 QIR 來源。
在本教學課程中,您將了解如何:
- 聯機到 Azure Quantum 服務。
- 定義函式以從 QIR 位程式代碼建立資源估計作業
- 使用 PyQIR 產生器建立 QIR 位程序代碼
- 將 QIR 作業提交至資源估算器
必要條件
- 具備有效訂用帳戶的 Azure 帳戶。 如果您沒有 Azure 帳戶,請免費註冊並註冊 隨用隨付訂用帳戶。
- Azure Quantum 工作區。 如需詳細資訊,請參閱建立 Azure Quantum 工作區。
- Microsoft Quantum Computing 提供者已新增至您的工作區。
在工作區中建立新的筆記本
- 登入 Azure 入口網站,並選取您的 Azure Quantum 工作區。
- 在 [作業] 底下,選取 [筆記本]
- 按兩下 [我的筆記本] ,然後按兩下 [ 新增]
- 在 [核心類型]中,選取 [IPython]。
- 輸入檔案的名稱,然後按兩下 [建立檔案]。
當您的新筆記本開啟時,會根據您的訂用帳戶和工作區資訊自動建立第一個儲存格的程式碼。
from azure.quantum import Workspace
workspace = Workspace (
resource_id = "", # Your resource_id
location = "" # Your workspace location (for example, "westus")
)
注意
除非另有說明,否則建立儲存格時,您應該依序執行每個儲存格,避免任何編譯問題。
請按一下儲存格左側的三角形「播放」圖示,執行程式碼。
載入必要的匯入
首先,您需要從 azure.quantum
、 qiskit
和 匯入一些 Python 類別和 pyqir
函式。 您不會直接使用 Qiskit 來建置量子線路,但您將使用 AzureQuantumJob
建置在 Qiskit 生態系統之上的 。 請確定您使用的是最新版本的 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 服務
接下來,使用workspace
上一個AzureQuantumProvider
單元格中的 物件來建立 物件,以聯機到您的 Azure Quantum 工作區。
provider = AzureQuantumProvider(workspace)
定義函式以從 QIR 建立資源估計作業
資源估算器是 target Microsoft Quantum Computing 提供者的。 使用資源估算器與針對 Azure Quantum 中的其他軟體和硬體提供者 targets 提交作業完全相同 - 定義您的程式、設定 target,以及提交作業以進行計算。
提交計劃的資源估計要求時,您可以指定一些 target 參數。
errorBudget
- 整體允許的錯誤預算qecScheme
- 量子錯誤修正 (QEC) 配置qubitParams
- 實體量子位參數constraints
- 元件層級的條件約束
如需輸入參數的詳細資訊,請參閱 資源估算器的目標參數。
在此範例中,您將實作泛型函式,其 provider
會接受連線至 Azure Quantum 工作區的物件和量子程式的 QIR 位碼輸入。 其會傳回作為 Azure Quantum 作業的結果。
資源估算器 target 參數可以透過關鍵詞自變數傳遞至函式。
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 位程序代碼。 此範例會使用三個 T 閘道和兩個 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()
函式來產生資源估計作業。 您也可以傳遞資源估算器特定自變數。 此範例會使用 errorBudget
將錯誤率設定為 5%。 如需參數的詳細資訊 target ,請參閱 資源估算器的目標參數。
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 奈秒和 50 奈秒。
實體量子位參數 | 值 |
---|---|
量子位名稱 | qubit_gate_ns_e3 |
指令集 | GateBased |
單一量子位測量時間 | 100 ns |
T 閘道時間 | 50 ns |
T 閘道錯誤率 | 0.001 |
單一量子位測量錯誤率 | 0.001 |
單一量子位網關時間 | 50 ns |
單一量子位錯誤率 | 0.001 |
雙量子位網關時間 | 50 ns |
雙量子位錯誤率 | 0.001 |
如需詳細資訊,請參閱資源估算器 的完整輸出數據清單 。
相關內容
繼續探索其他量子演算法和技術:
- 實 作 Grover 的搜尋演算法教學課程 示範如何撰寫 Q# 程式,以使用 Grover 的搜尋演算法來解決圖形著色問題。
- 本教學 課程使用 Q# 探索量子糾纏 示範如何使用 Q# 操作量子位來變更其狀態,並示範迭加和糾纏的效果。
- Quantum Katas 是以 Jupyter Notebook 為基礎的自我步調教學課程和程式設計練習,旨在同時教學量子運算和 Q# 程式設計的專案。
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應