[Из песочницы] Обзор и сравнение квантовых программных платформ гейтового уровня

Привет, Хабр! Представляю вашему вниманию перевод статьи «Overview and Comparison of Gate Level Quantum Software Platforms» автора Ryan LaRose.

Квантовые компьютеры доступны для использования в облачной инфраструктуре, но в тоже время недавний бурный рост квантовых программных платформ может быть ошеломляющим для тех, кто будет принимать решение, что использовать. В этой статье предлагается текущая картина быстро развивающегося ландшафта квантовых вычислений путем сравнения четырех программных платформ — Forest (pyQuil), QISKit, ProjectQ и комплекта Quantum Development Kit, — которые позволяют исследователям использовать реальные и моделируемые квантовые устройства. Этот анализ охватывает требования и установку, синтаксис языка на примере программ, поддержку на уровне библиотек и возможности квантового симулятора для каждой платформы. Для платформ с поддержкой квантового компьютера мы сравним аппаратные средства, квантовые ассемблерные языки и квантовые компиляторы. В заключение мы рассмотрим особенности каждого из них и кратко упомянем другие пакеты программного обеспечения для квантовых вычислений.

I. Введение
II. Платформы программного обеспечения
    A. pyQuil
    B. QISKit
    C. ProjectQ
    D. Quatum Development Kit
III. Сравнение
    A. Поддержка на уровне библиотек
    B. Квантовое аппаратное оборудование
    C. Квантовые компиляторы
    D. Производительность симулятора
    E. Особенности
IV. Обсуждение и выводы
Список литературы
Приложение A. Другие программные платформы
Приложение B. Тестирование производительности симулятора
Приложение C. Пример программы: Схема телепортации

Квантовые языки программирования были рассмотрены как минимум два десятилетия назад [1–3], но они были в основном теоретическими и без существующего оборудования. Квантовые компьютеры теперь являются реальностью, и существуют квантовые языки программирования, которые позволят любому, у кого есть доступ к Интернету, использовать их. Достаточное множество исследователей как в индустрии, так и в академических кругах, создало небольшие квантовые устройства, которые работают на схемной модели квантовых вычислений. Эти компьютеры небольшие, зашумленные и не такие мощные, как современные классические компьютеры. Но они зарождаются, неуклонно растут и предвещают будущие невообразимо большие вычислительные мощности для задач химии [4, 5], машинного обучения [6, 7], оптимизации [8], финансовой сферы [9] и более [10]. Эти устройства являются испытательным стендом для подготовки следующего поколения квантовых инженеров-программистов для решения существующих в настоящее время классически сложных задач вычислительной техники. Действительно, облачные квантовые вычисления уже использовались для расчета энергии связи дейтрона [11] и тестовых подпрограмм в алгоритмах машинного обучения [12, 13].

В последнее время произошел бурный рост программного обеспечения для квантовых вычислений на широком наборе классических компьютерных языков. Список проектов с открытым исходным кодом, насчитывающий свыше пятидесяти, доступен в [14], а список квантовых компьютерных симуляторов доступен в [15]. Это огромное количество программ, позитивно отражающих рост в области, затрудняет студентам и исследователям принимать решение какой программный пакет использовать, чтобы не потеряться в документации или не быть потрясённым от необходимых начальных знаний.

В этой статье ожидается представить краткий обзор и сравнение основных программных платформ для квантовых вычислений общего назначения на гейтовом уровне. Из длинного списка было выбрано четыре: три, предоставляющие пользователю возможность подключаться к реальным квантовым устройствам — pyQuil от Rigetti [16], QISKit от IBM [17] и ProjectQ от ETH Zurich [18, 19], — и один с аналогичной функциональностью, но без текущей возможности подключения к квантовому компьютеру — Quantum Development Kit от Microsoft [20]. В пользу выбора данных платформ стала возможность подключения к реальному квантовому устройству. Из-за этого и ради лаконичности намеренно опускается ряд респектабельных программ. Некоторые из них упоминаются в Приложении А.

На данный момент главной целью является представление картины ландшафта квантовых вычислений, обусловленными этими четырьмя платформами. В разделе II мы рассмотрим каждую платформу поочередно, обсуждая требования и установку, документацию и учебные пособия, синтаксис языка и квантовое оборудование. В разделе III предлагается подробное сравнение платформ. В него включается: поддержка на уровне библиотек квантовых алгоритмов в III A, квантовая аппаратная поддержка в III B, компиляторы квантовых схем в III C и квантовые компьютерные симуляторы III D. В разделе IV обсуждаются и некоторые субъективные замечания о каждой платформе. Приложение A содержит информацию о других квантовых программных обеспечениях, Приложение B содержит подробную информацию о тестировании симуляторов квантовой схемы, а в Приложении C показан код для схемы квантовой телепортации на каждом из четырех языков для сравнения бок о бок.

На Фигуре 1 представлены различные квантовые компьютеры и программные обеспечения, используемые для подключения к устройствам. В настоящее время, четыре программные платформы позволяют подключаться к четырем различным квантовым компьютерам — один от Rigetti, 8-ми кубитный квантовый компьютер, подключиться можно с помощью pyQuil [41]; и три от IBM, с наибольшим доступным количеством в 16 кубит, которые могут быть подключены с помощью QISKit или ProjectQ. Кроме того, IBM предлагает четвертый 20-кубитный квантовый компьютер, но это устройство доступно только членам IBM Q Network [42]: группе компаний, университетов и национальных лабораторий, заинтересованных и инвестирующих в квантовые вычисления. На Фигуре 1 также показаны квантовые компьютеры таких компаний, как Google, IBM и Intel, которые были объявлены, но в настоящее время недоступны для обычных пользователей.

2rarfrdovr6xblqsx4l-klu2nne.png


Фигура 1. Схематическая диаграмма, показывающая способы подключения персонального компьютера к используемому квантовому компьютеру на гейтовом уровне. Начиная с персонального компьютера (снизу в центре), узлы зеленого цвета показывают программное обеспечение, которое можно установить на персональный компьютер пользователя. Серые узлы показывают, что симуляторы запускаются локально (то есть на компьютере пользователя). Пунктирные линии показывают API / облачные подключения к ресурсам компании, показанным в желтых «облаках». Квантовые симуляторы и используемые квантовые компьютеры, обеспечиваемые этими облачными ресурсами, показаны в синем и золотом соответственно. Красные рамки показывают требования на выбранном способе. Например, чтобы подключиться к Rigetti Forest и использовать квантовый компьютер Agave 8 qubit, необходимо загрузить и установить pyQuil (доступный на MacOS, Windows и Linux), зарегистрироваться на веб-сайте Rigetti для получения ключа API, а затем запросить доступ к устройству через онлайн-форму. Примечания: (i) Квантовая виртуальная машина Rigetti требует повышения прав для более 30 кубитов, (ii) локальные симуляторы зависят от компьютера пользователя, поэтому приведенные числа являются приблизительными, и (iii) в серой рамке показаны квантовые компьютеры, которые были анонсированы, но которые в настоящее время недоступны для обычных пользователей.

Технология квантового оборудования быстро меняется. Весьма вероятно, что к концу года появятся новые компьютеры, и через два-три года этот список может быть полностью устаревшим. Однако, что останется, так это программное обеспечение, используемое для подключения к этой технологии. Было бы очень просто использовать новые квантовые компьютеры, изменив всего несколько строк кода, не изменяя фактически синтаксис, используемый для генерации или запуска квантовой схемы. Например, в QISKit нужно просто изменить имя backend-устройства при выполнении схемы:

execute(quantum_circuit, backend="name", ...)

Листинг 1. Cтрока «name» указывает на backend-устройство для запуска квантовых программ с использованием QISKit. Когда будущие квантовые компьютеры будут выпущены, выполнение на новом оборудовании будет такой же простой, как и изменение имени.

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

В этом разделе мы поочередно рассмотрим каждую из четырех платформ, обсуждая требования и установку, документацию и руководства, синтаксис языка, квантовый язык, квантовое оборудование и возможности симулятора. Этот обзор не предназначен для полного обучения языку, но он дает читателю понимание о каждой платформе, прежде чем погрузиться в одну (или более) из выбранных платформ. Текущий анализ включает в себя достаточную информацию для запуска алгоритмов на квантовых компьютерах. Тем не менее, читатель, когда он выбрал определенную платформу, направляем на специальную документацию для получения полной информации. Были добавлены ссылки на документацию и источники учебных пособий для каждого программного пакета. Также предполагается, что есть базовые знания о квантовых вычислениях, для чего сейчас существует множество хороших ссылок [21, 22].

Все фрагменты кода и программы, включенные в этот документ, были протестированы и запущены на ноутбуке Dell XPS 13 Developer Edition под управлением Linux Ubuntu 16.04 LTS, полные спецификации которого перечислены в [23]. Хотя все программные пакеты работают во всех трех основных операционных системах, по опыту автора значительно проще установить и использовать программное обеспечение на платформе, на которой она была разработана. В среде Linux Ubuntu при установке этих пакетов программного обеспечения не возникало никаких трудностей и необычных сообщений об ошибках.


pyQuil QISKit ProjectQ QDK
Institution Rigetti IBM ETH Zurich Microsoft
First Release v0.0.2 on Jan 15, 2017 0.1 on March 7, 2017 v0.1.0 on Jan 3, 2017 0.1.1712.901 on Jan 4, 2018 (pre-release)
Current Version v1.9.0 on June 6, 2018 0.5.4 on June 11, 2018 v0.3.6 on Feb 6, 2018 0.2.1802.2202 on Feb 26, 2018 (pre-release)
Open Source?
License Apache-2.0 Apache-2.0 Apache-2.0 MIT
Homepage Home Home Home Home
GitHub Git Git Git Git
Documentation Docs, Tutorials (Grove) Docs, Tutorial Notebooks, Hardware Docs, Example Programs, Paper Docs
OS Mac, Windows, Linux Mac, Windows, Linux Mac, Windows, Linux Mac, Windows, Linux
Requirements Python 3, Anaconda (recommended) Python 3.5+, Jupyter Notebooks (for tutorials), Anaconda 3 (recommended) Python 2 or 3 Visual Studio Code (strongly recommended)
Classical Language Python Python Python Q#
Quantum Language Quil OpenQASM none/hybrid Q#
Quantum Hardware 8 qubits IBMQX2 (5 qubits), IBMQX4 (5 qubits), IBMQX5 (16 qubits), QS1_1 (20 qubits) no dedicated hardware, can connect to IBM backends none
Simulator ∼20 qubits locally, 26 qubits with most API keys to QVM, 30+ w/private access ∼25 qubits locally, 30 through cloud ∼28 qubits locally 30 qubits locally, 40 through Azure cloud
Features Generate Quil code, example algorithms in Grove, topology-specific compiler, noise capabilities in simulator, community Slack channel Generate QASM code, topology specific compiler, community Slack channel, circuit drawer, ACQUA library Draw circuits, connect to IBM backends, multiple library plug-ins Built-in algorithms, example algorithms


pyQuil

A. pyQuil

pyQuil — это библиотека для языка Python с открытым исходным кодом, разработанная Rigetti для создания, анализа и выполнения квантовых программ. Она построена на основе языка Quil — открытый язык квантовых инструкций (или просто квантовый язык), специально разработанного для ближайших перспективных квантовых компьютеров и основанного на общей модели классической/квантовой памяти [24] (это означает, что для памяти доступны как кубиты, так и классические биты). pyQuil — это одна из основных библиотек, разрабатываемых в Forest, которая является ключевой платформой для всего программного обеспечения Rigetti. Forest также включает Grove и Reference QVM, которые будут описаны далее.


a. Требования и установка

Чтобы установить и использовать pyQuil, требуется Python 2 или 3 версии, хотя настоятельно рекомендуется Python 3, поскольку будущие разрабатываемые функции будут поддерживать только Python 3. Кроме того, дистрибутив Python Anaconda рекомендуется для различных зависимостей модуля Python, хотя это не обязательно.

Самый простой способ установки pyQuil — использовать команду диспетчера пакетов Python. В командной строке Linux Ubuntu вводится

pip install pyquil

для успешной установки программного обеспечения. В качестве альтернативы, если Anaconda установлен, pyQuil можно установить, набрав

conda install −c rigetti pyquil

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

git clone https://github.com/rigetticomputing/pyquil
cd pyquil
pip install −e

Этот последний метод рекомендуется для всех пользователей, которые могут внести свой вклад в pyQuil. Более подробную информацию смотрите в руководстве по вкладам GitHub.


b. Документация и учебные пособия

pyQuil имеет отличную документацию, размещенную в Интернете, с введением в область квантовых вычислений, инструкциями по установке, базовыми программами и гейтовыми операциями, симулятором, известным как квантовая виртуальная машина (QVM), реальный квантовый компьютер и язык Quil с компилятором. Загрузив исходный код pyQuil с GitHub, вы также получите папку с примерами в Jupyter-тетрадях, обычных примеров на Python и программой $inline$\textsf{run_quil.py}$inline$, которая может запускать текстовые документы, написанные в Quil, используя квантовую виртуальную машину. Наконец, упоминем Grove, набор квантовых алгоритмов, построенных с использованием pyQuil и среды Rigetti Forest.


c. Синтаксис

Синтаксис pyQuil очень простой и практичный. Основным элементом для записи квантовых схем является программа и может быть импортирована из $inline$\textsf{pyquil.quil}$inline$. Гейтовые операции можно найти в $inline$\textsf{pyquil.gates}$inline$. Модуль $inline$\textsf{api}$inline$ позволяет запускать квантовые схемы на виртуальной машине. Одна из приятных особенностей pyQuil заключается в том, что регистры кубитов и классические регистры не обязательно должны быть определены априори и могут быть выделены в памяти динамически. Кубиты в регистре кубитов упоминаются индексами (0, 1, 2, …) и аналогично для бит в классическом регистре. Таким образом, схему случайного генератора можно записать следующим образом:

# random number generator circuit in pyQuil
from pyquil.quil import Program
import pyquil.gates as gates
from pyquil import api

qprog = Program()
qprog += [gates.H(0), gates.MEASURE(0, 0)]

qvm = api.QVMConnection()
print(qvm.run(qprog))

Листинг 2. Код pyQuil для генератора случайных чисел.

В первых трех строках импортируется минимум, необходимый для объявления квантовой схемы/программы (строка 2), для выполнения гейтовых операций над кубитами (строка 3) [44] и для выполнения схемы (строка 4). В строке 6 создается квантовая программа, а в строках 7–8 передается ей список инструкций: сначала подействуем гейтом Адамара $inline$H$inline$ над кубитом под индексом 0, затем измеряем этот же кубит в классический бит под индексом 0. В строке 10 устанавливается соединение с QVM, а в 11 запускается и выводится результат нашей схемы. Эта программа печатает стандартный вывод pyQuil в виде списка списков целых чисел: в нашем случае — $inline$\textsf{[[0]]}$inline$ или $inline$\textsf{[[1]]}$inline$. В общем, количество элементов во внешнем списке — это количество выполненных испытаний. Целочисленные числа во внутренних списках представляют собой окончательные измерения в классическом регистре. Поскольку мы провели только одно испытание (это указано как аргумент в $inline$\textsf{api.QVMConnection.run}$inline$, который по умолчанию установлен в единицу), мы получаем только один внутренний список. Поскольку в классическом регистре мы имели только один бит, то мы получаем только одно целое число.


d. Квантовый язык

Quil — это язык квантовых инструкций или просто квантовый язык, который передает команды квантовому компьютеру. Это аналогично ассемблеру на классических компьютерах. Основа синтаксиса Quil — это $inline$\textsf{GATE index}$inline$, где $inline$\textsf{GATE}$inline$ является квантовым вентилем, который применяется к кубиту, индексированным $inline$\textsf{index}$inline$ (0, 1, 2, …). pyQuil имеет функцию для генерации кода Quil из заданной программы. Например, в вышеупомянутом генераторе квантовых случайных чисел мы могли бы добавить строку:

print(qprog)

в конце для получения кода Quil-схемы, который показан ниже:

H 0
MEASURE 0 [0]

Листинг 3. Код Quil для генератора случайных чисел.

Возможно, если кто-то станет разбираться в Quil, написать квантовые схемы в текстовом редакторе на языке Quil, а затем выполнить схему на QVM с помощью программы $inline$\textsf{run_quil.py}$inline$. Можно также модифицировать $inline$\textsf{run_quil.py}$inline$, чтобы запустить схему на QPU. Заметим, что компилятор pyQuil (также называемый компилятором Quil в документации) преобразует заданную схему в код Quil, который может понять реальный квантовый компьютер. Мы обсудим это подробнее в разделе III C.


f. Квантовое аппаратное оборудование

Rigetti имеет квантовый процессор, который может использоваться теми, кто запросил доступ. Чтобы запросить доступ, вы должны посетить веб-сайт Rigetti и указать полное имя, адрес электронной почты, название организации и описание основания для доступа к QPU. Как только это будет сделано, представитель компании обратится по электронной почте, чтобы запланировать время, чтобы предоставить пользователю доступ к QPU. Преимущество этого процесса планирования в отличие от системы очередей QISKit, которая будет обсуждаться далее, заключается в том, что многие задания могут выполняться в распределенном временном интервале с детерминированными временем выполнения, что является ключевым для вариационных и гибридных алгоритмов. Эти типы алгоритмов отправляют данные в обратном и прямом направлении между классическими и квантовыми компьютерами — необходимость ждать очереди делает этот процесс значительно дольше. Недостатком (возможно) является то, что задания не могут выполняться в любое время, когда доступен QPU и необходимо указать, и согласиться на конкретное время.

По опыту автора сотрудники готовы помочь, и процесс, как правило, успешен. Актуальное устройство, топология которого показана на Фигуре 2, состоит из 8 кубит со связанностью ближайшего соседа. Мы рассмотрим этот компьютер более подробно в разделе III B.


g. Симулятор

Квантовая виртуальная машина (QVM) является основной утилитой, используемой для выполнения квантовых схем. Это программа, написанная для запуска на классическом процессоре, получает код Quil и моделирует развитие процесса на реальном квантовом компьютере. Чтобы подключиться к QVM, необходимо бесплатно зарегистрировать ключ API на https://www.rigetti.com/forest, указав имя и адрес электронной почты. Затем придёт электронное письмо, содержащее ключ API и идентификатор пользователя, который должен быть настроен при запуске:

pyquil−config−setup

в командной строке (после установки pyQuil, конечно). Затем появится запрос на ввод ключей из электронной почты.

Согласно документации, большинство ключей API предоставляют доступ к QVM до 30 кубит, и можно запросить доступ к большему количеству кубит. Ключ API автора дает доступ к 26 кубитам (обновления не запрашивались).

Кроме того, библиотека Forest содержит локальный симулятор, написанный на Python и с открытым исходным кодом, называемый как Reference QVM. Он не такой производительный, как QVM, но пользователи могут запускать схемы с количеством кубитов, ограниченными количеством памяти на локальных машинах. Как правило, схемы с количеством кубит меньше 20-ти возможно запустить на широком кругу оборудовании. Reference QVM должен устанавливаться отдельно, что может быть сделано с помощью $inline$\textsf{pip}$inline$:

pip install referenceqvm

Чтобы использовать Reference QVM вместо QVM, просто импортируйте $inline$\textsf{api}$inline$ из $inline$\textsf{referenceqvm}$inline$ вместо pyQuil:

import referenceapi.api as api

h5wl93iz6yc1lipz61b0ie-kl2a.png


Фигура 2. Схематическая диаграмма, показывающая топологию (связность) 8-кубитного Agave QPU Rigetti. Qubits отмечены целыми числами 0, 1, …, 7, а линии, соединяющие кубиты, указывают, что между этими кубитами может быть выполнена двух кубитная операция. Например, мы можем выполнить Controlled-$inline$Z$inline$ над кубитами 0 и 1, но не между 0 и 2. Чтобы выполнить последнее, компилятор Quil преобразует Controlled-$inline$Z$inline$ (0, 2) в операции, которые может выполнить QPU. Эта диаграмма взята из документации pyQuil.

QISKit

B. QISKit

Quantum Information Software Kit, или QISKit, представляет собой комплект разработчика программного обеспечения (SDK) с открытым исходным кодом для работы с квантовым языком OpenQASM и квантовыми процессорами в платформе IBM Q. Он доступен для языков Python, JavaScript и Swift, но здесь мы обсуждаем только версию Python.


a. Требования и установка

QISKit доступен в MacOS, Windows и Linux. Для установки QISKit требуется Python 3.5+. Дополнительные полезные, но не обязательные компоненты — это Jupyter Notebooks для учебных пособий и дистрибутив Python Anaconda 3, в которым присутствуют все необходимые зависимости.

Самый простой способ установить QISKit — это использовать менеджер пакетов pip для Python. В командной строке, для установки программного обеспечение, введем:

pip install qiskit

Обратите внимание, что $inline$\textsf{pip}$inline$ автоматически обрабатывает все зависимости и всегда будет устанавливать последнюю версию. Пользователи, которые могут быть заинтересованы внести вклад в QISKit, могут установить исходный код, введя в командной строке следующее, предполагается, что git установлен:

git clone https://github.com/QISKit/qiskit−core
cd qiskit−core
python −m pip install −e 

Для получения информации о вкладах смотрите в онлайн-документации руководства по вкладам на GitHub.


b. Документация и учебные материалы

Документацию QISKit можно найти в Интернете по адресу https://qiskit.org/documentation/. В нем содержатся инструкции по установке и настройке, примеры программ и подключение к реальным квантовым устройствам, организация проекта, обзор QISKit и документация для разработчика. Базовая информация о квантовых вычислениях также может быть найдена для пользователей, которые являются новичками в этой области. Очень хороший ресурс — это ссылка на SDK, где пользователи могут найти информацию о документации по исходному коду.

QISKit также содержит большое количество учебных пособий в отдельном репозитории GitHub (аналогично pyQuil и Grove). К ним относятся запутанные состояния; стандартные алгоритмы, такие как Дойча-Йожа, алгоритм Гровера, оценка фазы и квантовое преобразование Фурье; также более сложные алгоритмы, такие как решение квантовой вариационной задачи на собственные значения и приложение к фермионным гамильтонианам; и даже некоторые забавные игры, такие как квантовый «морской бой». Кроме того, библиотека ACQUA (Algorithms and Circuits for QUantum Applications) содержит многопрофильные алгоритмы для химии и искусственного интеллекта с многочисленными примерами.

Существует также очень подробная документация для каждого из четырех квантовых бэкендов, содержащих информацию о связности, времени когерентности и времени применения гейта. Наконец, упомянем веб-сайт IBM Q experience и руководства пользователя. Веб-сайт содержит графический интерфейс для квантовой схемы, в котором пользователи могут перетаскивать гейты на схему, что полезно для изучения квантовых схем. Руководства пользователя содержат больше инструкций по квантовым вычислениям и языку QISKit.


c. Синтаксис

На синтаксис QISKit можно посмотреть в следующей примерной программе. Здесь, в отличие от pyQuil, нужно явно выделить квантовые и классические регистры. Ниже показана программа для схемы случайных чисел в QISKit:

# random number generator circuit in QISKit
from qiskit import QuantumRegister, ClassicalRegister, QuantumCircuit, execute

qreg = QuantumRegister(1)
creg = ClassicalRegister(1)
qcircuit = QuantumCircuit(qreg , creg)

qcircuit.h(qreg[0])
qcircuit.measure(qreg[0], creg[0])

result = execute(qcircuit, ’local qasm simulator’).result()
print(result.get_counts())

Листинг 4. Код QISKit для генератора случайных чисел.

В строке 2 импортируются инструменты для создания квантовых и классических регистров, квантовой схемы и функции для выполнения этой схемы. Затем мы создаем квантовый регистр с одним кубитом (строка 4), классический регистр с одним битом (строка 5) и квантовую схему с обоими этими регистрами (строка 6). Теперь, когда схема создана, мы начинаем подавать инструкции: в строке 8 применяем гейт Адамара к нулевому кубиту в нашем квантовом регистре (который является единственным кубитом в квантовом регистре); в строке 9 измеряем этот кубит в классический бит, индексированный нулем в нашем классическом регистре (который является единственным в классическом регистре) [45]. Теперь, когда квантовая схема построена, выполним ее в строке 11 и распечатаем результат в строке 12. Посредством вывода $inline$\textsf{result.get_counts ()}$inline$ мы получаем «подсчеты» схемы, то есть словарь выходных данных и сколько раз получали каждый результат. Для нашего случая единственными возможными выходами являются 0 или 1, а пример вывода вышеуказанной программы — $inline$\textsf{{'0': 532, '1': 492}}$inline$, что указывает на то, что мы получили 532 экземпляра 0 и 492 экземпляра 1. (По умолчанию количество циклов для запуска схемы, называемое $inline$\textsf{shots}$inline$ в QISKit, равно 1024.)


d. Квантовый язык

OpenQASM (открытый язык квантового ассемблера [25], который мы можем назвать просто QASM) — это квантовый язык, который предоставляет инструкцию для реальных квантовых устройств, аналогичных ассемблеру на классических компьютерах. Основой синтаксиса QASM является $inline$\textsf{gate qubit}$inline$, где $inline$\textsf{gate}$inline$ задает операцию квантового вентиля, а $inline$\textsf{qubit}$inline$ — кубит. QISKit имеет функцию для генерации кода QASM из схемы. В приведенном выше примере схемы случайных чисел мы могли бы добавить строку.

print(qcircuit.qasm())

в конце для получения кода QASM для схемы, показанной ниже:

OPENQASM 2.0;
include ”qelib1.inc”;
qreg q0[1];
creg c0[1];
h q0[0];
measure q0[0] −> c0[0];

Листинг 5. Код OpenQASM для генератора случайных чисел.

Первые две строки включены в каждый файл QASM. Строка 3 (4) создает квантовый (классический) регистр, а строки 5 и 6 дают инструкции для схемы. В OpenQASM можно написать небольшие схемы, подобные этим, но для более крупных схем лучше использовать инструменты в QISKit для свободного и эффективного программирования квантовых компьютеров.


e. Квантовое аппаратное оборудование

Существует огромное количество документации для квантовых бэкендов, поддерживаемых QISKit. Эти устройства включают в себя IBMQX2 (5 кубитов), IBMQX4 (5 кубитов), IBMQX5 (16 кубитов) и QS1_1 (20 кубит, доступным только членами IBM Q Network). Документация для каждого доступна на GitHub. Мы подробно рассмотрим IBMQX5 в разделе III B, топология которого показана на Фигуре 3.


f. Симулятор

IBM включает в себя несколько симуляторов квантовых схем, которые запускаются локально или на облачно вычислительных ресурсах. Эти симуляторы содержат в себе локальный унитарный симулятор, который использует всю унитарную матрицу схемы и практически ограничен до около 12 кубитов, и симулятор векторного состояния, который лучше всего работает локально и может имитировать схемы до 25 кубит. На данный момент просто цитируется число кубитов, тем не менее рассматрии производительность симулятора векторного состояния и сравнивая его с другими симуляторами в разделе III D.

gizjgj55tb_7culyavig3pqh2rw.png


Фигура 3. Схематическая топология IBMQX5, взятая из [30]. Направленные стрелки показывают возможности запутывания. Например, мы могли бы выполнить операцию (в QASM) $inline$\textsf{cx Q1, Q2}$inline$, но не операцию $inline$\textsf{cx Q2, Q1}$inline$. Чтобы сделать последнее, компилятор переводит инструкцию в эквивалентные гейты, которые выполняются в топологии и наборе гейтов.

ProjectQ

C. ProjectQ

ProjectQ — это программная среда с открытым исходным кодом для квантовых вычислений с возможностью подключения к квантовым бэкендам IBM, высокопроизводительным квантовым компьютерным симулятором и несколькими библиотечными плагинами. Первый релиз ProjectQ был разработан Thomas Häner и Damien S. Steiger в группе Matthias Troyer в ETH Zurich, и с тех пор он набрал больше участников.


a. Требования и установка

Для установки ProjectQ требуется текущая версия Python (2.7 или 3.4+). Документация содержит подробную информацию об установке для каждой операционной системы. В нашей среде рекомендуется установка через $inline$\textsf{pip}$inline$:

python −m pip install −−user projectq

для успешной установки программного обеспечения (как пользователя). Для установки из исходного кода мы можем набрать следующее в командной строке:

git clone https://github.com/ProjectQ−Framework/ProjectQ
cd projectq
python −m pip install −−user

Как и в предыдущих программах, этот метод рекомендуется для пользователей, которые хотят внести свой вклад в исходный код. Инструкции по этому поводу смотрите в руководстве по вкладам на странице ProjectQ GitHub.


b. Документация и учебные материалы

ProjectQ имеет очень хорошую документацию по установке. Однако выделим, что оставшаяся часть документации немного скудна. В онлайн-учебном пособии представлены инструкции по базовому синтаксису и примерам квантовых программ (случайные числа, телепортация и алгоритм разложения Шора). Остальная часть — это документация/ссылка на код с информацией о структуре кода и каждом дополнительном модуле, включая функции и классы. Документы [18, 19] являются хорошими ссылками и источниками, но более вероятно, что онлайн-документация будет более актуальной.


c. Синтаксис

Синтаксис ProjectQ прост и практичен, хотя для этого нужно привыкнуть. Для ProjectQ нет языка квантового ассемблера (поскольку нет квантового бэкенда ProjectQ), но используется классический язык — своего рода гибридный классический/квантовый язык. Чтобы разъяснить, пример программы для создания случайного бита показан ниже:

# random number generator circuit in ProjectQ
from projectq import MainEngine
import projectq.ops as ops

eng = MainEngine()
qbits = eng.allocate_qureg(1)
    ops.H | qbits[0]
ops.Measure | qbits[0]
    eng.flush()
print(int(qbits[0]))

Листинг 6. Код ProjectQ для генератора случайных чисел.

В строке 2 импортируется необходимый модуль для создания квантовой схемы, а в строке 3 импортируются операции с гейтом. В строке 5 выделяется память и создаем движок (engine) $inline$\textsf{MainEngine}$inline$, а в строке 6 мы выделяем один кубитный регистр. В строках 8 и 9 приводятся инструкции схемы: сначала действуем гейтом Адамара на кубит в регистре с индексом 0, затем измеряем этот кубит. Здесь «квантовый синтаксис» появляется на классически написанном языке. Общая формулировка — $inline$\textsf{operation | qubit}$inline$ с вертикальной линией между двумя похожими на обозначения Дирака, $inline$H|0>$inline$, например. Затем мы сбрасываем движок, отправляя его на бэкэнд и обеспечивая его оценку/имитацию. В отличие от pyQuil и QISKit, в ProjectQ при измерении не указывается классический регистр. Вместо этого, когда мы измеряем $inline$\textsf{qbits[0]}$inline$ в строке 9, мы получаем его значение, преобразовывая его в $inline$\textsf{int}$inline$, когда выводим его в строке 12.


d. Квантовый язык

Как уже упоминалось, ProjectQ не имеет собственного специализированного квантового языка. Если вы используете ProjectQ совместно с бэкендом от IBM, код в конечном итоге будет преобразован в OpenQASM: язык квантового ассемблера IBM.


e. Квантовое аппаратное оборудование

ProjectQ не имеет собственного специализированного квантового компьютера. Тем не менее, каждый может использовать квантовые ресурсы IBM при использовании ProjectQ.


f. Симулятор

ProjectQ предоставляется с быстродействующим симулятором, написанным на C++, который будет установлен по умолчанию, если не возникнет ошибка, иначе будет установлен более медленный симулятор на Python. Кроме того, ProjectQ включает в себя $inline$\textsf{ClassicalSimulator}$inline$ для эффективного моделирования групповых схем (stabilizer circuits), т. е. схем, которые состоят из гейтов нормализатора группы Паули, которые могут быть получены из гейта Адамара, CNOT и фазового гейта [26]. Этот симулятор способен обрабатывать тысячи кубитов, чтобы проверить, например, схемы сумматора гейта Тоффоли, для конкретных данных. Однако групповые схемы не являются универсальными, поэтому наш тест и тестирование фокусируется на $inline$\textsf{C++ Simulator}$inline$.

$inline$\textsf{C++ Simulator}$inline$ ProjectQ технически сложный и быстродействующий. На компьютере автора [23]() (отметим, что максимальное количество кубитов ограничено локальной памятью пользователя), он может обрабатывать схемы с 26 кубитами и глубиной 5 в минуту, а схемы с 28 кубитами и глубиной 20 — чуть меньше десяти минут. Полную информацию смотрите в разделе [III D]() и на Фигуре 6.


h. ProjectQ в других платформах

ProjectQ является хорошо проверенным, надежным кодом и используется для других платформ, упомянутых в этой статье. В частности, pyQuil содержит код ProjectQ [27], а ядра симулятора Microsoft QDK разработаны Thomas Häner и Damian Steiger из ETH Zurich [28], оригинальными авторами проекта. (Обратите внимание, что это не обязательно означает, что симулятор QDK достигает производительности симулятора ProjectQ C++, так как обернутый код может снизить производительность.)


Quantum Development Kit

D. Quantum Development Kit

В отличие от технологии сверхпроводящих кубитов Rigetti и IBM, Microsoft делает ставку на топологические кубиты на основе майорановских фермионов. Эти частицы были недавно обнаружены [29] и обеспечивают длительное время когерентности и другие требуемые свойства, но функционального квантового компьютера, использующего топологические кубиты, в настоящее время не существует. Таким образом, у Microsoft в настоящее время нет устройства, с которым пользователи могут подключаться через комплект Quantum Development Kit (QDK), самую молодую из четырех платформ, представленных в этой статье. Несмотря на это, QDK имеет новый «квантово-ориентированный» язык под названием Q#, который имеет высокую степень интеграции с Visual Studio и Visual Studio Code и может локаль

© Habrahabr.ru