Account
Service
Company
Privacy policy
1
こんにちは。Qiskitを高速化したいですよね。バックエンドを切り替えるだけで早くなります。ちょっと環境構築には苦労するかもしれませんが。今回はblueqat cloudを利用したQiskitの簡単な高速化を紹介します。blueqat cloudは有料版の企業版を利用しています。GPUはV100の32Gです。
結果から見てみましょう。横軸は量子ビット数で22量子ビットまで。縦軸は計算にかかった時間です。CPUはIntelXeonを使ってます。
GPUの秒の雰囲気がわからないので、リストを書き出してみました。ほぼ0.1秒未満です。
[0.004900693893432617, 0.07413864135742188, 0.024965763092041016, 0.024173974990844727, 0.028377056121826172, 0.029413223266601562, 0.03184700012207031, 0.03441810607910156, 0.03339433670043945, 0.03801369667053223, 0.039711713790893555, 0.04146695137023926, 0.04342055320739746, 0.04290771484375, 0.045015811920166016, 0.05161881446838379, 0.0559999942779541, 0.05427384376525879, 0.06047534942626953, 0.06277298927307129, 0.06796908378601074, 0.07407522201538086, 0.0837862491607666]
計算した回路はRXとCXを組み合わせた適当な回路を10回繰り返したものです。
コードを見てみます。
from qiskit import QuantumCircuit, transpile from qiskit import Aer import random import timedef create_ghz_circuit(n_qubits): circuit = QuantumCircuit(n_qubits) loop = 10 for _ in range(loop): for qubit in range(n_qubits): circuit.rx(random.random(),qubit) for qubit in range(n_qubits - 1): circuit.cx(qubit, qubit + 1) return circuit
実装は本当にバックエンドを変更するだけです。aerの標準の状態ベクトルシミュレータでの計算とGPUでの計算をやってます。
arr_gpu = [] arr_cpu = []for n_qubits in range(0,23): backend = Aer.get_backend('aer_simulator_statevector') circuit = create_ghz_circuit(n_qubits=n_qubits) circuit.measure_all() circuit = transpile(circuit, backend)
backend = Aer.get_backend('aer_simulator') backend.set_options(device='GPU', cuStateVec_enable=True)
start = time.time() result = backend.run(circuit).result()
arr_gpu.append(time.time()-start) #print(result.get_counts()) #print(f'backend: {result.backend_name}') backend = Aer.get_backend('aer_simulator_statevector')
start = time.time() result = backend.run(circuit).result()
arr_cpu.append(time.time()-start) #print(result.get_counts()) #print(f'backend: {result.backend_name}')
計算結果の表示は、
import matplotlib.pyplot as pltmatplotlibを用いて二つの折れ線グラフを描画します
plt.plot(arr_cpu, label="CPU") plt.plot(arr_gpu, label="GPU")
グラフのタイトルと軸のラベルを設定します
plt.xlabel('qubit') plt.ylabel('sec')
凡例を表示します
plt.legend()
グラフを表示します
plt.show()
とにかくいいところは、今までのQiskitのソフトウェア資産を活かしながら、バックエンドの指定をcuQuantumにするだけで高速化されるということですね。最高です。数十秒、数分かかるところが0.1秒とかなので大変便利です。使いましょう!以上です。
© 2023, blueqat Inc. All rights reserved