量子コンピュータのオープンソース・ソフトウェア
まえがき
量子コンピュータ Advent Calendar 2018の23日目の記事です。
OpenQLのなかの人の一人として記事を書いています。この記事を執筆する機会をいただけて感謝しております。
2014年から始まる第二次量子コンピュータブームでは、オープンソース・ソフトウェア(OSS)がたくさん生み出されています。この記事では、量子コンピュータに関するオープンソース・ソフトウェアがあるのかをまとめたいと思います。 このアドベントカレンダーの1日目の記事にある通り、量子コンピュータには汎用的な「ゲート型(と言われるがゲート操作をするとは限らない)」量子コンピュータと、イジングモデルに特化した「量子アニーリング型」と呼ばれているものがあります。この記事では色々と煩わしい「量子コンピュータ」の定義問題には立ち入らず、すべての量子コンピュータに関わるOSSをまとめようと思います。
OSSというのは、Wikipedia的に言うと、「利用者の目的を問わずソースコードを使用、調査、再利用、修正、拡張、再配布が可能なソフトウェアの総称である」です。量子コンピュータにおいても、多くのOSSがあります。これらはGitHub上で公開されていることが多いので、スターの数やコントリビュータの数など多くの情報がわかります。OSSにおいてはライセンスも重要です。現在どんなOSSがあって、それぞれどんな感じなのか、個人的にも気になるのでまとめてみました。著者の不理解により、誤りなどがあるかもしれませんが、その場合は編集リクエストをお送りいただければ幸いです。
この記事の情報は2018年12月23日のものとします。 順番はアルファベット順です。
D-Wave Systems
世界で最初の商用量子アニーリングマシンを開発した、カナダのD-WaveのOSSを見ていきます。 本アドベントカレンダーにおいても、9日目にはOceanを使った足し算、Hybridについては 11日目、13日目にはピクロス(お絵かきロジック)を解いています。
名前 | ライセンス | プログラミング言語 | Contributor | スター | フォーク |
---|---|---|---|---|---|
dwave-ocean-sdk | Apache-2.0 | Python | 4 | 67 | 12 |
D-Wave Hybrid | Apache-2.0 | Python | 3 | 15 | 10 |
Qbsolv | Apache-2.0 | C++ | 20 | 833 | 192 |
正直に言って、D-Waveを使用したことがないので、各ライブラリの位置付けがいまいちわからないです。どなたか詳細を加筆して編集リクエストをいただけると嬉しいです。
72量子ビットの量子プロセッサ「Bristlecone」を開発中のGoogleですが、OSSもリリースしています。 ここで紹介するものは Googleの公式のプロダクトではないので、Googleと書くのも微妙な気がしますが、quantumlibとかいてもピンと来ないので、Googleにしておきます。
Cirqはアドベントカレンダーの10日目で紹介されています。OpenFermionは量子化学で出てくるフェルミオンを量子コンピュータで扱うためのライブラリです。 OpenFermion-CirqではOpenFermionで生成したハミルトニアンをCirq向けにコンパイルすることが出来ます。
名前 | ライセンス | プログラミング言語 | Contributor | スター | フォーク |
---|---|---|---|---|---|
Cirq | Apache-2.0 | Python | 35 | 1272 | 185 |
OpenFermion | Apache-2.0 | Python | 29 | 682 | 160 |
OpenFermion-Cirq | Apache-2.0 | Python | 8 | 144 | 27 |
IBM
クラウド上の量子コンピュータを公開しているIBMは多くのOSSをリリースしています。Quantum Information Science KitことQiskitは4つの要素に分かれます(現在リリースされているのは3つです。)
Qiskit TerraはQiskitの基礎を担うもので、量子回路をコンパイルしたり、量子回路や計算結果を可視化したりする機能があります。Qiskit Aquaは応用向けのライブラリで量子化学・最適化・機械学習をターゲットにしています。Qiskit Aerはつい先日リリースされたばかりのライブラリで、量子計算の高速なシミュレータです。
名前 | ライセンス | プログラミング言語 | Contributor | スター | フォーク |
---|---|---|---|---|---|
Qiskit Terra | Apache-2.0 | Python | 75 | 2276 | 686 |
Qiskit Aqua | Apache-2.0 | Python | 20 | 130 | 63 |
Qiskit Aer | Apache-2.0 | Python, C++ | 5 | 13 | 10 |
その他にも、Qiskit Tutorialsというチュートリアルがあります。Qiskit Tutorialsについては、このアドベントカレンダーの5日目の記事で紹介されています。 また、JavaScriptやSwift向けのライブラリやVSCode用のExtensionもあるようです。
MDR
MDRは量子コンピュータの研究・開発をしている企業で、磁束量子ビットを作ったりしています。 ゲート型もアニーリング型も両方やっている会社で、OSSも両方に対応しているものがあります。
Blueqatは量子回路のシミュレータです。 最近流行りのVQE(Variational Quantum Eigensolver)というアルゴリズムにも対応しているようです。 Wildqatは量子アニーリング・量子イジング型向けのライブラリです。 アドベントカレンダーの19日目ではWildqatを用いて、ビンパッキング問題を解いています。
名前 | ライセンス | プログラミング言語 | Contributor | スター | フォーク |
---|---|---|---|---|---|
Blueqat | Apache-2.0 | Python | 4 | 9 | 2 |
Wildqat | Apache-2.0 | Python | 7 | 20 | 8 |
Microsoft
Q#はとても人気があり、このアドベントカレンダーでも何度か目にする機会がありました。 3日目では「Q#からIBM Qを操作する」方法について取り上げられていますし、4日目ではQ#を学ぶことが出来る問題集であるQuantum Katasが解説されています。
しかしながら、Q#はOSSではありません。
そのライブラリと例はOSSになっています。また、問題集であるQuantum KatasもOSSです。
名前 | ライセンス | プログラミング言語 | Contributor | スター | フォーク |
---|---|---|---|---|---|
Quantum Development Kit Samples | MIT | C# | 12 | 1688 | 319 |
Microsoft Quantum Development Kit Libraries | MIT | C# | 17 | 10 | 5 |
Quantum Katas | MIT | C# | 22 | 1257 | 195 |
ファイルの拡張子が、.cs
なのでGitHub上でみてみるとC#になっています。
OpenQL
OpenQL Projectは、量子コンピューターでオープンソースのライブラリを開発している人や、それを利用したい人が集まるコミュニティです。 勉強会を開催したり、Slack上で情報交換をしたりしています。
QuantPyは、フロントエンドに SymPy の数式や量子計算の表現を利用できるようにして、量子計算を行うバックエンドに各種の量子回路シミュレータが利用できるようにした量子回路モデルのシミュレータです。バックエンドには、QuantPy が標準で提供している python実装のシミュレータのほかに、プラグインを追加することで様々なバックエンドを使えるような設計をとっています。IBMの Qiskit(今はquantpyに内包)、cupy 対応された GPU版(quantpycupyパッケージ)、C言語実装版(quantpycythonパッケージ)があります。バックエンドとして、Cirq、Rigetti、Qulacs、Blueqat などの各種シミュレータおよび実サービスの対応も計画されていますが、開発者が少なく、開発自体は盛んではありません。
名前 | ライセンス | プログラミング言語 | Contributor | スター | フォーク |
---|---|---|---|---|---|
QuantPy | BSD 3-Clause | Python | 1 | 5 | 8 |
また、OpenQLでは、様々な言語で量子計算のライブラリ開発の取り組みを目標に掲げており、Elixir 実装の quantex、nodeJS 実装の quantjs、Julia 実装の quantjl、C/C++言語実装の libopenql、Haskell 実装の haskell-openql の開発者も募っています。これ以外の言語対応やライブラリの追加も、コミュニティ・メンバーの興味に応じて立ち上げていきます。
ProjectQ
ProjectQはETH Zurichの研究者によるプロジェクトです。
ProjectQでは量子回路を作ったり、シミュレーションをしたりできます。 また、IBM Quantum Experienceで実行することも出来ます。 FermiLibはOpenFermionのフォーク元で、ProjectQ上で動くフェルミオンのシミュレーション用ライブラリです。
名前 | ライセンス | プログラミング言語 | Contributor | スター | フォーク |
---|---|---|---|---|---|
ProjectQ | Apache-2.0 | Python | 11 | 398 | 119 |
FermiLib | Apache-2.0 | Python | 10 | 47 | 31 |
QunaSys
QunaSysは日本の量子コンピュータ技術を研究・開発しているベンチャー企業です。 OSSについては、Qulacsという高速に量子回路のシミュレーションをすることが出来るライブラリを公開しています。 GitHub上の他のライブラリとの比較をみると、確かに速いです。 速さは正義ですね。
名前 | ライセンス | プログラミング言語 | Contributor | スター | フォーク |
---|---|---|---|---|---|
Qulacs | MIT | C++ | 6 | 15 | 13 |
QuTiP
Quantum Toolbox in Python、略してQuTiPはこれまで紹介したものとは少し異なりますが、数値計算向けのライブラリです。日本学術振興会も支援しています。 アドベントカレンダー2の18日目の記事でQuTiPを使用しています。
名前 | ライセンス | プログラミング言語 | Contributor | スター | フォーク |
---|---|---|---|---|---|
QuTiP | 3条項BSDライセンス | Python | 44 | 543 | 229 |
Rigetti
Rigettiはアメリカのスタートアップ企業で、IBMと同様に量子コンピュータをクラウドで公開しています。
pyQuilはRigettiのクラウド量子コンピュータForestで実行するためのQuilを生成するためのPythonライブラリです。 量子回路をコンパイルし、クラウドでの実機・シミュレータ両方による計算をサポートしています。 Groveは量子アルゴリズム用のライブラリです。 量子フーリエ変換や位相推定などの基本的な量子アルゴリズムから、Variational Quantum Eigensolver (VQE)、Quantum Approximate Optimization Algorithm (QAOA)といったNISQ向けのアルゴリズムもサポートしています。
名前 | ライセンス | プログラミング言語 | Contributor | スター | フォーク |
---|---|---|---|---|---|
pyQuil | Apache-2.0 | Python | 54 | 684 | 184 |
Grove | Apache-2.0 | Python | 25 | 227 | 79 |
Xanadu
Xanaduは光を用いた量子 コンピュータを作っているカナダの企業です。光を用いたアーキテクチャ向けのオープンソース・ソフトウェアを公開しています。 連続量を用いた量子計算向けのライブラリは今回紹介する中ではこれだけです。
Strawberry Fieldsは量子回路のデザイン・シミュレーションなどを行ないます。tensorflow-gpu
を用いてGPUで計算することも出来ます。いずれは実機で計算することも可能になるようです。
名前 | ライセンス | プログラミング言語 | Contributor | スター | フォーク |
---|---|---|---|---|---|
Strawberry Fields | Apache-2.0 | Python | 7 | 200 | 31 |
あとがき
ちょっと時間がなくて急いで書いてしまいました。後日加筆する予定です。 取り上げてほしいOSSがあればコメントください。 加筆・訂正したときにはTwitterで告知します。