Introdução às Qiskit Functions
- As Qiskit Functions são um recurso experimental disponível apenas para usuários dos planos IBM Quantum® Premium, Flex e On-Prem (via IBM Quantum Platform API). Estão em status de versão prévia e sujeitas a alterações.
Versões dos pacotes
O código nesta página foi desenvolvido usando os seguintes requisitos. Recomendamos o uso dessas versões ou mais recentes.
qiskit[all]~=1.4.1
qiskit-ibm-runtime~=0.37.0
qiskit-ibm-catalog~=0.4
As Qiskit Functions simplificam e aceleram a descoberta de algoritmos em escala utilitária e o desenvolvimento de aplicações, abstraindo partes do fluxo de trabalho de desenvolvimento de software quântico. Dessa forma, as Qiskit Functions liberam o tempo normalmente gasto escrevendo código manualmente e ajustando experimentos.
As Functions vêm em duas formas:
| Tipo | O que faz? | Exemplos de entradas e saídas | Para quem é? |
|---|---|---|---|
| Circuit function | Interface simplificada para execução de circuits. Abstrai transpilação, supressão de erros e mitigação de erros | Entrada: Objetos PUB abstratos Saída: Valores esperados mitigados | Pesquisadores que usam o Qiskit para descobrir novos algoritmos e aplicações, sem precisar se concentrar na otimização para hardware ou no tratamento de erros. Circuit functions podem ser usadas para construir application functions personalizadas. |
| Application function | Abrange tarefas de nível mais alto, como exploração de algoritmos e casos de uso específicos de domínio. Abstrai o fluxo de trabalho quântico para resolver tarefas, com entradas e saídas clássicas | Entrada: Moléculas, grafos Saída: Energia do estado fundamental e excitado, valores ótimos para a função de custo | Pesquisadores em domínios não quânticos, integrando o quantum em fluxos de trabalho clássicos de grande escala já existentes, sem precisar mapear dados clássicos para quantum circuits. |
# Added by doQumentation — required packages for this notebook
!pip install -q qiskit qiskit-ibm-catalog qiskit-ibm-runtime
As Functions são fornecidas pela IBM® e por parceiros terceiros. Cada uma tem bom desempenho para características específicas de carga de trabalho e possui opções exclusivas de ajuste de desempenho.
Visão geral das functions disponíveis
Circuit functions
| Nome | Fornecedor | Uso recomendado | Benefícios exclusivos |
|---|---|---|---|
| Tensor-Network Error Mitigation | Algorithmiq | Cargas de trabalho com observáveis de baixo peso e circuits sem loops. | Reduz o overhead de medição e a variância, superando as linhas de base padrão de mitigação de erros, como Zero Noise Extrapolation (ZNE) e Probabilistic Error Cancellation (PEC) para classes de circuits relevantes. |
| QESEM: Error Suppression and Error Mitigation | Qedma | Cargas de trabalho que incluem circuits com gates fracionários ou parametrizados, observáveis de alto peso, e fluxos de trabalho que exigem valores esperados imparciais e estimativas precisas de tempo de execução. | Produz valores esperados imparciais com menor variância e overhead de recursos, superando ZNE e PEC para classes de circuits relevantes. |
| Performance Management | Q-CTRL | Cargas de trabalho que contêm circuits paramétricos, circuits profundos ou que requerem muitas execuções de circuits. | Aplica automaticamente supressão de erros baseada em IA a algoritmos quânticos, maximizando o desempenho dos dispositivos IBM para entregar resultados precisos enquanto reduz o número de shots, o tempo de computação e o custo necessários. Método sem overhead que melhora a precisão de execução para as primitivas Sampler e Estimator, compatível com qualquer peso de observáveis. |
Application functions
| Nome | Fornecedor | Uso recomendado | Benefícios exclusivos |
|---|---|---|---|
| QUICK-PDE | ColibriTD | Use computação quântica para PDEs de múltipla física. Prepare fluxos de trabalho de simulação para hardware quântico, mantendo controle total sobre os parâmetros de modelagem quântica e física. | Oferece um framework híbrido VQA robusto que entrega soluções de PDE precisas e escaláveis por meio de codificação de soluções avançada e métodos espectrais, tornando-o um ponto de entrada ideal para equipes que buscam construir capacidades de simulação prontas para o quantum. |
| Quantum Portfolio Optimizer | Global Data Quantum | Cargas de trabalho para otimização financeira, buscando estratégias ótimas de portfólio ao longo do tempo enquanto minimizam o risco e maximizam os retornos, permitindo backtesting de estratégias de negociação. | Resolve problemas de otimização combinatória por meio de uma adaptação altamente especializada do algoritmo quântico VQE para esse caso de uso financeiro, usando estratégias de execução e otimizadores otimizados, junto com técnicas de mitigação de erros conscientes do ruído adaptadas à otimização de portfólios. |
| HI-VQE Chemistry | Qunova Computing | Cargas de trabalho em química computacional, simulação molecular, ciência de materiais ou qualquer simulação de Hamiltoniano que exija a resolução de problemas de estrutura eletrônica de muitos corpos. | Resolve estruturas eletrônicas moleculares usando SQD aprimorado com precisão química (1 kcal/mol, 1,6 mHa) para problemas modelados com 40 a 60 qubits, superando algumas soluções clássicas em supercomputadores ou SQD padrão em velocidade de convergência ou precisão, respectivamente, por ordens de magnitude. |
| Iskay Quantum Optimizer | Kipu Quantum | Cargas de trabalho de otimização como agendamento, logística, roteamento e problemas QUBO/HUBO. | Métodos integrados e ajustáveis de pré e pós-processamento clássico para a rotina de otimização quântica. Entrega vantagem de tempo de execução sobre solvers clássicos (CPLEX, simulated annealing e busca tabu) em benchmarks HUBO selecionados. Market Split ms_5_100, um desafio difícil, resolvido em horas (veja este tutorial). |
| Singularity Machine Learning | Multiverse Computing | Fluxos de trabalho de classificação de machine learning clássico que poderiam se beneficiar de maior precisão ou eficiência computacional ao aproveitar a otimização quântica executada em hardware IBM. | Entrega precisão comparável ou superior a modelos clássicos como Random Forest ou XGBoost, operando com significativamente menos learners e um ensemble mais compacto. Impulsionado por votação otimizada quanticamente, seleciona os learners mais informativos e refina os limites de decisão, resultando em maior eficiência, menor complexidade do modelo e desempenho mais robusto. |
| Optimization Solver | Q-CTRL | Problemas de otimização binária ou qualquer problema combinatório que possa ser mapeado para uma função de custo binária. Funções de custo de qualquer ordem e tamanhos de problema até a escala máxima do dispositivo são suportados. | Solução de otimização quântica end-to-end, consciente do ruído, que permite entradas de definições de problemas de alto nível e encontra automaticamente soluções precisas para problemas combinatórios classicamente desafiadores em hardware quântico de escala utilitária. Abstrai a complexidade ao lidar com supressão de erros, mapeamento eficiente e otimização híbrida quantum-clássica para resolver tarefas de otimização na escala completa do dispositivo sem necessidade de profundo conhecimento em quantum. |
Comece a usar as Qiskit Functions
Usuários dos planos Premium, Flex e On-Prem (por meio da IBM Quantum Platform API) podem começar a usar as IBM Qiskit Functions gratuitamente ou adquirir uma licença de um dos parceiros que contribuíram com uma function para o catálogo.
Solicite um período de avaliação gratuito para Qiskit Functions de terceiros
Para solicitar um novo período de avaliação gratuito, navegue até o Qiskit Functions Catalog e explore o painel de detalhes. Clique em Request a free trial e preencha as informações exigidas pelo parceiro da Functions, incluindo o AccessGroupId do IBM Cloud:
- Navegue até o IBM Cloud IAM.
- Verifique a elegibilidade.
- Mude sua conta na barra superior para uma com o seguinte formato:
XXXXXXX - [Organization Name] - Certifique-se de que a organização é a mesma associada à sua conta Premium.
- Se você ver "[Your Name]'s Account", está usando sua conta pessoal, que não é elegível para acesso premium.
- Mude sua conta na barra superior para uma com o seguinte formato:
- Encontre seu ID de grupo de acesso.
- Clique no nome de um grupo.
- Clique em Details.
- Copie o ID do grupo de acesso. Ele deve começar com
AccessGroup-.
Instale o cliente do Qiskit Functions Catalog
-
Para começar a usar as Qiskit Functions, instale o cliente do IBM Qiskit Functions Catalog:
pip install qiskit-ibm-catalog -
Recupere sua chave de API no painel do IBM Quantum Platform e ative seu ambiente virtual Python. Consulte as instruções de instalação caso ainda não tenha um ambiente virtual configurado.
Se você está trabalhando em um ambiente Python confiável (como em um laptop ou estação de trabalho pessoal), use o método
save_account()para salvar suas credenciais localmente. (Pule para o próximo passo se não estiver usando um ambiente confiável, como um computador compartilhado ou público, para se autenticar no IBM Quantum Platform.)Para usar
save_account(), executepythonno seu terminal e insira o seguinte:from qiskit_ibm_catalog import QiskitFunctionsCatalog
QiskitFunctionsCatalog.save_account(channel="ibm_quantum_platform", token="<your-token>", instance="<instance-crn>")Digite
exit(). A partir de agora, sempre que precisar se autenticar no serviço, você pode carregar suas credenciais comfrom qiskit_ibm_catalog import QiskitFunctionsCatalog
catalog = QiskitFunctionsCatalog()
# Load saved credentials
from qiskit_ibm_catalog import QiskitFunctionsCatalog
catalog = QiskitFunctionsCatalog(channel="ibm_quantum_platform")
-
Evite executar código em uma máquina não confiável ou em um ambiente Python de nuvem externo para minimizar riscos de segurança. Se você precisar usar um ambiente não confiável (por exemplo, em um computador público), altere sua chave de API após cada uso excluindo-a na página de chaves de API do IBM Cloud para reduzir o risco. Saiba mais no tópico Managing user API keys. Para inicializar o serviço nessa situação, expanda a seção a seguir para ver o código que você pode usar:
Inicialize o serviço em um ambiente não confiável
from qiskit_ibm_catalog import QiskitFunctionsCatalog
# After using the following code, delete your API key on the IBM Quantum Platform home dashboard
catalog = QiskitFunctionsCatalog(token="<YOUR_API_KEY>") # Use the 44-character API_KEY you created and saved from the IBM Quantum Platform Home dashboardcuidadoProteja sua chave de API! Nunca inclua sua chave no código-fonte, script Python ou arquivo de notebook. Ao compartilhar código com outras pessoas, certifique-se de que sua chave de API não esteja incorporada diretamente no script Python. Em vez disso, compartilhe o script sem a chave e forneça instruções para configurá-la com segurança.
Se você acidentalmente compartilhar sua chave com alguém ou incluí-la em controle de versão como o Git, revogue imediatamente sua chave excluindo-a na página de chaves de API do IBM Cloud para reduzir o risco. Saiba mais no tópico Managing user API keys.
-
Após a autenticação, você pode listar as functions do Qiskit Functions Catalog às quais tem acesso:
catalog.list()
[QiskitFunction(qunova/hivqe-chemistry),
QiskitFunction(global-data-quantum/quantum-portfolio-optimizer),
QiskitFunction(algorithmiq/tem),
QiskitFunction(qedma/qesem),
QiskitFunction(multiverse/singularity),
QiskitFunction(ibm/circuit-function),
QiskitFunction(q-ctrl/optimization-solver),
QiskitFunction(colibritd/quick-pde),
QiskitFunction(q-ctrl/performance-management),
QiskitFunction(kipu-quantum/iskay-quantum-optimizer)]
Execute as functions habilitadas
Após instanciar um objeto de catálogo, você pode selecionar uma function usando catalog.load(provider/function-name):
ibm_cf = catalog.load("ibm/circuit-function")
Cada Qiskit Function possui entradas, opções e saídas personalizadas. Consulte as páginas de documentação específicas da function que você deseja executar para obter mais informações. Por padrão, todos os usuários podem executar apenas um job de function por vez:
# This cell is hidden from users
# It gets these details programmatically so we can test this notebook
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit.circuit.random import random_circuit
service = QiskitRuntimeService()
instance = service.active_account()["instance"]
backend_name = service.least_busy().name
circuit = random_circuit(num_qubits=2, depth=2, seed=42)
observable = "Z" * circuit.num_qubits
job = ibm_cf.run(
pubs=[(circuit, observable)],
instance=instance,
backend_name=backend_name, # E.g. "ibm_fez"
)
job.job_id
'7f08c9d5-471b-4da2-92e7-4f2cb94c23a8'
Verifique o status do job
Atualmente, a tabela de cargas de trabalho do IBM Quantum reflete apenas cargas de trabalho do Qiskit Runtime. Use job.status() para ver o status atual da sua carga de trabalho do Qiskit Function.
Com o job_id da sua Qiskit Function, você pode verificar o status dos jobs em execução. Isso inclui os seguintes status:
QUEUED: O programa remoto está na fila do Qiskit Function. A prioridade na fila é baseada no quanto você utilizou as Qiskit Functions.INITIALIZING: O programa remoto está iniciando; isso inclui a configuração do ambiente remoto e a instalação de dependências.RUNNING: O programa está em execução. Isso também inclui vários status mais detalhados, se suportados por functions específicasRUNNING: MAPPING": A function está atualmente mapeando suas entradas clássicas para entradas quânticasRUNNING: OPTIMIZING_FOR_HARDWARE": A function está otimizando para o QPU selecionado. Isso pode incluir transpilação de Circuit, caracterização do QPU, backpropagation de observáveis, entre outrosRUNNING: WAITING_FOR_QPU: A function enviou um job ao Qiskit Runtime e está aguardando na filaRUNNING: EXECUTING_QPU: A function tem um job ativo no Qiskit RuntimeRUNNING: POST_PROCESSING: A function está fazendo pós-processamento dos resultados. Isso pode incluir mitigação de erros, mapeamento de resultados quânticos para clássicos, entre outros
DONE: O programa foi concluído e você pode recuperar os dados do resultado comjob.results().ERROR: O programa parou de executar por causa de um problema. Usejob.result()para obter a mensagem de erro.CANCELED: O programa foi cancelado; seja por um usuário, pelo serviço ou pelo servidor.
job.status()
'QUEUED'
Recupere os resultados
Após um programa estar DONE, você pode usar job.results() para buscar o resultado. O formato de saída varia com cada function, então certifique-se de seguir a documentação específica:
result = job.result()
print(result)
PrimitiveResult([PubResult(data=DataBin(evs=np.ndarray(<shape=(), dtype=float64>), stds=np.ndarray(<shape=(), dtype=float64>), ensemble_standard_error=np.ndarray(<shape=(), dtype=float64>)), metadata={'shots': 4096, 'target_precision': 0.015625, 'circuit_metadata': {}, 'resilience': {}, 'num_randomizations': 32})], metadata={'dynamical_decoupling': {'enable': True, 'sequence_type': 'XX', 'extra_slack_distribution': 'middle', 'scheduling_method': 'alap'}, 'twirling': {'enable_gates': False, 'enable_measure': True, 'num_randomizations': 'auto', 'shots_per_randomization': 'auto', 'interleave_randomizations': True, 'strategy': 'active-accum'}, 'resilience': {'measure_mitigation': True, 'zne_mitigation': False, 'pec_mitigation': False}, 'version': 2})
Você também pode cancelar um job a qualquer momento:
job.stop()
'Job has been stopped.'
Liste os jobs executados anteriormente com as Qiskit Functions
Você pode usar jobs() para listar todos os jobs enviados para as Qiskit Functions:
old_jobs = catalog.jobs()
old_jobs
[<Job | f6c29f49-4d5f-4fff-aca6-2e9a115b9763>,
<Job | 7f08c9d5-471b-4da2-92e7-4f2cb94c23a8>,
<Job | 62fe9176-d1e5-467e-b2bd-7a3f3c7be4e5>,
<Job | af525b2e-16b1-45a1-80bb-dbd94ce30258>,
<Job | b95a7a57-c1ad-4958-b7ac-953e4e1ee824>,
<Job | 7bfa33da-0f17-4e67-84b6-f556f7eeb436>,
<Job | ca46c191-9eb9-4de6-bfa7-b60d7eb29b5e>,
<Job | 6ac0ba93-3831-43fb-9fb9-760da2225e06>,
<Job | f0e38071-060d-47e8-988d-9cc1f69358e3>,
<Job | 629cf110-e490-4675-8a07-f6d298d166b0>]
Se você já tem o ID de job para um determinado job, pode recuperá-lo com catalog.get_job_by_id():
# First, get the most recent job that has been executed.
latest_job = old_jobs[0]
# We can also get that same job with get_job_by_id
job_by_id = catalog.get_job_by_id(latest_job.job_id)
# Verify that the job is the same using both retrieval methods.
assert job_by_id.job_id == latest_job.job_id
# Print the job_id for this job.
print(job_by_id.job_id)
f6c29f49-4d5f-4fff-aca6-2e9a115b9763
Busque mensagens de erro
Se o status de um programa for ERROR, use job.error_message() para buscar a mensagem de erro da seguinte forma:
job.error_message()
qiskit.exceptions.QiskitError: 'Workflow execution failed -- https://docs.quantum.ibm.com/errors#9999'
Próximos passos
- Explore as circuit functions para construir novos algoritmos e aplicações, sem precisar gerenciar transpilação ou tratamento de erros.
- Explore as application functions para resolver tarefas específicas de domínio, com entradas e saídas clássicas.