Share via


教學課程:將 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 試用版訂用帳戶 30 天

必要條件

  • 具備有效訂用帳戶的 Azure 帳戶。 如果您沒有 Azure 帳戶,請免費註冊並註冊 隨用隨付訂用帳戶。
  • Azure Quantum 工作區。 如需詳細資訊,請參閱建立 Azure Quantum 工作區
  • Microsoft Quantum Computing 提供者已新增至您的工作區。

在工作區中建立新的筆記本

  1. 登入 Azure 入口網站,並選取您的 Azure Quantum 工作區。
  2. [作業] 底下,選取 [筆記本]
  3. 按兩下 [我的筆記本] ,然後按兩下 [ 新增]
  4. 在 [核心類型]中,選取 [IPython]。
  5. 輸入檔案的名稱,然後按兩下 [建立檔案]。

當您的新筆記本開啟時,會根據您的訂用帳戶和工作區資訊自動建立第一個儲存格的程式碼。

from azure.quantum import Workspace
workspace = Workspace ( 
    resource_id = "", # Your resource_id 
    location = ""  # Your workspace location (for example, "westus") 
)

注意

除非另有說明,否則建立儲存格時,您應該依序執行每個儲存格,避免任何編譯問題。

請按一下儲存格左側的三角形「播放」圖示,執行程式碼。

載入必要的匯入

首先,您需要從 azure.quantumqiskit和 匯入一些 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# 程式設計的專案。