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
- Ein Azure-Konto mit einem aktiven Abonnement. Wenn Sie über kein Azure-Konto verfügen, registrieren Sie sich kostenlos, und registrieren Sie sich für ein Abonnement mit nutzungsbasierter Bezahlung.
- Azure Quantum-Arbeitsbereich Weitere Informationen finden Sie unter Erstellen eines Azure Quantum-Arbeitsbereichs.
- Der Microsoft Quantum Computing-Anbieter , der Ihrem Arbeitsbereich hinzugefügt wurde.
Erstellen eines neuen Notebooks in Ihrem Arbeitsbereich
- Melden Sie sich beim Azure-Portal an, und wählen Sie Ihren Azure Quantum-Arbeitsbereich aus.
- Wählen Sie unter Vorgängedie Option Notebooks aus.
- Klicken Sie auf Meine Notizbücher, und klicken Sie auf Neu hinzufügen.
- Wählen Sie unter Kerneltyp die Option IPython aus.
- 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
, qiskit
und pyqir
importieren. 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 FehlerqecScheme
- das QEC-Schema (Quantum Error Correction, Quantenfehlerkorrektur)qubitParams
- die physischen Qubitparameterconstraints
– 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.
Verwandte Inhalte
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.
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für