量子コンピューティング

クラウドで Qiskit Functionsの基盤を築く Qiskit Serverless

記事をシェアする:

Qiskit Serverlessを利用すればユーザーは、IBM Quantum™ platformの計算リソースをリモートで使用して計算タスクを構築、デプロイ、実行できます。

Qiskit Serverless は新しい段階へと成長しました。IBMはサーバーレス量子コンピューティングの概念を2021年に初めて導入してから、その実現のために懸命に取り組んでまいりました。そして、この努力が Qiskit Functionsの実現に繋がります。Qiskit Functionsとは、研究者と開発者が量子コンピューターをより高い抽象レベルで利用できるようにする、パワフルな定義済みワークフローです。Qiskit Functionsの導入が間近に迫っている今、Qiskit Serverlessが提供する機能と、Qiskitソフトウェア・スタックにおけるその重要な役割をこのブログでは再確認したいと思います。

Qiskit Serverlessサービスは、現在プライベート・プレビューとして利用可能であるプログラミング・モデルで、ユーザーがクラウド環境で量子リソースと古典リソースの両方を活用できるようになります。これは複雑で長時間実行されるタスクや、定期的に実行するように設計されたワークフローの実行に非常に役立ちます。Qiskit Serverlessを使用すると、複数の量子計算リソースおよび古典計算リソースでジョブを実行することで、量子ジョブのスケーリングが可能になります。これにより、ユーザーが量子実験に使用しているローカル・マシンのリソース制限を超えて、ワークフローを効率的に実行し続けることができます。

以下では、これらの機能をユーザーがどう活用できるか、Qiskit Serverless がどう機能するか、過去数カ月に私達が行ってきた Qiskit Serverless の改善点を読者に紹介します。

 

Qiskit Serverless を特に使用すべきユーザー

Qiskit Serverless を利用する方法は 2つあります。1 つは研究者や計算科学者向けのもので、もう 1つは量子計算リソースを含む独自のクラウド・インフラストラクチャーを構築する組織やチーム向けのものです。

IBMが提供する QPU群へのプレミアム・アクセスをすでにお持ちの研究者は、IBM Quantum Platform上に構築された Qiskit Serverless のインスタンスをご利用頂くことができます。このサービスの活用方法についての詳細は、資料ページを参照してください。

古典的計算リソースと量子計算リソースの両方で構成される独自のインフラストラクチャーを構築しようとしている組織向けには、そのインフラストラクチャーにデプロイできるオープンソース・ツールとして Qiskit Serverless をご提供します。この詳細については、GitHubにあるパッケージの資料をご参照ください。資料には、パッケージをローカルまたはクラウドにデプロイする方法を示す有用なリソースが含まれています。

 

ローカルで構成してリモートで実行

では、Qiskit Serverlessはどのように機能するのでしょうか? そしてどんなところで役立つのでしょうか? 研究者および計算科学者にとって、Qiskit Serverlessの本質的なポイントは、ワークロードをローカルで構成しリモート実行をするためにデプロイできることです。この単純な考え方は、大規模な計算負荷のあるワークロードを実行しているすべての人にとって極めて価値があります。

概念的には、Qiskit Serverless を Qiskitパターンの文脈で考えてみると有用かもしれません。Qiskitパターンは、量子計算と古典計算の組み合わせを活用して、ドメイン固有の問題を解決するためのフレームワークです。 1つのQiskit パターンは、以下の 4つの本質的なステップで構成されます。すなわち、(1) 問題を量子回路と演算子に落とし込む(2) 目標ハードウェアに合わせて最適化する(3) 目標ハードウェア上で実行する。そして (4) 結果の後処理を行う、です。

Qiskit Serverlessは、これらのステップのどの1ステップにも属していません。Qiskit Serverlessは、Qiskitパターンのワークフロー全体の下に位置し、サポート構造として機能します。ローカルでワークロードを定義した後、Qiskit Serverlessは、パターン内の各ステップを介してワークロードをデプロイし、リモートで実行するプロセスを単純化します。

それに加えて、Qiskit Serverlessは、ユーザーが複数の古典および量子計算リソースで並行してジョブを実行できるようにすることで、量子計算ワークロードと古典計算ワークロードの両方の水平スケーラビリティーも提供します。つまり Qiskit Serverlessは、Qiskitパターンのそれぞれのステップを、最適なパフォーマンスと最短時間で完了するために必要なリソースを確保します。

具体的には、ローカル構成とリモート実行の組み合わせにより、変分アルゴリズムのアンザッツ回路のために多数の異なるトランスコンパイラー・パイプラインを準備し、それらをすべて並行して実行し、最も深さが浅くトランスパイルされたアンザッツを選択して、クラウドにジョブをアップロードして古典および量子リソースを組み合わせて実行する、という手順になります。あるいは、異なる多数の化学モデルの動的性質をシミュレートする回路を準備し、各モデルについて複数の異なる期待値を測定し、そのデータを分析用の別個のパイプラインで処理することもできます。

いずれの場合も Serverlessは、ローカルの計算環境が動作していなくても、長時間にわたり変分量子アルゴリズムをクラウド上で実行し続けます。一度プログラムを投入すれば、クラウド上でプログラムがアクティブ状態のままになるのです。

これが Qiskit Serverlessサービスの主な有用性です。つまり、ユーザーがワークロードをクラウドにデプロイし、IBMが提供するリモート・リソースによって作業の大部分を処理できるようにすることです。これによりユーザーは、複雑なコードの実行や実行待ちのキューで長時間待機するためにローカル・マシンを占有し続ける必要はなくなり、その計算リソースを別の用途に使用できます。

 

Qiskit Serverlessの利用例

Qiskit Serverless の有用性をより深く理解するために、並列トランスパイル・プログラムを作成し、それを再利用可能なリモート・サービスとして IBM Quantum Platform にデプロイする方法の例を以下に説明します。

これが Qiskitパターンにどう当てはまるかを考えてみましょう。概念的には、Qiskit Serverless は、Qiskitパターンのワークフローの各ステップをサポートする抽象化レイヤーです。 Qiskit Serverlessを使用すると、問題を量子回路と演算子に落とし込み、目標ハードウェアに対して最適化し、目標ハードウェアで実行し、結果の後処理を実行する、もしくはそれらの 4つの基本的なステップを任意の組み合わせで実行するのに役立ちます。

ただしこの例の場合は、量子回路のトランスパイルを行うプログラムのデプロイに焦点を当てています。これは、ハイレベルの量子回路を量子ハードウェアで実行するために最適化された回路へ変換するプロセスです。つまり、Qiskit パターンのステップ2である、「目標ハードウェアに合わせて最適化する」ことに焦点を当てています。まず、30個のランダムに作成された回路を生成します。

 

# Generate 30 random NLocal circuits
nlocal_circuits = [create_random_nlocal() for _ in range(30)]

 

次に、抽象レベルの高いこれらの回路を指定されたバックエンド用にトランスパイルする関数を作ります。現時点ではこれはローカルで実行されますが、最終的にはこれを修正し、複数の回路が並行してリモートで実行されるようにします。

 

# Local tranpsilation

from qiskit import QuantumCircuit
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager

def transpile_parallel_local(circuit: QuantumCircuit, backend):

“””Transpiles an abstract circuit into an ISA circuit for a given backend.”””
pass_manager = generate_preset_pass_manager(

optimization_level=3, backend=backend

)
isa_circuit = pass_manager.run(circuit)
return isa_circuit

 

これでローカル・プログラムをセットアップできたので、IBM Quantum Platform に回路をデプロイしたいと思います。 しかしそれを実行する前に、ローカル・プログラムを実行して結果を確認してみましょう。

 

# runtime imports
from qiskit_ibm_runtime import QiskitRuntimeService
# To run on hardware, select the backend with the fewest number of jobs in the queue

service = QiskitRuntimeService(channel=“ibm_quantum”, token=API_TOKEN)
backend = service.get_backend(‘ibm_brisbane’)

start = timer()

# run distributed tasks as async function
# we get task references as a return type
tranpsiled_circuits = [

transpile_parallel_local(circuit, backend)
for circuit in nlocal_circuits

]

end = timer()
print(end – start)

 

ラップトップでこのローカル実行にかかった合計時間は 683 秒でした。 この時間、ラップトップの電源を切ることはできません。もしそうしてしまうと、プログラムを最初から実行し直さなければならなくなります。

それに対して Qiskit Serverlessを使用すると、IBM Quantum Platformに同じワークロードを投入して、ローカル・マシンとは完全に独立したクラウド・リソースを使用して実行できます。このリモート実行中にラップトップがスリープ状態になったり、バッテリーが切れたりしても、まったく問題ありません。

ではその通りにローカル・プログラムを  IBM Quantum Platform 上の Qiskit Serverlessへデプロイしてみましょう。始めに、デフォルトの IBM Quantum Platform API トークンを使用して、Qiskit Serverless サービスに認証します。

 

from qiskit_ibm_catalog import QiskitServerless, QiskitFunction

# Authenticate to the remote cluster and submit the pattern for remote execution
serverless = QiskitServerless(

token=API_TOKEN

)

 

そのあと、入力を収集し並行して実行するようにこの実装を更新しましょう。

 

# /source/transpile_parallel.py

@distribute_task(target={“cpu”: 1})
def transpile_parallel(circuit, backend):

“”“Distributed transpilation for an abstract circuit into an ISA circuit for a given backend.”””
pass_manager = generate_preset_pass_manager(

optimization_level=3, backend=backend

)
isa_circuit = pass_manager.run(circuit)
return isa_circuit

# Get program arguments
arguments = get_arguments()
circuits = arguments.get(“circuits”)
backend_name = arguments.get(“backend_name”)

# Get backend
service = QiskitRuntimeService(channel=“ibm_quantum”)
backend = service.get_backend(backend_name)

start = timer()

# run distributed tasks as async function
# we get task references as a return type
sample_task_references = [

transpile_parallel(circuit, backend)
for circuit in circuits

]

# now we need to collect results from task references
results = get(sample_task_references)

end = timer()
print(end – start)

save_result({

“transpiled_circuits”: results

})

 

これで、このカスタム・ワークフローをアップロードできます。

 

transpile_parallel_demo = QiskitFunction(

title=“transpile_parallel”,
entrypoint=“transpile_parallel.py”,
working_dir=“./source/”,

)

serverless.upload(transpile_parallel_demo)

 

これで、サーバーレス環境でプログラムを実行する準備ができました。 わずか数行のコードで実行できます:

 

transpile_parallel_remote = serverless.get(“transpile_parallel”)
job = transpile_parallel_remote.run(circuits=nlocal_circuits, backend_name=backend.name)

print(job.status())
print(job.logs())

 

これはキューに入ったこのリモートジョブを開始し、ステータスを表示します。いつでもローカル・システムを終了したり、ログをプリントしたりすることができます。ジョブが完了した後には、結果を次のように表示します。

 

result = job.result()
result[‘transpiled_circuits’][0].draw(idle_wires=False)

 

これで終わりです! 再利用可能なトランスパイル・プログラムが IBM Quantum Platformに、再利用可能なリモート・サービスとしてデプロイされました。

 

Qiskit Serverless の改善により、Qiskit Functionsのための基盤が整いました

2023年 10月の IBM Quantum Summit 2023で Qiskit Serverless を最初に発表して以来、私たちは多数の改善を行ってきました。サーバーレス・インターフェースの調整により、初めて使用するユーザーにとってもっと使いやすくなりました。また、バックエンドでのいくつかの機能拡張により、ワークロードのアップロードとクラウド上へのリモート実行が容易になりました。

そのような基礎的な技術的改善に加えて、Qiskit Serverlessの新しいドキュメントもぜひご紹介させてください。この資料は、Qiskit Serverlessプログラミング・モデルのインストール、始め方、およびデプロイ方法に関する詳細なガイドを提供しています。この資料は、Qiskit Serverlessを使い始めて生産的に使用するためのプロセスを簡単化するのに役立つ貴重なリソースです。

以上何点かポイントをご説明しましたが、これは始まりにすぎません。 Qiskit Serverlessはクラウド対応量子コンピューターの新時代の幕開けを告げ、間もなくリリースされる Qiskit Functionsのようなさまざまな新しいマネージド量子・古典サービスへの扉を開きます。

昨年末発表された Qiskit Functionsは、ユーザーが自分のワークフローに統合できる、マネージド Qiskit Serverless 環境で動作する機能のカタログです。ここでユーザーは、IBM とサード・パーティー・パートナーの両方が提供する、量子化学シミュレーション、量子最適化、および量子ハードウェアのパフォーマンス管理などに関連するタスクのための多数の強力な機能(Function)を選択して利用できるようになります。

Qiskit Functions の詳しい発表が近日中に行われるので、その発表までの間 Qiskit Serverless をここからお試しください。

 


この記事は英語版IBM Researchブログ「Qiskit Serverless sets the stage for Qiskit Functions in the cloud」(2024年9月4日公開)を翻訳し一部更新したものです。

高橋 ひとみ
監訳:高橋 ひとみ
IBM Quantum、スタッフ・リサーチ・サイエンティスト
IBM Quantumのバックエンドシステムの開発に従事。
立花 隆輝
監訳:立花 隆輝
IBM Quantum、クライアント・テクニカル・リード、シニア・テクニカル・スタッフ・メンバー
量子コンピューターの社会実装に携わる。
More 量子コンピューティング stories

量子中心のスーパーコンピューターに必要なサーキット・カッティングを可能にするダイナミック・サーキット

Natureに掲載された新しい論文は、一つの量子プロセッサーでは実行不可能なサイズの量子回路を、二つの量子プロセッサーを接続して実行できることを世界で初めて示しました。 今日、世界で最も強力な古典的スーパーコンピューター […]

さらに読む

2年前に設定したチャレンジを達成した IBM Quantum

今回が初回となる IBM Quantum Developer Conferenceで、IBMはアルゴリズム探索を容易にする高性能な量子コンピューターと使いやすい量子ソフトウェアを発表しました。 IBM®は 2年前に、量子 […]

さらに読む

量子中心のスーパーコンピューティングの実現

(特別な工夫のない)愚直な古典計算では扱えないレベルの大規模な問題を解決できる能力を持った 実用規模の量子コンピューターが、ハイパフォーマンス・コンピューティングの未来を変えていきます。   歴史上初めて、コン […]

さらに読む