Skip to main content
IBM Quantum Platform

Modos de execução usando a API REST

Versões do pacote

O código desta página foi desenvolvido com base nos seguintes requisitos. Recomendamos usar essas versões ou versões mais recentes.

qiskit[all]~=2.3.0

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

Note

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


Modo de trabalho com API REST

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


Modo de sessão com API REST

Uma sessão é um recurso do Qiskit Runtime que permite executar com eficiência cargas de trabalho iterativas com múltiplas tarefas em computadores quânticos. O uso de sessões ajuda a evitar atrasos causados pelo enfileiramento de cada tarefa separadamente, o que pode ser particularmente útil para tarefas iterativas que exigem comunicação frequente entre recursos clássicos e quânticos. Mais detalhes sobre as sessões podem ser encontrados na documentação.

Note

Os usuários do Open Plan não podem enviar trabalhos de sessão.

Iniciar uma sessão

Comece criando uma sessão e obtendo um ID de sessão.

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

Fechar uma sessão

É uma boa prática fechar o site Session quando todos os trabalhos estiverem concluídos. Isso reduzirá o tempo de espera dos usuários subsequentes.

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 em lote com API REST

Como alternativa, você pode enviar um trabalho em lote especificando o mode na carga útil da solicitação. O modo em lote pode ajudar a reduzir o tempo de processamento se todos os trabalhos puderem ser fornecidos desde o início. Saiba mais sobre o modo em lote 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 trabalhos enviados em uma sessão

Depois que uma sessão é configurada, um ou mais trabalhos do Sampler ou do Estimator podem ser enviados para a mesma sessão, especificando o ID da sessão.

Note

O <parameter values> em um PUB pode ser um único parâmetro ou uma lista de parâmetros. Ele também suporta a transmissão numpy .

Trabalhos do Estimador no modo sessão

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

}

Trabalhos de amostragem no modo de sessão

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óximas etapas

Recomendações
Esta página foi útil?
Relate um bug, erro de digitação ou solicite conteúdo no GitHub.