Comece a usar o Qiskit Functions
Os usuários dos planos Premium, Flex e “ On-Prem ” (por meio da API IBM Quantum Platform ) podem começar a usar o “ IBM ” Qiskit Functions gratuitamente ou adquirir uma licença junto a um dos parceiros que contribuíram com uma função para o catálogo.
Solicite uma avaliação gratuita do software de gerenciamento de ativos de terceiros ( Qiskit Functions )
Para solicitar uma avaliação gratuita, acesse o site Qiskit Functions Catalog e explore o painel de detalhes. Clique Request a free trial e preencha as informações solicitadas pelo parceiro da Functions, incluindo o IBM Cloud AccessGroupId:
- Acesse o IBM Cloud IAM.
- Verifique se você se qualifica.
- Na barra de menu do cabeçalho, alterne sua conta para uma com o seguinte formato:
XXXXXXX - [Organization Name] - Verifique se a organização é a mesma associada à sua conta Premium.
- Se você vir “Conta [de] [Seu Nome]”, significa que está usando sua conta pessoal, que não dá direito ao acesso premium.
- Na barra de menu do cabeçalho, alterne sua conta para uma com o seguinte formato:
- Descubra o ID do seu grupo de acesso.
- Clique no nome de um grupo.
- Clique em “Detalhes ”.
- Copie o ID do grupo de acesso. Deve começar com
AccessGroup-.
Instale o cliente do Qiskit Functions Catalog
-
Para começar a usar o Qiskit Functions, instale o cliente IBM Qiskit Functions Catalog :
pip install qiskit-ibm-catalog -
Recupere sua chave de API no painel 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ê estiver trabalhando em um ambiente confiável do Python (como em um laptop pessoal ou estação de trabalho), use o
save_account()método para salvar suas credenciais localmente. ( Pule para a próxima etapa se você não estiver usando um ambiente confiável, como um computador compartilhado ou público, para se autenticar no site IBM Quantum Platform.)save_account()Para usar, executepythonno seu shell e, em seguida, digite 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ê poderá carregar suas credenciais da seguinte forma:from qiskit_ibm_catalog import QiskitFunctionsCatalog catalog = QiskitFunctionsCatalog()Por exemplo:
# 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 externo de nuvem Python para minimizar os riscos de segurança. Se 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 IBM Cloud para reduzir o risco. Saiba mais no tópico “Gerenciamento de chaves de API de usuários ”. Para inicializar o serviço nessa situação, use este código:
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 dashboardProteja sua chave de APINunca inclua sua chave no código-fonte, em scripts do
Pythonou em arquivos 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á-lo com segurança.Se você compartilhar sua chave acidentalmente com alguém ou a incluir em um sistema de controle de versão como Git, revogue-a imediatamente excluindo-a na página de chaves da API IBM Cloud para reduzir os riscos. Saiba mais no tópico “Gerenciamento de chaves de API de usuários ”.
Liste as funções às quais você tem acesso
Após se autenticar, você pode listar as funções do Qiskit Functions Catalog às quais tem acesso:
catalog.list()Output:
[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)]
Verificar os back-ends disponíveis e a capacidade
Antes de executar uma função, verifique quais back-ends sua instância consegue acessar e quanta capacidade de execução ainda resta. run() realiza as mesmas verificações antes de enviar um trabalho, para que você possa detectar antecipadamente problemas de capacidade e de back-end.
Liste os back-ends aos quais sua instância tem acesso. Os resultados são armazenados em cache por catálogo. Passe o mouse refresh_cache=True para atualizá-los.
catalog.backends()backends() aceita os mesmos filtros que o do site Qiskit RuntimeQiskitRuntimeService.backends(). Por exemplo, liste apenas os backends com pelo menos 127 qubits ou passe uma função filters para um controle mais preciso:
catalog.backends(min_num_qubits=127)Pesquise um único backend e confirme o acesso:
catalog.backend("ibm_fez")Você também pode selecionar o backend com o menor número de tarefas pendentes. least_busy() usa os mesmos filtros que o Qiskit Runtime QiskitRuntimeService.least_busy():
catalog.least_busy(min_num_qubits=127)Use usage() para verificar a capacidade restante de autonomia. Retorna usage_remaining_seconds e usage_limit_reached para a instância ativa.
catalog.usage()Por exemplo, verifique a capacidade restante antes de executar um longo lote de tarefas e interrompa o processo se não houver capacidade suficiente para concluí-lo:
usage = catalog.usage()
if usage["usage_remaining_seconds"] < 600:
raise SystemExit("Not enough capacity remaining to start this batch.")Executar funções habilitadas
catalog.load("<provider/function-name>")Depois que um objeto de catálogo for instanciado, você poderá selecionar uma função usando:
ibm_cf = catalog.load("ibm/circuit-function")Cada função do Qiskit possui entradas, opções e saídas personalizadas. Consulte as páginas de documentação específicas da função que você deseja executar para obter mais informações. Por padrão, todos os usuários podem executar apenas uma tarefa de função por vez:
job = ibm_cf.run(
pubs=[(circuit, observable)],
instance=instance,
backend_name=backend_name, # E.g. "ibm_fez"
)
job.job_idOutput:
'7f08c9d5-471b-4da2-92e7-4f2cb94c23a8'
run() verifica a capacidade restante e o acesso ao backend antes de enviar o trabalho. Se sua instância estiver sem capacidade ou se o backend que você indicou não estiver acessível, run() o sistema gera um erro imediatamente, em vez de deixar a tarefa falhar na fila. Quando a capacidade está baixa, run() emite um aviso. Toque suppress_low_usage_warning=True para desligar o som.
job = ibm_cf.run(
pubs=[(circuit, observable)],
instance=instance,
backend_name=backend_name, # E.g. "ibm_fez"
suppress_low_usage_warning=True,
)Verificar o status do trabalho
job_idCom a função Qiskit, você pode verificar o status dos trabalhos em execução. Isso inclui os seguintes status:
-
QUEUED: O programa remoto está na fila de funções do Qiskit. A prioridade na fila depende do quanto você já utilizou o Qiskit Functions. -
INITIALIZING: O programa remoto está sendo iniciado; isso inclui a configuração do ambiente remoto e a instalação das dependências. -
RUNNING: O programa está em execução. Isso também inclui vários status mais detalhados, caso sejam suportados por funções específicas.RUNNING: MAPPING: Atualmente, a função está mapeando suas entradas clássicas para entradas quânticas.RUNNING: OPTIMIZING_FOR_HARDWARE: A função está sendo otimizada para a QPU selecionada. Isso poderia incluir a transpilagem de circuitos, a caracterização da QPU, a retropropagação de observáveis e assim por diante.RUNNING: WAITING_FOR_QPU: A função enviou um trabalho para Qiskit Runtime e está aguardando na fila.RUNNING: EXECUTING_QPU: A função possui uma tarefa ativa do Qiskit Runtime.RUNNING: POST_PROCESSING: A função consiste no pós-processamento dos resultados, o que pode incluir a mitigação de erros, o mapeamento de resultados quânticos para o clássico e assim por diante.
-
DONE: O programa está concluído, e você pode recuperar os dados dos resultados comjob.result(). -
ERROR: O programa parou de funcionar devido a um problema. Usejob.result()para obter a mensagem de erro. -
CANCELED: O programa foi cancelado por um usuário, pelo serviço ou pelo servidor.job.status()Output:
'QUEUED'
Exibir resultados
Depois que um programa for executado DONE, você pode usar job.result() para obter o resultado. Esse formato de saída varia de acordo com cada função; portanto, certifique-se de seguir a documentação específica:
result = job.result()
print(result)Output:
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 trabalho a qualquer momento:
job.cancel()Output:
'Job has been stopped.'
Acesse as vagas associadas no site Qiskit Runtime
Uma função do Qiskit pode enviar um ou mais tarefas do tipo “ Qiskit Runtime ” para uma QPU enquanto está em execução. Para recuperar os IDs desses trabalhos em execução, use job.runtime_jobs(). Você pode usar esses IDs para recuperar os objetos de tarefa em execução de uma instância QiskitRuntimeService ou para localizar as cargas de trabalho no painel do IBM Quantum® Platform.
runtime_job_ids = job.runtime_jobs()
runtime_job_idsSe uma função agrupar suas tarefas em tempo de execução em sessões ou lotes, use job.runtime_sessions() para listar os IDs das sessões. Passe um ID de sessão para job.runtime_jobs() a fim de retornar apenas os trabalhos em execução nessa sessão:
sessions = job.runtime_sessions()
session_runtime_jobs = job.runtime_jobs(runtime_session=sessions[0])
session_runtime_jobsA lista retornada pode estar vazia. Uma função reporta seus trabalhos em tempo de execução somente quando os envia por meio do serviço de tempo de execução que a função recebe durante a execução, e algumas funções não enviam trabalhos em tempo de execução diretamente.
Visualizar logs de tarefa
Use job.logs() para recuperar a saída de log que uma função gera durante sua execução. Os registros são úteis para acompanhar o andamento e para depurar um trabalho que termine em um determinado estado ERROR .
print(job.logs().splitlines())Para uma tarefa de longa duração que gera muitas linhas de log, use job.filtered_logs() para retornar apenas as linhas desejadas. Passe uma expressão regular para include para manter as linhas correspondentes ou para exclude para descartar as linhas correspondentes:
print(job.filtered_logs(include="iteration"))Listar tarefas do Qiskit Functions executadas anteriormente
Você pode usar jobs() para listar todos os trabalhos enviados para Qiskit Functions :
old_jobs = catalog.jobs()
old_jobsOutput:
[<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>]
Para refinar os resultados, aplique filtros. Filtre por função com function, por status com statuse por data de envio com created_after. Navegue pelos resultados usando limit e offset:
recent_errors = catalog.jobs(
function=ibm_cf,
status="ERROR",
created_after="2024-01-01T00:00:00Z",
limit=5,
)
recent_errorsSe você já tiver o ID de um determinado trabalho, poderá recuperá-lo com catalog.job():
# First, get the most recent job that has been executed.
latest_job = old_jobs[0]
# We can also get that same job with `catalog.job`
job_by_id = catalog.job(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)Output:
f6c29f49-4d5f-4fff-aca6-2e9a115b9763
Buscar mensagens de erro
Se o status de um programa for ERROR, use job.error_message() para obter a mensagem de erro da seguinte maneira:
job.error_message()Output:
qiskit.exceptions.QiskitError: 'Workflow execution failed -- https://docs.quantum.ibm.com/errors#9999'
Próximas etapas
- Explore as funções do circuito para criar novos algoritmos e aplicativos, sem precisar se preocupar com a transpilagem ou o tratamento de erros.
- Explore as funções da aplicação para resolver tarefas específicas do domínio, com entradas e saídas clássicas.
- Consulte a documentação de referência da API em Qiskit Functions.
- Para ter uma experiência prática, experimente alguns tutoriais que mostram o que é o “ Qiskit Functions ”.