O que são Q# e o Quantum Development Kit?
O Quantum Development Kit (QDK) é o SDK necessário para a interface com o serviço do Azure Quantum. Ele é integrado ao portal do Azure Quantum, no qual você pode desenvolver programas usando os Jupyter Notebooks hospedados gratuitamente. Você também pode instalar o QDK localmente em seu computador para usar seu próprio ambiente de desenvolvimento local e trabalhar online e offline com o serviço do Azure Quantum. Com o Quantum Development Kit, você pode criar programas executados em hardware quântico ou formular problemas executados em solucionadores de otimização inspirados em quantum no Azure Quantum.
O QDK inclui a linguagem Q#de programação quântica , uma linguagem de programação de código aberto de alto nível que permite que você concentre seu trabalho no nível do algoritmo e do aplicativo para criar programas quânticos.
O QDK oferece suporte para Q#, mas também para Qiskit e Cirq para computação quântica, portanto, se você já estiver trabalhando em outras linguagens de desenvolvimento, também poderá executar seus circuitos no Azure Quantum.
O QDK contém componentes que podem ser usados autônomos, independentemente do serviço do Azure Quantum:
- Q# bibliotecas de linguagem e quantum, todas de software livre.
- Simuladores quânticos que simulam computadores quânticos atuais e futuros, para que você possa executar e depurar seus algoritmos quânticos escritos em Q#.
- Extensões para Visual Studio 2022 e Visual Studio Code e integração com Jupyter Notebooks.
Introdução ao Q# e ao Quantum Development Kit
Para entrar diretamente, você pode explorar Q# no portal do Azure Quantum sem a necessidade de instalação. Para obter mais informações, confira Introdução ao Q# e um notebook do Azure Quantum.
Para outras opções de ambiente de desenvolvimento, consulte Configurar o Quantum Development Kit.
A linguagem de programação quantum Q#
Q# é uma linguagem de programação de software livre, de alto nível, para desenvolver e executar algoritmos quânticos. Ele faz parte do Quantum Development Kit (QDK) e foi projetado para ser independente de hardware, dimensionar para toda a gama de aplicativos quânticos e otimizar a execução. Para obter mais informações sobre o projeto de desenvolvimento de linguagem Q#, confira o Q# e repositório de design de bibliotecas principais no GitHub.
Como linguagem de programação, Q# extrai elementos conhecidos de Python, C# e F# e dá suporte a um modelo de procedimento básico para escrever programas com loops, instruções if/then e tipos de dados comuns. Ele também apresenta novas estruturas de dados e operações específicas quantum, como repetir até o sucesso e estimativa de fase adaptável, que permitem a integração de cálculos quantum e clássicos. Por exemplo, o controle de fluxo de um programa clássico pode ser baseado no resultado de uma medida quantum.
Integração com computação quântica e clássica
O Q# é uma linguagem autônoma que oferece um alto nível de abstração. Não há noção de um estado quântico ou um circuito; em vez disso, Q# implementa programas baseados em instruções e expressões, assim como linguagens de programação clássicas. Funcionalidades quânticas distintas (como suporte para functors e constructos de fluxo de controle) facilitam a expressão, por exemplo, da estimativa de fase e algoritmos de química quantum.
A linguagem Q# dá suporte à integração da computação clássica avançada e da computação quântica. Isso permite a expressão limpa de algoritmos adaptáveis, como a operação de estimativa de fase de passeio aleatório, que são difíceis de expressar diretamente no modelo de circuito de uma sequência fixa de portões quânticos.
O Q# dá suporte ao controle de fluxo clássico geral durante a execução de um algoritmo. Em particular, o controle de fluxo clássico é baseado nos resultados de medida quântica, o que torna muito mais fácil escrever coisas que dependem de medidas intermediárias. Por exemplo, o loop necessário para algoritmos probabilísticos, como a pesquisa de Grover, pode ser expresso facilmente em Q#, em vez de precisar voltar ao driver clássico para testar se o resultado satisfaz o oráculo e executá-lo novamente caso não satisfaça.
Qubits como referências opacas
Em Q#, qubits são um recurso solicitado do runtime quando necessário e devolvido quando não está mais em uso. Isso é semelhante à maneira como as linguagens clássicas lidam com a memória de heap.
Em Q#, os qubits são modelados como tipos de dados opacos que representam uma referência a um sistema quântico específico de dois estados, seja físico ou lógico (corrigido por erro), em que operações quânticas podem ser executadas. Essa é uma visão operacional dos qubits – ou seja, eles são definidos pelo que você pode fazer com eles.
O mapeamento de uma variável qubit em um programa para um qubit lógico ou físico real é decidido pelo runtime e esse mapeamento pode ser adiado até que a topologia e outros detalhes do target dispositivo sejam conhecidos. O runtime é responsável por determinar um mapeamento que permite que o algoritmo seja executado, incluindo qualquer transferência de estado de qubit e o remapeamento necessário durante a execução.
A representação usada em Q# tem a implicação interessante de que toda a computação quântica real é feita por efeito colateral. Não há como interagir diretamente com o estado quantum do computador; ele não tem nenhuma representação de software. Em vez disso, você executa operações em entidades qubit que têm o efeito colateral de modificar o estado quântico. Efetivamente, o estado quantum do computador é uma variável global opaca inacessível, exceto por meio de um pequeno conjunto de primitivos de acessador (medidas) — e até mesmo esses acessadores têm efeitos colaterais no estado do Quantum e, portanto, são realmente "modificadores com resultados" em vez de acessadores verdadeiros.
Respeitar as leis da física
Programas quânticos precisam respeitar as leis da física. Por exemplo, copiar o estado de um qubit ou acessar diretamente o estado dele não é possível em Q#.
Portanto, Q# não tem a capacidade de introspecção sobre o estado de um qubit ou outras propriedades da mecânica quântica diretamente, o que garante que um programa em Q# possa ser executado fisicamente em um computador quântico. Em vez disso, um programa Q# tem a capacidade de chamar operações e funções, como DumpOperation operation, para extrair informações clássicas de um qubit que permitem a validação e o exame de estado para facilitar a depuração com um simulador. Para obter mais informações, confira testar e depurar.
Independente de hardware
O Q# é independente de hardware, o que significa que fornece os meios para expressar e aproveitar conceitos de computação quântica avançados, independentemente de como o hardware evoluir no futuro. Para ser usado para uma ampla variedade de aplicações, o Q# permite criar componentes reutilizáveis e camadas de abstrações. Para alcançar o desempenho com o tamanho de hardware quântico crescente, a linguagem de programação quântica Q# garante a escalabilidade de aplicativos e esforço de desenvolvimento. Embora toda a complexidade dessas computações exija mais desenvolvimento de hardware, Q# os programas podem ser targetexecutados em vários back-ends de hardware quântico no Azure Quantum.
Execução eficiente
A linguagem Q# se concentra em expressar informações para otimizar a execução de componentes quantum, independentemente do contexto no qual eles são invocados. Q# permite que o desenvolvedor comunique seu conhecimento sobre uma computação para que o compilador possa tomar uma decisão informada sobre como movê-los para instruções, aproveitando as informações sobre o aplicativo de ponta a ponta que não está disponível para o desenvolvedor.
Para saber mais sobre os recursos do QDK e as partes gerais que se encaixam em um programa Q#, consulte o guia do usuário da linguagem de programação quântica Q#.
O fluxo de trabalho de desenvolvimento do quantum com o QDK
Quando você compila e executa um programa quântico, o QDK cria uma instância do simulador quântico e passa o Q# código para ele. O simulador usa o código Q# para criar qubits (simulações de partículas quânticas) e aplicar transformações para modificar o estado deles. Os resultados das operações quânticas no simulador são retornados para o programa. O isolamento do código Q# no simulador garante que os algoritmos sigam as leis da física quântica e possam ser executados corretamente em computadores quânticos.
Tudo de que você precisa para escrever e executar programas Q#, incluindo o compilador Q#, as bibliotecas Q# e os simuladores quânticos, é pré-implantado nos Jupyter Notebooks hospedados no portal do Azure. O QDK também pode ser instalado e executado no computador local, de modo que você pode usar seu IDE e idioma preferidos localmente e enviar trabalhos para o hardware quantum ou simuladores baseados em nuvem no Azure Quantum ou trabalhar com simuladores locais. Para obter mais informações, confira configurar seu ambiente de desenvolvimento do quantum.
O diagrama a seguir mostra os estágios pelos quais um programa quântico passa da ideia para a implementação completa no Azure Quantum e as ferramentas oferecidas pelo QDK para cada estágio.
Observação
Você usa o mesmo código Q# para todas as etapas do fluxo de trabalho. Em curto prazo, talvez seja necessário ajustar algumas partes do código para considerar as limitações de hardware atuais. Mas, a longo prazo, você poderá alternar entre vários simuladores e provedores de hardware sem nenhuma modificação de código.
Escrever seu programa quântico
Um programa Q# pode ser compilado em um aplicativo autônomo, executado em um Jupyter Notebook, ou chamado por um programa de host escrito em Python ou em uma linguagem .NET.
Para começar a praticar e escrever programas em Q# sem instalar software adicional, use os Jupyter Notebooks hospedados disponíveis em seu workspace do Azure Quantum no portal do Azure. A galeria de exemplos contém uma coleção de exemplos de notebook anotados – selecione o exemplo que deseja explorar e execute-o em simuladores baseados em nuvem ou em computadores quânticos reais.
Se prefere um ambiente de desenvolvimento local, você pode criar um programa Q# usando Jupyter Notebooks com o kernel IQ# ou as extensões do QDK para Visual Studio Code e Visual Studio 2022 e executá-lo no hardware quântico ou simuladores locais ou baseados em nuvem.
Seja qual for o ambiente de sua preferência, você pode seguir os tutoriais de Q# e começar a escrever programas quânticos para explorar conceitos quânticos como sobreposição, entrelaçamento, algoritmo quântico de Grover e outros fenômenos quânticos.
Se você não tem uma conta do Azure e quer experimentar o Q# sem instalar o QDK localmente, pode usar o Binder para executar os exemplos de Q# em Jupyter Notebooks online.
Explorar bibliotecas específicas do domínio
As Q# bibliotecas ajudarão você a manter seu código de alto nível, permitindo que você execute operações de quantum complexas sem precisar criar sequências de operação de nível baixo. Novos projetos de Q# incluem automaticamente a Q# biblioteca padrão, que fornece um conjunto de funções e operações essenciais e muito úteis que podem ser usadas ao escrever programas quânticos em Q#.
Além da biblioteca padrão, o QDK inclui uma biblioteca de química quântica para simular dinâmica quântica e problemas de estrutura eletrônica em computadores quânticos, uma biblioteca de aprendizado de máquina quântica que fornece uma implementação do método sequencial classificadores que aproveitam a computação quântica para executar experimentos híbridos de aprendizado de máquina quântico/clássico e uma biblioteca numérica quântica que oferece suporte para uma ampla variedade de funcionalidades numéricas.
Executar programas em simuladores
Após você escrever o programa, o QDK oferece um conjunto de simuladores quânticos – programas clássicos que simulam o comportamento de um sistema quantum – para que você possa executar uma pequena instância do programa e ver o que ela faz sem ter acesso a um hardware. Você pode executar programas quânticos em um simulador quântico de estado completo, um simulador Toffoli de escopo limitado, um simulador esparso para sistemas com grandes números de qubits e até mesmo usar o simulador de ruído para simular o comportamento de programas Q# sob a influência de ambientes ruidosos.
Confira a lista completa de simuladores quânticos.
Estimar recursos
Antes de iniciar a execução em hardware quântico, você precisará descobrir se o programa pode ser executado em um hardware existente e quantos recursos ele consumirá. Você pode usar o simulador de rastreamento para estimar quantos qubits e portões quânticos você precisa e depurar o código clássico que faz parte do seu programa quântico.
Você também pode enviar seu programa quântico para o Avaliador target de Recursos do Azure Quantum em portal do Azure. O Avaliador de Recursos do Azure Quantum calcula a estimativa de recursos físicos pós-layout, levando em conta suposições sobre parâmetros qubit, códigos de correção de erros quânticos e um orçamento de erro. Ele é gratuito e requer uma conta do Azure.
Enviar trabalhos para o serviço Azure Quantum
O Azure Quantum é um serviço de computação quântica em nuvem do Azure, com um conjunto diversificado de soluções e tecnologias quânticas. O Azure Quantum garante um caminho aberto, flexível e pronto para o futuro rumo à computação quântica que permite executar seu programa em hardware quântico. Você pode executar programas Qiskit, Cirq e Q# em vários sistemas quânticos. Confira Provedores de computação quântica para a lista atual de provedores de hardware com suporte.
Dica
Os usuários iniciantes recebem automaticamente US$ 500 (USD)de créditos do Azure Quantum para uso com cada provedor de hardware quântico participante. Se você tiver consumido todos os créditos e precisar de mais, poderá se inscrever no programa de créditos do Azure Quantum.
Depois de criar um workspace do Azure Quantum, você pode enviar programas Q# (também conhecidos como trabalhos) para o Azure Quantum usando seu ambiente de desenvolvimento preferencial, tanto no local quanto online. Para obter mais informações, confira como enviar trabalhos Q#. Você também pode executar e enviar circuitos quânticos escritos em Qiskit ou Cirq.
Este diagrama mostra o fluxo de trabalho básico após o envio do trabalho:
O Azure Quantum oferece alguns dos mais atraentes e diversificados recursos quânticos disponíveis atualmente entre os líderes do setor. Com o Azure Quantum e o QDK. você pode escrever programas de computação quântica e otimização inspirada em quantum e enviá-los para o Azure Quantum para execução em hardware quântico e em solucionadores de otimização.
Próximas etapas
Se quiser saber mais, o Quantum Katas oferece uma boa introdução sobre conceitos de computação quântica, como operações quânticas comuns e como manipular qubits.