この記事は量子コンピューター Advent Calendar 2022の5日目の記事です。
大阪大学で量子コンピュータの研究開発をやっておりますエンジニアの森と申します。
今年の5月から大阪大学のQIQBという組織に参加しまして、量子機械学習をやっているのですが、Qulacsの中の人もやっています。
(※実際の実装は大阪大学を始めとした情報学科系の競プロをやっている、つよつよエンジニア達が開発しているんですけどね!)
この記事で紹介させて頂くQulacsとは、量子コンピュータの回路シミュレータです。
類似ソフトウェアとして、QiskitやCirq等があります。
Qulacsの売りは、世界最高速の量子コンピュータの回路シミュレータなのですが、知名度がちょっと低いので今日は宣伝にきました。
Qulacsは、元々大阪大学で開発され、QunaSys(こちらも大阪大学発のスタートアップ)で保守されていました。
研究用の新機能は、[Qulacs-Osaka)で追加されていたのですが、リポジトリを分けて管理するのも面倒になってきたので、Release v0.5.0で統合しました。
今回はこのv0.5.0以降でリリースされた機能についてご紹介できればと思っております。
いろいろ細かい機能もあるのですが、覚えている大きめの機能をご紹介させて頂きます。(Qulacsドキュメントを更新せねば。。)
シミュレータ
シミュレータ機能は、チュートリアルに反映しています。(英語版も更新せねば。。)
- NoiseSimulator: ノイズをシミュレートした環境で回路を実行することができます!
- CausalConeSimulator: 測定する量子ビットに関係するゲートのみシミュレートしますので、回路の深さが浅ければ大きいサイズの量子ビットの回路の期待値を求めることができます。
backprop
量子機械学習の勾配計算を高速にするため、backprop を実装しました!
KAK分解
任意の2量子ビットゲートを既存ゲート(回転ゲートとCNOTのみ)に分解します。
量子コンピュータの実機では、実行できるゲートが限られているため、分解する必要があります。
機種によっては回転ゲートも実行できないものもあるため、TゲートやSゲートに変換する必要があります。
KAK分解はその前段階の回転ゲートへの分解になります。
回転ゲートの方向
Qulacsは、歴史のあるソフトウェアなので、教科書やqiskitの回転ゲートと方向が違う場合があります。
そのため方向を逆にした、RotXゲートやその逆RotInvXゲートを追加しました!
NoisyEvolution
確率的作用をするゲートに、NoisyEvolution を追加しました。
環境から相互作用(ノイズ)を受け、時間発展によって減衰させるゲートです!
(難しい専門用語の概説だけなので、もう少しイメージしやすい資料を作りたいですね。。)
逆回路
逆ゲートがget_inverse()
で呼び出せます。
QASM対応
QASMとQulacs回路を相互変換します。
DenseMatrixはQASMが対応していないので、独自拡張しています。
SVE対応
ARMのSVEに対応しました。M1 MacのNEONにも対応したいですね。
(M1用のネイティブバイナリ(SIMD未対応版)はPyPIに公開しました。)
今後について
等など、いろいろな機能が追加されております。
また、日々、研究に必要な機能がいろいろと実装されています。
当面はもっとドキュメントを頑張らないといけないなと思っています。
後、研究室に44台の計算ノードがあるクラスタがあり自由に使えるので、
QulacsをMPI対応させて無駄に大きい量子ビット回路をガンガン計算したいと思います!!