Начало работы с сеансами
Сеансы — это ключевая функция гибридных квантовых вычислений, которая позволяет группировать несколько заданий квантовых вычислений вместе.
В этой статье объясняется архитектура сеансов в гибридных квантовых вычислениях и создание нового сеанса.
Необходимые компоненты
Чтобы создать сеанс, необходимо выполнить следующие предварительные требования:
Учетная запись 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# встроенный код.
В VS Code выберите палитру команд view > и нажмите кнопку Create: New Jupyter Notebook.
В правом верхнем углу VS Code обнаружит и отобразит версию Python и виртуальную среду Python, выбранную для записной книжки. Если у вас несколько сред Python, может потребоваться выбрать ядро с помощью средства выбора ядра в правом верхнем углу. Если среда не обнаружена, сведения о настройке см . в записных книжках Jupyter Notebook в VS Code .
В первой ячейке записной книжки запустите
import azure.quantum workspace = azure.quantum.Workspace( resource_id = "", # add your resource ID location = "", # add your location, for example "westus" )
Нажмите кнопку +Код , чтобы добавить новую ячейку в записную книжку и импортировать
qsharp
пакет SDK для Python.import qsharp
Выберите нужный квантовый объект target . В этом примере вы используете симулятор IonQ в качестве target.
target = workspace.get_targets("ionq.simulator")
Выберите конфигурации target профиля либо
Base
,Adaptive_RI
либоUnrestricted
.qsharp.init(target_profile=qsharp.TargetProfile.Base) # or qsharp.TargetProfile.Adaptive_RI, qsharp.TargetProfile.Unrestricted
Примечание.
Adaptive_RI
target Задания профилей в настоящее время поддерживаются в Quantinuum targets. Дополнительные сведения см. в разделе "Интегрированные гибридные квантовые вычисления".Напишите программу 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; }
Затем вы создадите сеанс. Предположим, вы хотите выполнить
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# в совместимый способ.После создания сеанса можно использовать
workspace.list_session_jobs
для получения списка всех заданий в сеансе. Дополнительные сведения см. в разделе "Управление сеансами".
Поведение Target
Каждый поставщик квантового оборудования определяет собственные эвристики для лучшего управления приоритетом заданий в сеансе.
Quantinuum
Если вы решили отправить задания в сеансе в Quantinuum target, сеанс будет иметь монопольный доступ к оборудованию до тех пор, пока вы выполняете задания очереди в течение одной минуты друг от друга. После этого задания будут приняты и обработаны с помощью стандартной логики очередей и приоритетов.