Поделиться через


Начало работы с сеансами

Сеансы — это ключевая функция гибридных квантовых вычислений, которая позволяет группировать несколько заданий квантовых вычислений вместе.

В этой статье объясняется архитектура сеансов в гибридных квантовых вычислениях и создание нового сеанса.

Необходимые компоненты

Чтобы создать сеанс, необходимо выполнить следующие предварительные требования:

  • Учетная запись Azure с активной подпиской. Если у вас нет учетной записи Azure, зарегистрируйтесь бесплатно и зарегистрируйтесь для подписки с оплатой по мере использования.

  • Рабочая область Azure Quantum. Дополнительные сведения см. в статье Создание рабочей области Azure Quantum.

  • Среда Python с установленным Python и Pip .

  • Пакет Azure Quantum azure-quantum . Если вы хотите использовать Qiskit или Cirq, необходимо установить azure-quantum пакет с тегами [qiskit] или [cirq].

    pip install --upgrade azure-quantum[qiskit] 
    

Что такое сеанс?

Сеанс — это логическая группировка одного или нескольких заданий, отправленных одному target. Каждый сеанс имеет уникальный идентификатор, подключенный к каждому заданию в этом сеансе.

В сеансах вычислительный ресурс клиента может быть перемещен в облако, что приводит к снижению задержки и возможности повторять выполнение квантового канала с разными параметрами. Задания можно сгруппировать логически в один сеанс, а задания в этом сеансе можно определить приоритетом по сравнению с несеансовых заданий. Хотя состояния кубитов не сохраняются между заданиями, сеанс позволяет более короткое время очереди для заданий и более длительных проблем.

Сеансы позволяют упорядочивать несколько заданий квантовых вычислений с возможностью выполнения классического кода между квантовыми заданиями. Вы сможете выполнять сложные алгоритмы для более эффективной организации и отслеживания отдельных заданий квантовых вычислений.

Ключевой сценарий пользователя, в котором может потребоваться объединить задания в сеансе, параметризованы квантовые алгоритмы, в которых выходные данные одного задания квантовых вычислений сообщают параметрам следующего задания квантовых вычислений. Наиболее распространенными примерами этого типа алгоритма являются Variational Quantum Eigensolvers (VQE) и Quantum Approximate Optimization Algorithms (QAOA).

Поддерживаемое оборудование

Сеансы поддерживаются для всех поставщиков оборудования квантовых вычислений. В некоторых случаях задания, отправленные в сеансе, определяются в очереди.target Дополнительные сведения см. в статье Target о поведении.

Создание сеанса

Чтобы создать сеанс, выполните следующие действия.

В этом примере показано, как создать сеанс с встроенным кодом с Q# помощью Jupyter Notebook в Visual Studio Code. Вы также можете создавать сеансы с помощью программы Python, которая вызывает соседнюю Q# программу.

Примечание.

Сеансы управляются с помощью Python, даже если выполняется Q# встроенный код.

  1. В VS Code выберите палитру команд view > и нажмите кнопку Create: New Jupyter Notebook.

  2. В правом верхнем углу VS Code обнаружит и отобразит версию Python и виртуальную среду Python, выбранную для записной книжки. Если у вас несколько сред Python, может потребоваться выбрать ядро с помощью средства выбора ядра в правом верхнем углу. Если среда не обнаружена, сведения о настройке см . в записных книжках Jupyter Notebook в VS Code .

  3. В первой ячейке записной книжки запустите

    import azure.quantum
    
    workspace = azure.quantum.Workspace(
        resource_id = "", # add your resource ID
        location = "", # add your location, for example "westus"
    )
    
  4. Нажмите кнопку +Код , чтобы добавить новую ячейку в записную книжку и импортировать qsharp пакет SDK для Python.

    import qsharp
    
  5. Выберите нужный квантовый объект target . В этом примере вы используете симулятор IonQ в качестве target.

    target = workspace.get_targets("ionq.simulator")
    
  6. Выберите конфигурации target профиля либо Base, Adaptive_RIлибо Unrestricted.

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

    Примечание.

    Adaptive_RItarget Задания профилей в настоящее время поддерживаются в Quantinuum targets. Дополнительные сведения см. в разделе "Интегрированные гибридные квантовые вычисления".

  7. Напишите программу Q# . Например, следующая Q# программа создает случайный бит. Чтобы проиллюстрировать использование входных аргументов, эта программа принимает целое число nи массив углов, angleв качестве входных данных.

    %%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;
    }
    
  8. Затем вы создадите сеанс. Предположим, вы хотите выполнить GenerateRandomBit операцию три раза, поэтому вы используете target.submit для отправки Q# операции с target данными, и вы повторяете код три раза - в реальном сценарии, вы можете отправить разные программы вместо одного и того же кода.

    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]
    

    Внимание

    При передаче аргументов в качестве параметров заданию они форматируются в выражение при вызове Q# qsharp.compile. Это означает, что необходимо тщательно отформатировать аргументы в виде Q# объектов. В этом примере, так как массивы в Python уже печатаются как [item0, item1, ...], входные аргументы соответствуют Q# форматированию. Для других структур данных Python может потребоваться дополнительная обработка, чтобы получить строковые значения, вставляемые Q# в совместимый способ.

  9. После создания сеанса можно использовать workspace.list_session_jobs для получения списка всех заданий в сеансе. Дополнительные сведения см. в разделе "Управление сеансами".

Поведение Target

Каждый поставщик квантового оборудования определяет собственные эвристики для лучшего управления приоритетом заданий в сеансе.

Quantinuum

Если вы решили отправить задания в сеансе в Quantinuum target, сеанс будет иметь монопольный доступ к оборудованию до тех пор, пока вы выполняете задания очереди в течение одной минуты друг от друга. После этого задания будут приняты и обработаны с помощью стандартной логики очередей и приоритетов.