Tratamento em lotes quânticos de tarefas - Amazon Braket

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 de tarefas do Quantum, que tem informações mais específicas GitHub sobre o agrupamento em lotes.

Sobre o agrupamento e os 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 de circuitos quânticos.

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)