Introdução às sessões
As sessões são um recurso fundamental da computação quântica híbrida que permite agrupar vários trabalhos de computação quântica.
Este artigo explica a arquitetura das sessões na computação quântica híbrida e como criar uma nova sessão.
Pré-requisitos
Para criar uma sessão, você precisa dos seguintes pré-requisitos:
Uma conta do Azure com uma assinatura ativa. Se você não tiver uma conta do Azure, registre-se gratuitamente e inscreva-se para uma assinatura paga conforme o uso.
Um workspace do Azure Quantum. Para obter mais informações, confira Criar um workspace do Azure Quantum.
Um ambiente Python com Python e Pip instalados.
O pacote do Azure Quantum
azure-quantum
. Se você quiser usar o Qiskit ou o Cirq, você precisa instalar oazure-quantum
pacote com as tags [qiskit] ou [cirq].pip install --upgrade azure-quantum[qiskit]
O que é uma sessão?
Uma sessão é um agrupamento lógico de um ou mais trabalhos enviados para um único target. Cada sessão tem uma ID exclusiva anexada a cada trabalho nessa sessão.
Nas sessões, o recurso de computação do cliente pode ser movido para a nuvem, resultando em menor latência e na capacidade de repetir a execução do circuito quântico com parâmetros diferentes. Os trabalhos podem ser agrupados logicamente em uma sessão e os trabalhos nessa sessão podem ser priorizados em relação aos trabalhos que não são de sessão. Embora os estados de qubit não persistam entre os trabalhos, uma sessão permite tempos de fila mais curtos para trabalhos e problemas de execução mais longos.
As sessões permitem que você organize vários trabalhos de computação quântica com a capacidade de executar código clássico entre trabalhos quânticos. Você poderá executar algoritmos complexos para organizar e rastrear melhor seus trabalhos individuais de computação quântica.
Um cenário de usuário importante em que você pode querer combinar trabalhos em uma sessão são os algoritmos quânticos parametrizados em que a saída de um trabalho de computação quântica informa os parâmetros do próximo trabalho de computação quântica. Os exemplos mais comuns desse tipo de algoritmo são Variational Quantum Eigensolvers (VQE) e Quantum Approximate Optimization Algorithms (QAOA).
Hardware com suporte
As sessões são suportadas em todos os provedores de hardware de computação quântica. Em alguns casos, os trabalhos enviados em uma sessão são priorizados na fila desse target. Para obter mais informações, consulte Target comportamento.
Como criar uma sessão
Para criar uma sessão, siga estas etapas:
Este exemplo mostra como criar uma sessão com Q# código embutido usando um Jupyter Notebook no Visual Studio Code. Você também pode criar sessões usando um programa Python que invoca um programa adjacente Q# .
Observação
As sessões são gerenciadas com Python, mesmo ao executar Q# código embutido.
No VS Code, selecione Exibir > Paleta de comandos e selecione Criar: Novo Jupyter Notebook.
No canto superior direito, o VS Code detectará e exibirá a versão do Python e o ambiente virtual do Python que foi selecionado para o notebook. Se você tiver vários ambientes Python, talvez seja necessário selecionar um kernel usando o seletor de kernel no canto superior direito. Se nenhum ambiente foi detectado, consulte Jupyter Notebooks no VS Code para obter informações de configuração.
Na primeira célula do notebook, execute
import azure.quantum workspace = azure.quantum.Workspace( resource_id = "", # add your resource ID location = "", # add your location, for example "westus" )
Clique em + Código para adicionar uma nova célula no notebook e importar
qsharp
o SDK do Python.import qsharp
Selecione o quantum target de sua escolha. Neste exemplo, você está usando o simulador IonQ como target.
target = workspace.get_targets("ionq.simulator")
Selecione as configurações do perfil, ,
Base
Adaptive_RI
, ouUnrestricted
.targetqsharp.init(target_profile=qsharp.TargetProfile.Base) # or qsharp.TargetProfile.Adaptive_RI, qsharp.TargetProfile.Unrestricted
Observação
Adaptive_RI
target atualmente são suportados no Quantinuum targets. Para obter mais informações, consulte Computação quântica híbrida integrada.Escreva seu Q# programa. Por exemplo, o programa a seguir Q# gera um bit aleatório. Para ilustrar o uso de argumentos de entrada, este programa usa um inteiro,
n
, e uma matriz de ângulos,angle
, como entrada.%%qsharp import Std.Measurement.*; import Std.Arrays.*; operation GenerateRandomBits(n: Int, angle: Double[]) : Result[] { use qubits = Qubit[n]; // n parameter as the size of the qubit array for q in qubits { H(q); } R(PauliZ, angle[0], qubits[0]); // arrays as entry-points parameters R(PauliZ, angle[1], qubits[1]); let results = MeasureEachZ(qubits); ResetAll(qubits); return results; }
Em seguida, você cria uma sessão. Digamos que você queira executar
GenerateRandomBit
a operação três vezes, então você usatarget.submit
para enviar a Q# operação com ostarget
dados e repete o código três vezes - em um cenário do mundo real, você pode querer enviar programas diferentes em vez do mesmo código.angle = [0.0, 0.0] with target.open_session(name="Q# session of three jobs") as session: target.submit(input_data=qsharp.compile(f"GenerateRandomBits(2, {angle})"), name="Job 1", shots=100) # First job submission angle[0] += 1 target.submit(input_data=qsharp.compile(f"GenerateRandomBits(2, {angle})"), name="Job 2", shots=100) # Second job submission angle[1] += 1 target.submit(input_data=qsharp.compile(f"GenerateRandomBits(2, {angle})"), name="Job 3", shots=100) # Third job submission session_jobs = session.list_jobs() [session_job.details.name for session_job in session_jobs]
Importante
Ao passar argumentos como parâmetros para o trabalho, eles são formatados na Q# expressão ao chamar
qsharp.compile
. Isso significa que você precisa ter cuidado para formatar seus argumentos como Q# objetos. Neste exemplo, como as matrizes em Python já estão impressas como [item0, item1, ...], os argumentos de entrada correspondem à Q# formatação. Para outras estruturas de dados do Python, Q# você pode precisar de mais tratamento para inserir os valores de string no de maneira compatível.Depois de criar uma sessão, você pode usar
workspace.list_session_jobs
para recuperar uma lista de todos os trabalhos na sessão. Para obter mais informações, consulte Como gerenciar sessões.
Comportamento Target
Cada provedor de hardware quântico define sua própria heurística para gerenciar melhor a priorização de trabalhos em uma sessão.
Quantinuum
Se você optar por enviar trabalhos dentro de uma sessão para um Quantinuum target, sua sessão terá acesso exclusivo ao hardware, desde que você enfileire os trabalhos dentro de um minuto um do outro. Depois disso, seus trabalhos serão aceitos e tratados com a lógica padrão de enfileiramento e priorização.