Executando verificação de segurança...
3
Dpbm
4 min de leitura ·

Criei um servidor para rodar algoritmos quânticos

Olá pessoal, gostaria de compartilhar um projeto que estive trabalhando recentemente.

Sempre fui apaixonado por computação quântica, mas sempre tive um pequeno problema ao fazer experimentos no meu próprio computador.

Para quem nunca mexeu com isso, vou dar uma explicação breve. Computação quântica é uma área relativamente recente que utiliza da mecânica quântica (ou física quântica, como preferir) para realizar certas computações que, teoricamente, levariam milhares de anos para serem executadas em um supercomputador tradicional. Repare que disse certas computações, a computação quântica não é uma máquina milagrosa que faz tudo ficar mais rápido, mas um novo paradigma com um funcionamento muito diferente do que estamos acostumados na computação atual (clássica).

Tais máquinas, são extremamente caras e dificeis de se manter. Por isso, para nós entusiastas, temos algumas alternativas para brincar com algoritmos quânticos.

  1. Utilizar QPUs (quantum processor unit, CPU quântica, de uma forma mais simples) que estão disponíveis na nuvem, como os da IBM, Quantinumm, IONQ, etc.
  2. Utilizar simuladores na seu computador atual.
  3. Ser muito rico e ter um desses em casa💸.

Dentre as 3 alternativas, as duas primeiras são as mais promissoras, sendo a primeira a ideal para rodar os algoritmos, visto que eles serão submetidos para uma máquina real.

Contudo, temos um pequeno problema. Executar um algoritmo em uma QPU pode ser muito demorado. Uma vez que não temos clusters imensos com várias QPUs, como comumente vemos em servidores modernos, cada submissão é adicionada à uma fila de espera, sem nenhum tipo de distinção entre tamanhos de circuito (maneira como o algoritmo é descrito para a máquina) a serem executados. Ou seja, mesmo que vocês esteja fazendo um pequno experimento com 2 qubits (parte fundamental da computação quântica, são os bits que funcionam seguindo as leis da física quântica) e duas operações simples e rápidas, você terá de esperar todos os que estão na sua frente, mesmo que demore dias.

Com isso, a solução mais viável é usar um simulador localmente. Com certeza, essa é a melhor opção, mas temos algumas ressalvas.
Executar em CPU pode ser custoso. Se você não possui uma placa NVIDIA com Compute Capability de pelo menos 7.0, você não poderá executar esse circuito em sua placa de vídeo (mesmo tendo núcleos CUDA). Ou seja, além de tudo que você tem no seu computador rodando por padrão, se você executar um algoritmo quântico em um simulador usando qiskit aer, por exemplo, tudo ficará muito lento, mesmo que teoricamente você possua uma GPU que poderia dar conta do recado.

OBS: estou usando como base o QISKIT, já que é o framework mais usado para isso. Quando digo que você precisa ter GPUs mais recentes com maior poder de computação, é devido ao fato da maioria dos frameworks utilizarem o cuquantum por baixo, do qual necessita dessas especificações. Sendo assim, podem existir casos de frameworks isolados que consigam tirar proveito da GPU com o CUDA por si só, mas aqui estou falando da maioria.


A solução que encontrei para essse problema, foi a criação de um servidor responsável por receber jobs e executa-los.
Ao submeter um job, o servidor retorna um ID, do qual pode ser usado para pegar os resultados posteriormente, assim como feito quando você submete um algoritmo à uma máquina real da IBM, por exemplo.

Fazendo isso, seria possível rodar esse pequeno servidor usando docker na nuvem, ou até mesmo em uma outra máquina local, como um raspberry pi ou um computador velho, e deixar sua máquina principal disponível para uso.


Para tal feito, utilizei tecnologias como: Go, Python, Docker, RabbitMQ, PostgreSQL, GRPC+Protobuf, entre outros. Foi um imenso aprendizado no caminho.

Além do servidor em si, fiz uma biblioteca em python responsável por agir com um cliente e uma coleção de plugins que você pode adicionar ao servidor para expandir o número de simuladores disponíveis.


Para os interessados, seguem os links:

O projeto não está 100% testado ainda e precisamos adicionar autenticação. Aos entusiastas, deixo aberto a contribuições.

Em breve, lançarei novo plugins para backends do CIRQ e PennyLane.


Agradeço muito pela sua atenção☺️

Carregando publicação patrocinada...
1

Que legal!! Ainda deveria escrever algum código em quântico. Teve o vídeo recente do 3 blue 1 brown sobre algoritmos quânticos, e mesmo que tenha explicado muitas idéias erradas que as pessoas tenham, ele ainda parece um bicho de sete cabeças kkkkkk

Você teria números da diferença de tempo de execuções de algoritmos em um quântico real, e no seu servidor??

1

Muito obrigado 🙏, fico muito feliz que gostou!!

Computação quântica de fato é algo meio complicado kkkk sempre fico perdido ao ver um assunto novo, ou quando testo algum experimento.
Caso você queria aprofundar mais, recomendo você dar uma olhada nos cursos da IBM e da Xanadu, sempre tem materiais bons lá: https://learning.quantum.ibm.com/, https://pennylane.ai/qml e https://pennylane.ai/codebook/learning-paths. Espero que lhe ajude.


Em relação aos tempos de execução, ainda não testei. Contudo, isso acabaria sendo muito dependente do hardware usado.

Meu servidor serve como um front-end para simuladores implementados por frameworks como qiskit e pennylane. Assim, caso um plugin use cuQuantum e tenha uma GPU compatível e disponível no servidor, sempre será mais rápido.

Hoje em dia, os frameworks acabam brigando por quem consegue ser mais rápido, mas no geral qiskit aer acaba sendo o simulador mais usado e mais rápido.

Agora, em relação a execução em uma máquina real e os simuladores, os simuladores acabam vencendo de disparada. Como um algoritmo precisa ser rodado diversas vezes para termos uma estatística dos resultados, a máquina real (hoje) acaba tendo problemas, já que precisa se reajustar e executar de novo.
Sendo assim, para circuitos relativamente pequenos acaba sendo melhor executar nos simuladores, mas algoritmos grandes (como o de Shor) acabam fazendo com que a simulação seja custosa, necessitando de uma QPU.

Caso queira entender mais sobre esse problema com o hardware atual, aqui vão alguns links:


Espero ter ajudado e esclarecido suas dúvidas 😊

0