As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Tratamento em lotes quânticos de tarefas
O agrupamento quântico de tarefas está disponível em todos os dispositivos Amazon Braket, exceto no simulador local. O agrupamento em lotes é especialmente útil para tarefas quânticas que você executa nos simuladores sob demanda (TN1 ou SV1) porque eles podem processar várias tarefas quânticas em paralelo. Para ajudá-lo a configurar várias tarefas quânticas, o Amazon Braket fornece exemplos de notebooks.
O processamento em lotes permite que você inicie tarefas quânticas em paralelo. Por exemplo, se você quiser fazer um cálculo que exija 10 tarefas quânticas e os circuitos dessas tarefas quânticas sejam independentes uns dos outros, é uma boa ideia usar lotes. Dessa forma, você não precisa esperar que uma tarefa quântica seja concluída antes que outra tarefa comece.
O exemplo a seguir mostra como executar um lote de tarefas quânticas:
circuits = [bell for _ in range(5)] batch = device.run_batch(circuits, s3_folder, shots=100) print(batch.results()[0].measurement_counts) # The result of the first quantum task in the batch
Para obter mais informações, consulte os exemplos do Amazon Braket sobre o agrupamento
Nesta seção:
Sobre lotes e custos de tarefas quânticas
Algumas ressalvas a serem lembradas em relação aos custos de agrupamento e cobrança de tarefas quânticas:
-
Por padrão, o agrupamento de tarefas quânticas tenta novamente o tempo limite ou falha nas tarefas quânticas 3 vezes.
-
Um lote de tarefas quânticas de longa execução, como 34 qubits for SV1, pode incorrer em grandes custos. Certifique-se de verificar cuidadosamente os valores da
run_batch
atribuição antes de iniciar um lote de tarefas quânticas. Não recomendamos o uso TN1 comrun_batch
. -
TN1 podem incorrer em custos por falhas nas tarefas da fase de ensaio (consulte a TN1 descrição para obter mais informações). Novas tentativas automáticas podem aumentar o custo e, portanto, recomendamos definir o número de 'max_retries' no lote como 0 ao usar TN1 (consulte Quantum Task Batching, linha 186)
.
Tratamento por lotes de tarefas quânticas e PennyLane
Aproveite o agrupamento em lotes ao usar PennyLane no Amazon Braket parallel = True
configurando quando você instancia um dispositivo Amazon Braket, conforme mostrado no exemplo a seguir.
device = qml.device("braket.aws.qubit",device_arn="arn:aws:braket:::device/quantum-simulator/amazon/sv1",wires=wires,s3_destination_folder=s3_folder,parallel=True,)
Para obter mais informações sobre o agrupamento em lotes com PennyLane, consulte Otimização paralelizada
Agrupamento de tarefas e circuitos parametrizados
Ao enviar um lote de tarefas quânticas que contém circuitos parametrizados, você pode fornecer um inputs
dicionário, que é usado para todas as tarefas quânticas do lote, ou um dicionário list
de entrada. Nesse caso, o -ésimo dicionário é emparelhado com a i
-ésima tarefa, conforme mostrado no exemplo a i
seguir.
from braket.circuits import Circuit, FreeParameter, Observable from braket.aws import AwsQuantumTaskBatch # create the free parameters alpha = FreeParameter('alpha') beta = FreeParameter('beta') # create two circuits circ_a = Circuit().rx(0, alpha).ry(1, alpha).cnot(0,2).xx(0, 2, beta) circ_a.variance(observable=Observable.Z(), target=0) circ_b = Circuit().rx(0, alpha).rz(1, alpha).cnot(0,2).zz(0, 2, beta) circ_b.expectation(observable=Observable.Z(), target=2) # use the same inputs for both circuits in one batch tasks = device.run_batch([circ_a, circ_b], inputs={'alpha': 0.1, 'beta':0.2}) # or provide each task its own set of inputs inputs_list = [{'alpha': 0.3,'beta':0.1}, {'alpha': 0.1,'beta':0.4}] tasks = device.run_batch([circ_a, circ_b], inputs=inputs_list)
Você também pode preparar uma lista de dicionários de entrada para um único circuito paramétrico e enviá-los como um lote de tarefas quânticas. Se houver N dicionários de entrada na lista, o lote contém N tarefas quânticas. A i
-ésima tarefa quântica corresponde ao circuito executado com o i
-ésimo dicionário de entrada.
from braket.circuits import Circuit, FreeParameter # create a parametric circuit circ = Circuit().rx(0, FreeParameter('alpha')) # provide a list of inputs to execute with the circuit inputs_list = [{'alpha': 0.1}, {'alpha': 0.2}, {'alpha': 0.3}] tasks = device.run_batch(circ, inputs=inputs_list)