Ausführungsmodi unter Verwendung der REST-API
Paketversionen
Der Code auf dieser Seite wurde unter Berücksichtigung der folgenden Anforderungen entwickelt. Wir empfehlen, diese Versionen oder neuere zu verwenden.
qiskit[all]~=2.3.0
Sie können Ihre grundlegenden „ IBM Quantum “-Workloads mithilfe von REST-APIs je nach Bedarf in einem von drei Ausführungsmodi ausführen: „Job“, „Session“ und „Batch“. In diesem Abschnitt werden diese Modi erläutert.
In dieser Dokumentation wird das Modul requests „ Python “ verwendet, um die REST-API des „ IBM Quantum Compute “-Dienstes zu veranschaulichen. Dieser Workflow kann jedoch mit jeder Sprache oder jedem Framework ausgeführt werden, das die Arbeit mit REST-APIs unterstützt. Weitere Informationen finden Sie in der API-Referenzdokumentation.
Jobmodus mit REST-API
Im Job-Modus wird eine einzelne primitive Anfrage an den Estimator oder Sampler ohne Kontextmanager gestellt. Sehen Sie sich einige Beispiele an, wie man einen Quantenschaltkreis mit Estimator und Sampler ausführt.
Sitzungsmodus mit REST-API
Eine Sitzung ist eine Funktion, mit der Sie iterative Workloads mit mehreren Jobs auf Quantencomputern effizient ausführen können. Durch die Verwendung von Sitzungen lassen sich Verzögerungen vermeiden, die dadurch entstehen, dass jeder Auftrag einzeln in die Warteschlange gestellt wird. Dies kann insbesondere bei iterativen Aufgaben nützlich sein, die eine häufige Kommunikation zwischen klassischen und Quantenressourcen erfordern. Weitere Informationen zu Sessions finden Sie in der Dokumentation.
Open-Plan-Benutzer können keine Sitzungsaufträge einreichen.
Eine Sitzung starten
Beginnen Sie damit, eine Sitzung zu erstellen und eine Sitzungs-ID zu erhalten.
import json
import requests
sessionsUrl = "https://quantum.cloud.ibm.com/api/v1/sessions"
auth_id = "Bearer <YOUR_BEARER_TOKEN>"
backend = "<BACKEND_NAME>"
crn = "<SERVICE-CRN>"
headersList = {
"Accept": "application/json",
"Content-Type": "application/json",
"Authorization": auth_id,
"Service-CRN": crn
}
payload = json.dumps({
"backend": backend,
"mode": 'dedicated',
})
response = requests.request("POST", sessionsUrl, data=payload, headers=headersList)
sessionId = response.json()['id']
print(response.json())Ausgabe
{'id': 'crw9s7cdbt40008jxesg'}Eine Sitzung schließen
Es ist gute Praxis, eine Session zu schließen, wenn alle Aufträge erledigt sind. Dadurch wird die Wartezeit für nachfolgende Benutzer verkürzt.
closureURL="https://quantum.cloud.ibm.com/api/v1/sessions/"+sessionId+"/close"
headersList = {
"Accept": "application/json",
"Authorization": auth_id,
"Service-CRN": crn
}
closure_response = requests.request(
"DELETE",
closureURL,
headers=headersList
)
print("Session closure response ok?:",closure_response.ok,closure_response.text)Ausgabe
Session closure response ok?: TrueBatch-Modus mit REST-API
Alternativ können Sie einen Batch-Job übermitteln, indem Sie mode in der Anforderungsdatenübertragung angeben. Der Batch-Modus kann dazu beitragen, die Verarbeitungszeit zu verkürzen, wenn alle Aufträge zu Beginn bereitgestellt werden können. Erfahren Sie mehr über den Batch-Modus in der Einführung in die Ausführungsmodi.
import json
import requests
sessionsUrl = "https://quantum.cloud.ibm.com/api/v1/sessions"
headersList = {
"Accept": "application/json",
"Authorization": auth_id,
"Service-CRN": crn,
'Content-Type': 'application/json'
}
payload = json.dumps({
"backend": backend,
"instance": "hub1/group1/project1",
"mode": "batch"
})
response = requests.request("POST", sessionsUrl, data=payload, headers=headersList)
sessionId = response.json()['id']Beispiele für in einer Sitzung eingereichte Aufträge
Sobald eine Sitzung eingerichtet ist, können ein oder mehrere Sampler- oder Estimator-Aufträge an dieselbe Sitzung übermittelt werden, indem die Sitzungs-ID angegeben wird.
Bei <parameter values> in PUB kann es sich entweder um einen einzelnen Parameter oder um eine Liste von Parametern handeln. Es unterstützt auch numpy .
Estimator-Jobs im Sitzungsmodus
job_input = {
'program_id': 'estimator',
"backend": backend,
"session_id": sessionId, # This specifies the previously created Session
"params": {
"pubs": [[resulting_qasm, [obs1, obs2, obs3, obs4]]], #primitive unified blocs (PUBs) containing one circuit each.
"options":{
"transpilation":{"optimization_level": 1},
"twirling": {"enable_gates": True,"enable_measure": True},
# "dynamical_decoupling": {"enable": True, "sequence_type": "XpXm"}, #(optional)
},
}
}job_input = {
'program_id': 'estimator',
"backend": backend,
"session_id": sessionId, # This specifies the previously created Session
"params": {
"pubs": [[resulting_qasm, [[obs1], [obs2], [obs3], [obs4]], [[vals1], [vals2]]]], #primitive unified blocs (PUBs) containing one circuit each
"options":{
"transpilation":{"optimization_level": 1},
"twirling": {"enable_gates": True,"enable_measure": True},
# "dynamical_decoupling": {"enable": True, "sequence_type": "XpXm"}, #(optional)
},
}
} job_input = {
'program_id': 'estimator',
"backend": backend,
"session_id": sessionId, # This specifies the previously created Session
"params": {
"pubs": [[resulting_qasm, obs1],[resulting_qasm, obs2]], #primitive unified blocs (PUBs) containing one circuit each
"options":{
"transpilation":{"optimization_level": 1},
"twirling": {"enable_gates": True,"enable_measure": True},
# "dynamical_decoupling": {"enable": True, "sequence_type": "XpXm"}, #(optional)
},
}
}Sampler-Jobs im Sitzungsmodus
job_input = {
'program_id': 'sampler',
"backend": backend,
"session_id": sessionId, # This specifies the previously created Session
"params": {
"pubs": [[resulting_qasm]], #primitive unified blocs (PUBs) containing one circuit each
"options":{
"transpilation":{"optimization_level": 1},
"twirling": {"enable_gates": True,"enable_measure": True},
# "dynamical_decoupling": {"enable": True, "sequence_type": "XpXm"}, #(optional)
},
}
}job_input = {
'program_id': 'sampler',
"backend": backend,
"session_id": sessionId, # This specifies the previously created Session
"params": {
"pubs": [[resulting_qasm, [vals1, vals2, vals3]]], #primitive unified blocs (PUBs) containing one circuit each
"options":{
"transpilation":{"optimization_level": 1},
"twirling": {"enable_gates": True,"enable_measure": True},
# "dynamical_decoupling": {"enable": True, "sequence_type": "XpXm"}, #(optional)
},
}
} job_input = {
'program_id': 'sampler',
"backend": backend,
"session_id": sessionId, # This specifies the previously created Session
"params": {
"pubs": [[resulting_qasm, [val1]],[resulting_qasm,None,100]], #primitive unified blocs (PUBs) containing one circuit each
"options":{
"transpilation":{"optimization_level": 1},
"twirling": {"enable_gates": True,"enable_measure": True},
# "dynamical_decoupling": {"enable": True, "sequence_type": "XpXm"}, #(optional)
},
}
}Nächste Schritte
- Sehen Sie sich detaillierte Beispiele für Sampler -Primitive unter Verwendung der REST-API an.
- Sehen Sie sich detaillierte Beispiele für Estimator -Primitive unter Verwendung der REST-API an.
- Üben Sie den Umgang mit Primitiven, indem Sie die Lektion über die Kostenfunktion auf IBM Quantum® Learning durcharbeiten.
- Im Abschnitt „Transpile“ erfahren Sie, wie Sie lokal transpilieren können.