Amazon Braketのメモリ不足によるエラー
Amazon Braket学習コース
AWSでの量子コンピューティングサービスであるAmazon braketについての学習コースを作成しました。
量子コンピュータやAWSの知識が無い方でも学び始められ、最終的には量子機械学習についても学べます。 こちらも利用し、量子技術のスキルを身につけましょう!
Amazon Braketローカルシミュレータのメモリ不足によるエラー
AWSの量子コンピューティングサービスであるAmazon Braketで、ローカルシミュレータを実行すると以下のエラーが出力される場合があります。
---------------------------------------------------------------------------
MemoryError Traceback (most recent call last)
Cell In[11], line 2
1 device = LocalSimulator()
----> 2 result = device.run(myqc, shots=1000).result()
3 counts = result.measurement_counts
4 plt.bar(counts.keys(), counts.values())
File ~/anaconda3/envs/Braket/lib/python3.10/site-packages/braket/devices/local_simulator.py:126, in LocalSimulator.run(self, task_specification, shots, inputs, *args, **kwargs)
124 task_specification = self._apply_noise_model_to_circuit(task_specification)
125 payload = self._construct_payload(task_specification, inputs, shots)
--> 126 result = self._delegate.run(payload, *args, shots=shots, **kwargs)
127 return LocalQuantumTask(self._to_result_object(result))
File ~/anaconda3/envs/Braket/lib/python3.10/site-packages/braket/default_simulator/simulator.py:149, in BaseLocalSimulator.run(self, circuit_ir, *args, **kwargs)
127 """
128 Simulate a circuit using either OpenQASM or Jaqcd.
129
(...)
146 are requested when shots>0.
147 """
148 if isinstance(circuit_ir, OpenQASMProgram):
--> 149 return self.run_openqasm(circuit_ir, *args, **kwargs)
150 return self.run_jaqcd(circuit_ir, *args, **kwargs)
File ~/anaconda3/envs/Braket/lib/python3.10/site-packages/braket/default_simulator/simulator.py:603, in BaseLocalSimulator.run_openqasm(self, openqasm_ir, shots, batch_size)
599 BaseLocalSimulator._validate_shots_and_ir_results(shots, circuit.results, qubit_count)
601 results = circuit.results
--> 603 simulation = self.initialize_simulation(
604 qubit_count=qubit_count, shots=shots, batch_size=batch_size
605 )
606 operations = circuit.instructions
607 simulation.evolve(operations)
File ~/anaconda3/envs/Braket/lib/python3.10/site-packages/braket/default_simulator/state_vector_simulator.py:41, in StateVectorSimulator.initialize_simulation(self, **kwargs)
39 shots = kwargs.get("shots")
40 batch_size = kwargs.get("batch_size")
---> 41 return StateVectorSimulation(qubit_count, shots, batch_size)
File ~/anaconda3/envs/Braket/lib/python3.10/site-packages/braket/default_simulator/state_vector_simulation.py:60, in StateVectorSimulation.__init__(self, qubit_count, shots, batch_size)
57 raise ValueError(f"batch_size must be a positive integer, but {batch_size} provided")
59 super().__init__(qubit_count=qubit_count, shots=shots)
---> 60 initial_state = np.zeros(2**qubit_count, dtype=complex)
61 initial_state[0] = 1
62 self._state_vector = initial_state
MemoryError: Unable to allocate 16.0 GiB for an array with shape (1073741824,) and data type complex128
このエラーは、量子回路を実行するためのメモリが不足していることが原因で起こります。 一般的にn量子ビットのシミュレーションは、状態ベクトルシミュレータを用いた場合、以下サイズのメモリが必要になります。
$$ X^{Memory} = 2^n \times 16 \ Bytes $$
サーバのメモリサイズを大きくすることで実行可能となるかもしれませんが、上記の式の通りサーバのメモリを2倍にしても1量子ビットしか追加できないため、あまりお勧めできません。
このためエラー無しで実行するための案を以下に3つ記載します。
Amazon Braketマネージドシミュレータで実行する。
Amazon Braket マネージドシミュレータをを用いることで、ローカルシミュレータより多くの量子ビット数で実行可能です。例えば、SV1シミュレータでは34、TN1シミュレータでは50量子ビットのシミュレーションが可能となります。 ただし、実行時間に応じた料金が発生するようで、使い過ぎに注意しましょう。
実際の量子コンピュータで実行する。
量子ビット数を多く扱える、量子コンピュータを用いれば規模の大きい計算も実行可能です。例えば、IONQ Forte 1は36量子ビットを扱うことが可能です。 ただし、量子コンピュータの利用料金は無料ではないため、料金には注意を払いましょう。
量子回路の量子ビット数を減らして実行する。
元々の量子回路の量子ビット数を減らし、実行することができれば、こちらももちろん実行可能となります。
Amazon Braket学習コース
AWSでの量子コンピューティングサービスであるAmazon braketについての学習コースを作成しました。
量子コンピュータやAWSの知識が無い方でも学び始められ、最終的には量子機械学習についても学べます。 こちらも利用し、量子技術のスキルを身につけましょう!