ブログ

量子ソフトウェア開発。似ているが新しいパラダイム

5
5月
,
2022
オフェック・キルツナー、Classiq研究開発担当副社長

新しいプログラミング言語やコンパイラ、ツールチェーンを作るにはどうしたらいいのだろう?新しい分野のソフトウェア・プラットフォームを設計するとき、私たちは過去の豊富な経験を生かしつつ、創造性、画期的な研究、エンジニアリングを組み合わせることができる。

Classiqは量子コンピュータ用のソフトウェアを作成するためのツール群を開発している。この記事では、C言語による古典的なプログラミングに例えて、この新しいコンピューティング・パラダイムのための新しい言語とプラットフォームをどのように構築しているかを説明する。

多くの読者がご存知のように、量子コンピュータは量子物理学から導かれた数学モデルに基づいている。詳細は省くが、古典的なプログラミングとは異なるセマンティクスを持つ論理ゲートのセットを想像してほしい。量子ゲートは、0と1の文字列を操作するのではなく、これらの文字列の線形結合を操作する。量子プログラミングは量子ゲートを相互接続し、古典論理ゲートと組み合わせることもできる。

量子コンピュータの構築は、少し前までは空想の産物と考えられていた。しかし近年、IBMの127量子ビット・プロセッサーやグーグルの量子至上主義実験のような巨大コンピューティング企業のブレークスルーに後押しされ、量子コンピューターの産業利用は「実現するか」ではなく「どのくらいで実現するか」という問題になった。

量子コンピュータを作る動機は非常に明確だ。もしコンピュータを作ることができ、そのために適切なソフトウェアを書くことができれば、古典的なコンピュータでは解決できない、そしてこれからも解決できない重要な問題を解決することができる。例えば、新しいワクチンの開発、サプライチェーンの最適化、大規模分子のシミュレーション、新しい機械学習アルゴリズムの発見、より良い方法での情報保護などなど。

1950年代を振り返ってみると、最初のコンピューティング・プロトタイプから今日の高度なプロセッサーに至るまで、長い研究とエンジニアリングのプロセスがあったことがわかるだろう。現代のプロセッサは、命令セットアーキテクチャ(ISA)によって特徴付けられ、使用する命令、データ型、レジスタを規定している。ある種の命令は、人間が読めるアセンブリ言語命令と同様にバイナリ表現を持っている。しかし今日、大規模なソフトウェア・プロジェクトをアセンブリ言語で開発する人は、リーナスでさえいない。60年代から70年代にかけて、Fortran、そしてCのようなプログラミング言語が、アセンブリの上の抽象化レイヤーを提供するために開発された。これらの言語はソフトウェア開発に革命をもたらし、ソフトウェア・エンジニアが創造性を表現することを可能にした。

現在の量子コンピューターは100量子ビット程度しかない。これには多くの制約があり、企業がこれを使って複雑な計算を行うのは難しいだろう。これらの量子コンピュータのプログラミングは、QASM(量子アセンブリ)やQ#のような言語で行われる。これらの言語では、ソフトウェア・エンジニアがどの量子ゲートを使用するかを明示的に宣言する必要があり、多くの人はこれをアセンブリ言語よりもハードウェアに近いと考えるだろう。しかし、2023年に1000量子ビットのコンピュータが 登場し、より洗練されたコードを作成できるようになれば、このような低レベルのプログラミングは不可能に近いシスプリ的な作業になるだろう。

この問題に対処するため、Classiqは量子ソフトウェアスタックの次のレイヤーを開発している。

古典的なコンピュータのプログラミングは、今日ではどうなっているのだろうか?C言語を例にとり、実行可能なファイルを提供することが目的だと仮定してみよう。大まかに言えば、ソフトウェア・エンジニアは".c "と".h "ファイルを作成し、それらを".o "ファイルにコンパイルする。そして、これらを既存のライブラリ(libcなど)とリンクして実行可能ファイルにする。エンジニアはコードを実行できるが、バグに遭遇する可能性が高い。コードをデバッグするために、エンジニアはgdbのようなデバッガや、objdumpやIDAのような静的コード解析ツールを使うことができる。コードを書き、コンパイルし、リンクし、実行し、デバッグする。

これは量子ソフトウェアの記述とどのように似ているのですか?Classiqプラットフォームは、エンジニアや量子アルゴリズム設計者に機能的で宣言的なインターフェースを提供します。そのため、設計者は生成したいロジックや機能を「宣言」し、そのコードが満たすべき制約条件(回路長、量子ビット数、精度など)を指定する必要があります。Classiqは状態準備、量子演算、機械学習などの量子ビルディング・ブロックをライブラリとして提供しています。これらの宣言はモデル(.qmod)にまとめられ、バックエンドサーバーに送られます。このモデルは、我々の定義済みブロックと一緒に、合成プロセス(要件を満たす最適な量子コードの作成)を受けます。ユーザーは結果を分析し、仕様に合致しているかどうかを検証したり、様々な量子コンピューターやシミュレーターで素早く実行することができます。この対話的かつ反復的なプロセスの一環として、ユーザーは望ましい結果が得られるまで制約条件や機能定義を変更することができる。最後に、古典的なコンパイルと同様に、出力されるコードは手作業で達成されるよりもはるかに優れている。

このような共通点があるにもかかわらず、古典的プログラミングと量子プログラミングにはいくつかの違いがある:

  • 量子論理は古典論理よりも複雑であるため、量子回路の合成はアルゴリズム設計プロセスにおいても、実装においても、より高度なものとなる。
  • 量子ソフトウエアは近似的なものであり、最終的なコードの精度が要求される。
  • 合成プロセスは、ローカルの古典的なコンパイラーとは異なり、ネットワーク化されたAPIを介して行われる。これは、インターフェイスを簡素化し、SaaSモデル(シームレスなソフトウェア・アップグレード、拡張可能な容量など)を活用するためである。
  • 量子ビットの測定プロセスは不可逆であるため、量子コードのデバッグ能力には限界がある。したがって、量子コードの解析と検証のプロセスは、アルゴリズム的に難しい問題である。
  • 量子ソフトウエアは本質的にグラフィカルである。適切な設計環境は、テキストとグラフィカルの両方の手法を提供し、合成されたコードをテキストとグラフィカルの両方で表示する必要があります。

量子ソフトウェアの世界はまだ黎明期にある。古典的なソフトウェア設計と類似している部分も多いが、その道はほとんど未舗装であり、深い研究、革新、創意工夫が必要である。Classiqが取り組んでいる課題には次のようなものがある:

  • 画期的な量子ソフトウェアを可能にする合成アルゴリズムの研究と実装。
  • 純粋およびハイブリッド(古典/量子)アルゴリズムを表現し、エンジニアの創造性を表現するのに役立つ豊富な宣言型言語を開発する。 
  • 柔軟な精度を提供し、利用可能な量子リソースに適応できるアルゴリズムのビルディングブロックを作成する。
  • 量子コードの解析とデバッグを合理的な時間で行うためのツール。
  • 次世代の量子コンピュータに対応するスケーラブルなインフラ。

ご興味がおありですか?私たちは、あらゆる分野の一流のソフトウェア・エンジニアを求めています:DevOps、アルゴリズムの専門家、量子情報科学者、フロントエンドデザイナーなどなど。想像力とテクノロジーの限界を突破することを恐れず、コンピューティングの未来を築くことに興味のあるパイオニアを求めています。

新しいプログラミング言語やコンパイラ、ツールチェーンを作るにはどうしたらいいのだろう?新しい分野のソフトウェア・プラットフォームを設計するとき、私たちは過去の豊富な経験を生かしつつ、創造性、画期的な研究、エンジニアリングを組み合わせることができる。

Classiqは量子コンピュータ用のソフトウェアを作成するためのツール群を開発している。この記事では、C言語による古典的なプログラミングに例えて、この新しいコンピューティング・パラダイムのための新しい言語とプラットフォームをどのように構築しているかを説明する。

多くの読者がご存知のように、量子コンピュータは量子物理学から導かれた数学モデルに基づいている。詳細は省くが、古典的なプログラミングとは異なるセマンティクスを持つ論理ゲートのセットを想像してほしい。量子ゲートは、0と1の文字列を操作するのではなく、これらの文字列の線形結合を操作する。量子プログラミングは量子ゲートを相互接続し、古典論理ゲートと組み合わせることもできる。

量子コンピュータの構築は、少し前までは空想の産物と考えられていた。しかし近年、IBMの127量子ビット・プロセッサーやグーグルの量子至上主義実験のような巨大コンピューティング企業のブレークスルーに後押しされ、量子コンピューターの産業利用は「実現するか」ではなく「どのくらいで実現するか」という問題になった。

量子コンピュータを作る動機は非常に明確だ。もしコンピュータを作ることができ、そのために適切なソフトウェアを書くことができれば、古典的なコンピュータでは解決できない、そしてこれからも解決できない重要な問題を解決することができる。例えば、新しいワクチンの開発、サプライチェーンの最適化、大規模分子のシミュレーション、新しい機械学習アルゴリズムの発見、より良い方法での情報保護などなど。

1950年代を振り返ってみると、最初のコンピューティング・プロトタイプから今日の高度なプロセッサーに至るまで、長い研究とエンジニアリングのプロセスがあったことがわかるだろう。現代のプロセッサは、命令セットアーキテクチャ(ISA)によって特徴付けられ、使用する命令、データ型、レジスタを規定している。ある種の命令は、人間が読めるアセンブリ言語命令と同様にバイナリ表現を持っている。しかし今日、大規模なソフトウェア・プロジェクトをアセンブリ言語で開発する人は、リーナスでさえいない。60年代から70年代にかけて、Fortran、そしてCのようなプログラミング言語が、アセンブリの上の抽象化レイヤーを提供するために開発された。これらの言語はソフトウェア開発に革命をもたらし、ソフトウェア・エンジニアが創造性を表現することを可能にした。

現在の量子コンピューターは100量子ビット程度しかない。これには多くの制約があり、企業がこれを使って複雑な計算を行うのは難しいだろう。これらの量子コンピュータのプログラミングは、QASM(量子アセンブリ)やQ#のような言語で行われる。これらの言語では、ソフトウェア・エンジニアがどの量子ゲートを使用するかを明示的に宣言する必要があり、多くの人はこれをアセンブリ言語よりもハードウェアに近いと考えるだろう。しかし、2023年に1000量子ビットのコンピュータが 登場し、より洗練されたコードを作成できるようになれば、このような低レベルのプログラミングは不可能に近いシスプリ的な作業になるだろう。

この問題に対処するため、Classiqは量子ソフトウェアスタックの次のレイヤーを開発している。

古典的なコンピュータのプログラミングは、今日ではどうなっているのだろうか?C言語を例にとり、実行可能なファイルを提供することが目的だと仮定してみよう。大まかに言えば、ソフトウェア・エンジニアは".c "と".h "ファイルを作成し、それらを".o "ファイルにコンパイルする。そして、これらを既存のライブラリ(libcなど)とリンクして実行可能ファイルにする。エンジニアはコードを実行できるが、バグに遭遇する可能性が高い。コードをデバッグするために、エンジニアはgdbのようなデバッガや、objdumpやIDAのような静的コード解析ツールを使うことができる。コードを書き、コンパイルし、リンクし、実行し、デバッグする。

これは量子ソフトウェアの記述とどのように似ているのですか?Classiqプラットフォームは、エンジニアや量子アルゴリズム設計者に機能的で宣言的なインターフェースを提供します。そのため、設計者は生成したいロジックや機能を「宣言」し、そのコードが満たすべき制約条件(回路長、量子ビット数、精度など)を指定する必要があります。Classiqは状態準備、量子演算、機械学習などの量子ビルディング・ブロックをライブラリとして提供しています。これらの宣言はモデル(.qmod)にまとめられ、バックエンドサーバーに送られます。このモデルは、我々の定義済みブロックと一緒に、合成プロセス(要件を満たす最適な量子コードの作成)を受けます。ユーザーは結果を分析し、仕様に合致しているかどうかを検証したり、様々な量子コンピューターやシミュレーターで素早く実行することができます。この対話的かつ反復的なプロセスの一環として、ユーザーは望ましい結果が得られるまで制約条件や機能定義を変更することができる。最後に、古典的なコンパイルと同様に、出力されるコードは手作業で達成されるよりもはるかに優れている。

このような共通点があるにもかかわらず、古典的プログラミングと量子プログラミングにはいくつかの違いがある:

  • 量子論理は古典論理よりも複雑であるため、量子回路の合成はアルゴリズム設計プロセスにおいても、実装においても、より高度なものとなる。
  • 量子ソフトウエアは近似的なものであり、最終的なコードの精度が要求される。
  • 合成プロセスは、ローカルの古典的なコンパイラーとは異なり、ネットワーク化されたAPIを介して行われる。これは、インターフェイスを簡素化し、SaaSモデル(シームレスなソフトウェア・アップグレード、拡張可能な容量など)を活用するためである。
  • 量子ビットの測定プロセスは不可逆であるため、量子コードのデバッグ能力には限界がある。したがって、量子コードの解析と検証のプロセスは、アルゴリズム的に難しい問題である。
  • 量子ソフトウエアは本質的にグラフィカルである。適切な設計環境は、テキストとグラフィカルの両方の手法を提供し、合成されたコードをテキストとグラフィカルの両方で表示する必要があります。

量子ソフトウェアの世界はまだ黎明期にある。古典的なソフトウェア設計と類似している部分も多いが、その道はほとんど未舗装であり、深い研究、革新、創意工夫が必要である。Classiqが取り組んでいる課題には次のようなものがある:

  • 画期的な量子ソフトウェアを可能にする合成アルゴリズムの研究と実装。
  • 純粋およびハイブリッド(古典/量子)アルゴリズムを表現し、エンジニアの創造性を表現するのに役立つ豊富な宣言型言語を開発する。 
  • 柔軟な精度を提供し、利用可能な量子リソースに適応できるアルゴリズムのビルディングブロックを作成する。
  • 量子コードの解析とデバッグを合理的な時間で行うためのツール。
  • 次世代の量子コンピュータに対応するスケーラブルなインフラ。

ご興味がおありですか?私たちは、あらゆる分野の一流のソフトウェア・エンジニアを求めています:DevOps、アルゴリズムの専門家、量子情報科学者、フロントエンドデザイナーなどなど。想像力とテクノロジーの限界を突破することを恐れず、コンピューティングの未来を築くことに興味のあるパイオニアを求めています。

"キュービット・ガイのポッドキャスト "について

The Qubit Guy(弊社最高マーケティング責任者ユヴァル・ボーガー)がホストを務めるこのポッドキャストは、量子コンピューティングのオピニオンリーダーをゲストに迎え、量子コンピューティングエコシステムに影響を与えるビジネスや技術的な疑問について議論します。ゲストは、量子コンピュータのソフトウェアやアルゴリズム、量子コンピュータのハードウェア、量子コンピューティングの主要なアプリケーション、量子産業の市場調査などについて興味深い見解を提供します。

ポッドキャストへのゲスト推薦をご希望の方は、こちらまでご連絡ください。

量子ソフトウェア開発を開始

お問い合わせ