Lote
class Batch(backend, max_time=None, *, create_new=True)
Bases: Session
Classe para executar trabalhos no modo de execução em lote.
O modo batch foi projetado para executar com eficiência experimentos que compreendem vários trabalhos independentes.
O uso do modo batch oferece os seguintes benefícios:
- A computação clássica dos trabalhos, como a compilação, é executada em paralelo. Portanto, executar vários trabalhos em um lote é significativamente mais rápido do que executá-los em série.
- Normalmente, há um atraso mínimo entre os trabalhos, o que pode ajudar a evitar desvios.
- Se você dividir sua carga de trabalho em vários trabalhos e executá-los no modo
batch, poderá obter resultados de trabalhos individuais, o que os torna mais flexíveis para trabalhar. Por exemplo, se os resultados de um trabalho não atenderem às suas expectativas, você poderá cancelar os trabalhos restantes ou simplesmente reenviar esse trabalho individual e evitar a reexecução de toda a carga de trabalho.
O modo de lote pode reduzir o tempo de processamento se todos os trabalhos forem fornecidos desde o início. Se você quiser enviar trabalhos iterativos, use o modo session .
Você pode abrir um lote Qiskit Runtime usando essa classe Batch e, em seguida, enviar trabalhos para uma ou mais primitivas.
Por exemplo:
import numpy as np
from qiskit.circuit.library import IQP
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
from qiskit.quantum_info import random_hermitian
from qiskit_ibm_runtime import QiskitRuntimeService, SamplerV2 as Sampler, Batch
n_qubits = 127
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False, min_num_qubits=n_qubits)
rng = np.random.default_rng()
mats = [np.real(random_hermitian(n_qubits, seed=rng)) for _ in range(30)]
circuits = [IQP(mat) for mat in mats]
for circuit in circuits:
circuit.measure_all()
pm = generate_preset_pass_manager(backend=backend, optimization_level=1)
isa_circuits = pm.run(circuits)
max_circuits = 10
all_partitioned_circuits = []
for i in range(0, len(isa_circuits), max_circuits):
all_partitioned_circuits.append(isa_circuits[i : i + max_circuits])
jobs = []
start_idx = 0
with Batch(backend=backend):
sampler = Sampler()
for partitioned_circuits in all_partitioned_circuits:
job = sampler.run(partitioned_circuits)
jobs.append(job)Para obter mais detalhes, consulte a página " Executar trabalhos em um lote ".
Parâmetros
- backend (BackendV2) – Instância da
Backendclasse. - max_time (int | str | None) – Tempo máximo que uma sessão de tempo de execução pode ficar aberta antes de ser fechada à força. Pode ser especificado como segundos (int) ou uma cadeia de caracteres como “2h 30m 40s”. Esse valor deve ser menor que o máximo imposto pelo sistema.
- create_new (bool | None) – Se for True, o ponto de extremidade da API de sessão POST será chamado para criar uma nova sessão. Evita a criação de uma nova sessão quando
from_id()é chamado.
Aumentos
ValueError - Se um valor de entrada for inválido.
Atributos
service
Serviço de retorno associado a essa sessão.
Retorna
qiskit_ibm_runtime.QiskitRuntimeService associado a essa sessão.
session_id
Retorna a ID da sessão.
Retorna
ID de Sessão. Nenhum se o backend for um simulador.
Métodos
backend
backend()
Retorna o backend para essa sessão.
Retorna
Backend para esta sessão. Nenhum se for desconhecido.
Tipo de retorno
str | Nenhum
cancel
close
close()
Feche a sessão para que não sejam mais aceitos novos trabalhos.
Feche a sessão para que novos trabalhos não sejam mais aceitos, mas os trabalhos existentes na fila ou em execução serão executados até a conclusão. A sessão será encerrada quando não houver mais trabalhos pendentes.
Tipo de retorno
Nenhum
details
details()
Retornar detalhes da sessão.
Retorna
Um dicionário com os detalhes das sessões.
idiD da sessão: id da sessão.backend_namebackend usado para a sessão.interactive_timeout: O tempo ocioso máximo (em segundos) entre trabalhos que pode ocorrer antes que a sessão seja desativada.max_time: Tempo máximo permitido (em segundos) para a sessão, sujeito aos limites do plano.active_timeout: O tempo máximo (em segundos) que uma sessão pode permanecer ativa.state: Estado da sessão - aberta, ativa, inativa ou fechada.accepting_jobs: Se a sessão está ou não aceitando trabalhos.last_job_started: Registro de data e hora do início do último trabalho na sessão.last_job_completed: Registro de data e hora da conclusão do último trabalho na sessão.started_at: Registro de data e hora de quando a sessão foi iniciada.closed_at: Registro de data e hora de quando a sessão foi encerrada.activated_at: Registro de data e hora de quando o estado da sessão foi alterado para ativo.mode: Modo de execução da sessão.usage_time: O tempo de uso, em segundos, dessa sessão ou lote. O uso é definido como o tempo que um sistema quântico fica comprometido para concluir um trabalho.
Tipo de retorno
dict [str, Qualquer] | Nenhum
from_id
classmethod from_id(session_id, service, use_fractional_gates=False, calibration_id=None)
Crie um objeto Session com um determinado session_id.
Por exemplo:
from qiskit_ibm_runtime import QiskitRuntimeService, Session
service = QiskitRuntimeService()
job = service.job(<job_id>)
existing_session_id = job.session_id
new_session = Session.from_id(existing_session_id, service)Parâmetros
- session_id (str) – O ID da sessão a ser criada. Esse deve ser um ID de sessão já existente.
- service (QiskitRuntimeService) – Instância da classe
QiskitRuntimeService. Se estiver usando várias instâncias, observe que a instância na nuvem ativa noserviceserá substituída pela que tiver acesso a essesession_id. Consulte aQiskitRuntimeServicedocumentação sobre o uso de várias instâncias e oactive_instance()método para verificar qual é a instância ativa. - use_fractional_gates (bool) – Se deve ou não permitir portas fracionárias para o backend utilizado para criar a sessão.
- calibration_id (str | None) – O ID de calibração do backend utilizado para criar a sessão.
Aumentos
- IBMInputValueError – Se o session_id fornecido não existir.
- IBMRuntimeError – Se o backend da sessão for desconhecido.
Retorna
Uma nova sessão com o session_id
Tipo de retorno
status
status()
Retorna o status da sessão atual.
Retorna
Status da sessão como uma cadeia de caracteres.
Pending: A sessão foi criada, mas não está ativa. Ele se tornará ativo quando o próximo trabalho dessa sessão for retirado da fila.In progress, accepting new jobssessão: está ativa e aceitando novos trabalhos.In progress, not accepting new jobssessão: está ativa e não está aceitando novos trabalhos.Closedtempo máximo expirou ou a sessão foi encerrada explicitamente.None: os detalhes do status não estão disponíveis.
Tipo de retorno
str | Nenhum
usage
usage()
Retorna o uso da sessão em segundos.
O uso da sessão é o tempo desde o início do primeiro trabalho até o momento em que a sessão fica inativa, é fechada ou quando o último trabalho é concluído, o que ocorrer por último.
O uso do lote é a quantidade de tempo que todos os trabalhos passam na QPU.
Tipo de retorno
float | Nenhum