1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mindspore-mindquantum

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
CONTRIBUTING.md 35 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 26.11.2024 05:44 2fbbadf

MindSpore Quantum: рекомендации по внесению вклада

Посмотреть на китайском

MindSpore Quantum: рекомендации по внесению вклада

Рекомендации по внесению вклада в проект MindSpore Quantum

Лицензионное соглашение с участниками

Перед отправкой первого кода в сообщество MindSpore Quantum необходимо подписать CLA.

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

Введение в квантовые вычисления

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

Квант — это физическая концепция, которая означает минимальную и неделимую базовую единицу. Минимальная единица — квант; неделимая концепция называется квантованием. Её можно использовать для описания характеристик частиц в микрофизическом мире, таких как атомы и электроны. Слово «квант» происходит от латинского quantum, что переводится как «определённое количество материи».

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

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

Состояние кванта: $$ |\varphi>=\alpha |0>+\beta |1> $$

Установка и разработка

Установка

Установите MindSpore

Пожалуйста, установите MindSpore версии 1.4.0 или выше в соответствии с Руководством по установке на веб-сайте MindSpore.

MindSpore — это новый фреймворк для глубокого обучения с открытым исходным кодом, который можно использовать для мобильных устройств, периферийных устройств и облачных сценариев. MindSpore разработан для обеспечения опыта разработки с дружественным дизайном и эффективным выполнением для специалистов по данным и алгоритмических инженеров, встроенной поддержки процессора Ascend AI и совместной оптимизации программного и аппаратного обеспечения.

Установка через pip

pip install mindquantum

Установка из исходного кода

Скачайте исходный код с Gitee:

cd ~
git clone https://gitee.com/mindspore/mindquantum.git

Компилируйте MindQuantum

Убедитесь, что CMake >= на Linux-системе. Установка MindQuantum

  1. Установите CMake версии 3.18.3 или более поздней.
  2. Выполните команду:
cd ~/mindquantum
bash build.sh --gitee

Ключ --gitee позволяет скрипту загрузить сторонние зависимости с платформы хостинга кода Gitee.

Если вам нужно скомпилировать версию для GPU, сначала установите CUDA 11.x и соответствующий графический драйвер, а затем используйте параметры --gpu, чтобы выполнить следующие инструкции по компиляции:

cd ~/mindquantum
bash build.sh --gitee --gpu
  1. Убедитесь, что на Windows-системе установлены MinGW-W64 и CMake версии 3.18.3 или выше, и выполните следующую команду:
cd ~/mindquantum
build.bat /Gitee
  1. На Mac-системе убедитесь, что установлены OpenMP и CMake версии 3.18.3 или выше, и выполните следующую команду:
cd ~/mindquantum
bash build.sh --gitee
  1. Установите скомпилированный пакет whl. Введите каталог вывода и установите скомпилированный пакет mindquantum whl с помощью команды pip.

Проверка успешной установки Выполните следующую команду. Если не будет сообщено об ошибке «No module named 'mindquantum'», установка прошла успешно.

python -c 'import mindquantum'

Компиляция MindQuantum предоставляет два метода компиляции пакета:

  1. Компиляция пакета. Если пользователю необходимо адаптировать код к различным системным средам и версиям Python, он может скомпилировать исходный код в пакет и установить его. Для получения подробной информации обратитесь к разделу «Установка исходного кода».
  2. Локальная компиляция. Если пользователь добавляет или изменяет часть кода и ему необходимо быстро проверить, эффективен ли он, он может использовать локальную компиляцию для компиляции кода C++ в файл *.so, а затем использовать Python для вызова и установки переменных среды. Нет необходимости перекомпилировать пакет, удалять и устанавливать его заново, что удобно для отладки и проверки.

Скачайте исходный код из репозитория:

cd ~
git clone https://gitee.com/mindspore/mindquantum.git
  • Linux-система, в зависимости от CMake версии 3.18.3 и выше, компилируется изначально. Используя ключ --gitee, скрипт загружает сторонние зависимости с платформы хостинга кода Gitee; команда export добавляет путь исходного кода mindquantum к переменной среды PYTHONPATH.

    cd ~/mindquantum
    
    bash build_locally.sh --gitee
    export PYTHONPATH=`pwd`$PYTHONPATH
  • Windows-система, в зависимости от MinGW-W64 и CMake версии 3.18.3 и выше, компилируется изначально.

    cd ~/mindquantum
    build_locally.bat /Gitee -G 'MinGW Makefiles'
    set PYTHONPATH=%cd%;%PYTHONPATH%
  • Mac-система, в зависимости от OpenMP и CMake версии 3.18.3 и выше, компилируется изначально.

    cd ~/mindquantum
    bash build_locally.sh --gitee
    export PYTHONPATH=`pwd`$PYTHONPATH

Зависимость от системы

  • GCC-GNU Compiler Suite, инструкция по установке:

    1. Linux и MacOS поставляются с версиями gcc, которые соответствуют требованиям компиляции MindQuantum.
    2. Используйте команду для установки GCC:
    # Ubuntu install
    apt-get update
    apt-get install gcc
    apt-get install build-essential
    
    # Centos install
    yum install gcc gcc-c++
    
    # output gcc version,verify successful installation
    gcc --version
    1. Windows-установка 3.1 Windows C/C++ обычно рекомендует Mingw-w64, который можно использовать для компиляции и запуска Windows-приложений и DLL-файлов. 3.2 Перейдите на страницу Mingw-w64 и скачайте автономный установочный пакет. Рекомендуемая здесь версия x86_64-posix-seh соответствует архитектуре x64. 3.3 Дважды щёлкните локально, чтобы открыть установочный пакет, и установите его в соответствии с запросом. (Обратите внимание на запись переменной окружения). 3.4 После установки откройте терминал cmd и введите команду:
    C:\Users\xx> gcc --version
    
    gcc
    ``` (x86_64-win32-seh-rev0, Built by MinGW-W64 project) 8.1.0
      Copyright (C) 2018 Free Software Foundation, Inc.
    
      **Обнаружена ошибка, можно отправить вопрос или обратиться к Google Baidu, см. [блог csnd](https://blog.csdn.net/jiqiren_dasheng/article/details/103775488).**
    
      CMake — кроссплатформенный конструктор с открытым исходным кодом, инструкции по установке:
    
      1. Перейдите на официальный сайт [CMake](https://cmake.org/) и выберите подходящую версию установочного пакета в соответствии с системой.
    
      Для системы Windows рекомендуется **cmake-3.2*-windows-x86_64.msi**,
    
      для системы Macos рекомендуется **cmake-3.2*-macos-universal.dmg**,
    
      для системы Linux рекомендуется **cmake-3.2*-linux-x86_64.sh**.
    
      2. Дважды щёлкните локально, чтобы открыть установочный пакет CMake, установите его в соответствии с запросом, обратите внимание, что CMake необходимо добавить в пользовательскую переменную, и, наконец, нажмите «Готово», чтобы завершить установку.
    
        3. Откройте терминал, выведите команду в командной строке и выведите номер версии, чтобы указать успех.
    
      ```shell
        cmake --version
        >>> cmake version 3.24.2
      ```
    

Разработка

MindQuantum в основном разрабатывается на C++ и Python, основная вычислительная единица реализована на C/C++, а верхний интерфейс и периферийные модули реализованы на Python.

Процесс разработки в основном делится на две категории: разработка новых функций и исправление ошибок:

  • Разработка новых функций: перейдите на страницу вопросов MindQuantum, отправьте вопрос, напишите описания новых функций, категории, методы реализации и т. д. Поговорите с командой разработчиков MindQuantum, чтобы подтвердить, нужна ли эта функция. Начните реализацию локально, напишите код, реализуйте функцию, напишите соответствующие тестовые примеры и соответствующую документацию. Отправьте PR, объедините его с основной веткой после проверки кода и завершите разработку новых функций.

  • Исправление ошибок: перейдите на страницу вопросов MindQuantum, прочитайте незакрытые вопросы и заявите о проблеме, чтобы решить проблему. Или, если вы столкнулись с ошибкой при использовании MindQuantum, вы можете отправить вопрос, чтобы помочь улучшить функциональный модуль MindQuantum.

Быстрый старт

  • На Gitee разветвите код mind quantum bin.
  • См. README.md для получения информации о проекте и инструкций по сборке.
  • Первый опыт: создайте параметризованный квантовый контур. Используйте mindquantum для квантового контура, включающего H-gate, RX-gate и ry-gate, и получите квантовое состояние.
from mindquantum import *
import numpy as np

encoder = Circuit().h(0).rx({'a0': 2}, 0).ry('a1', 1)
print(encoder)
print(encoder.get_qs(pr={'a0': np.pi / 2, 'a1': np.pi / 2}, ket=True))

Запуск этого кода выведет квантовый контур и конечное состояние.

      ┏━━━┓ ┏━━━━━━━━━━┓
q0: ──┨ H ┠─┨ RX(2*a0) ┠───
      ┗━━━┛ ┗━━━━━━━━━━┛
      ┏━━━━━━━━┓
q1: ──┨ RY(a1) ┠───────────
      ┗━━━━━━━━┛
-1/2j¦00⟩
-1/2j¦01⟩
-1/2j¦10⟩
-1/2j¦11⟩

Структура кода

  • ccsrc основной вычислительный модуль, использующий реализацию C/C++.
  • cmake компилирует конфигурационную информацию cmake.
  • docs документация API Mind Quantum.
  • mindquantum квантовый вычислительный модуль Mind Quantum, реализованный на Python.
    • mindquantum.dtype моделирование типа данных MindQuantum.
    • mindquantum.core основные функции MindQuantum (eDSL).
      • gata модуль квантовых ворот, предоставляющий различные квантовые ворота. MindQuantum: основные модули и компоненты
  • Quantum circuit module — модуль квантовых схем, который позволяет легко создавать квантовые схемы, соответствующие требованиям, включая параметризованные квантовые схемы.

    • MindQuantum Operator library — библиотека операторов MindQuantum.
    • Parameter resolver — модуль парсера параметров используется для объявления используемых параметров.
  • MindQuantum simulator — квантовый симулятор для моделирования эволюции квантовой системы.

  • MindQuantum framework — операторы и ячейки квантовых нейронных сетей.

  • MindQuantum algorithm — квантовый алгоритм.

    • Compiler — модуль компиляции квантовых схем.
    • Library — общий модуль алгоритма.
    • NISQ — алгоритм NISQ.
    • Error mitigation — модуль смягчения ошибок.
    • Mapping — модуль битового отображения.
  • MindQuantum device — аппаратный модуль Mind Quantum.

  • MindQuantum io — модуль ввода/вывода для MindQuantum.

  • MindQuantum engine — модуль движка MindQuantum.

  • MindQuantum utils — утилиты.

  • mindquantum_config — конфигурационная информация.

  • scripts — скрипт обновления зависимых инструментов.

  • tests — юнит-тесты MindQuantum, основанные на Pytest, написанные на Python.

  • third_party — сторонние пакеты с открытым исходным кодом, на которых компилируется MindQuantum.

  • tutorials — учебник Mind Quantum, который можно запустить напрямую с помощью jupyter. Описан в официальном документе MindSpore.

Модульное тестирование

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

Написание документации

Инструкции по написанию документации. MindQuantum имеет два основных типа документации:

  • Документы, ориентированные на пользователя: это документы, которые пользователи видят на веб-сайте Mind Spore Quantum в Интернете, включая учебные планы по построению схем, симулятору, реализации алгоритмов и т. д., которые помогают быстро начать работу и применять MindQuantum, а также изучать алгоритмы квантовых вычислений.
  • Документация для разработчиков: документация для разработчиков распределена по коду. MindQuantum/docs base. Если вы заинтересованы в добавлении новой документации для разработчиков, ознакомьтесь с этой страницей на вики, чтобы узнать о лучших практиках и написать комментарии после того, как вы написали код. API собирается путём извлечения комментариев из кода.

Процесс внесения вклада

Стиль кода

Пожалуйста, следуйте этому стилю, чтобы MindSpore было легко просматривать, поддерживать и разрабатывать.

  • Рекомендации по кодированию. В сообществе MindSpore используются стиль кодирования Python, предложенный PEP 8 Coding Style, и стиль кодирования C++, предложенный Google C++ Coding Guidelines. Для проверки формата кода рекомендуется установить в вашей IDE плагины CppLint, CppCheck, CMakeLint, CodeSpell, Lizard, ShellCheck и PyLint.

  • Рекомендации по модульному тестированию. В сообществе MindSpore используется стиль модульного тестирования Python, предложенный pytest, и стиль модульного тестирования C++, предложенный Googletest Primer. Цель теста должна быть отражена в названии или комментарии к тесту.

  • Рекомендации по рефакторингу. Мы призываем разработчиков реорганизовывать наш код, чтобы устранить «запах кода». Все коды должны соответствовать требованиям стиля кодирования и стиля тестирования, и рефакторинг кодов не является исключением. Порог Lizard для nloc (строк кода без комментариев) составляет 100, а для cnc (цикломатическая сложность) — 20. Когда вы получаете предупреждение Lizard, вы должны реорганизовать код, который хотите объединить.

  • Рекомендации по документированию. Для проверки формата документов Markdown мы используем MarkdownLint. MindSpore CI изменяет следующие правила на основе конфигурации по умолчанию:

    • MD007 (отступ неупорядоченного списка): параметр indent установлен на 4, что означает, что весь контент в неупорядоченном списке должен быть отформатирован с использованием четырёх пробелов.
    • MD009 (пробелы в конце строки): параметр br_spaces установлен на 2, что означает, что в конце строки может быть 0 или 2 пробела.
    • MD029 (порядковые номера упорядоченного списка): параметр style установлен на ordered, что означает, что порядковые номера упорядоченного списка находятся в порядке возрастания.

    Подробнее см. RULES.

Модель разработки с разветвлением и извлечением

  • Разветвление репозитория MindSpore. Прежде чем отправлять код в проект MindSpore, убедитесь, что этот проект был разветвлён в вашем собственном репозитории. Это означает, что между репозиторием MindSpore и вашим собственным репозиторием будет параллельная разработка, поэтому будьте осторожны, чтобы избежать несоответствий между ними.

  • Клонирование удалённого репозитория. Если вы хотите загрузить код на локальный компьютер, лучше всего использовать git:

    # Для GitHub
    git clone https://github.com/{insert_your_forked_repo}/mindspore.git
    git remote add upstream https://github.com/mindspore-ai/mindspore.git
    # Для Gitee
    git clone https://gitee.com/{insert_your_forked_repo}/mindspore.git
    git remote add upstream https://gitee.com/mindspore/mindspore.git
  • Разработка кода локально. Чтобы избежать несоответствий между несколькими ветвями, Проверка новой ветки рекомендуется:

git checkout -b {new_branch_name} origin/master

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

  • Отправьте код в удалённый репозиторий

После обновления кода вы должны отправить обновление официальным способом:

git add .
git status # Проверьте статус обновления
git commit -m "Ваш заголовок коммита"
git commit -s --amend # Добавьте конкретное описание вашего коммита
git push origin {new_branch_name}
  • Создайте запрос на вытягивание в репозитории MindSpore

На последнем этапе вам нужно создать запрос на сравнение между вашей новой веткой и основной веткой MindSpore. После завершения запроса на вытягивание Jenkins CI будет автоматически настроен для сборки теста. Ваш запрос на вытягивание должен быть объединён с основной веткой как можно скорее, чтобы уменьшить риск слияния.

Сообщите о проблемах

Отличный способ внести свой вклад в проект — отправить подробный отчёт при возникновении проблемы. Мы всегда ценим хорошо написанные и подробные отчёты об ошибках и будем благодарны вам за это!

При сообщении о проблемах используйте следующий формат:

— Какую версию env (mindspore, os, python и т. д.) вы используете? — Это ОТЧЁТ ОБ ОШИБКЕ или ЗАПРОС НА ФУНКЦИЮ? — В чём заключается проблема, добавьте метки, чтобы выделить её на панели управления проблемами. — Что произошло? — Чего вы ожидали? — Как воспроизвести проблему? (как можно более кратко и точно) — Особые замечания для рецензентов?

Советы по работе с проблемами:

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

Предложите PR

— Выразите свою идею в виде проблемы на GitHub или Gitee. — Если это новая функция, которая требует большого количества деталей дизайна, также следует представить предложение по дизайну. — После достижения консенсуса в обсуждениях проблем и обзорах предложений по дизайну завершите разработку в разветвлённом репозитории и отправьте PR. — Ни один PR не допускается до тех пор, пока он не получит 2+ LGTM от утверждающих. Обратите внимание, что утверждающий не может добавлять LGTM к своему собственному PR. — После того как PR будет достаточно обсуждён, он будет объединён, заброшен или отклонён в зависимости от результатов обсуждения.

Рекомендации по PR:

— Следует избегать любых неуместных изменений. — Убедитесь, что история ваших коммитов упорядочена. — Всегда поддерживайте свою ветку в актуальном состоянии с основной веткой. — Для PR с исправлением ошибок убедитесь, что все связанные проблемы связаны.

Самопроверка локального кода

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

После завершения разработки предложите использовать vscode или pycharm для форматирования функций, чтобы стандартизировать стиль кода.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/mindspore-mindquantum.git
git@api.gitlife.ru:oschina-mirror/mindspore-mindquantum.git
oschina-mirror
mindspore-mindquantum
mindspore-mindquantum
master