量子コンピューターに必要なソフトウェアを概観してみる

これは、情報科学若手の会 56thで発表した内容(非公開)を修正してテキストベースで公開したものです。 そして、量子コンピューター Advent Calendar 2023の14日目でもあります。(遅刻してすみません。完全に忘却していました......)

量子コンピューターのどこがすごいのか

量子コンピューター、なにやらすごそうなイメージがありますよね。ニュースとかで調べると、「次世代の計算機!」「スーパーコンピューターでも解けない問題を短時間で解いた!」というキャッチーな解説が踊っています。

実際、量子コンピューターは特定の問題、たとえば素因数分解*1や「問題の構造に依存しない全探索」*2を通常のコンピューター(この記事では以降「古典コンピューター」と呼ぶことにします)よりも少ない計算量で解けることが知られています。*3

特に、これらの問題を高速に解くことによって、量子コンピューターはRSA暗号や対象鍵暗号の解読を今までよりも効率的に(特に、RSA暗号に関しては現実的な時間で)解読ができるようになると考えられています。

また、量子コンピューターが提案されたそもそもの経緯の一つ*4である、「複雑な量子物理的な現象の効率的なシミュレーション」なども期待されており、これらによって新しい材料や薬などの開発が加速することが期待されています。

未来は明るいですね!!!

「すごい」量子コンピューターのためには何が必要なのか

......もちろんそんなうまい話はなく、現実には非常に大きな障害が複数存在しており、先ほど述べたような「すごい量子コンピューター」はまだ実現していません。

その中でも一番大きな障害の一つが「ノイズ」です。 量子コンピューターは量子ビットを用いて計算をしていくのですが、1ステップ計算を進めるごとに量子ビットにノイズが乗っていきます。このノイズのため、先ほど述べたような「大規模な」計算をしようとすると求めたい答えがノイズの中に埋もれて取り出せなくなってしまうのです。

IBMが公開している量子コンピューターの情報。(ibm_brisbane, 23年12月17日00:10時点)大体の量子ビットに1%程度の誤差がある。

これに対するアプローチはいくつか存在しますが、その中でもある程度根本的に問題に対処するために必要なのが「量子誤り訂正」です。量子誤り訂正の基本的なアプローチは、複数の量子ビットが分散して一つの量子ビットの情報を持つことで、ノイズで少し情報が破損しても残りから情報を復元できるようにする、というものです。

表面符号*5による量子誤り訂正符号。黒丸と白丸がそれぞれ量子ビットであり、全体で1量子ビット分の情報を保持する。

ではこれで問題がすべて解決するかというと、そんなことはありません。 一つの量子ビットを表現するために多数の量子ビットが必要になる上に、「情報を分散したまま」「ノイズを訂正しながら計算する」必要がある*6ため、量子計算の手続きがかなり複雑かつ長大になります。

例えば、先ほどの図の表面符号を用いたRSA暗号の解読では、素因数分解のためになんと「2000万量子ビットで8時間」のコストが必要である*7と試算されています。 *8

量子コンピューターは制御する古典コンピューターがいないとまともに扱える代物ではありません。 しかし、ここまで複雑になってくると、古典コンピューター側の制御プログラムも非常に複雑になってくることが予想されます。困りました。

量子コンピューターの実現に必要なソフトウェア

実用的な量子コンピューターを実現するには、超多数の量子ビットを適切に制御し、抽象的なタスクを実現しなければいけません。 そのため、通信プロトコルのように複数の階層からなるソフトウェアスタックが必要になります。 以下の項目に分けて紹介していきます。

物理制御組み込みソフトウェア

量子ビットは方式にもよりますが、近代まで発見されなかっただけあって、極めてデリケートであることが多いです。 そのため、量子計算を実現する一番オーソドックスな手段は、「古典コンピューターにあらかじめ実行したい計算を格納しておき、ほぼ自動的*9に物理制御をする」というものになります。

超伝導量子ビットの場合、適切な波形のマイクロ波量子ビットに対して適切なタイミングで照射することで制御をするわけですが、これを「数万量子ビットレベル」までスケールするような装置があることが望ましいです。 みなさんはパソコンに「数万個レベル」の外部機器を接続できますか?ちょっと考えただけでも気が遠くなりそうですね。

理研のプレスリリースより引用。
冷凍機(中心白)から青い配線が伸びている左右の筐体が制御部と思われる。

量子回路シミュレーター

直接量子コンピューターの実現には寄与しないものの、古典コンピューター上で動く量子回路シミュレーターは研究にとって非常に重要です。 量子コンピューター(実機)は数がまだ限られていますが、古典コンピューターは世界中に文字通り遍在していますし、研究者もユーザーも圧倒的に多いです。 そもそも、今の量子回路シミュレーターは大体の量子コンピューターよりも精度が良く、現在も進歩を続けています。 そのため、「このアルゴリズムを実際に動かしてデバッグしたい!」となったとき、実機で動かす前にまずはシミュレーターで試すというのがよくあります。

2023年末現在、量子コンピューターの実機とシミュレーターの精度はかなり拮抗しており、何かしらの技術的ブレイクスルーで量子ビット数はそのまま精度が数桁向上するか、同じ精度のまま腕力で多数量子ビット(少なくとも万レベル)を制御するまではこの状況は変わらないと私は考えています。

IBMが今年7月にnatureに発表した「量子コンピューターの有用性」を示す論文*10に対する反論の一つ*11から引用。実機(青丸)の結果をシミュレーション結果(水色線)がきれいに再現している。この分野の人間にとってはもはやおなじみの光景。

誤り訂正・デコーダ

ニューラルネットワークで表面符号の誤り訂正を計算する手法の論文。*12左の列から、アルゴリズム閾値*13、精度pに対応する計算時間(ms)

量子誤り訂正をソフトウェアの観点で見た場合、かなり要求はハードです。 量子状態がデコヒーレンスによりノイズに埋もれるマイクロ秒~ミリ秒単位の時間で100から1000個のオーダーの入力をもとにエラーを推定してリカバリーまでしないといけません。 計算量を減らしつつ、誤り訂正の精度を損なわない誤り訂正アルゴリズムの研究や、「そもそも少ない計算量で誤り訂正ができる符号」*14の研究開発などが重要です。

量子回路オプティマイザ・コンパイラ

量子コンピューターには相対的に得意な(=精度よく高速にできる)操作と、苦手な操作があります。 例えば、1量子ビットだけを操作するのが2量子ビットをもつれさせる操作よりも得意だったりすることが多いです。 また、同じ2量子ビットをもつれさせる操作でも、近くにあるもの同士でやる方が遠くにあるもの同士でやる方よりも得意だったりします。 そうすると、同じ計算を実現する量子回路でも、「苦手な操作を減らした表現」の方が精度が上がったりします。

また、少し方向性は変わりますが、「ある量子ビットが操作されている間になるべく同時に他の量子ビットを操作して計算時間を圧縮する」なんて方向性もあります。

素因数分解を従来より高速化したと主張する論文*15より引用、抜粋。こういう「量子ビットが遊んでいる時間」は減らしていきたいときもある。

利便性を上げるために必要なソフトウェア

古典コンピューターでWebアプリケーションを作りたいときに毎回TCPスタックから自作しなければいけないとしたらとても大変ですね。 せっかく量子コンピューターができても、抽象化が足りていないと使いづらくて悲しいです。 ということで、ここでは計算機を抽象化して使いやすくするソフトウェアについて以下のものを紹介していきます。

量子ライブラリ・ソフトウェア

複雑性を隠蔽する一番オーソドックスな手段です。 例えばQiskitでは量子アプリケーション モジュールとして化学、金融、機械学習、最適化の4分野について、「簡単に量子計算ができる」ライブラリを提供しています。

他に有名なライブラリだとCirqPennylaneなどがあります。

量子プログラミング言語

先ほどのアプローチでは問題の数だけライブラリが必要になってしまいます。 より細やかな制御がしたいときはそれでは足りないので、量子コンピュータの挙動をもっとプリミティブに記述できるようなプログラミング言語を作ると便利です。 また、古典コンピューターについて手続き型パラダイムよりもスケール手段として関数型パラダイムが注目されているように、量子コンピューターについてもよりスケールする手法が提案されるかもしれません。

量子プログラミング言語だと代表的なものとして QuipperSilqが知られています。

量子クラウド・サービス

一般の家庭で量子計算機保有することはまだ難しいです。*16なので大部分の人はどこかの量子計算機を間借りすることになると思います。 これは現在のクラウドとほぼ同じものであるため、量子クラウドと呼ばれています。 IBM Quantumなどが有名ですね。 また、実機だけでなく、オンラインで量子コンピューターの学習ができるサービスも重要です。未踏での取り組み*17もあり、こういった取り組みでそもそも「量子コンピューターに関わる人口を増やす」というのも重要になっていくでしょう。

個人的雑感

量子コンピューターの実現はまだまだ遠いので課題が山積みです。 情報科学が80年近くかけて蓄積してきた試行錯誤の結果のいいとこどりをしてスムーズに実現を目指せるというのが理想ですが、今の状況では物理学系の人が多く、思ったより知見を導入できていないのではないかと感じることが多いです。 量子ソフトウェアはこれからますます重要性を増していくと思うので、よければぜひ大学の量子コンピューターの研究室の見学や、OSS活動などをしてみてください。

*1:Shor, P. W. (1994, November). Algorithms for quantum computation: discrete logarithms and factoring. In Proceedings 35th annual symposium on foundations of computer science (pp. 124-134). Ieee.

*2:Grover, L. K. (1996, July). A fast quantum mechanical algorithm for database search. In Proceedings of the twenty-eighth annual ACM symposium on Theory of computing (pp. 212-219).

*3:よくある誤解として「なんでも速くなる」というのがありますが、量子コンピューターの方が速く解けることが理論的にわかっている問題はかなり限られているのが現状です。

*4:Feynman, R. P. (2018). Simulating physics with computers. Int. j. Theor. phys, 21(6/7).

*5:Fowler, A. G., Mariantoni, M., Martinis, J. M., & Cleland, A. N. (2012). Surface codes: Towards practical large-scale quantum computation. Physical Review A, 86(3), 032324.

*6:古典コンピューターの通信のように、いったん一つの量子ビットに情報を復号してしまうと、そこにノイズが乗って情報が破壊されてしまうためです

*7:Gidney, C., & Ekerå, M. (2021). How to factor 2048 bit RSA integers in 8 hours using 20 million noisy qubits. Quantum, 5, 433.

*8:ちなみにコストがあまりにもでかいので、もっといいやり方あるんじゃね?という研究も多く存在しています。

*9:量子ビットの測定結果に応じて計算を変えることもありますが、そのプログラムごと送り込むと考えることが普通です

*10:Kim, Y., Eddins, A., Anand, S., Wei, K. X., Van Den Berg, E., Rosenblatt, S., ... & Kandala, A. (2023). Evidence for the utility of quantum computing before fault tolerance. Nature, 618(7965), 500-505.

*11:Begušić, T., & Chan, G. K. (2023). Fast classical simulation of evidence for the utility of quantum computing before fault tolerance. arXiv preprint arXiv:2306.16372.

*12:Meinerz, K., Park, C. Y., & Trebst, S. (2022). Scalable neural decoder for topological surface codes. Physical Review Letters, 128(8), 080505.

*13:詳しく説明すると長くなるので割愛するが、誤り訂正の精度だと思うとよい。数値が高いほど良い。

*14:有名なものだと Dinur, I., Hsieh, M. H., Lin, T. C., & Vidick, T. (2023, June). Good quantum LDPC codes with linear time decoders. In Proceedings of the 55th Annual ACM Symposium on Theory of Computing (pp. 905-918). など

*15:Litinski, D., & Nickerson, N. (2022). Active volume: An architecture for efficient fault-tolerant quantum computers with limited non-local connections. arXiv preprint arXiv:2211.15465.

*16:情報科学若手の会ではこの部分に質問があって、量子コンピューターを自作する方法を紹介しましたが、それが一番ウケが良かったです。

*17:https://x.com/small_onions/status/1734531013131588088?s=20