Introdução aos primitivos
O código desta página foi desenvolvido usando os seguintes requisitos. Recomendamos o uso dessas versões ou de versões mais recentes.
qiskit[all]~=2.3.0 qiskit-ibm-runtime~=0.43.1
Por que o Qiskit introduziu primitivas?
Semelhante aos primeiros dias dos computadores clássicos, quando os desenvolvedores tinham que manipular os registros da CPU diretamente, a interface inicial das QPUs simplesmente retornava os dados brutos dos componentes eletrônicos de controle.
Isso não era um grande problema quando as QPUs ficavam nos laboratórios e só permitiam o acesso direto dos pesquisadores.
Reconhecendo que a maioria dos desenvolvedores não estaria e não deveria estar familiarizada com a destilação desses dados brutos em 0s e 1s, o Qiskit introduziu backend.run, uma primeira abstração para acessar QPUs na nuvem. Isso permitiu que os desenvolvedores operassem em um formato de dados familiar e se concentrassem no panorama geral.
À medida que o acesso às QPUs se tornou mais difundido e com mais algoritmos quânticos sendo desenvolvidos, novamente surgiu a necessidade de uma abstração de nível superior. Em resposta, o Qiskit introduziu a interface de primitivos, que é otimizada para duas tarefas principais no desenvolvimento de algoritmos quânticos: estimativa de valor de expectativa (Estimator) e amostragem de circuito (Sampler). O objetivo é mais uma vez mais uma vez ajudar os desenvolvedores a se concentrarem mais na inovação e menos na conversão de dados. A interface de primitivos substitui a interface backend.run , pois a Sampler fornece o mesmo acesso direto ao hardware que era oferecido pela backend.run.
O que é um primitivo?
Os sistemas de computação são construídos em várias camadas de abstração. As abstrações permitem que você se concentre em um nível específico de detalhes relevantes para a tarefa em questão. Quanto mais próximo você estiver do hardware, menor será o nível de abstração necessário (por exemplo, talvez você precise mover ou manipular dados no nível de instrução da CPU). Quanto mais complexa for a tarefa que você deseja executar, maior será o nível das abstrações (por exemplo, você pode estar usando uma biblioteca de programação para realizar cálculos algébricos).
Nesse contexto, uma primitiva é a menor instrução de processamento, o bloco de construção mais simples a partir do qual se pode criar algo útil para um determinado nível de abstração é possível criar algo útil para um determinado nível de abstração.
O recente progresso na computação quântica aumentou a necessidade de trabalhar em níveis mais altos de abstração. À medida que o campo avança em direção a unidades de processamento quântico (QPUs) maiores e fluxos de trabalho mais complexos, o foco muda da interação com sinais de qubit individuais para a visualização de dispositivos quânticos como sistemas que executam as tarefas necessárias sinais de qubit individuais para a visualização de dispositivos quânticos como sistemas que executam as tarefas necessárias.
As duas tarefas mais comuns dos computadores quânticos são a amostragem de estados quânticos e o cálculo de valores de expectativa. Essas tarefas motivaram o projeto do Qiskit primitives : Estimator and Sampler.
- O estimador calcula os valores de expectativa dos observáveis com relação aos estados preparados pelos circuitos quânticos.
- O amostrador faz a amostragem do registro de saída da execução do circuito quântico.
Em resumo, o modelo computacional introduzido pelo site Qiskit primitives aproxima a programação quântica da programação clássica atual, em que o foco está menos nos detalhes do hardware e mais nos resultados que você está tentando alcançar que se está tentando obter.
Definição primitiva e implementações
Existem dois tipos de Qiskit primitives: as classes base e suas implementações. As primitivas Estimator e Sampler são definidas por classes-base de primitivas de código aberto que se encontram no pacote Qiskit SDK (no módulo qiskit.primitives). Os provedores (como Qiskit Runtime ) podem usar essas classes base para derivar suas próprias implementações de Sampler e Estimator. A maioria dos usuários irá interagir com as implementações dos provedores, e não com as primitivas básicas.
classes base
As Base primitivas são classes abstratas que definem uma interface comum para a implementação de primitivas. Todas as outras classes do qiskit.primitives módulo herdam dessas classes base. Os desenvolvedores devem usar essas funcionalidades caso tenham interesse em criar seu próprio modelo de execução baseado em primitivas para um provedor específico. Essas classes também podem ser úteis para quem deseja realizar processamentos altamente personalizados e considera que as implementações das primitivas existentes são simples demais para suas necessidades. Os usuários em geral não utilizarão diretamente as classes base.
BaseEstimatorV1 e BaseSamplerV1 - Embora as primitivas do V1 ainda possam ser utilizadas, estes guias se concentram nas primitivas do V2, pois são as mais recentes e as mais comumente utilizadas.
BaseEstimatorV2 e BaseSamplerV2 - As primitivas de referência do Qiskit seguem essas especificações de interface.
Implementações
Todas as classes primitivas são derivadas das classes base; portanto, elas têm a mesma estrutura geral e o mesmo modo de uso. Por exemplo, o formato da entrada para todas as primitivas do Estimator é o mesmo. No entanto, existem diferenças nas implementações que as tornam únicas.
Essas são implementações das classes básicas de primitivos:
-
As primitivas do Qiskit Runtime,
EstimatorV2eSamplerV2, oferecem uma implementação mais sofisticada (por exemplo, incluindo mitigação de erros) como um serviço baseado em nuvem. Esta implementação das primitivas básicas é usada para acessar o hardwar IBM Quantum®. -
StatevectorEstimatoreStatevectorSampler- Implementações de referência das primitivas que utilizam o simulador integrado ao Qiskit. Elas são criadas com o móduloquantum_infoQiskit, gerando resultados com base em simulações de vetores de estado ideais. Eles são acessados por meio do Qiskit. Consulte a simulação exata com Qiskit primitives para obter detalhes sobre o uso. -
BackendEstimatorV2eBackendSamplerV2- Você pode usar essas classes para “encapsular” qualquer recurso de computação quântica em uma primitiva. Isso permite que você escreva código no estilo primitivo para provedores que ainda não possuem uma interface baseada em primitivas. Essas classes podem ser usadas da mesma forma que o Sampler e o Estimator comuns, exceto que devem ser inicializadas com um argumentobackendadicional para selecionar em qual computador quântico serão executadas. O acesso a eles é feito por meio do Qiskit. Consulte o guia de primitivas de backend para obter mais informações.
Opções
Você pode passar opções para os tipos primitivos a fim de personalizá-los de acordo com suas necessidades. Embora a interface do método run() das primitivas seja comum a todas as implementações, suas opções não o são. Consulte as referências da API para uma implementação específica de primitiva para saber quais opções ela oferece.
Por exemplo, consulte os tópicos Opções do Estimator e “Opções do Sampler” para saber mais sobre as opções das primitivas do Qiskit Runtime, ou consulte as referências da API do Qiskit Aer para conhecer as opções das primitivas do Qiskit Aer.
Benefícios de Qiskit primitives
Com primitivas, os usuários do Qiskit podem escrever código quântico para uma QPU específica sem precisar gerenciar explicitamente
cada detalhe. Além disso, devido à camada adicional de abstração, você poderá acessar mais facilmente
os recursos avançados de hardware de um determinado provedor. Por exemplo, com primitivas de Qiskit Runtime,
você pode aproveitar os avanços mais recentes em mitigação e supressão de erros alternando opções como a primitiva resilience_level, em vez de criar sua própria implementação dessas técnicas.
Para os provedores de hardware, a implementação de primitivas nativamente significa que você pode oferecer aos seus usuários uma maneira mais "pronta para uso" para acessar os recursos do seu hardware, como técnicas avançadas de pós-processamento. Portanto, é mais fácil para os seus usuários se beneficiarem dos melhores recursos do seu hardware.
Próximas etapas
- Compreender as operações básicas de entrada e saída.
- Analise exemplos detalhados.
- Pratique com primitivas trabalhando na lição Função de custo no IBM Quantum Learning.
- Consulte a seção “Criar um provedor” para saber como implementar suas próprias primitivas Sampler e Estimator.
- Consulte as referências da API.
- Leia Migrar para V2 primitives.
- Conheça as primitivas do
Qiskit Runtime, que são utilizadas para executar circuitos em QPUs d IBM.