Начало работы с программами Q# и Visual Studio Code
В этой статье описано, как использовать VC Code для создания и отправки заданий квантовых вычислений Q#, Jupyter Notebook или Python в Azure Quantum с помощью VS Code.
Отправка заданий Q# в Azure Quantum
Узнайте, как использовать VS Code для запуска, отладки и отправки программы Q# в Azure Quantum.
Предварительные требования
Сведения об установке см. в статье Установка современного QDK в VS Code.
- Рабочая область Azure Quantum по подписке Azure. сведения о создании рабочей области см. в статье Создание рабочей области Azure Quantum;
- Последняя версия Visual Studio Code или откройте VS Code в Интернете.
- Последняя версия расширения Пакета средств разработки Azure Quantum .
Загрузка примера программы Q#
В VS Code выберите Файл > Новый текстовый файл и сохраните файл как RandomNum.qs.
Откройте RandomNum.qs и введите
sample
, а затем выберите выборка Random Bit из списка параметров и сохраните файл.
Примечание
Вы также можете открыть собственный файл Q#. Если вы запускаете старую программу Q# и возникают ошибки, см. статью Тестирование и отладка или Перенос программ в современный QDK.
Запуск программы Q#
Чтобы протестировать запуск программы локально во встроенном симуляторе, щелкните Выполнить в списке команд ниже
@EntryPoint()
или нажмите клавиши CTRL+F5. Выходные данные отобразятся в консоли отладки.Чтобы выполнить отладку программы перед отправкой в Azure Quantum, щелкните Отладка в списке команд ниже
@EntryPoint()
или нажмите клавишу F5. Используйте элементы управления отладки в верхней части для пошагового перехода, входа в код и выхода из него. Дополнительные сведения об отладке программ Q# см. в разделе Тестирование и отладка.
Визуализация гистограммы частоты
Гистограмма частоты представляет распределение результатов, полученных при выполнении квантовой программы несколько раз или "выстрелов". Каждый столбик в гистограмме соответствует возможному результату, а его высота представляет количество наблюдаемых результатов. Гистограмма частоты помогает визуализировать распределение вероятностей этих результатов.
Выберите Вид —> палитра команд и введите "гистограмма", чтобы открыть файл Q#: Выполнить и показать гистограмму . Вы также можете щелкнуть гистограмму в списке команд ниже
@EntryPoint()
. Выберите этот параметр, чтобы открыть окно гистограммы Q#.Введите несколько снимков для выполнения программы, например 100 выстрелов, и нажмите клавишу ВВОД. Гистограмма будет отображаться в окне гистограммы Q#.
Щелкните значок параметров вверху слева, чтобы отобразить параметры.
Щелкните полосу, чтобы отобразить процент от этого результата. В этом случае возможны два результата, 0 и 1, и процент каждого результата близок к 50 %.
Совет
Гистограмму можно масштабировать с помощью колесика прокрутки мыши или жеста трекпада. При увеличении диаграммы можно сдвигать, нажав клавишу ALT во время прокрутки.
Визуализация квантовой цепи
Схемы квантовых цепей представляют собой визуальное представление квантовых операций. Они показывают поток кубитов через квантовую программу, включая вентили и измерения, применяемые к ним. Дополнительные сведения см. в разделе Схемы квантовых схем в Visual Studio Code.
Выберите Вид —> палитра команд и введите "circuit", чтобы открыть параметр Q#: Show circuit ( Показать канал ). Вы также можете щелкнуть Канал в списке команд ниже
@EntryPoint()
.Канал отображается в окне канала Q#. Схема цепи показывает один регистр кубитов, который инициализирован в состоянии |0⟩. Затем к кубитам применяется шлюз Хадамарда H, за которым следует операция измерения, представленная символом измерения. Дополнительные сведения см. в разделе Соглашения о квантовых каналах.
Подключение к Azure Quantum и отправка задания
Вы можете подключать и отправлять задания непосредственно из VS Code. В этом примере вы отправите задание в симулятор Rigetti.
Выберите Вид —> палитра команд и введите Q#: Подключение к рабочей области Azure Quantum. Нажмите клавишу ВВОД.
Выберите учетную запись Azure и следуйте инструкциям, чтобы подключиться к предпочтительному каталогу, подписке и рабочей области.
Примечание
Если у вас есть строка подключения, можно выбрать Строку подключения и вставить строка подключения, соответствующую рабочей области Azure Quantum. Дополнительные сведения см. в статье Подключение к рабочей области Quantum с помощью строка подключения.
После подключения в области Обозреватель разверните узел Квантовые рабочие области.
Разверните рабочую область и разверните поставщик Rigetti .
Примечание
Если при подключении к Azure Quantum возникла проблема, рядом с именем рабочей области появится значок предупреждения. Наведите указатель мыши на имя рабочей области, чтобы отобразить сведения об ошибке.
Выберите rigetti.sim.qvm в качестве .target
Щелкните значок воспроизведения справа от имени, target чтобы начать отправку текущей программы Q#. Если появится всплывающее окно, выберите Изменить профиль QIR target и продолжите работу.
Добавьте имя для идентификации задания.
Добавьте количество снимков или количество запусков программы.
Нажмите клавишу ВВОД , чтобы отправить задание. Состояние задания отобразится в нижней части экрана.
Разверните узел Задания и наведите указатель мыши на задание, чтобы отобразить время и состояние задания.
Чтобы просмотреть результаты, щелкните значок облака рядом с именем задания, чтобы скачать результаты из хранилища рабочей области и отобразить их в VS Code.
Отправка заданий Jupyter Notebook в Azure Quantum
Узнайте, как использовать VS Code для запуска, отладки и отправки Jupyter Notebook Q# в Azure Quantum. Действия, описанные в этой статье, также относятся к записным книжкам Jupyter Notebook на локальном сервере Jupyter или записных книжках на портале Azure Quantum.
Предварительные требования
Сведения об установке см. в статье Установка современного QDK в VS Code.
Рабочая область Azure Quantum по подписке Azure. сведения о создании рабочей области см. в статье Создание рабочей области Azure Quantum;
Среда Python с установленными Python и Pip .
VS Code с установленными расширениями Azure Quantum Development Kit, Python и Jupyter .
Пакеты Azure Quantum
qsharp
,qsharp-widgets
иazure-quantum
, а такжеipykernel
пакет .python -m pip install --upgrade qsharp qsharp-widgets azure-quantum ipykernel
Запуск и тестирование программы в локальном симуляторе
В VS Code выберите Просмотр > палитры команд и Create: Создать Jupyter Notebook.
В правом верхнем углу VS Code обнаружит и отобразит версию Python и виртуальную среду Python, выбранную для записной книжки. Если у вас несколько сред Python, может потребоваться выбрать ядро с помощью средства выбора ядра в правом верхнем углу. Если среда не обнаружена, см. сведения о настройке записных книжек Jupyter Notebook в VS Code .
В первой ячейке записной книжки выполните следующий код Python, чтобы импортировать необходимые модули:
import qsharp import azure.quantum
- Модуль
qsharp
активирует магическую%%qsharp
команду, которая позволяет ввести код Q# непосредственно в ячейку. - Модуль
azure-quantum
обеспечивает подключение к рабочей области Azure Quantum.
Примечание
Если ядро
ipykernel
Jupyter Python не обнаружено, VS Code предложит установить его.- Модуль
Добавьте еще одну ячейку и введите следующий код Q#, который возвращает указанное пользователем число случайных битов:
Примечание
Обратите внимание, что как только вы ввели магическую команду
%%qsharp
, ячейка записной книжки изменит тип с Python на Q#.%%qsharp operation Random() : Result { use q = Qubit(); H(q); let result = M(q); Reset(q); return result } operation RandomNBits(N: Int): Result[] { mutable results = []; for i in 0 .. N - 1 { let r = Random(); set results += [r]; } return results }
Чтобы протестировать операцию, можно использовать
eval
метод , который может вызывать любую операцию Q#, ранее определенную в записной книжке:qsharp.eval("RandomNBits(4)")
[Zero, One, One, Zero]
Чтобы запустить программу в локальном симуляторе
run
, используйте метод .shots
Укажите или количество запусков программы, и симулятор возвращает результаты в виде списка Python.qsharp.run("RandomNBits(4)", shots=10)
[[One, One, One, One], [Zero, Zero, One, Zero], [One, Zero, Zero, One], [Zero, One, Zero, Zero], [One, Zero, One, One], [One, Zero, One, Zero], [One, One, One, Zero], [One, One, One, One], [Zero, Zero, Zero, One], [One, Zero, Zero, One]]
Визуализация квантовой цепи
Вы можете визуализировать квантовые цепи с помощью qsharp-widgets
пакета . Этот пакет предоставляет мини-приложение, которое отрисовывает квантовую схему в виде изображения SVG. Дополнительные сведения см. в статье Схемы квантовых схем с jupyter Notebook.
Добавьте следующий код в новую ячейку, чтобы визуализировать цепь:
from qsharp_widgets import Circuit
Circuit(qsharp.circuit("RandomNBits(4)"))
Дополнительные сведения см. в разделе Соглашения о квантовых каналах.
Компиляция задания с помощью базового профиля
При запуске программ в локальном квантовом симуляторе можно отправить любой тип программы Q#. Однако оборудование targets Azure Quantum пока не поддерживает все возможности, необходимые для запуска всех программ Q#. Чтобы скомпилировать и отправить программы Q# в Azure Quantum, необходимо задать профиль target , чтобы сообщить Q# о возможностях, поддерживаемых оборудованием target . В настоящее время это базовый профиль. Дополнительные сведения см. в статье Типы профилей в Azure Quantum.
Чтобы повторно инициализировать интерпретатор Q# и скомпилировать программу с базовым профилем:
Используйте метод ,
init
чтобы задать профиль:qsharp.init(target_profile=qsharp.TargetProfile.Base)
После повторной инициализации интерпретатора необходимо снова запустить код с новым профилем:
%%qsharp operation Random() : Result { use q = Qubit(); H(q); let result = M(q); Reset(q); return result } operation RandomNBits(N: Int): Result[] { mutable results = []; for i in 0 .. N - 1 { let r = Random(); set results += [r]; } return results }
Затем используйте
compile
метод , чтобы указать операцию или функцию, которая является точкой входа в программу. При этом код компилируется в формат QIR, который затем можно отправить на любое квантовое оборудование:MyProgram = qsharp.compile("RandomNBits(4)")
Подключение к Azure Quantum и отправка задания
Теперь, когда программа скомпилирована в правильном формате, создайте azure.quantum.Workspace
объект для подключения к Azure Quantum. Для подключения вы будете использовать идентификатор ресурса рабочей области Azure Quantum. Идентификатор ресурса и расположение можно скопировать на странице обзора рабочей области в портал Azure.
В новой ячейке укажите идентификатор ресурса и расположение из рабочей области Azure Quantum:
MyWorkspace = azure.quantum.Workspace( resource_id = "MyResourceID", location = "MyLocation" )
Используйте метод ,
get_targets
чтобы просмотреть доступное оборудование targets в рабочей области:MyTargets = MyWorkspace.get_targets() print("This workspace's targets:") MyTargets
Выберите :
rigetti.sim.qvm
targetMyTarget = MyWorkspace.get_targets("rigetti.sim.qvm")
Наконец, используйте метод ,
submit
чтобы отправить программу с ее параметрами и отобразить результаты:job = MyTarget.submit(MyProgram, "MyQuantumJob", shots=100) job.get_results()
{'Histogram': ['[0, 0, 0, 0]', 0.3, '[1, 0, 0, 0]', 0.1, '[1, 1, 1, 1]', 0.3, '[0, 1, 1, 1]', 0.3]}
Все свойства задания доступны в
job.details
, например:print(job.details) print("\nJob name:", job.details.name) print("Job status:", job.details.status) print("Job ID:", job.details.id)
{'additional_properties': {'isCancelling': False}, 'id': '0150202e-9638-11ee-be2f-b16153380354', 'name': 'MyQuantumJob', 'provider_id': 'rigetti'...} Job name: MyQuantumJob Job status: Succeeded Job ID: 0150202e-9638-11ee-be2f-b16153380354
Отправка Python с заданиями Q# в Azure Quantum
Узнайте, как использовать VS Code для написания программы Python, которая вызывает операции Q#, подключается к Azure с помощью команд Python или Azure CLI и отправляет задание.
Предварительные требования
Сведения об установке см. в статье Установка современного QDK в VS Code.
- Рабочая область Azure Quantum по подписке Azure. сведения о создании рабочей области см. в статье Создание рабочей области Azure Quantum;
- Среда Python с установленными Python и Pip .
- VS Code с установленным пакетом средств разработки Azure Quantum и расширением Python .
- Azure Quantum
qsharp
иazure-quantum
пакеты. - Azure CLI с установленным последним расширением Azure Quantum.
Create и импорт операций Q#
qsharp
С помощью пакета можно хранить функции и операции в файлах Q# и создавать проекты Q#, которые позволяют вызывать любые из них из кода Python. Это особенно полезно при запуске программы, принимающей входные параметры.
Выполните действия, чтобы создать проект Q#.
Откройте новый текстовый файл, добавьте следующий код Q#, который возвращает указанное пользователем число случайных битов, и сохраните файл в проекте как
source.qs
.Примечание
Обратите внимание, что в этом коде Q# нет
@EntryPoint
такой функции, как программа Q# (см. раздел Отправка заданий Q# в Azure Quantum), но в отличие от Jupyter Notebook требуется пространство имен (см. раздел Отправка заданий Jupyter Notebook в Azure Quantum).namespace Sample { operation Random() : Result { use q = Qubit(); H(q); let result = M(q); Reset(q); return result } operation RandomNBits(N: Int): Result[] { mutable results = []; for i in 0 .. N - 1 { let r = Random(); set results += [r]; } return results } }
В той же папке откройте другой файл и сохраните его как
randomNum.py
.Добавьте следующий код для импорта
qsharp
модулей иazure.quantum
.import qsharp import azure.quantum
Затем добавьте код для определения корневой папки проекта Q# и протестируйте выполнение операции в target локальном симуляторе. Операция вызывается пространством< имен>.<operation_name( )> и в этом случае передается число возвращаемых случайных битов.
qsharp.init(project_root = '/MyProjectRootFolder') print(qsharp.eval("Sample.RandomNBits(4)"))
[Zero, One, One, Zero]
Вы также можете протестировать операцию с помощью
run
метода , который передает дополнительныйshots
параметр и возвращает результаты в списке Python. ВrandomNum.py
замените предыдущую инструкцию print следующим:result = qsharp.run("Sample.RandomNBits(4)", shots=10) for x in result: print(x)
[[One, One, One, One], [Zero, Zero, One, Zero], [One, Zero, Zero, One], [Zero, One, Zero, Zero], [One, Zero, One, One], [One, Zero, One, Zero], [One, One, One, Zero], [One, One, One, One], [Zero, Zero, Zero, One], [One, Zero, Zero, One]]
Компиляция задания с помощью базового профиля
При запуске программ в локальном квантовом симуляторе можно отправить любой тип программы Q#. Однако оборудование targets Azure Quantum пока не поддерживает все возможности, необходимые для запуска всех программ Q#. Чтобы компилировать и отправлять программы Q# в Azure Quantum, необходимо задать профиль target , чтобы сообщить Q# о возможностях, поддерживаемых оборудованием target . В настоящее время это базовый профиль. Дополнительные сведения см. в статье Типы профилей в Azure Quantum.
Примечание
Для программ только на Q# в VS Code VS Code VS Code задает базовый профиль автоматически.
Используйте метод ,
init
чтобы задать профиль:qsharp.init(target_profile=qsharp.TargetProfile.Base)
Затем используйте метод ,
compile
чтобы указать операцию или функцию, которая является точкой входа в программу. Затем скомпилированную программу можно отправить на любое квантовое оборудование:MyProgram = qsharp.compile("Sample.RandomNBits(4)")
Подключение к Azure Quantum и отправка задания
Вы можете подключиться к Azure Quantum и отправить задание с помощью объекта, созданного Workspace
Python, или подключиться и отправить задание с помощью Azure CLI. При использовании Azure CLI необходимо сохранить скомпилированную программу в виде текстового файла и отправить этот файл с помощью команды CLI.
Теперь, когда программа скомпилирована в правильном формате, создайте azure.quantum.Workspace
объект для подключения к Azure Quantum. Для подключения вы будете использовать идентификатор ресурса рабочей области Azure Quantum. Идентификатор ресурса и расположение можно скопировать на странице обзора рабочей области в портал Azure.
Добавьте следующий код
randomNum.py
в , заполнив идентификатор ресурса и расположение из рабочей области Azure Quantum:workspace = azure.quantum.Workspace( resource_id = "MyResourceID", location = "MyLocation" )
Используйте метод ,
get_targets
чтобы отобразить доступное оборудование targets в рабочей области:MyTargets = workspace.get_targets() print("This workspace's targets:") for x in MyTargets: print(x)
Выберите :
rigetti.sim.qvm
targetMyTarget = workspace.get_targets("rigetti.sim.qvm")
Наконец, используйте метод ,
submit
чтобы отправить программу с ее параметрами. Результаты задания возвращаются в виде словаря Python.job = MyTarget.submit(MyProgram, "MyPythonJob", shots=100) results = job.get_results() print("\nResults: ", results)
Чтобы извлечь только значения и отобразить их, выполните следующие действия:
resultList = results.get("Histogram") for x in resultList: print(x)
[0, 0, 0, 0] 0.3 [1, 0, 0, 0] 0.1 [1, 1, 1, 1] 0.3 [0, 1, 1, 1] 0.3
Все свойства задания доступны в
job.details
, например:print(job.details) print("\nJob name:", job.details.name) print("Job status:", job.details.status) print("Job ID:", job.details.id)
{'additional_properties': {'isCancelling': False}, 'id': '0fc396d2-97dd-11ee-9958-6ca1004ff31f', 'name': 'MyPythonJob', 'provider_id': 'rigetti'...} Job name: MyPythonJob Job status: Succeeded Job ID: fc396d2-97dd-11ee-9958-6ca1004ff31f
Дальнейшие действия
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по