Share via


整合式混合式運算

整合式混合式運算會將傳統和量子程式結合在一起,讓傳統程式代碼能夠根據中間電路測量來控制量子作業的執行,同時實體量子位仍保持運作。 使用常見的程式設計技術,例如巢狀條件、迴圈和函數調用,單一量子程式可以執行複雜的問題,以減少所需的快照數目。 使用量子位重複使用技術,較大的程式可以在使用較少量子位的計算機上執行。

重要

Visual Studio Code 的新式 (新Quantum Development Kit式 QDK) 擴充功能目前不支援整合式混合式量子運算,以及此頁面範例中的其他元件,例如 IQ# 核心、%azuremagic 命令或qsharp.azure模組。 若要執行整合式混合式作業,請使用 Microsoft Quantum Development Kit (傳統 QDK) 。 如需詳細資訊,請參閱 繼續在傳統 QDK 中工作

如需更多討論,請參閱:

整合式混合式量子運算

已支援 targets

Azure Quantum 中的整合式混合式運算模型目前支援 Quantinuumtargets。

Quantinuum

支援的功能 備註
傳統迴圈 僅限系結迴圈
任意控制流程 使用 if/else 分支
中間電路測量 利用傳統快取器資源
量子位重複使用 N/A
即時傳統計算 32 位無符號整數算術
利用傳統快取器資源

開始使用

若要開始探索整合式混合式程序設計,建議您逐步流覽本文中的 範例 ,或探索 Azure Quantum 入口網站範例庫中的 混合式量子運算 索引卷標。

提交整合式混合式作業

提交整合式混合式作業時,您必須在指定 target之後新增target功能參數。 除此之外,Azure Quantum 上的整合式混合式程式會執行和管理,就像一般量子作業一樣。 每個作業都有單一作業標識符,結果為單一直方圖。

重要

Visual Studio Code 的新式 (新Quantum Development Kit式 QDK) 擴充功能目前不支援整合式混合式量子運算,以及此頁面範例中的其他元件,例如 IQ# 核心、%azuremagic 命令或qsharp.azure模組。 若要執行整合式混合式作業,請使用 Microsoft Quantum Development Kit (傳統 QDK) 。 如需詳細資訊,請參閱 繼續在傳統 QDK 中工作

我Q#

在 Jupyter Notebook 中使用 IQ# 核心時,請使用 %azure。target-capability magic 命令搭配 AdaptiveExecution 參數。

%azure.target quantinuum.sim.h1-1e
%azure.target-capability AdaptiveExecution

Python + Q#

使用 qsharp Python 套件時,請搭配 AdaptiveExecution 參數使用 qsharp.azure.target_capability 函式。

qsharp.azure.target("quantinuum.sim.h1-1e")
qsharp.azure.target_capability("AdaptiveExecution")

Azure CLI

使用 Azure CLI 提交作業時,請使用 值AdaptiveExecution新增 --target-capability 參數。

az quantum job submit \
    --target-capability AdaptiveExecution \
    --target-id quantinuum.sim.h1-1e \
    --job-name IterativePhaseEstimation \
    --shots 100 \
    --output table

提交會話內的整合式混合式作業

您可以使用 和 Python,在工作階段Q#內結合多個整合式混合式作業。 提交工作階段時,請使用 值AdaptiveExecution新增targetCapability輸入參數。

with target.open_session(name="Q# session") as session:
    target.submit(input_data=QuantumOperation, name="Job 1", input_params={"count":100, "targetCapability":"AdaptiveExecution"}) # First job submission
    target.submit(input_data=QuantumOperation, name="Job 2", input_params={"count":200, "targetCapability":"AdaptiveExecution"}) # Second job submission
    target.submit(input_data=QuantumOperation, name="Job 3", input_params={"count":300, "targetCapability":"AdaptiveExecution"}) # Third job submission

如需詳細資訊,請參閱 開始使用會話

注意

雖然會話適用於所有量子運算硬體提供者,但請注意,Quantinuum targets目前支援整合式混合式量子運算作業。

估計整合式混合式作業的成本

您可以先在模擬器上執行整合式混合式作業,以估計在Quantinuum硬體上執行整合式混合式作業的成本。

在模擬器上成功執行之後:

  1. 在 Azure Quantum 工作區中,選取 [作業管理]。
  2. 選取您提交的作業。
  3. 在 [ 作業詳細數據 ] 彈出視窗中,選取 [ 成本估計 ],以檢視有多少 eHQC (Quantinuum 模擬器點數) 。 此數目會直接轉譯為 Quantinuum 量子點數 (Quantinuum 量子點數) ,這些數量需要在 Quantinuum 硬體上執行作業。

成本估計

注意

Quantinuum 會取消註冊整個線路,並計算所有程式代碼路徑的成本,不論這些路徑是否有條件地執行。

整合式混合式範例

下列範例示範整合式混合式運算的目前功能集。

  • 確認糾纏 GHZ 狀態
  • 三量子位重複
  • 迭代相位估算法

必要條件

  • 如果您不熟悉 Azure Quantum,則需要 Azure 訂用帳戶和 Azure Quantum 工作區,才能針對量子硬體執行範例。 如需詳細資訊,請參閱建立 Azure Quantum 工作區
  • VS Code 和 Quantum Development Kit 本機環境中的設定。 如需詳細資訊,請參閱 設定 Quantum Development Kit
  • 確定 VS Code 具有最新版本的 Quantum Development Kit (0.27.258160) 。
    • 在 VS Code 中,選取 Ctrl + Shift + X 並搜尋 “Microsoft Quantum Development Kit”。

本文中的範例已設定為在 Visual Studio (VS) Code 上執行,並使用內建的 Azure 命令行介面 (CLI) 將作業提交至 Azure Quantum。 若要執行這些和其他範例的 Jupyter Notebook 版本,請登入您的 Azure 入口網站 工作區,並從範例資源庫中的 [混合式量子運算] 索引卷標檢視範例。 您可以在雲端中執行筆記本,或下載筆記本並在本機執行。

若要針對整合式混合式程序的問題進行疑難解答,請參閱 針對整合式混合式進行疑難解答

在此範例中,您將探索如何在相同程式中混合傳統和量子指令,這些指令全都由量子運算後端完整處理。

要注意此範例的功能:

  • 當量子位維持一致時,就會發生迴圈和量子位測量。
  • 例程會混合傳統和量子計算作業。
  • 您不需要瞭解如何針對 QPU (旁執行的特殊高效能硬體進行程式設計,例如 FPGA) 。
  • 在沒有整合式混合式功能的情況下執行對等程式需要傳回每個中繼測量結果,然後在數據上執行後處理。

建立 VS Code 專案

  1. 在 VS Code 中,建立名為 CheckGHZ 的新Q#獨立控制台應用程式專案。

    1. 選取 [檢視>命令板>Q#:建立新項目>獨立控制台應用程式]
  2. 以下列內容取代 CheckGHZ.csproj 中的組態:

    <Project Sdk="Microsoft.Quantum.Sdk/0.27.258160">
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>net6.0</TargetFramework>
        <ExecutionTarget>quantinuum</ExecutionTarget>
        <TargetCapability>AdaptiveExecution</TargetCapability>
      </PropertyGroup>
    </Project>
    
  3. 以下列程式代碼取代 Program.qs 中的程式代碼:

    namespace Microsoft.Quantum.Samples {
    
        open Microsoft.Quantum.Measurement;
        open Microsoft.Quantum.Intrinsic;
    
        /// # Summary
        /// Counts the number of times measurements of a prepared GHZ state did not match the expected correlations.
        @EntryPoint() // The EntryPoint attribute is used to mark that this operation is where a quantum program will start running.
        operation CheckGHZ() : Int {
            use q = Qubit[3];
            mutable mismatch = 0;
            for _ in 1..10 {
                // Prepare the GHZ state.
                H(q[0]);
                CNOT(q[0], q[1]);
                CNOT(q[1], q[2]);
    
                // Measures and resets the 3 qubits
                let (r0, r1, r2) = (MResetZ(q[0]), MResetZ(q[1]), MResetZ(q[2]));
    
                // Adjusts classical value based on qubit measurement results
                if not (r0 == r1 and r1 == r2) {
                    set mismatch += 1;
                }
            }
            return mismatch;
        }
    }
    
  4. 從 VS Code 中的終端機視窗中,連線到您的 Azure Quantum 工作區並設定預設資源。

    az login
    

    注意

    執行 az quantum workspace list 之後,您可以在終端機視窗中列出您的 Azure 用帳戶標識碼、資源群組工作區名稱。 或者,您可以在 Azure Quantum 工作區的 [概觀] 頁面上的 [Azure 入口網站 中找到它們。

    az account set --subscription <MySubscriptionID>
    
    az quantum workspace set --resource-group <MyResourceGroup> --workspace <MyWorkspace> --location <MyLocation>
    
  5. 提交作業並檢視結果。 此執行會使用大約 10.65 eHQC (Quantinuum 模擬器計費單位)

    az quantum job submit \
      --target-id quantinuum.sim.h1-1e \
      --job-name CheckGHZ \
      --target-capability AdaptiveExecution \
      --shots 50
    
    az quantum job output \
      -o table \
      --job-id [job-id]
    

GHZ 輸出

下一步

分散式混合式運算