Einführung in die Grundelemente
Der Code auf dieser Seite wurde unter Berücksichtigung der folgenden Anforderungen entwickelt. Wir empfehlen die Verwendung dieser oder neuerer Versionen.
qiskit[all]~=2.3.0 qiskit-ibm-runtime~=0.43.1
Warum hat Qiskit Primitive eingeführt?
Ähnlich wie in den Anfängen der klassischen Computer, als Entwickler die CPU-Register direkt manipulieren mussten, lieferte die frühe Schnittstelle zu QPUs einfach die Rohdaten von der Steuerelektronik zurück.
Dies war kein großes Problem, als die QPUs noch in Labors untergebracht waren und nur Forscher direkten Zugang hatten.
In der Erkenntnis, dass die meisten Entwickler nicht mit der Destillation solcher Rohdaten in 0s und 1s vertraut sind und dies auch nicht sein sollten, führte Qiskit backend.run ein, eine erste Abstraktion für den Zugriff auf QPUs in der Cloud. Dies ermöglichte den Entwicklern mit einem vertrauten Datenformat zu arbeiten und sich auf das große Ganze zu konzentrieren.
Mit der zunehmenden Verbreitung von QPUs und der Entwicklung weiterer Quantenalgorithmen entstand erneut der Bedarf an einer höheren Abstraktionsebene. Als Antwort darauf hat Qiskit die Primitivschnittstelle, die für zwei Kernaufgaben bei der Entwicklung von Quantenalgorithmen optimiert ist: schätzung von Erwartungswerten (Estimator) und Abtasten von Schaltkreisen (Sampler). Das Ziel ist einmal mehr ziel ist es, den Entwicklern zu helfen, sich mehr auf Innovationen und weniger auf die Datenkonvertierung zu konzentrieren. Die Primitivschnittstelle ersetzt die Schnittstelle backend.run , da Sampler den gleichen direkten Hardware-Zugriff bietet wie backend.run.
Was ist eine Primitive?
Computersysteme sind auf mehreren Abstraktionsebenen aufgebaut. Abstraktionen ermöglichen es Ihnen, sich auf eine auf eine bestimmte, für die jeweilige Aufgabe relevante Detailstufe. Je näher man der Hardware kommt, je näher man an die Hardware herankommt, desto niedriger ist die Abstraktionsebene, die man benötigt (z. B. muss man Daten auf der CPU-Befehlsebene bewegen oder manipulieren). Je komplexer die Aufgabe ist, die Sie durchführen wollen, je komplexer die Aufgabe ist, die Sie durchführen wollen, desto höher sind die Abstraktionen (z. B. könnten Sie eine Programmierbibliothek verwenden, um algebraische Berechnungen).
In diesem Zusammenhang ist ein Primitiv die kleinste Verarbeitungsanweisung, der einfachste Baustein, aus dem man etwas Nützliches für eine bestimmte Abstraktionsebene erstellen kann.
Die jüngsten Fortschritte in der Quanteninformatik haben die Notwendigkeit erhöht, auf höheren Abstraktionsebenen zu arbeiten. Auf dem Weg zu größeren Quantenverarbeitungseinheiten (QPUs) und komplexeren Arbeitsabläufen verlagert sich der Schwerpunkt von der Interaktion mit einzelnen qubit-Signalen hin zur Betrachtung von Quantengeräten als Systeme, die notwendige Aufgaben erfüllen.
Die beiden häufigsten Aufgaben von Quantencomputern sind das Abtasten von Quantenzuständen und die Berechnung von Erwartungswerten. Diese Aufgaben motivierten die Entwicklung von Qiskit primitives : Estimator und Sampler.
- Der Schätzer berechnet die Erwartungswerte von Observablen in Bezug auf Zustände, die durch Quantenschaltungen vorbereitet werden.
- Sampler sampelt das Ausgaberegister aus der Ausführung der Quantenschaltung.
Kurz gesagt, das von Qiskit primitives eingeführte Berechnungsmodell bringt die Quantenprogrammierung einen Schritt näher an die dem Stand der klassischen Programmierung an, bei der der Schwerpunkt weniger auf den Hardware-Details und mehr auf den Ergebnissen liegt die man zu erreichen versucht.
Primitive Definition und Implementierungen
Es gibt zwei Arten von „ Qiskit primitives “: die Basisklassen und deren Implementierungen. Die Primitive „Estimator“ und „Sampler“ werden durch Open-Source-Basisklassen für Primitive definiert, die sich im „ Qiskit SDK “ (im Modul qiskit.primitives ) befinden. Anbieter (wie beispielsweise der „ IBM Quantum Compute Service“) können diese Basisklassen nutzen, um eigene Sampler- und Estimator-Implementierungen abzuleiten. Die meisten Benutzer werden mit den Implementierungen der Anbieter interagieren, nicht mit den Basisprimitiven.
Basisklassen
Die Base Primitive sind abstrakte Klassen, die eine gemeinsame Schnittstelle für die Implementierung von Primitiven definieren. Alle anderen Klassen in diesem qiskit.primitives Modul erben von diesen Basisklassen. Entwickler sollten diese nutzen, wenn sie daran interessiert sind, ein eigenes, auf Primitiven basierendes Ausführungsmodell für einen bestimmten Anbieter zu erstellen. Diese Klassen könnten auch für diejenigen nützlich sein, die sehr individuelle Verarbeitungsschritte durchführen möchten und feststellen, dass die vorhandenen Implementierungen der Primitive für ihre Anforderungen zu einfach sind. Normale Benutzer werden die Basisklassen nicht direkt verwenden.
BaseEstimatorV1 und BaseSamplerV1 – Obwohl die Primitive von „ V1 “ weiterhin verwendet werden können, konzentrieren sich diese Anleitungen auf die Primitive von „ V2 “, da diese aktueller sind und häufiger zum Einsatz kommen.
BaseEstimatorV2 und BaseSamplerV2 – Die Qiskit-Referenzprimitiven entsprechen diesen Schnittstellenspezifikationen.
Implementierungen
Alle Primitive werden aus den Basisklassen abgeleitet; daher weisen sie dieselbe allgemeine Struktur und dieselbe Verwendung auf. Beispielsweise ist das Eingabeformat für alle Estimator-Primitive identisch. Es gibt jedoch Unterschiede in der Umsetzung, die sie einzigartig machen.
Dies sind Implementierungen der Basisklassen der Primitiven:
-
Die IBM Quantum Primitive, und
EstimatorV2bieten eine ausgefeiltere Implementierung (beispielsweise durch die Einbindung von Fehlerminderungsmaßnahmen) als cloudbasierten DienstSamplerV2an. Diese Implementierung der Basisprimitive dient dem Zugriff auf „ IBM Quantum® “-Hardware. -
StatevectorEstimatorundStatevectorSampler– Referenzimplementierungen der Primitive, die den in Qiskit integrierten Simulator nutzen. Sie wurden mit dem Qiskit-Modulquantum_infoerstellt und liefern Ergebnisse, die auf Simulationen mit idealen Zustandsvektoren basieren. Der Zugriff erfolgt über Qiskit. Einzelheiten zur Verwendung finden Sie unter „Exakte Simulation mit Qiskit SDK -Primitiven “. -
BackendEstimatorV2undBackendSamplerV2– Mit diesen Klassen können Sie beliebige Quantencomputing-Ressourcen in eine Primitive „verpacken“. Auf diese Weise können Sie Code im Primitive-Stil für Provider schreiben, die noch keine auf Primitives basierende Schnittstelle haben. Diese Klassen können genau wie der reguläre Sampler und Estimator verwendet werden, mit dem Unterschied, dass sie mit einem zusätzlichenbackendArgument initialisiert werden müssen, um auszuwählen, auf welchem Quantencomputer sie ausgeführt werden sollen. Der Zugriff erfolgt über Qiskit. Weitere Informationen finden Sie im Leitfaden zu Backend-Primitiven.
Optionen
Sie können Optionen an Primitive übergeben, um diese an Ihre Bedürfnisse anzupassen. Während die Schnittstelle der Methode der run() Primitive in allen Implementierungen einheitlich ist, gilt dies nicht für ihre Optionen. Informieren Sie sich in den API-Referenzen zur jeweiligen Primitiv-Implementierung über die unterstützten Optionen.
Lesen Sie beispielsweise die Abschnitte „Estimator-Optionen“ und „Sampler-Optionen“, um mehr über die Optionen für die „ IBM Quantum “-Primitiven zu erfahren, oder sehen Sie in den Qiskit Aer-API-Referenzen nach, um mehr über die Optionen der Qiskit Aer-Primitiven zu erfahren.
Vorteile von „ Qiskit primitives “
Mithilfe von Primitiven können Qiskit-Anwender Quantencode für eine bestimmte QPU schreiben, ohne jedes Detail explizit
verwalten zu müssen. Außerdem könnten Sie aufgrund der zusätzlichen Abstraktionsebene möglicherweise leichter
auf erweiterte Hardwarefunktionen eines bestimmten Anbieters zugreifen. Bei den Primitiven von „ IBM Quantum “
können Sie beispielsweise die neuesten Fortschritte bei der Fehlerminderung und -unterdrückung nutzen, indem Sie Optionen wie die der Primitive aktivieren oder deaktivieren resilience_level, anstatt eine eigene Implementierung dieser Techniken zu entwickeln.
Für Hardware-Anbieter bedeutet die native Implementierung von Primitiven, dass sie ihren Nutzern eine "out-of-the-box"-Möglichkeit bieten können zugriff auf Ihre Hardware-Funktionen, wie z. B. erweiterte Nachbearbeitungstechniken. So ist es für Ihre Benutzer einfacher, die besten Funktionen Ihrer Hardware zu nutzen.
Nächste Schritte
- Machen Sie sich mit den grundlegenden Ein- und Ausgabemöglichkeiten vertraut.
- Sehen Sie sich detaillierte Beispiele an.
- Üben Sie den Umgang mit Primitiven, indem Sie die Lektion über die Kostenfunktion auf IBM Quantum Learning durcharbeiten.
- Lesen Sie den Leit faden „Erstellen eines Providers“, um zu erfahren, wie Sie Ihre eigenen Sampler- und Estimator-Primitive implementieren können.
- Siehe die API-Dokumentation.
- Lesen Sie Migrieren zu V2 primitives.
- Erfahren Sie mehr über die „ IBM Quantum “-Primitive, die zur Ausführung von Schaltkreisen auf den QPUs von „ IBM “ verwendet werden.