Introdução aos programas Q# e ao Visual Studio Code
Neste artigo, encontrará os passos para utilizar o Código VC para criar e submeter tarefas de computação quântica Q#, Jupyter Notebook ou Python para o Azure Quantum com o VS Code.
Submeter tarefas Q# para o Azure Quantum
Saiba como utilizar o VS Code para executar, depurar e submeter um programa Q# para o Azure Quantum.
Pré-requisitos
Para obter detalhes sobre a instalação, veja Installing the Modern QDK on VS Code (Instalar o QDK Moderno no VS Code).
- Uma área de trabalho do Azure Quantum na sua subscrição do Azure. Para criar uma área de trabalho, veja Create uma área de trabalho do Azure Quantum.
- A versão mais recente do Visual Studio Code ou abra o VS Code na Web.
- A versão mais recente da extensão do Azure Quantum Development Kit .
Carregar um programa de exemplo Q#
No VS Code, selecione Ficheiro > Novo Ficheiro de Texto e guarde o ficheiro como RandomNum.qs.
Abra RandomNum.qs e escreva
sample
e, em seguida, selecione Random Bit sample (Exemplo de Bit Aleatório) na lista de opções e guarde o ficheiro.
Nota
Também pode abrir o seu próprio ficheiro Q#. Se executar um programa Q# mais antigo e encontrar erros, veja Testing and debugging (Testar e depurar) ou Migrating your programs to the Modern QDK (Migrar os programas para o QDK Moderno).
Executar um programa Q#
Para testar a execução local do programa no simulador incorporado, clique em Executar a partir da lista de comandos abaixo
@EntryPoint()
ou prima Ctrl+F5. A saída será apresentada na consola de depuração.Para depurar o programa antes de o submeter para o Azure Quantum, clique em Depurar na lista de comandos abaixo
@EntryPoint()
ou prima F5. Utilize os controlos de depuração na parte superior para avançar, entrar e sair do código. Para obter mais informações sobre a depuração de programas Q#, veja Testing and debugging (Testar e depurar).
Visualizar o histograma de frequência
O histograma de frequência representa a distribuição dos resultados obtidos a partir da execução de um programa quântico várias vezes ou "capturas". Cada barra no histograma corresponde a um resultado possível e a sua altura representa o número de vezes que esse resultado é observado. O histograma de frequência ajuda a visualizar a distribuição de probabilidade destes resultados.
Selecione Ver -> Paleta de Comandos e escreva "histograma", que deverá apresentar a opção Q#: Executar ficheiro e mostrar histograma . Também pode clicar em Histograma na lista de comandos abaixo
@EntryPoint()
. Selecione esta opção para abrir a janela do histograma Q#.Introduza várias capturas para executar o programa, por exemplo, 100 capturas e prima Enter. O histograma será apresentado na janela histograma Q#.
Clique no ícone de definições no canto superior esquerdo para apresentar as opções.
Clique numa barra para apresentar a percentagem desse resultado. Neste caso, existem dois resultados possíveis, 0 e 1, e a percentagem de cada resultado é próxima de 50%.
Dica
Pode ampliar o histograma com a roda do rato ou um gesto de trackpad. Quando ampliado, pode deslocar o gráfico ao premir "Alt" enquanto se desloca.
Visualizar o circuito quântico
Os diagramas do circuito quântico são uma representação visual das operações quânticas. Mostram o fluxo de qubits através do programa quântico, incluindo as portas e as medidas aplicadas aos mesmos. Para obter mais informações, veja Quantum circuit diagrams in Visual Studio Code (Diagramas do circuito quântico no Visual Studio Code).
Selecione Ver -> Paleta de Comandos e escreva "circuito", que deverá apresentar a opção Q#: Mostrar circuito . Também pode clicar em Circuito a partir da lista de comandos abaixo
@EntryPoint()
.O circuito é apresentado na janela do circuito Q#. O diagrama de circuito mostra um registo de qubit que é inicializado para o estado |0⟩. Em seguida, uma porta Hadamard, H, é aplicada ao qubit, seguida de uma operação de medição, que é representada por um símbolo de medidor. Para obter mais informações, veja Quantum circuits conventions (Convenções de circuitos quânticos).
Ligar ao Azure Quantum e submeter a tarefa
Pode ligar e submeter tarefas diretamente a partir do VS Code. Neste exemplo, irá submeter uma tarefa ao simulador Rigetti.
Selecione Ver -> Paleta de Comandos e escreva Q#: Ligar a uma área de trabalho do Azure Quantum. Prima Enter.
Selecione Conta do Azure e siga as instruções para ligar ao seu diretório, subscrição e área de trabalho preferidos.
Nota
Se tiver uma cadeia de ligação, pode selecionar Cadeia de ligação e colar o cadeia de ligação correspondente à área de trabalho do Azure Quantum. Para obter mais informações, veja Connect to a Quantum workspace using a cadeia de ligação (Ligar a uma área de trabalho do Quantum com um cadeia de ligação).
Assim que estiver ligado, no painel Explorador , expanda Áreas de Trabalho Quânticas.
Expanda a área de trabalho e expanda o fornecedor do Rigetti .
Nota
Se existir um problema ao ligar ao Azure Quantum, é apresentado um ícone de aviso junto ao nome da área de trabalho. Paire o cursor sobre o nome da área de trabalho para apresentar informações de erro.
Selecione rigetti.sim.qvm como o seu target.
Selecione o ícone de reprodução à direita do target nome para começar a submeter o programa Q# atual. Se receber um pop-up, selecione Alterar o perfil QIR target e continue.
Adicione um nome para identificar a tarefa.
Adicione o número de capturas ou o número de vezes que o programa é executado.
Prima Enter para submeter a tarefa. O estado da tarefa será apresentado na parte inferior do ecrã.
Expanda Tarefas e paire o cursor sobre a tarefa, que apresenta as horas e o estado da sua tarefa.
Para ver os resultados, selecione o ícone de nuvem junto ao nome da tarefa para transferir os resultados do armazenamento da área de trabalho e apresentá-los no VS Code.
Submeter tarefas do Jupyter Notebooks para o Azure Quantum
Saiba como utilizar o VS Code para executar, depurar e submeter um Jupyter Notebook Q# para o Azure Quantum. Os passos neste artigo também se aplicam aos Jupyter Notebooks no seu servidor jupyter local ou blocos de notas no portal do Azure Quantum.
Pré-requisitos
Para obter detalhes sobre a instalação, veja Installing the Modern QDK on VS Code (Instalar o QDK Moderno no VS Code).
Uma área de trabalho do Azure Quantum na sua subscrição do Azure. Para criar uma área de trabalho, veja Create uma área de trabalho do Azure Quantum.
Um ambiente Python com Python e Pip instalados.
VS Code com as extensões do Azure Quantum Development Kit, Python e Jupyter instaladas.
O Azure Quantum
qsharp
,qsharp-widgets
os pacotes eazure-quantum
oipykernel
pacote.python -m pip install --upgrade qsharp qsharp-widgets azure-quantum ipykernel
Executar e testar o programa no simulador local
No VS Code, selecione Ver > Paleta de comandos e selecione Create: Novo Jupyter Notebook.
No canto superior direito, o VS Code irá detetar e apresentar a versão do Python e o ambiente virtual do Python que foi selecionado para o bloco de notas. Se tiver vários ambientes Python, poderá ter de selecionar um kernel com o seletor de kernel no canto superior direito. Se não tiver sido detetado nenhum ambiente, consulte Jupyter Notebooks no VS Code para obter informações de configuração.
Na primeira célula do bloco de notas, execute o seguinte código Python para importar os módulos necessários:
import qsharp import azure.quantum
- O
qsharp
módulo ativa o%%qsharp
comando magic que lhe permite introduzir código Q# diretamente numa célula. - O
azure-quantum
módulo fornece conectividade à área de trabalho do Azure Quantum.
Nota
Se o kernel
ipykernel
do Jupyter Python não for detetado, o VS Code irá pedir-lhe para o instalar.- O
Adicione outra célula e introduza este código Q# que devolve um número especificado pelo utilizador de bits aleatórios:
Nota
Repare que assim que escrever o comando
%%qsharp
mágico, a célula do bloco de notas muda de Python para Q#.%%qsharp operation Random() : Result { use q = Qubit(); H(q); let result = M(q); Reset(q); return result } operation RandomNBits(N: Int): Result[] { mutable results = []; for i in 0 .. N - 1 { let r = Random(); set results += [r]; } return results }
Para testar a operação, pode utilizar o
eval
método, que pode chamar qualquer operação Q# anteriormente definida no bloco de notas:qsharp.eval("RandomNBits(4)")
[Zero, One, One, Zero]
Para executar o programa no simulador local, utilize o
run
método . Especifique oshots
ou número de vezes para executar o programa e o simulador devolve os resultados como uma lista python.qsharp.run("RandomNBits(4)", shots=10)
[[One, One, One, One], [Zero, Zero, One, Zero], [One, Zero, Zero, One], [Zero, One, Zero, Zero], [One, Zero, One, One], [One, Zero, One, Zero], [One, One, One, Zero], [One, One, One, One], [Zero, Zero, Zero, One], [One, Zero, Zero, One]]
Visualizar o circuito quântico
Pode visualizar circuitos quânticos com o qsharp-widgets
pacote. Este pacote fornece um widget que compõe um diagrama de circuito quântico como uma imagem SVG. Para obter mais informações, veja Quantum circuit diagrams with Jupyter Notebooks (Diagramas do circuito quântico com o Jupyter Notebooks).
Adicione o seguinte código a uma nova célula para visualizar o circuito:
from qsharp_widgets import Circuit
Circuit(qsharp.circuit("RandomNBits(4)"))
Para obter mais informações, veja Quantum circuits conventions (Convenções de circuitos quânticos).
Compilar a tarefa com o perfil Base
Quando executa programas no simulador quântico local, pode submeter qualquer tipo de programa Q#. No entanto, o hardware targets do Azure Quantum ainda não suporta todas as capacidades necessárias para executar todos os programas Q#. Para compilar e submeter programas Q# para o Azure Quantum, tem de definir o seu target perfil para indicar ao Q# quais as capacidades suportadas pelo hardware target . Atualmente, este é o perfil Base. Para obter mais informações, veja Tipos de perfil no Azure Quantum.
Para reinstalar o interpretador Q# e compilar o programa com o perfil base:
Utilize o
init
método para definir o perfil:qsharp.init(target_profile=qsharp.TargetProfile.Base)
Uma vez que reinitializou o interpretador, tem de executar o código novamente com o novo perfil:
%%qsharp operation Random() : Result { use q = Qubit(); H(q); let result = M(q); Reset(q); return result } operation RandomNBits(N: Int): Result[] { mutable results = []; for i in 0 .. N - 1 { let r = Random(); set results += [r]; } return results }
Em seguida, utilize o
compile
método para especificar a operação ou função que é o ponto de entrada do programa. Isto compila o seu código no formato QIR, que pode ser submetido a qualquer hardware quântico:MyProgram = qsharp.compile("RandomNBits(4)")
Ligar ao Azure Quantum e submeter a tarefa
Agora que compilou o programa no formato correto, crie um azure.quantum.Workspace
objeto para ligar ao Azure Quantum. Irá utilizar o ID de Recurso da área de trabalho do Azure Quantum para se ligar. O ID do Recurso e a localização podem ser copiados da página de descrição geral da área de trabalho no portal do Azure.
Numa nova célula, preencha o ID do recurso e a localização da área de trabalho do Azure Quantum:
MyWorkspace = azure.quantum.Workspace( resource_id = "MyResourceID", location = "MyLocation" )
Utilize o
get_targets
método para ver o hardware targets disponível na área de trabalho:MyTargets = MyWorkspace.get_targets() print("This workspace's targets:") MyTargets
Selecione o
rigetti.sim.qvm
target:MyTarget = MyWorkspace.get_targets("rigetti.sim.qvm")
Por fim, utilize o método para submeter o
submit
programa com os respetivos parâmetros e apresentar os resultados:job = MyTarget.submit(MyProgram, "MyQuantumJob", shots=100) job.get_results()
{'Histogram': ['[0, 0, 0, 0]', 0.3, '[1, 0, 0, 0]', 0.1, '[1, 1, 1, 1]', 0.3, '[0, 1, 1, 1]', 0.3]}
Todas as propriedades da tarefa estão acessíveis no
job.details
, por exemplo:print(job.details) print("\nJob name:", job.details.name) print("Job status:", job.details.status) print("Job ID:", job.details.id)
{'additional_properties': {'isCancelling': False}, 'id': '0150202e-9638-11ee-be2f-b16153380354', 'name': 'MyQuantumJob', 'provider_id': 'rigetti'...} Job name: MyQuantumJob Job status: Succeeded Job ID: 0150202e-9638-11ee-be2f-b16153380354
Submeter o Python com tarefas Q# para o Azure Quantum
Saiba como utilizar o VS Code para escrever um programa Python que chama operações Q#, ligar ao Azure com os comandos python ou a CLI do Azure e submeter a sua tarefa.
Pré-requisitos
Para obter detalhes sobre a instalação, veja Instalar o QDK Moderno no VS Code.
- Uma área de trabalho do Azure Quantum na sua subscrição do Azure. Para criar uma área de trabalho, veja Create uma área de trabalho do Azure Quantum.
- Um ambiente Python com Python e Pip instalados.
- VS Code com o Azure Quantum Development Kit e a extensão Python instaladas.
- O Azure Quantum
qsharp
eazure-quantum
os pacotes. - CLI do Azure com a extensão mais recente do Azure Quantum instalada.
Create e importe as suas operações Q#
Com o qsharp
pacote, pode armazenar as suas funções e operações em ficheiros Q# e criar projetos Q# que lhe permitem ligar para qualquer um deles a partir do seu código Python. Isto é especialmente útil quando precisa de iniciar um programa que utiliza parâmetros de entrada.
Siga os passos para criar um projeto Q#.
Abra um novo ficheiro de texto, adicione o seguinte código Q# que devolve um número especificado pelo utilizador de bits aleatórios e guarde o ficheiro no seu projeto como
source.qs
.Nota
Tenha em atenção que este código Q# não tem uma função
@EntryPoint
como um programa Q# (veja Submeter tarefas Q# para o Azure Quantum), mas requer um espaço de nomes, ao contrário de um Jupyter Notebook (veja Submeter Jupyter Notebook tarefas para o Azure Quantum).namespace Sample { operation Random() : Result { use q = Qubit(); H(q); let result = M(q); Reset(q); return result } operation RandomNBits(N: Int): Result[] { mutable results = []; for i in 0 .. N - 1 { let r = Random(); set results += [r]; } return results } }
Na mesma pasta, abra outro ficheiro e guarde-o como
randomNum.py
.Adicione o seguinte código para importar os
qsharp
módulos eazure.quantum
.import qsharp import azure.quantum
Em seguida, adicione código para definir a pasta raiz do projeto Q# e teste a target operação no simulador local. A operação é chamada pelo <espaço de nomes>.<operation_name( )> e, neste caso, está a transmitir o número de bits aleatórios a devolver.
qsharp.init(project_root = '/MyProjectRootFolder') print(qsharp.eval("Sample.RandomNBits(4)"))
[Zero, One, One, Zero]
Também pode testar a operação com o
run
método, que transmite um parâmetro adicionalshots
e devolve os resultados numa lista python. EmrandomNum.py
, substitua a instrução de impressão anterior pelo seguinte:result = qsharp.run("Sample.RandomNBits(4)", shots=10) for x in result: print(x)
[[One, One, One, One], [Zero, Zero, One, Zero], [One, Zero, Zero, One], [Zero, One, Zero, Zero], [One, Zero, One, One], [One, Zero, One, Zero], [One, One, One, Zero], [One, One, One, One], [Zero, Zero, Zero, One], [One, Zero, Zero, One]]
Compilar a tarefa com o perfil Base
Quando executa programas no simulador quântico local, pode submeter qualquer tipo de programa Q#. No entanto, o hardware targets do Azure Quantum ainda não suporta todas as capacidades necessárias para executar todos os programas Q#. Para compilar e submeter programas Q# para o Azure Quantum, tem de definir o seu target perfil para indicar a Q# as capacidades suportadas pelo hardware target . Atualmente, este é o perfil Base. Para obter mais informações, veja Tipos de perfil no Azure Quantum.
Nota
Apenas para programas Q# no VS Code, o VS Code define automaticamente o perfil Base.
Utilize o
init
método para definir o perfil:qsharp.init(target_profile=qsharp.TargetProfile.Base)
Em seguida, utilize o
compile
método para especificar a operação ou função que é o ponto de entrada do programa. Em seguida, o programa compilado pode ser submetido para qualquer hardware quântico:MyProgram = qsharp.compile("Sample.RandomNBits(4)")
Ligar ao Azure Quantum e submeter a tarefa
Pode ligar-se ao Azure Quantum e submeter a sua tarefa com um objeto criado por Workspace
Python ou ligar e submeter a sua tarefa com a CLI do Azure. A utilização da CLI do Azure requer que guarde o programa compilado como um ficheiro de texto e submeta esse ficheiro com um comando da CLI.
Agora que compilou o programa no formato correto, crie um azure.quantum.Workspace
objeto para ligar ao Azure Quantum. Irá utilizar o ID de Recurso da área de trabalho do Azure Quantum para se ligar. O ID do Recurso e a localização podem ser copiados da página de descrição geral da área de trabalho no portal do Azure.
Adicione o seguinte código ao
randomNum.py
, preenchendo o ID do recurso e a localização da área de trabalho do Azure Quantum:workspace = azure.quantum.Workspace( resource_id = "MyResourceID", location = "MyLocation" )
Utilize o
get_targets
método para apresentar o hardware targets disponível na área de trabalho:MyTargets = workspace.get_targets() print("This workspace's targets:") for x in MyTargets: print(x)
Selecione o
rigetti.sim.qvm
target:MyTarget = workspace.get_targets("rigetti.sim.qvm")
Por fim, utilize o método para submeter o
submit
programa com os respetivos parâmetros. Os resultados da tarefa são devolvidos como um dicionário Python.job = MyTarget.submit(MyProgram, "MyPythonJob", shots=100) results = job.get_results() print("\nResults: ", results)
Para extrair apenas os valores e apresentá-los:
resultList = results.get("Histogram") for x in resultList: print(x)
[0, 0, 0, 0] 0.3 [1, 0, 0, 0] 0.1 [1, 1, 1, 1] 0.3 [0, 1, 1, 1] 0.3
Todas as propriedades da tarefa estão acessíveis no
job.details
, por exemplo:print(job.details) print("\nJob name:", job.details.name) print("Job status:", job.details.status) print("Job ID:", job.details.id)
{'additional_properties': {'isCancelling': False}, 'id': '0fc396d2-97dd-11ee-9958-6ca1004ff31f', 'name': 'MyPythonJob', 'provider_id': 'rigetti'...} Job name: MyPythonJob Job status: Succeeded Job ID: fc396d2-97dd-11ee-9958-6ca1004ff31f
Passos seguintes
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários