Что собой представляет язык программирования Q# и пакете средств разработки Quantum (QDK)?

Q# — это язык программирования с открытым кодом, созданный корпорацией Майкрософт для разработки и выполнения квантовых алгоритмов. Он входит в пакет средств разработки Quantum (QDK) — комплект SDK с набором средств, помогающих при разработке программного обеспечения для квантовых вычислений.

В Q# используются знакомые вам элементы Python, C# и F#. Язык поддерживает базовую процедурную модель для написания программ с циклами, операторами if/then и общими типами данных. В нем также представлены новые структуры данных и операции, связанные с квантовыми вычислениями, такие как repeat-until-success (повторение до выполнения условия) и адаптивная оценка фазы, которые позволяют интегрировать квантовые вычисления с классическими. Например, можно управлять потоком выполнения классической программы в зависимости от результатов квантовых измерений.

Пакет средств разработки Quantum позволяет создавать программы, которые выполняются на квантовом оборудовании, или формулировать задачи, которые решаются с помощью квантовой оптимизации в Azure Quantum, открытой облачной экосистеме с широким набором квантовых решений и технологий. Пакет QDK обеспечивает поддержку Q#, Qiskit и Cirq для квантовых вычислений, поэтому если вы уже работаете с другими языками разработки, вы также можете запускать свои схемы в Azure Quantum.

Начало работы с Q#

Чтобы сразу приступить к работе, вы можете познакомиться с Q# на портале Azure Quantum без необходимости установки. Подробнее см. Начало работы с Q# и записной книжкой Azure Quantum.

Другие варианты среды разработки см. в разделе Настройка пакета средств разработки Quantum.

Язык квантового программирования Q#

Q# — это высокоуровневый язык квантового программирования с открытым кодом для выражения квантовых алгоритмов. Он создавался как платформенно-независимый, масштабируется под весь спектр квантовых приложений и обеспечивает оптимизацию выполнения. Дополнительные сведения о проекте разработки языка Q# см. в репозитории разработки Q# и основных библиотек на GitHub.

Интеграция с квантовыми и классическими вычислениями

Q# — это автономный язык, обеспечивающий высокий уровень абстракции. В нем нет понятия квантового состояния или цепи; вместо этого Q# реализует программы в терминах операторов и выражений, как в классических языках программирования. Различные квантовые возможности, такие как поддержка функторов и конструкций потока управления, упрощают создание выражений, например алгоритмов оценки фазы и квантовой химии.

Язык Q# позволяет интегрировать классические и квантовые вычисления. Это позволяет четко выражать адаптивные алгоритмы, например операцию оценки фазы посредством случайного блуждания, которые трудно выразить напрямую в модели цепей фиксированной последовательности квантовых вентилей.

Q# поддерживает общее классическое управление потоком во время выполнения алгоритма. В частности, классическое управление потоком основано на результатах квантовых измерений, что значительно упрощает запись элементов, которые зависят от промежуточных измерений. Например, цикл, необходимый для вероятностных алгоритмов, таких как поиск Гровера, можно легко выразить в Q# без возвращения к классическому драйверу для проверки того, подходит ли результат для оракула, и повторного выполнения в случае несоответствия.

Кубиты как непрозрачные ссылки

В Q#кубиты — это ресурс, запрашиваемый по мере необходимости из среды выполнения и возвращаемый, когда он больше не используется. Это аналогично тому, как классические языки работают с кучей памяти.

В Q# кубиты моделируются как непрозрачные типы данных, представляющие эталон для определенной квантовой системы с двумя состояниями — физическим или логическим (с коррекцией ошибок) — для выполнения квантовых операций. Это операционное представление кубитов: кубиты определяются возможными действиями с ними.

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

Представление, используемое в Q#, имеет одно интересное следствие: фактически все квантовые вычисления выполняются косвенно. Взаимодействовать с квантовым состоянием компьютера напрямую невозможно; у него нет программного представления. Вместо этого вы производите операции с сущностями кубитов, из-за чего косвенно изменяется квантовое состояние. Таким образом, квантовое состояние компьютера представляет собой непрозрачную глобальную переменную, которая доступна только посредством небольшого набора примитивов доступа (измерений), и даже эти методы доступа влияют на квантовое состояние опосредованно и поэтому представляют собой "мутаторы с результатами", а не истинные методы доступа.

Соблюдение законов физики

Квантовые программы должны соблюдать законы физики. Например, копирование состояния кубита или прямой доступ к состоянию кубита невозможны в Q#.

Поэтому Q# не может непосредственно анализировать состояние кубита или другие свойства квантовой механики. Это гарантирует физическое выполнение программы Q# на любом квантовом компьютере. Вместо этого программа на Q# может вызывать операции и функции, например DumpOperation operation, для извлечения из кубита классической информации, что позволяет выполнять валидацию и проверку состояний в ходе отладки в симуляторе. Дополнительные сведения см. на странице, посвященной тестированию и отладке.

Независимость от оборудования

Язык Q# не зависит от оборудования. Это означает, что он предоставляет средства для выражения и использования разнообразных концепций квантовых вычислений независимо от того, как оборудование будет изменяться в будущем. Для использования в различных приложениях Q# позволяет создавать многократно используемые компоненты и уровни абстракции. Для обеспечения производительности с увеличением размера квантовых компьютеров язык квантового программирования Q# поддерживает масштабируемость как приложений, так и усилий по разработке. Хотя полная сложность таких вычислений требует дальнейшей разработки оборудования, программы Q# могут быть нацелены на запуск на различных серверных модулях квантового оборудования в Azure Quantum.

Эффективное выполнение

Язык Q# ориентирован на выражение информации для оптимизации выполнения квантовых компонентов вне зависимости от контекста, в котором они вызываются. Q# позволяет разработчику выражать свое представление о необходимых вычислениях, чтобы компилятор мог принять обоснованное решение о том, как преобразовать его в инструкции. При этом используются сведения о полном приложении, недоступные разработчику.

Дополнительные сведения о функциях QDK и общих элементах программы Q# см. в руководстве пользователя по языку квантового программированияQ#.

Quantum Development Kit

Пакет средств разработки Quantum — это полнофункциональный комплект SDK для Q#, который можно использовать с распространенными инструментами и языками для разработки квантовых приложений, работающих на квантовом оборудовании или в облачных и локальных квантовых симуляторах. Программу на Q# можно скомпилировать в автономное приложение, запускать в Jupyter Notebook или вызывать из основной программы, написанной на языке Python или .NET.

При компиляции и запуске программы создается экземпляр квантового симулятора, в который передается код Q#. Симулятор использует код Q# для создания кубитов (имитирующих квантовые частицы) и выполняет операции по изменению их состояния. Результаты квантовых операций в симуляторе затем возвращаются в программу. Изоляция кода Q# в симуляторе гарантирует, что алгоритмы следуют законам квантовой физики и могут правильно работать на квантовых компьютерах.

Все необходимое для написания и запуска программ Q#, включая компилятор Q#, библиотеки Q# и квантовые симуляторы, предварительно развертываются в размещенных записных книжках Jupyter Notebook на портале Azure. Пакет QDK можно также устанавливать и запускать на локальном компьютере, что позволяет вам использовать предпочитаемую среду IDE и язык в локальной системе и отправлять задания на квантовое оборудование или облачные симуляторы в Azure Quantum либо работать с локальными симуляторами. См. дополнительные сведения о настройке среды разработки для квантовых вычислений.

Рабочий процесс разработки с использованием QDK

На следующей схеме представлены этапы, которые проходит квантовая программа от идеи до полной реализации в Azure Quantum, а также средства, предлагаемые QDK для каждого этапа.

Схема, показывающая рабочий процесс разработки квантового программирования.

Примечание

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

Написание квантовой программы

Если вы хотите приступить к изучению и написанию программ Q# без установки дополнительного ПО, вы можете использовать размещенные записные книжки Jupyter Notebook, доступные в рабочем пространстве Azure Quantum на портале Azure. Коллекция примеров содержит коллекцию примеров записных книжек с заметками. Выберите пример, который вы хотите изучить, и запустите его в облачных симуляторах или на реальных квантовых компьютерах.

Если вы предпочитаете локальную среду разработки, вы можете создать программу на Q# с помощью записных книжек Jupyter Notebook с ядром IQ# или расширений QDK для Visual Studio Code и Visual Studio 2022, а затем запустить ее на квантовом оборудовании, в облачных или локальных симуляторах.

В зависимости от вашей предпочтительной среды, вы можете ознакомиться с учебниками по Q# и начать создавать квантовые программы для изучения таких понятий квантовых вычислений, как суперпозиция, запутанность, квантовый алгоритм Гровера и других.

Если у вас нет учетной записи Azure и вы хотите опробовать Q# без локальной установки QDK, вы можете использовать Binder для запуска примеров Q# в записных книжках Jupyter Notebook по сети.

Библиотеки для конкретных доменов

Библиотеки Q# помогут обеспечить высокий уровень кода, позволяя выполнять сложные квантовые операции без необходимости разрабатывать последовательности низкоуровневых операций. Новые проекты Q# по умолчанию включают стандартную библиотеку Q#, предоставляющую набор важных и полезных функций и операций, которые можно использовать при написании квантовых программ на Q#.

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

Выполнение программ в симуляторах

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

См. полный список квантовых симуляторов.

Оценка ресурсов

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

Вы также можете отправить квантовую программу в целевой объект оценщика ресурсов Azure Quantum в портал Azure. Оценщик ресурсов Azure Quantum вычисляет оценку физических ресурсов после макета, принимая во внимание предположения о параметрах кубита, кодах исправления квантовых ошибок и бюджете ошибок. Она предоставляется бесплатно и требует наличия учетной записи Azure.

Отправка заданий в службу Azure Quantum

Azure Quantum — это облачная служба квантовых вычислений Azure с набором различных квантовых решений и технологий. Azure Quantum — это открытый, гибкий и перспективный путь к квантовым вычислениям, с которым вы можете запускать программы на квантовом оборудовании. Вы можете запускать программы Qiskit, Cirq и Q# в нескольких квантовых системах. См. текущий список поддерживаемых поставщиков оборудования в статье Поставщики квантовых вычислений.

Совет

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

Создав рабочую область Azure Quantum, вы можете отправлять свои программы на Q# (также называемые заданиями) в Azure Quantum через предпочитаемую среду разработки, как локально, так и через Интернет. См. дополнительные сведения о том, как отправлять задания Q#. Вы также можете запускать и отправлять квантовые цепи, написанные на Qiskit или Cirq.

На следующей схеме показан базовый рабочий процесс после отправки задания.

Схема, показывающая задание после отправки задания в Azure Quantum.

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

Next Steps

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