Freigeben über


Tutorial: Übermitteln eines QIR-Programms an den Azure Quantum Resource Estimator

Der Azure Quantum Resource Estimator basiert auf einer Quantum Intermediate Representationvollständig interoperablen Spezifikation für Quantenprogramme( QIR). QIR dient als gemeinsame Schnittstelle zwischen Quantenprogrammiersprachen und -frameworks und targeted-Quantenberechnungsplattformen. Da der Resource Estimator ein QIR-Programm als Eingabe verwendet, unterstützt er jede Sprache, die in QIR übersetzt wird. Sie kann beispielsweise von beliebten Quanten-SDKs und -Sprachen wie Q# und Qiskit verwendet werden. In diesem Tutorial schreiben Sie ein QIR-Programm und übermitteln es an den Resource Estimator. In diesem Tutorial wird PyQIR zum Generieren von QIR verwendet. Sie können jedoch jede andere QiR-Quelle verwenden.

In diesem Tutorial lernen Sie Folgendes:

  • Stellen Sie eine Verbindung mit dem Azure Quantum-Dienst her.
  • Definieren einer Funktion zum Erstellen eines Ressourcenschätzungsauftrags aus QIR-Bitcode
  • Erstellen eines QIR-Bitcodes mithilfe des PyQIR-Generators
  • Übermitteln eines QIR-Auftrags an den Resource Estimator

Registrieren Sie sich für ein kostenloses Azure-Testabonnement für 30 Tage.

Voraussetzungen

Erstellen eines neuen Notebooks in Ihrem Arbeitsbereich

  1. Melden Sie sich beim Azure-Portal an, und wählen Sie Ihren Azure Quantum-Arbeitsbereich aus.
  2. Wählen Sie unter Vorgängedie Option Notebooks aus.
  3. Klicken Sie auf Meine Notizbücher, und klicken Sie auf Neu hinzufügen.
  4. Wählen Sie unter Kerneltyp die Option IPython aus.
  5. Geben Sie einen Namen für die Datei ein, und klicken Sie auf Datei erstellen.

Wenn Ihr neues Notebook geöffnet wird, wird der Code für die erste Zelle automatisch auf der Grundlage Ihrer Abonnement- und Arbeitsbereichsinformationen erstellt.

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

Hinweis

Sofern nicht anders angegeben, müssen Sie die einzelnen Zellen in der Reihenfolge ihrer Erstellung ausführen, um Kompilierungsprobleme zu vermeiden.

Klicken Sie links neben der Zelle auf das dreieckige Wiedergabesymbol, um den Code auszuführen.

Laden der erforderlichen Importe

Zunächst müssen Sie einige Python-Klassen und -Funktionen aus azure.quantum, qiskitund pyqirimportieren. Sie verwenden Qiskit nicht, um Quantenschaltungen direkt zu erstellen, aber Sie verwenden AzureQuantumJob, das auf dem Qiskit-Ökosystem basiert. Stellen Sie sicher, dass Sie die neueste Version von Qiskit verwenden. Weitere Informationen finden Sie unter Aktualisieren des Python-Pakets azure-quantum.

from azure.quantum.qiskit import AzureQuantumProvider
from azure.quantum.qiskit.job import AzureQuantumJob
from pyqir.generator import BasicQisBuilder, SimpleModule

Herstellen einer Verbindung mit dem Azure Quantum-Dienst

Erstellen Sie als Nächstes ein AzureQuantumProvider Objekt mit dem workspace -Objekt aus der vorherigen Zelle, um eine Verbindung mit Ihrem Azure Quantum-Arbeitsbereich herzustellen.

provider = AzureQuantumProvider(workspace)

Definieren einer Funktion zum Erstellen eines Ressourcenschätzungsauftrags aus QIR

Der Resource Estimator ist ein target Anbieter von Microsoft Quantum Computing. Die Verwendung des Resource Estimator ist identisch mit der Übermittlung eines Auftrags an einen anderen Software- und Hardwareanbieter targets in Azure Quantum. Definieren Sie Ihr Programm, legen Sie ein targetfest, und übermitteln Sie Ihren Auftrag zur Berechnung.

Wenn Sie eine Ressourcenschätzungsanforderung für Ihr Programm übermitteln, können Sie einige target Parameter angeben.

  • errorBudget - Das zulässige Gesamtbudget für Fehler
  • qecScheme - das QEC-Schema (Quantum Error Correction, Quantenfehlerkorrektur)
  • qubitParams - die physischen Qubitparameter
  • constraints – die Einschränkungen auf Komponentenebene

Weitere Informationen zu den Eingabeparametern finden Sie unter Zielparameter des Ressourcenstimators.

In diesem Beispiel implementieren Sie eine generische Funktion, die als Eingabe das Objekt übernimmt, das provider eine Verbindung mit Ihrem Azure Quantum-Arbeitsbereich herstellt, und den QIR-Bitcode des Quantenprogramms. Als Ergebnis wird ein Azure Quantum-Auftrag zurückgegeben. Die Resource Estimator-Parameter target können über Schlüsselwort (keyword) Argumente an die Funktion übergeben werden.

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={}
    )

Ausführen eines Quantenbeispielprogramms

Erstellen Sie als Nächstes einen QIR-Bitcode mithilfe des PyQIR-Generators. In diesem Beispiel wird ein gesteuertes S-Gate mit drei T-Gates und zwei CNOT-Gates erstellt.

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)

Sie können die oben definierte Funktion zusammen mit der bitcode() Funktion aus PyQIR verwenden, um einen Ressourcenschätzungsauftrag zu generieren. Sie können auch Resource Estimator-spezifische Argumente übergeben. In diesem Beispiel wird errorBudget die Fehlerrate auf 5 % festgelegt. Weitere Informationen zu den target Parametern finden Sie unter Zielparameter des Ressourcenstimators.

job = resource_estimation_job_from_qir(provider, module.bitcode(), errorBudget=0.05)
result = job.result()
result

Diese Funktion erstellt eine Tabelle, die die Gesamtzahl der physischen Ressourcen anzeigt. Sie können die Kostendetails weiter untersuchen, indem Sie die Gruppen, die weitere Informationen enthalten, zusammenbrechen. Wenn Sie beispielsweise die Gruppe logische Qubitparameter reduzieren, können Sie leichter erkennen, dass der Fehlerkorrekturcodeabstand 15 beträgt.

Logischer Qubitparameter Wert
QEC-Schema surface_code
Codeabstand 5
Physische Qubits 50
Logische Zykluszeit 2us
Logische Qubitfehlerrate 3.00E-5
Kreuzen von Präfaktoren 0,03
Fehlerkorrekturschwellenwert 0.01
Formel der Logischen Zykluszeit (4 * twoQubitGateTime + 2 * oneQubitMeasurementTime) * codeDistance
Formel für physische Qubits 2 * codeDistance * codeDistance

In der Gruppe Physische Qubitparameter finden Sie die physischen Qubiteigenschaften, die für diese Schätzung angenommen wurden. So beträgt beispielsweise die Zeit für die Durchführung der Messung eines einzelnen Qubits und eines einzelnen Qubitgatters 100 ns bzw. 50 ns.

Physischer Qubitparameter Wert
Qubitname qubit_gate_ns_e3
Anweisungssatz GateBased
Einzel-Qubit-Messzeit 100 ns
Torzeit 50 ns
T gate-Fehlerrate 0.001
Fehlerrate der Einzelqubitmessung 0.001
Single-Qubit-Gatezeit 50 ns
Fehlerrate mit einzel qubit 0.001
Gatezeit mit zwei Qubits 50 ns
Fehlerrate mit zwei Qubits 0.001

Weitere Informationen finden Sie in der vollständigen Liste der Ausgabedaten für den Resource Estimator.

Machen Sie sich im Anschluss mit anderen Quantenalgorithmen und -techniken vertraut:

  • Das Tutorial Implementieren des Grover-Suchalgorithmus zeigt, wie sie ein Q#-Programm schreiben, das den Grover-Suchalgorithmus verwendet, um ein Problem mit der Graphfarbe zu lösen.
  • Das Tutorial Erkunden der Quantenverschränkung mit Q# zeigt, wie Sie mit Q# an Qubits arbeiten, um ihren Zustand zu ändern, und zeigt die Auswirkungen von Überlagerung und Verschränkung.
  • Die Quanten katas sind Jupyter Notebook-basierte, selbstgesteuerte Tutorials und Programmierübungen, die darauf abzielen, die Elemente des Quantencomputings und der Q#-Programmierung gleichzeitig zu unterrichten.