Поставщик Rigetti

Совет

Первые пользователи автоматически получают бесплатные кредиты Azure Quantum в размере 500 долл. США для использования с каждым участвующим поставщиком квантового оборудования. Если вы используете все кредиты и вам потребуются дополнительные, вы можете подать заявку на участие в программе кредитов Azure Quantum.

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

  • Издатель: Rigetti
  • Идентификатор поставщика: rigetti

Поставщик Rigetti предоставляет следующие targets возможности:

Имя целевого объекта Идентификатор целевого объекта Количество кубит Описание
Quantum Virtual Machine (QVM) rigetti.sim.qvm - Симулятор с открытым кодом для программ Quil, Q# и Qiskit. Бесплатно.
Анкаа-2 rigetti.qpu.ankaa-2 84 кубита Самый мощный квантовый процессор Rigetti.

Примечание

Симуляторы и оборудование targets Rigetti не поддерживают программы Cirq.

Rigetti соответствует targets профилю No Control Flow . Дополнительные сведения об этом target профиле и его ограничениях см. в статье Основные сведения target о типах профилей в Azure Quantum.

Симуляторы

The Quantum Virtual Machine (QVM) — это симулятор с открытым кодом для Quil. Класс rigetti.sim.qvmtarget принимает программу Quil в виде текста и запускает эту программу на QVM, размещенной в облаке, возвращая смоделированные результаты.

  • Тип задания: Simulation
  • Форматы данных: rigetti.quil.v1, rigetti.qir.v1
  • Идентификатор целевого объекта: rigetti.sim.qvm
  • Профиль выполнения целевого объекта: No Control Flow
  • Ценовая категория: бесплатно (0 долл. США)

Квантовые вычисления

Все общедоступные единицы обработки Rigetti доступны через Azure Quantum. Этот список может быть изменен без предварительного уведомления.

Анкаа-2

Многопроцессорный 84-кубитный процессор, обеспечивающий 2,5-х разное повышение производительности по сравнению с другими QPU Rigetti.

  • Тип задания: Quantum Program
  • Формат данных: rigetti.quil.v1, rigetti.qir.v1
  • Идентификатор целевого объекта: rigetti.qpu.ankaa-2
  • Профиль выполнения целевого объекта: No Control Flow

Цены

Чтобы просмотреть план выставления счетов для Rigetti, перейдите на страницу цен для Azure Quantum.

формат входных данных

В настоящее время все Rigetti targets принимают два формата:

  • rigetti.quil.v1, который является текстом программы Quil.
  • rigetti.qir.v1, который является QIR bitcode.

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

Quil

Все rigetti targets принимают rigetti.quil.v1 входной формат, который является текстом программы Quil , которая расшифровывается как квантовый язык обучения. По умолчанию перед запуском программы компилируются с помощью quilc . Однако quilc не поддерживает функции управления на уровне импульса (Quil-T), поэтому если вы хотите использовать эти функции, необходимо предоставить собственную программу Quil (также содержащую Quil-T) в качестве входных данных и указать входной параметр skipQuilc: true.

Чтобы упростить создание программы Quil, можно использовать pyQuil вместе с пакетом pyquil-for-azure-quantum. Без этого пакета pyQuil можно использовать для создания программ Quil, но не для отправки их в Azure Quantum.

QIR

Все оборудование Rigetti поддерживает выполнение заданий, совместимых Quantum Intermediate Representation с QIR, с базовым профилем QIR версии 1 как rigetti.qir.v1. QIR предоставляет общий интерфейс, который поддерживает многие квантовые языки и target платформы для квантовых вычислений и обеспечивает взаимодействие между высокоуровневые языки и компьютеры. Например, вы можете отправлять задания Q#, Quil или Qiskit на оборудование Rigetti, а Azure Quantum автоматически обрабатывает входные данные. Для получения дополнительной информации см. Quantum Intermediate Representation.

Выбор правильного формата ввода

Следует ли использовать Quil или другой язык, совместимый с QIR? Это сводится к вашему варианту использования. QIR является более доступным для многих пользователей, в то время как Quil на данный момент является более мощным.

Если вы используете Qiskit, Q# или другой набор средств, поддерживающий создание QIR, и ваше приложение работает в Rigetti targets через Azure Quantum, то QIR подходит для вас! QIR имеет быстро развивающуюся спецификацию, и Rigetti продолжает увеличивать поддержку более сложных программ QIR с течением времени - то, что не может быть скомпилировано сегодня, вполне может компилироваться завтра.

С другой стороны, программы Quil выражают полный набор функциональных возможностей, доступных пользователям систем Rigetti с любой платформы, включая Azure Quantum. Если вы хотите адаптировать декомпозицию квантовых шлюзов или писать программы на уровне импульса, тогда вам следует работать в Quil, так как эти возможности пока не доступны через QIR.

Примеры

Самым простым способом отправки заданий Quil является использование пакета pyquil-for-azure-quantum, так как он позволяет использовать средства и документацию библиотеки pyQuil.

Вы также можете создавать программы Quil вручную и отправлять их напрямую с помощью пакета azure-quantum.

from pyquil.gates import CNOT, MEASURE, H
from pyquil.quil import Program
from pyquil.quilbase import Declare
from pyquil_for_azure_quantum import get_qpu, get_qvm

# Note that some environment variables must be set to authenticate with Azure Quantum
qc = get_qvm()  # For simulation
# qc = get_qpu("Ankaa-2") for submitting to a QPU

program = Program(
    Declare("ro", "BIT", 2),
    H(0),
    CNOT(0, 1),
    MEASURE(0, ("ro", 0)),
    MEASURE(1, ("ro", 1)),
).wrap_in_numshots_loop(5)

# Optionally pass to_native_gates=False to .compile() to skip the compilation stage
result = qc.run(qc.compile(program))
data_per_shot = result.readout_data["ro"]
# Here, data_per_shot is a numpy array, so you can use numpy methods
assert data_per_shot.shape == (5, 2)
ro_data_first_shot = data_per_shot[0]
assert ro_data_first_shot[0] == 1 or ro_data_first_shot[0] == 0

# Let's print out all the data
print("Data from 'ro' register:")
for i, shot in enumerate(data_per_shot):
    print(f"Shot {i}: {shot}")