common.title

Docs
Quantum Circuit
TYTAN CLOUD

QUANTUM GAMING


Desktop RAG

Overview
Terms of service

Privacy policy

Contact
Research

Sign in
Sign up
common.title

NVIDIA CUDA-Q チュートリアル&H100ベンチマーク4: コスト最小化

Yuichiro Minato

2025/04/05 12:02

このアルゴリズムは量子古典ハイブリッドの基礎となるアルゴリズムで今回は|0>から|1>に状態を移行する過程をコスト最小化を使って行います。今回のトライアルがそのままGPUの優位性が出るようなサイズではないですが、VQE/QAOA/QMLのようなアルゴリズムに応用することで多くの速度向上を実現できます。

https://nvidia.github.io/cuda-quantum/latest/applications/python/cost_minimization.html

実際の計算

まずはツールを読み込みます。

import cudaq
from typing import List

cudaq.set_target("nvidia")

次に早速最適化するための量子回路です。RXとRYを使っています。

# Initialize a kernel/ ansatz and variational parameters.
@cudaq.kernel
def kernel(angles: List[float]):
    # Allocate a qubit that is initialized to the |0> state.
    qubit = cudaq.qubit()
    # Define gates and the qubits they act upon.
    rx(angles[0], qubit)
    ry(angles[1], qubit)


# Our Hamiltonian will be the Z expectation value of our qubit.
hamiltonian = cudaq.spin.z(0)

# Initial gate parameters which intialize the qubit in the zero state
initial_parameters = [0, 0]

print(cudaq.draw(kernel, initial_parameters))

コスト自体はハミルトニアンにZを使って期待値をとります。

cost_values = []


def cost(parameters):
    """Returns the expectation value as our cost."""
    expectation_value = cudaq.observe(kernel, hamiltonian,
                                      parameters).expectation()
    cost_values.append(expectation_value)
    return expectation_value

初期の|0>状態の期待値を確認します。

# We see that the initial value of our cost function is one, demonstrating that our qubit is in the zero state
initial_cost_value = cost(initial_parameters)
print(initial_cost_value)

初期状態のコストは、[1,0]@[[1,0],[0,-1]]@[1,0]の期待値計算をすると1.0になります。

そして、最適化ツールを準備し実際に計算をします。今回の最適化ソルバーはネルダーミードです。ポピュラーなタイプです。

# Define a CUDA-Q optimizer.
optimizer = cudaq.optimizers.COBYLA()
optimizer.initial_parameters = initial_parameters

result = optimizer.optimize(dimensions=2, function=cost)

最後に計算プロットして終わりです。

# Plotting how the value of the cost function decreases during the minimization procedure.
import matplotlib.pyplot as plt

x_values = list(range(len(cost_values)))
y_values = cost_values

plt.plot(x_values, y_values)

plt.xlabel("Epochs")
plt.ylabel("Cost Value")

今回はCPUのソルバーが動かず、GPUだけの評価となりました。期待値が1.0から-1.0に咲いて聞かされているのが確認できます。

かかった計算時間は、

0.007085323333740234s

となりました。

image

© 2025, blueqat Inc. All rights reserved