Pular para o conteúdo principal

Modos de execução usando REST API

Você pode executar suas cargas de trabalho primitivas do Qiskit usando REST APIs em um dos três modos de execução, dependendo das suas necessidades: job, session e batch. Este tópico explica esses modos.

nota

Esta documentação utiliza o módulo Python requests para demonstrar a REST API do Qiskit Runtime. No entanto, esse fluxo de trabalho pode ser executado usando qualquer linguagem ou framework que suporte o trabalho com REST APIs. Consulte a documentação de referência da API para mais detalhes.

Modo job com REST API

No modo job, uma única requisição primitiva do Estimator ou do Sampler é feita sem um gerenciador de contexto. Veja como executar um Circuit quântico usando Estimator e Sampler para alguns exemplos.

Modo session com REST API

Uma session é um recurso do Qiskit Runtime que permite executar de forma eficiente cargas de trabalho iterativas com múltiplos jobs em computadores quânticos. O uso de sessions ajuda a evitar atrasos causados pelo enfileiramento de cada job separadamente, o que pode ser especialmente útil para tarefas iterativas que exigem comunicação frequente entre recursos clássicos e quânticos. Mais detalhes sobre Sessions podem ser encontrados na documentação.

nota

Usuários do Plano Open não podem enviar jobs em session.

Iniciar uma session

Comece criando uma session e obtendo um ID de session.

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

Saída

{'id': 'crw9s7cdbt40008jxesg'}

Encerrar uma session

É uma boa prática encerrar uma Session quando todos os jobs estiverem concluídos. Isso reduzirá o tempo de espera para os próximos usuários.

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)

Saída

Session closure response ok?: True

Modo batch com REST API

Alternativamente, você pode enviar um job em batch especificando o mode no payload da requisição. O modo batch pode ajudar a reduzir o tempo de processamento se todos os jobs puderem ser fornecidos desde o início. Saiba mais sobre o modo batch no guia de introdução aos modos de execução.

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']

Exemplos de jobs enviados em uma session

Uma vez que uma session esteja configurada, um ou mais jobs do Sampler ou do Estimator podem ser enviados para a mesma session especificando o ID da session.

nota

Os <valores de parâmetro> em um PUB podem ser um único parâmetro ou uma lista de parâmetros. Também suporta broadcasting do numpy.

Jobs do Estimator no modo session

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

}

Jobs do Sampler no modo session

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

}

Próximos passos

Recomendações