量子プログラミング用SDK
量子ゲート型コンピュータでは、量子回路の記述、シミュレーターの実装、数値最適化などを行うための
SDK (Software Development Kit) が多数リリースされています。
言語としてはPythonで書かれたものが多いです。1
SDK毎に特色があります。ここでは”推しSDK"である PennyLane を紹介します。
https://pennylane.ai/
PennyLaneは量子機械学習に特化した、素晴らしいSDKです。
Pythonで動いています。
PennyLaneを気に入りすぎて、最近はひたすらQiitaで記事を書いています。20件ぐらいになりました。
https://qiita.com/tags/pennylane
PennyLaneについて
開発元
開発しているのはカナダのXanadu Quantum Technologiesです。単にXanaduと呼びます。2
https://www.xanadu.ai/
インストール
pip install pennylane
ですぐ使うことが出来ます。
特徴
実践的なデモが豊富
PennyLaneの公式サイトでは、実践的なデモが豊富に用意されています。
https://pennylane.ai/qml/demos_qml.html
知識がなくとも、簡単に、具体的な量子機械学習(量子ニューラルネットワークや量子サポートベクターマシン)を試すことが出来ます。
ユーザーが投稿したデモもあります。
デモの質、実用性、楽しさは、PennyLaneの魅力を語る上で外せません。
量子機械学習との親和性
PennyLaneは量子機械学習を前提として設計されています。
具体的には、
-
Tensorflow や Pytorch といった古典機械学習SDKとの接続(インターフェース)が用意されている。
これらが使える人であれば、最短ルートで量子機械学習を実装できる。 -
ニューラルネットワーク等の複雑なモデルの学習に重要な誤差逆伝搬法の量子版が用意されている。
パラメータ数が多くなると、誤差逆伝搬法は計算時間を劇的に減らしてくれる。
PennyLaneによる量子機械学習 ~勾配計算の匠~
IBMのQiskit等でも、もちろん量子機械学習を実装することは出来ます。
ただ、PennyLaneほど簡潔に書くことは難しいと思います。
複数のシミュレーター、実機との互換性
PennyLaneは、複数のシミュレーター・実機をわずかなコードの変更で切り替えられます。
PennyLaneでは、量子計算は 実行するデバイス(dev)と量子回路(circuit)のペアで作られたQnode という単位で管理されます。
そのため、Qnode(dev_ibmq, circuit) のようにかけば、IBMQの実機3で処理されますし、Qnode(dev_simulator, circuit) のようにかけば、同じ回路がシミュレーターで処理されます。
別のSDKに翻訳して、そのSDKのシミュレーターを使うことすら出来ます。
このような「デバイス互換性」は、今では様々なSDKでサポートされる機能ではありますが、PennyLaneでは早い段階から実装されていました。
AWSのクラウド実機との連携
AmazonはAWSを用いたクラウドアクセスで複数の量子コンピュータ実機やシミュレーターにアクセスできる環境を提供しています。
SimulatorとしてはStatevector simulator (SV1)、Tensor simulator(TN1)、Density matrix simulator(DM1)
実機としてはIonQ、Rigetti
が使えます。
全て有料かつ実機としてIBMQが無いのは残念ですが、高性能なシミュレーターマシンと実機を切り替えて使えるのはメリットです。
コーディング環境もクラウド上にあるので、その点も人によっては便利かもしれません。
AWS上にあるマシンを叩く方法として、Amazonは自前の amazon-braket というSDKを提供しています。
amazon-braketも悪くないのですが、個人的には、あまり機能が豊富ではなく、わざわざAWS上のマシンを使うためだけにamazon-braketで書き直すというのもしんどいと思います。
しかし、PennyLaneは PennyLane-braket というプラグインを使うことでAWS上のマシンを叩くことが出来ます。例えば、
Pennylane-braket でqueueに積まれたAWSタスクを読み込む方法
つまり、極端なことを言えば**「PennyLaneが書ければそれでいい」**のです。
回路図描画
デバッグの段階だと、量子回路の回路図をグラフィカルに欲しくなります。
グラフィカルな表示ができるSDKはかなり限られています。
PennyLaneは、それ単体ではアスキー表示しか出来ませんが、Qiskitと連携できるので
Qiskitの回路描画機能を借りて使うことが出来ます。やり方は以下を参照。
PennyLaneのtemplate circuits
ローカルシミュレーターが早い
PennyLaneで書いた回路を手元(ローカルシミュレーター)で実行する場合もメリットがあります。
PennyLaneはC++で書かれた独自のバックエンドをdevとして指定できます。4
PennyLaneをC++バックエンドで高速に動かす
また、Qunasys製のC++で書かれた高速なQulacs SDK をdevとして指定することも出来ます。
ただし、プログラム全体が早く終わるかどうかは、オーバーヘッドや計算アルゴリズム等に依存するので、常にPennyLaneが早いとは言えないかもしれません。
なぜ遅いのか? を調べると、それも勉強になります。
Q&Aサイトが充実
PennyLaneは、公式サイト上にQ&Aが出来る場があります(Slackもありますが)。
https://discuss.pennylane.ai/
ここでは、質問に対してトップレベルの研究者・開発者が丁寧にレスしてくれます。
デメリット
PennyLaneの良いところばかり紹介してきました。デメリットも少しあって、
- 記法がやや独特(Qnodeという概念があるため)。
- qiskitほど「何でも出来る」わけではない。qiskitにあって、PLにない機能もある。5
- 日本語化されていない。
このあたりでしょうか。
まとめ
PennyLaneには、デメリットを補って余りあるメリットがあると思います。
日本でPennyLane user に出くわしたことが無い6のですが、、もっと流行っていいと思います。
素晴らしいSDKです。
pip install pennylane
お願いします。
一緒に量子ニューラルネットワークや量子サポートベクターマシンやりましょう!
-
Julia, Q#などもあります。 ↩
-
XanaduのSDKとしては、PennyLaneの他にStrawberry fieldsもあります。こちらは光を用いた連続量量子計算と呼ばれるもの用のSDKです。光を用いた連続量量子計算については、ハードウェアの開発もやっており、既に無料でクラウドアクセスまで出来ます。 ↩
-
pennyLane-qiskit プラグインを入れるだけでOK。 ↩
-
現在は、pennylane-lightning プラグインはpennylane本体に巻き取られました。 ↩
-
例えば、回路の途中の状態ベクトルのスナップショットを取る機能は、デフォルトではありません。また、barrierゲートもありません。ただ、このあたりは今後実装されていく可能性が高いと思われます。 ↩
-
そもそも量子コンピュータのプログラミングをしている人自体が珍しいわけですが・・・ ↩