使用 QDKPython 套件將工作提交到 Azure Quantum

使用 Q#(OpenQASM)Qiskit 套件,將 Cirq、PennyLane、Azure Quantum、Python 及 QDK 程式提交至 Microsoft Quantum Development Kit。

本文提供每種支援量子語言或框架的工作提交範例。 若要使用不需要Python程式碼的互動式Q#或OpenQASM工作流程,請參閱使用適用於QDK的VS Code擴充功能提交作業

先決條件

  • 一個有有效訂閱的 Azure 帳號。

  • 工作區 Azure Quantum 要建立工作區,請參見 建立 Azure Quantum 工作區

  • Python 3.10 或更新版本。

  • 如果你使用 Jupyter Notebook,可使用 Jupyter 環境,例如 VS Code 的 Jupyter 擴充功能ipykernel 套件。

  • 安裝 Azure CLIquantum 擴充功能。

    az extension add --upgrade --name quantum
    
  • 安裝包含 jupyterazure extras 的最新版本 qdkPython 套件。

    pip install --upgrade "qdk[azure,jupyter]"
    

    如果你想提交 Qiskit 或 Cirq 程式,請安裝 cirqqiskit 額外套件。

    pip install --upgrade "qdk[qiskit,cirq]"
    

連線至你的 Azure Quantum 工作區

在提交工作之前,你需要先連接一個 Azure Quantum 工作區。 此 qdk.azure 模組提供 Workspace 物件,用於連線到 Azure Quantum 工作區。 要連接你的工作空間,請遵循以下步驟。

使用 Azure CLI 登入

如果你還沒登入,建議在開啟 Jupyter 筆記本前,先從終端機登入 Azure。

az login

如果你沒有從終端機登入,每次透過 Quantum 工作區 Python連線時都必須進行驗證。 如果你的帳號有多個訂閱,請設定包含你 Azure Quantum 工作區的訂閱。

az account set --subscription <subscription-id>

當會話結束或想使用其他 Azure 帳號時,再重新執行az login

取得你工作空間的資源 ID

  1. 登入 Azure 入口網站
  2. 前往您要提交作業的 Quantum 工作區。
  3. 概覽 頁面,找到並複製 資源 ID

連線到工作區

  1. 若要連線到您的 Quantum 工作區,請使用您複製的資源 ID 建立一個 Workspace 物件。

    from qdk.azure import Workspace
    
    workspace = Workspace(resource_id="") # Add your resource ID
    

    Note

  2. 確認連線,並查看工作區中可用的 targets。

    for target in workspace.get_targets():
        print(target.name)
    

關於其他連線與認證選項,請參見 「連接至您的 Azure Quantum 工作區」。

Note

以下範例將工作提交至 模擬器 targets。 你工作空間中可用的 targets 取決於你已設定的提供者。

準備並提交你的程式

選擇適用於你的量子語言或架構的索引標籤。

使用 qdk.qsharp 模組來定義或載入 Q# 程式碼,編譯一個入口點到 QIR,並將 提交 QIR 給 Azure Quantumtarget。

定義並編譯程式Q#

  1. 使用 Azure Quantumtarget 支援的 QIRtarget 設定檔初始化 Q#。

    from qdk import qsharp, TargetProfile
    
    qsharp.init(target_profile=TargetProfile.Base)
    

    如需更多關於 QIRtarget 設定檔的資訊,請參閱 Azure QuantumQIRtarget 設定檔(位於 QDK 中)

  2. 定義一個 Q# 操作。 例如,使用以下 RandomBit 運算。

    qsharp.eval("""
        operation RandomBit() : Result {
            use q = Qubit();
            H(q);
            return MResetZ(q);
        }
    """)
    
  3. 在本地模擬器上測試操作。

    print(qsharp.run("RandomBit()", shots=10))
    
  4. 將操作編譯為 QIR。

    from qdk.qsharp import compile
    
    program = compile("RandomBit()")
    

提交 Q# 作業

  1. 從你的工作區選取相容的 target。

    target = workspace.get_targets("rigetti.sim.qvm")
    
  2. 提交已編譯的程式。

    job = target.submit(program, "qsharp-job", shots=100)
    print("Job ID:", job.id)
    
  3. 等待作業完成,並擷取其結果。

    job.wait_until_completed()
    print("Status:", job.details.status)
    
    results = job.get_results()
    print(results)