Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Saiba como enviar um circuito quântico Cirq usando o azure-quantumPython pacote. Você pode enviar circuitos do Cirq para o Azure Quantum usando o QDK (Azure Quantum Development Kit) e o Jupyter Notebook no Visual Studio Code (VS Code) do computador local.
Para mais informações, consulte Circuitos quânticos.
Pré-requisitos
Para obter detalhes da instalação, consulte Configurar a extensão do QDK.
Um espaço de trabalho do Azure Quantum em sua assinatura do Azure. Para criar um espaço de trabalho, consulte Criar um espaço de trabalho no Azure Quantum.
Um ambiente Python com Python e Pip instalado.
O VS Code com as extensões Kit de Desenvolvimento do Azure Quantum, Python e Jupyter instaladas.
O pacote Azure Quantum
azure-quantumcom ocirqextra, e os pacotesqdkeipykernel.python -m pip install --upgrade "azure-quantum[cirq]" qdk ipykernelObservação
Se o kernel Python do Jupyter
ipykernelnão for detectado, o VS Code solicitará que você o instale.
Criar um novo Jupyter Notebook
- No VS Code, abra o menu Exibir e escolha Paleta de Comandos.
- Insira e selecione Criar: Novo Jupyter Notebook.
- O VS Code detecta e exibe a versão do Python e do ambiente virtual Python que foram selecionados para o notebook. Se você tiver vários Python ambientes, talvez seja necessário selecionar um kernel usando o seletor de kernel no canto superior direito. Se nenhum ambiente foi detectado, consulte Jupyter Notebooks no VS Code para obter informações de configuração.
Carregar as importações necessárias
Na primeira célula do seu notebook, execute o seguinte código para carregar as importações necessárias:
import azure.quantum
from azure.quantum.cirq import AzureQuantumService
Conectar ao serviço do Azure Quantum
Para se conectar ao serviço do Azure Quantum, seu programa precisará da ID do recurso e do local do workspace do Azure Quantum.
- Faça login em sua conta do Azure, https://portal.azure.com,
- Selecione seu workspace do Azure Quantum e navegue até Visão geral.
- Copie os parâmetros nos campos.
Adicione uma nova célula e use as informações da sua conta para criar os objetos Workspace e AzureQuantumService para se conectar ao workspace do Azure Quantum.
workspace = Workspace(
resource_id = "", # Add the resourceID of your workspace
location = "" # Add the location of your workspace (for example "westus")
)
service = AzureQuantumService(workspace)
Listar todos os targets
Use o método targets()para listar todos os targets em sua área de trabalho que podem executar seu circuito, incluindo o tempo atual de fila e a disponibilidade.
Observação
Todos os targets em seu espaço de trabalho podem não estar listados - apenas aqueles targets que podem aceitar um circuito Cirq ou OpenQASM serão listados aqui.
print(service.targets())
[<Target name="quantinuum.qpu.h2-1", avg. queue time=0 s, Degraded>,
<Target name="quantinuum.sim.h2-1sc", avg. queue time=1 s, Available>,
<Target name="quantinuum.sim.h2-1e", avg. queue time=40 s, Available>,
<Target name="ionq.simulator", avg. queue time=3 s, Available>,
<Target name="ionq.qpu.aria-1", avg. queue time=1136774 s, Available>]
Crie um circuito simples
Em seguida, crie um circuito Cirq simples para executar. Esse circuito usa a raiz quadrada da porta X, nativa do sistema de hardware do IonQ.
import cirq
q0, q1 = cirq.LineQubit.range(2)
circuit = cirq.Circuit(
cirq.X(q0)**0.5, # Square root of X
cirq.CX(q0, q1), # CNOT
cirq.measure(q0, q1, key='b') # Measure both qubits
)
print(circuit)
0: ───X^0.5───@───M────────
│ │
1: ───────────X───M────────
Selecione um target para executar seu programa
Executar no simulador do IonQ
Agora você pode executar o programa por meio do serviço do Azure Quantum e obter o resultado. A célula a seguir envia um trabalho (para o simulador do IonQ padrão) que executa o circuito com 100 disparos, aguarda até que o trabalho seja concluído e retorna os resultados.
result = service.run(program=circuit, repetitions=100, target="ionq.simulator")
Será retornado um objeto cirq.Result.
print(result)
b=1001100101100001000011011101000011010100010111100011001000100100010000001110010010101110110000011010, 1001100101100001000011011101000011010100010111100011001000100100010000001110010010101110110000011010
Estimar o custo do trabalho
Antes de executar um trabalho na QPU, você deve estimar quanto custará para executá-lo.
Para obter os detalhes de preços mais atuais, consulte Preços do IonQ ou localize seu workspace e exiba as opções de preço na guia "Provedor" do workspace por meio de: aka.ms/aq/myworkspaces.
Executar na QPU do IonQ
O trabalho anterior foi executado no simulador padrão, "ionq.simulator". No entanto, você também pode executá-lo no processador de hardware do IonQ – uma QPU (Unidade de Processador Quântico). Para executar na QPU do IonQ, forneça "ionq.qpu.aria-1" como o argumento target:
result = service.run(
program=circuit,
repetitions=100,
target="ionq.qpu.aria-1",
timeout_seconds=500 # Set timeout to accommodate queue time on QPU
)
Será retornado novamente um objeto cirq.Result.
print(result)
b=0101011011011111100001011101101011011110100010000000011110111000100100110110101100110001001111101111, 0101011011011111100001011101101011011110100010000000011110111000100100110110101100110001001111101111
Modelo assíncrono usando trabalhos
Para circuitos de execução longa, pode ser útil executá-los de forma assíncrona.
O método service.create_job retorna um objeto Job, que você pode usar para obter os resultados depois que o trabalho for executado com êxito.
job = service.create_job(
program=circuit,
repetitions=100,
target="ionq.simulator"
)
Para verificar o status do trabalho, use job.status():
print(job.status())
'completed'
Para aguardar a conclusão do trabalho e obter os resultados, use a chamada de bloqueio job.results():
result = job.results()
print(result)
00: 0.5
11: 0.5
Observe que isso não retorna um objeto cirq.Result. Em vez disso, ela retorna um objeto de resultado específico do simulador do IonQ e usa probabilidades de estado em vez de dados de disparo.
type(result)
cirq_ionq.results.SimulatorResult
Para converter isso em um objeto cirq.Result, use result.to_cirq_result():
print(result.to_cirq_result())
b=1110101111111110111000011101011111001100010000001011011101001111001111001101100111010000001100011100, 1110101111111110111000011101011111001100010000001011011101001111001111001101100111010000001100011100