Compartilhar via


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 o azure-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 Comportamento de destino.

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.

  1. No VS Code, selecione Exibir > Paleta de comandos e selecione Criar: Novo Jupyter Notebook.

  2. 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.

  3. 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"
    )
    
  4. Clique em + Código para adicionar uma nova célula no notebook e importar qsharp o SDK do Python.

    import qsharp
    
  5. Selecione o quantum target de sua escolha. Neste exemplo, você está usando o simulador IonQ como target.

    target = workspace.get_targets("ionq.simulator")
    
  6. Selecione as configurações do perfil, , BaseAdaptive_RI, ou Unrestricted.target

    qsharp.init(target_profile=qsharp.TargetProfile.Base) # or qsharp.TargetProfile.Adaptive_RI, qsharp.TargetProfile.Unrestricted
    

    Observação

    Adaptive_RItarget atualmente são suportados no Quantinuum targets. Para obter mais informações, consulte Computação quântica híbrida integrada.

  7. 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
    open Microsoft.Quantum.Measurement;
    open Microsoft.Quantum.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;
    }
    
  8. Em seguida, você cria uma sessão. Digamos que você queira executar GenerateRandomBit a operação três vezes, então você usa target.submit para enviar a Q# operação com os target 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.

  9. 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 alvo

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.