Simulation / Modeling / Design

QODA の紹介: 量子古典ハイブリッド コンピューティングのためのプラットフォーム

Reading Time: 2 minutes

この 10 年間で、量子コンピューティングはアカデミックな研究室から主流に躍り出ました。より優れた量子コンピューターを構築するための取り組みが、スタートアップや大企業の両方で盛んに行われています。一般的な問題に量子の利点を利用できるようになるまでの道のりはまだ明確ではありませんが、今こそ価値ある量子アプリケーションを実現するために必要なツールを構築する時であることは明らかです。

その手始めとして、量子アルゴリズムに対する理解を深める必要があります。昨年、NVIDIA は量子コンピューティングのシミュレーションを高速化するためのソフトウェア開発キット (SDK) である cuQuantum を発表しました。GPU 上で cuQuantum を使用して量子回路をシミュレーションすることにより、現在の量子プロセッシング ユニット (QPU) で達成できる性能と規模をはるかに超えたアルゴリズム研究が可能になります。これにより、量子コンピューターを最大限に活用する方法を理解するための突破口が開かれます。

量子アルゴリズムの改良に加え、古典的な演算リソースの CPU や GPU と共に QPU を最大限に活用する必要があります。本日、NVIDIA は、この実用化を使命とする量子古典ハイブリッド コンピューティングのためのプラットフォーム、Quantum Optimized Device Architecture (QODA) を発表しました。

量子コンピューティングが進化すると、量子コンピューターと高性能な古典コンピューターが共存するハイブリッド型のアプリケーションになります。純粋にグラフィックのために作られた GPU は、ハイパフォーマンス コンピューティング (HPC) のために不可欠なハードウェアに変化しました。これには、強力でわかりやすいプログラミングを可能にする新しいソフトウェアが必要でした。量子コンピューターが科学の実験から有用なアクセラレータへと変貌を遂げるには、新しいソフトウェアも必要です。

この新しい時代の量子ソフトウェアは、高性能なハイブリッド演算を可能にし、より多くの科学者やイノベーターが量子コンピューターにアクセスする機会を増やすでしょう。

図 1. NVIDIA QODA は、創薬、化学、気象、金融、ロジスティクスなど様々な分野への応用が期待される世界初の量子古典ハイブリッド コンピューティングのためのプラットフォームです。

量子プログラミングの展望

過去 5 年間、小規模でノイズの多い量子コンピューティング アーキテクチャを対象とした量子プログラミング アプローチが開発されてきました。この発展は、アルゴリズム開発者にとって素晴らしいことであり、標準的な量子アルゴリズムだけでなく、ハイブリッド変分アプローチも早期にプロトタイプ化できるようになりました。

量子リソースの不足とハードウェア実装の実用性から、これらのプログラミング アプローチのほとんどは、リモートやクラウドベースの実行モデルをサポートする純粋な Python レベルでした。

量子アーキテクチャが改良され、アルゴリズム開発者が既存の古典的なヘテロジニアス コンピューティングの真の量子加速を考慮するようになると、疑問が沸いてきます。従来の HPC において、どのように量子コプロセシングをサポートすべきでしょうか?

NVIDIA は、HPC プログラミング モデル、ヘテロジニアス コンパイラ プラットフォーム、1 つまたは多数の NVIDIA GPU を使用して従来の科学計算ワークフローを加速する高水準なアプリケーション ライブラリの開発における真のパイオニアです。

私たちは、量子コンピューティングをヘテロジニアス HPC システム アーキテクチャのもう 1 つの要素として捉え、量子コプロセシングを既存の CUDA エコシステムにシームレスに組み込むプログラミング モデルを想定しています。Python 言語レベルから始める現在のアプローチは、この点で十分ではなく、最終的に古典的な演算リソースと量子演算リソースの性能的な統合を制限することになります。

HPC 向け QODA

NVIDIA は、HPC における量子古典ハイブリッド演算アーキテクチャのプログラミングのためのオープンな仕様を開発しています。私たちは、QODA プログラミング モデルの仕様とそれに対応する NVQ++ コンパイラ プラットフォームを発表し、バックエンド (物理、シミュレーション) にとらわれない、シングルソースのモダンな C++ アプローチによる量子で加速されたハイパフォーマンス コンピューティングを可能にします。

QODA は、CUDA、OpenMP、OpenACC といった既存の古典的な並列プログラミング モデルと本質的に相互運用が可能です。また、このコンパイラ実装は、量子古典の C++ ソース コード表現を、cuQuantum 対応シミュレーション バックエンドをネイティブに対象とするバイナリ実行ファイルに落とし込みます。

このプログラミングとコンパイルのワークフローは、ノート PC から分散型マルチノード、マルチ GPU アーキテクチャまで拡張できる GPU 処理と回路シミュレーションの標準的な相互運用性によって、ハイブリッド アルゴリズムの研究と開発を加速させる高性能なプログラミング環境を実現します。

auto ghz = [](const int N) __qpu__ {
  qoda::qreg q(N);
  h(q[0]);
  for (auto i : qoda::irange(N-1)) {
    cnot(q[i], q[i+1]);
  }
  mz(q);
};

// Sample a GHZ state on 30 qubits
auto counts = qoda::sample(ghz, 30);
counts.dump();

コード例に示すように、QODA はモダンな C++ を中心とした CUDA ライクなカーネルベースのプログラミング手法を提供します。 量子デバイス コードは、量子デバイス向けにコンパイルされ実行されることを示す__qpu__でアノテーションされたスタンドアロン関数オブジェクト、またはラムダ式として定義することができます。

フリー関数 (CUDA カーネル アプローチ) よりも関数オブジェクトに依存することで、任意の量子カーネルを入力とする標準的な量子ライブラリ関数を効率的に構築することができます。

これは量子カーネルのインスタンスとカーネルを評価するための任意の具体的な引数を入力とし、観測された量子ビット測定のビット列と対応する観測回数のマッピングを返す標準的なサンプリング QODA 関数 (qoda::sample(...)) の 1 つの例です。

QODA カーネル プログラマーは、量子コンピューティングに関連した組み込み型 (qoda::qubit, qoda::qreg, qoda::spin_op など)、量子ゲート操作、C++ から継承された全ての伝統的で古典的な制御フローにアクセスすることが可能です。

前述した言語コンパイル アプローチの興味深い点は、CUDA カーネル、OpenMP および OpenACC プラグマ、よりハイレベルの CUDA ライブラリ API 呼び出しを含む QODA コードをコンパイルできることです。この機能により、量子古典ハイブリッド アプリケーションの開発者は、量子コンピューティングと同時にマルチ GPU 処理を真に活用することができるようになります。

将来の量子コンピューティングの用途は、データの前処理や後処理、標準的な量子コンパイル タスク、量子エラー訂正のためのシンドローム復号など、古典的な並列処理が必要になります。

量子古典の応用をいち早く紹介

ノイズの多い近い将来の量子コンピューティング アーキテクチャを対象にした量子古典ハイブリッド アルゴリズムとして、変分量子固有値ソルバー (VQE) があります。VQE の目的は、量子力学の変分原理を利用して、パラメーター化された状態準備回路に対して、ハミルトニアンのような与えられた量子力学演算子の最小固有値を計算することを目的としています。

ゲートの回転パラメーターを指定して状態準備回路を実行し、量子力学演算子の構造によって決まる一連の測定を行って、その具体的なパラメーターにおける期待値を計算します。そして、ユーザー指定の古典的オプティマイザーを用いて、これらのパラメーターを変化させながら、最小期待値を反復的に探索します。

一般的な VQE ライクなアルゴリズムがどのようなものかは、QODA プログラミング モデルで見ることができます。

// Define your state prep ansatz…
auto ansatz = [](std::vector<double> thetas) __qpu__ {
  … Use C++ control flow and quantum intrinsic ops …
};

// Define the Hamiltonian
qoda::spin_op H = … use x, y, z to build up Hamiltonian … ;

// Create a specific function optimization strategy
int n_params = …;
qoda::nlopt::lbfgs optimizer;
optimizer.initial_parameters = qoda::random_vector(-1, 1, n_params);

// Run the VQE algorithm with QODA
auto [opt_val, opt_params] =
    qoda::vqe(ansatz, H, optimizer, n_params);
printf("Optimal <H> = %lf\n", opt_val);

必要とされる主なコンポーネントはパラメーター化された ansatz の QODA カーネル式で、コード例では std::vector<double> を取るラムダ式として示されています。

このラムダ式の実際の本体は、手元の問題に依存しますが、C++ の標準的な制御フロー、対象範囲の量子カーネル呼び出し、量子固有操作の論理セットで、この関数を自由に構築することができます。

次に必要な要素は、計算に必要な期待値を持つ演算子です。QODA は、これらを組み込みの spin_op 型として表現し、Pauli の x(int)y(int)z(int) 関数呼び出しでプログラム的に構築できます。

次に、従来の関数オプティマイザーが必要です。これは QODA 言語仕様の一般的な概念で、勾配ベースまたは勾配フリーの特定の最適化方法へのサブクラス化を意味します。

最後に、この言語では、VQE ワークフロー全体を呼び出すための標準ライブラリ関数を公開しています。これは、状態準備 ansatz をモデル化した QODA カーネル インスタンスでパラメーター化されており、その演算子には次の値が必要です。

  • 最小固有値
  • 古典的最適化インスタンス
  • 変分パラメーターの総数

そして、状態準備回路の最適な固有値とそれに対応する最適なパラメーターをエンコードした構造化束縛が返されます。

このワークフローは非常に一般的で、量子カーネル式、対象のスピン演算子、古典的な最適化ルーチンに関して最終的に汎用性のある変分アルゴリズムを開発するのに適しています。

しかし、これは QODA プログラミング モデルの根底にある哲学を示すものでもあります。量子コード式を記述するための核となる概念を提供するため、量子古典ハイブリッド アルゴリズムの構成可能性を可能にする汎用関数の標準ライブラリの有用性を促進します。

QODA Early Interest プログラム

量子コンピューターは、私たちの最も重要な問題の解決に大きく貢献することが期待されています。私たちは、HPC や AI がすでに重要な役割を果たしている分野における科学者や専門家に、量子コンピューティングを開放するとともに、現在最高の既存のソフトウェアと量子ソフトウェアを簡単に統合していただけるようにします。

QODA は、そのためのオープン プラットフォームを提供します。NVIDIA は、量子コミュニティ全体と協力して、有用な量子コンピューティングを現実のものとすることを楽しみにしています。QODA Early Interest プログラムに応募していただくと、NVIDIA 量子コンピューティングの開発に関する最新情報を入手できます。詳細は、NVIDIA 量子コンピューティング ソリューションの記事や動画などをご覧ください。

翻訳に関する免責事項

この記事は、「Introducing QODA: The Platform for Hybrid Quantum-Classical Computing」の抄訳で、お客様の利便性のために機械翻訳によって翻訳されたものです。NVIDIA では、翻訳の正確さを期すために注意を払っておりますが、翻訳の正確性については保証いたしません。翻訳された記事の内容の正確性に関して疑問が生じた場合は、原典である英語の記事を参照してください。

Tags