Zum Hauptinhalt springen

Ausführungsmodi mit REST-API

Du kannst deine Qiskit-Primitiv-Workloads mit REST-APIs in einem von drei Ausführungsmodi ausführen, abhängig von deinen Anforderungen: Job, Session und Batch. Dieses Thema erklärt diese Modi.

hinweis

Diese Dokumentation verwendet das Python-requests-Modul, um die Qiskit Runtime REST-API zu demonstrieren. Dieser Workflow kann jedoch mit jeder Sprache oder jedem Framework ausgeführt werden, das die Arbeit mit REST-APIs unterstützt. Details findest du in der API-Referenzdokumentation.

Job-Modus mit REST-API

Im Job-Modus wird eine einzelne Primitiv-Anfrage des Estimators oder des Samplers ohne Context Manager gestellt. Beispiele für die Ausführung einer Quantenschaltung mit Estimator und Sampler findest du hier.

Session-Modus mit REST-API

Eine Session ist eine Qiskit Runtime-Funktion, mit der du Multi-Job-iterative Workloads effizient auf Quantencomputern ausführen kannst. Die Verwendung von Sessions hilft, Verzögerungen zu vermeiden, die durch das separate Einreihen jedes Jobs verursacht werden, was besonders nützlich für iterative Aufgaben sein kann, die häufige Kommunikation zwischen klassischen und Quantenressourcen erfordern. Weitere Details zu Sessions findest du in der Dokumentation.

hinweis

Open Plan-Benutzer können keine Session-Jobs einreichen.

Eine Session starten

Beginne mit der Erstellung einer Session und dem Erhalt einer Session-ID.

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())

Output

{'id': 'crw9s7cdbt40008jxesg'}

Eine Session schließen

Es ist eine gute Praxis, eine Session zu schließen, wenn alle Jobs erledigt sind. Dies verkürzt die Wartezeit für nachfolgende Benutzer.

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)

Output

Session closure response ok?: True

Batch-Modus mit REST-API

Alternativ kannst du einen Batch-Job einreichen, indem du den mode in der Request-Payload angibst. Der Batch-Modus kann helfen, die Verarbeitungszeit zu verkürzen, wenn alle Jobs im Voraus bereitgestellt werden können. Erfahre mehr über den Batch-Modus im Introduction to execution modes-Guide.

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 Jobs, die in einer Session eingereicht wurden

Sobald eine Session eingerichtet ist, können ein oder mehrere Sampler- oder Estimator-Jobs an dieselbe Session übermittelt werden, indem die Session-ID angegeben wird.

hinweis

Die <parameter values> in einem PUB können entweder ein einzelner Parameter oder eine Liste von Parametern sein. Es unterstützt auch numpy-Broadcasting.

Estimator-Jobs im Session-Modus

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)
},
}

}

Sampler-Jobs im Session-Modus

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)
},
}

}

Nächste Schritte

Empfehlungen