開発ストラテジー

ロードマップ

目指す一連の目標をセットするとき、12ヶ月を見据えます。計画時、通常要素の視点から潜在的な作業を洗い出します。

Qiskit Terra

2018年、QiskitTerraのバックエンドとユーザー・フローの正式化に取り組みました。基本的なアイディアは以下の通りです。ユーザーは、まず量子回路をデザインし、次に一連のトランスパイラー・パスを通じ、異なるバックエンドで動作するよう異なる最適化を利用して回路を書き換えます。また、*プロバイダー*の概念を導入し、量子回路を走らせるバックエンドをユーザーに提供する役割を与えました。バージョン1で定義したプロバイダーAPIは、プロバイダーとそのバックエンドがTerra互換であるかを確認するためのスキーマを提供しています。

2019年、以下の通り、多くの拡張が計画されています。

  • トランスパイラーへのパスを追加 : ここでのゴールは回路の深さをより効率的にすること、そして回路とリソースのおおよその見積もりを見つけるパスを追加することです。

  • 回路ファウンドリと回路APIの導入 : このゴールは複雑な回路を簡単な操作で構築できるようにすることです。これには演算への制御とパワーの追加、ユニタリー行列の直接挿入などが含まれます。

  • OpenPulseに対するAPIの提供 : OpenPulseが定義され、IBM Quantumプロバイダーが受け入れた今、パルス機能を構築する予定です。これらは、パルスを使った実験を構築するスケジューラーやツールが含まれます。また、ゲートを使った実験 (QASM) とパルスを使った実験をマップするツールも含まれます。

Qiskit Aer

Qiskit Aerの最初のリリースは2018年末に利用可能となりました。これは、QASM、状態ベクトル、ユニタリー・シミュレーターのC++実装が含まれます。これらがQiskit Aerの中核であり、Terraに存在してたシミュレーターを置き換えるものです。QASMシミュレーターにはカスタマイズ可能な一般的 (Kraus) ノイズ・モデルが含まれており、すべてのシミュレーターにOpenMPライブラリを使用したCPU並列化が含まれています。

2019年、Aerは多くの拡張が予定されています。

  • シミュレーターの最適化 : シミュレーターのプロファイリングを開始し、高速化に取り組みます。これは、入力Qobjと利用可能なハードウェアに基づいた、バックエンド構成とOpenMP並列化の構成の自動設定が含まれます。

  • 追加のシミュレーター・バックエンドの開発 : 回路の特定のサブクラスに対しより効率的であるいくつかの近似シミュレーター・バックエンドが含まれます。例えば、CliffordとTゲート(低T深度)で動作するTゲート・シミュレーターや、Cliffordゲートだけで動作するスタビライザー・シミュレーターです。

  • ノイズ近似ツールの追加 : 近似バックエンド上に実装されているかもしれないノイズ・モデルを近似するために、一般的な(Kraus)ノイズモデルをマップするノイズ近似ツール(例えば、Cliffordとリセットの混合エラーのみのノイズ・モデル)を追加する予定です 。

Qiskit Ignis

今年、Qiskit Ignis の最初のバージョンをリリースする予定です。Ignisの目標は、エラーの性能評価や、ゲートの改良、ノイズの存在下での計算強化のためのツールを提供することです。ツール例としては、最適制御、動的デカップリング、エラー軽減が含まれます。

2019年、Ignisは以下のツールを提供する予定です。

  • 量子状態/プロセス・トモグラフィ

  • 異なるグループに対するランダム化ベンチマーキング

  • 最適化制御 (例: パルス整形)

  • 動的デカップリング

  • 回路のランダム化

  • (量子化学実験の結果改善のための) エラー軽減

Qiskit Aqua

Aquaは、2018年6月に導入された量子アルゴリズムとアプリケーションのオープンソース・ライブラリです。量子アルゴリズムのライブラリとして、Aquaには一般に適用可能な豊富な量子アルゴリズムのセット、例えば、VQE、QAOA、Grover検索、振幅推定と位相推定、などがあります。また、ドメイン固有のアルゴリズム、例えば教師あり学習に適したサポート・ベクター・マシン (Support Vector Machine, SVM) の量子カーネルや変分アルゴリズムもあります。さらに、Aquaはアルゴリズムをサポートする構成要素、例えば最適化、変分形式、オラクル、量子フーリエ変換、特徴量マップ、複数クラス分類拡張アルゴリズム、不確定性問題、ランダム分布なども含みます。量子アプリケーションのフレームワークとして、AquaはChemistry (Qiskit Chemistry構成要素として個別にリリース) や、AI (人工知能)、Optimization、Financeを提供します。Aquaは複数ドメインにわたって拡張可能であり、研究者が新しいアルゴリズムやアルゴリズムをサポートする構成要素を独自に実装することに貢献できるフレームワークとしてデザインおよび構造化されています。

2019年を通じて、Aquaを以下のように強化する予定です。

  • Deutsch-Jozsa、Simon’s、Bernstein-Vazirani、そしてHarrowm、 Hassidim and Lloyd (HHL) といった、新しい量子アルゴリズムを提供する予定です。

  • シミュレーターでも実機でも量子アルゴリズムのパフォーマンスを改良します。

  • 実機上の実行サポートを改善します。

  • AquaのAI、Optimization、Financeアプリケーションを用いてサポートされる問題のセットを増加します。

概要

これらは次の12ヶ月内にフォーカスしている作業のいくつかの例です。フィードバックに基づいて計画を継続的に調整する予定です。フォローをして、ぜひあなたのご意見を聞かせて下さい!

バージョン管理

Qiskit プロジェクトは、各自異なる機能を実行するいくつかの要素(エレメント) から構成されています。各要素は独立しており、それ単独で機能します。しかしながら、利便性のためにこのリポジトリを提供し、全ての要素を一度にインストールできるように、単一のエントリーポイントのメタパッケージとして提供しています。これによりインストールプロセスが簡略化され、エンドユーザーに統一されたインタフェースを提供できます。ただし、それぞれの Qiskit エレメントは独自のリリースとバージョンをもつため、異なるリポジトリ間でのバージョンを扱う際には注意が必要です。このドキュメントは Qiskit エレメントとメタパッケージ両者のバージョンとリリースの扱いのガイドラインを概略します。

このガイドの残りでは、異なるコンポーネントのバージョン番号を参照するのに、標準のセマンティック バージョニング (Semantic Versioning) 命名規則: Major.Minor.Patch を採用します。例えば、バージョン番号が 0.7.1 だった場合、メジャーバージョンは 0 、マイナーバージョンが 7、そしてパッチバージョンが 1 です。

メタパッケージバージョン

Qiskitメタパッケージバージョンは、追跡対象の各要素のリリースによって決定される独立した値です。 リリースを追跡対象コンポーネントにプッシュする(または要素を追加する)たびに、メタパッケージの要件とバージョンを更新し、新しいリリースを公開する必要があります。 タイミングを要素のリリースと調整して、メタパッケージのリリースが要素のリリースを追跡するようにします。

新しい要素(エレメント) の追加

新しいQiskit要素がメタパッケージ要件に追加されると、メタパッケージのマイナーバージョンを増やす必要があります。

たとえば、メタパッケージが2つの要素 qiskit-aerとqiskit-terraを追跡しており、そのバージョンが 0.7.4であるとします。次に、メタパッケージに含める予定の新しい要素qiskit-ignisをリリースします。メタパッケージに新しい要素を追加するとき、バージョンを0.8.0に増やします。

パッチバージョンの増加

メタパッケージによって既に追跡されているQiskit要素がバグを修正するためのパッチバージョンをリリースする際に、setup.pyの要件を上げてから、メタパッケージのパッチバージョンを増やす必要もあります。

たとえば、メタパッケージが3つの要素 qiskit-terra == 0.8.1qiskit-aer == 0.2.1 および qiskit-ignis == 0.1.4 を追跡していて 現在のバージョン 0.9.6 だとします。qiskit-terraがバグ 0.8.2 を修正するための新しいパッチバージョンをリリースすると、メタパッケージもパッチバージョンとリリースを増やして 0.9.7 にする必要があります。

さらに、メタパッケージ自体には、新しいリリースをプッシュすることで修正する必要があるパッケージングまたはその他のバグが時々あります。 それらがおきたら、パッチバージョンを増やして、破損したリリースと区別する必要があります。 いかなる状況でもpypiから壊れたリリースや古いリリースを削除しないでください。代わりに、パッチバージョンを増やして新しいリリースをアップロードしてください。

マイナーバージョンの増加

メタパッケージに新しい要素を追加することに加え、追跡される要素のマイナーバージョンが増加するたびに、メタパッケージのマイナーバージョンも増加させる必要があります。

たとえば、メタパッケージが2つの要素 qiskit-terra == 0.7.0 および qiskit-aer == 0.1.1 を追跡しており、現在のバージョンが``0.7.5``であるとします。qiskit-aer 要素が 0.2.0 をリリースしたら、新しいリリースに対応するためにメタパッケージのバージョンを 0.8.0 に増やす必要があります。

メジャーバージョンの増加

メジャーバージョンは、他のバージョン番号コンポーネントとは異なります。追跡対象の各要素でロックステップで更新される他のバージョン番号コンポーネントとは異なり、メジャーバージョンは、すべての追跡対象バージョンがバンプされたとき(少なくとも``1.0.0`` の前に)にのみ増加します。現在、すべての要素のメジャーバージョン番号コンポーネントは `` 0`` であり、メジャーバージョンを >= 1 にバンプしてメタリポジトリ内の各追跡要素が安定しているとマークされるまでは、 パッケージバージョンは、メジャーバージョンを増やすべきではありません。

すべての要素が> = 1.0.0になった後のメジャーバージョン番号コンポーネントトラッキングの動作はまだ決定されていません。

Qiskit要素の要件の追跡

メタパッケージとQiskitのバージョン管理に厳密に関連しているわけではありませんが、メタパッケージの要件リストで要素のバージョンを追跡する方法が重要です。 setup.pyにリストされている各要素は、単一のバージョンに固定する必要があります。 つまり、Qiskitの各バージョンでは、追跡対象の要素ごとに1つのバージョンのみをインストールする必要があります。 たとえば、特定の時点での要件リストは次のようになります。

requirements = [
    "qiskit_terra==0.7.0",
    "qiskit-aer==0.1.1",
]

これはデバッグに役立つだけでなく、複数の要素にわたるバージョンの追跡をより透明にするためでもあります。

また、要素をインストールする順序も非常に重要であることを指摘する価値があります。 `` pip``には実際の依存関係ソルバーがありません。つまり、インストールの順序が重要です。 したがって、要素間で要件バージョンが重複したり、要素間で依存関係がある場合、要件リストの順序ですべてが期待どおりにインストールされるようにする必要があります。 インストール時の非互換性のために順序を変更する必要がある場合は、明確に注意する必要があります。

モジュールの状態

Qiskitは非常に高速に開発されているため、さまざまなバージョンでサポートされるAPIの異なる部分をすべて維持するのは困難です。 最善を尽くし、1つのマイナーバージョンアップデート(例えば0.6から0.7へ)に対して、非推奨の警告を使用してAPIを動作させ続けるというルールを適用しています。なのでこれらの警告を無視しないでください。 ときにはルールが適用されない場合があります。これらについては、リリース履歴で詳細に説明します。

これは、Qiskit 1.0に向けて取り組んでいると言われていますが、安定したモジュールがいくつかあり、下の表はそれらにラベルを付ける試みです

モジュール

名称

ステータス

備考

assembler

stable

completed in version 0.9

circuit

unstable

compiler

stable

completed in version 0.9

converters

unstable

dagcircuit

remove

will be part of circuits

extensions

remove

will be part of circuits

ignis.characterization

ignis.mitigation

ignis.characterization

providers

stable

completed in version 0.7

pulse

unstable

qasm

remove

passer location to be determined

qobj

remove

moved into the provider

quantum_info

unstable

result

remove

moved into the provider

schemas

stable

completed in version 0.7

tests

unstable

tools

unstable

various elements to be removed

transpiler

stable

completed in version 0.9

validation

stable

completed in version 0.7

visualization

stable

completed in version 0.9

プロバイダー

Qiskitをデフォルトでインストールすると、下記三つのプロバイダーが提供されます。

Basic Aer Provider

当プロバイダーは三つのバックエンドを持ち、理想的な量子回路をシミュレーションします。今後Aerが安定化し、どのOSにも対応できるようになった際は、このプロバイダーは削除される予定です。

Aer Provider

C++で書かれたより高度なシミュレーターです。Basic Aerと比べて実行処理が速く、量子回路にノイズを載せることも可能です。これにより今日の量子コンピューターのノイズに対して、現実的な実験モデルに基づく量子回路の振る舞いを探求できます。

IBM Quantum プロバイダー

このプロバイダは実機へのアクセスを提供します。利用にはIBM Quantum Experienceのアカウントが必要です。IBM Q ProviderはオンラインでHPCシミュレーターも提供します。言い換えるならば、クラウドにホスティングされたAer Providerです。

コミュニティーによる拡張

Qiskitはモジュール性を考慮した設計がされています。ここではQiskit コミュニティーとの協働で開発したエクステンションやパッケージ等、各種拡張に関するご紹介をします。

プロバイダー

Qiskit base providerは異なるバックエンド群 (IBM Quantumを通じて提供されているバックエンド等) へのアクセスを提供します。バックエンドとのやり取りをして、どのバックエンドがオンラインなのかを判断したり、特定のバックエンドのインスタンス、プロパティや設定を取得したり、ジョブの実行と管理等を行います。

追加のプロバイダー

  • Decision diagram-based quantum simulator

    - Organization: Johannes Kepler University, Linz, Austria (Alwin Zulehner and Robert Wille)
    - Description: A local provider which allows Qiskit to use decision diagram-based quantum simulation
    - Qiskit Version: 0.7
  • Quantum Inspire

    - Organization: QuTech-Delft
    - Description: A provider for the Quantum Inspire backend
    - Qiskit Version: 0.7
    - More info: Medium Blog and GitHub.

トランスパイラー

量子コンピューティングを実際のハードウェアで実現する鍵が量子回路の最適化です。Qiskitの主要コンポーネントはTranspilerで、特定の変換(Transpiler passes)に基づいて量子回路を操作するフレームワークです。Transpilerは、pass managerによって、ユーザーがカスタマイズされたパスを作成し、パスが指定したルールに基づいて回路を変換できるようにしたものです。加えて、Transpilerのアーキテクチャはモジュール性と拡張性を考慮して設計され、Qiskitユーザが各自のパスを設計し、pass managerで利用し、既存のパスと組み合わせられるようにしました。このように、Transpilerのアーキテクチャは量子回路のより積極的な最適化を可能にします。

追加のパス

  • t|ket〉 optimization & routing pass

    - Organization: Cambridge Quantum Computing
    - Description: Transpiler pass for circuit optimization and mapping to backend using CQC’s t|ket〉compiler.
    - Qiskit Version: 0.7
    - More info: Tutorial Notebook and GitHub.

ツール

Qiskitの新しいツールや機能の拡張は、コミュニティーの発展にとって重要な取組です。新しいツールとは、可視化ツールであったり、Slackとの統合であったり、Jupyterのエクステンションをつくること等です。

追加のツール

  • OpenControls library

    - Organization: Q-CTRL
    - Description: Library of quantum control pulses derived from the open literature.
    - Qiskit Version: 0.7
    - More info: GitHub and Q-CTRL website