翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
NVIDIA’s CUDA-Q は、CPUs、GPUs、量子処理ユニット (QPUs。統合されたプログラミングモデルを提供し、デベロッパーは 1 つのプログラム内で古典的な指示と量子指示の両方を表現し、ワークフローを合理化できます。 は、組み込みの CPU および GPU シミュレーターを使用して量子プログラムのシミュレーションとランタイムをCUDA-Q高速化します。
Amazon Braket Hybrid Jobs CUDA-Qで を使用すると、柔軟なオンデマンドコンピューティング環境が提供されます。コンピューティングインスタンスはワークロードの期間中のみ実行され、使用した分だけ料金が発生します。Amazon Braket Hybrid Jobs はスケーラブルなエクスペリエンスも提供します。ユーザーは、プロトタイプ作成とテストのために小さなインスタンスから始めて、完全な実験のためにより大きなワークロードを処理できる大きなインスタンスにスケールアップできます。
Amazon Braket Hybrid Jobs は、 CUDA-Qの可能性を最大化するために不可欠な GPUs をサポートしています。GPUs、特に高量子ビット数の回路を使用する場合に、CPU ベースのシミュレーターと比較して量子プログラムのシミュレーションを大幅に高速化します。Amazon Braket Hybrid Jobs CUDA-Qで を使用すると、並列化が簡単になります。Hybrid Jobs は、回路サンプリングと観測可能な評価の複数の計算ノードへの分散を簡素化します。このCUDA-Qワークロードのシームレスな並列化により、ユーザーは大規模な実験のためのインフラストラクチャを設定するのではなく、ワークロードの開発に集中できます。
開始するには、Amazon Braket CUDA-Q の例 Github のスターター
次のコードスニペットは、Amazon Braket Hybrid Jobs でCUDA-Qプログラムを実行するhello-world
例です。
image_uri = "<ecr-image-uri>"
@hybrid_job(device='local:nvidia/qpp-cpu', image_uri=image_uri)
def hello_quantum():
import cudaq
# define the backend
device=get_job_device_arn()
cudaq.set_target(device.split('/')[-1])
# define the Bell circuit
kernel = cudaq.make_kernel()
qubits = kernel.qalloc(2)
kernel.h(qubits[0])
kernel.cx(qubits[0], qubits[1])
# sample the Bell circuit
result = cudaq.sample(kernel, shots_count=1000)
measurement_probabilities = dict(result.items())
return measurement_probabilities
上記の例では、CPU シミュレーターのベル回路をシミュレートします。この例では、ラップトップまたは Braket Jupyter Notebook でローカルに実行されます。local=True
設定のため、このスクリプトを実行すると、ローカル環境でコンテナが開始され、テストとデバッグのために CUDA-Q プログラムが実行されます。テストが完了したら、 local=True
フラグを削除してジョブを実行できます AWS。詳細については、Amazon Braket Hybrid Jobs の開始方法」を参照してください。
ワークロードのクォービット数が多い場合、多数の回路または多数の反復がある場合、 instance_config
設定を指定することで、より強力な CPU コンピューティングリソースを使用できます。次のコードスニペットは、 hybrid_job
デコレータで instance_config
を設定する方法を示しています。サポートされているインスタンスタイプの詳細については、「スクリプトを実行するようにハイブリッドジョブインスタンスを設定する」を参照してください。インスタンスタイプのリストについては、Amazon EC2 インスタンスタイプ
@hybrid_job(
device="local:nvidia/qpp-cpu",
image_uri=image_uri,
instance_config=InstanceConfig(instanceType="ml.c5.2xlarge"),
)
def my_job_script():
...
より要求の厳しいワークロードの場合は、CUDA-QGPU シミュレーターでワークロードを実行できます。GPU シミュレーターを有効にするには、バックエンド名 を使用しますnvidia
。nvidia
バックエンドは CUDA-Q GPU シミュレーターとして動作します。次に、NVIDIAGPU をサポートする Amazon EC2 インスタンスタイプを選択します。次のコードスニペットは、GPU 設定のhybrid_job
デコレータを示しています。
@hybrid_job(
device="local:nvidia/nvidia",
image_uri=image_uri,
instance_config=InstanceConfig(instanceType="ml.p3.2xlarge"),
)
def my_job_script():
...
Amazon Braket Hybrid Jobs は、 を使用した並列 GPU シミュレーションをサポートしていますCUDA-Q。複数のオブザーバビリティまたは複数の回路の評価を並列化して、ワークロードのパフォーマンスを向上させることができます。複数のオブザーバビリティを並列化するには、アルゴリズムスクリプトに次の変更を加えます。
nvidia
バックエンドの mgpu
オプションを設定します。これは、オブザーバビリティを並列化するために必要です。並列化では GPUs 間の通信に MPI を使用するため、MPI は実行前に初期化し、実行後に確定する必要があります。
次に、 を設定して実行モードを指定しますexecution=cudaq.parallel.mpi
。次のコードスニペットは、これらの変更を示しています。
cudaq.set_target("nvidia", option="mqpu")
cudaq.mpi.initialize()
result = cudaq.observe(
kernel, hamiltonian, shots_count=n_shots, execution=cudaq.parallel.mpi
)
cudaq.mpi.finalize()
デhybrid_job
コレータで、次のコードスニペットに示すようにGPUs をホストするインスタンスタイプを指定します。
@hybrid_job(
device="local:nvidia/nvidia-mqpu",
instance_config=InstanceConfig(instanceType="ml.p3.8xlarge", instanceCount=1),
image_uri=image_uri,
)
def parallel_observables_gpu_job(sagemaker_mpi_enabled=True):
...
Amazon Braket の例 Github の並列シミュレーションノートブック
量子コンピュータでのワークロードの実行
シミュレーターテストが完了したら、QPUs での実験の実行に移行できます。ターゲットを 、、IonQまたは Rigetti デバイスなどの Amazon Braket QPU IQMに切り替えるだけです。次のコードスニペットは、ターゲットをIQM Garnetデバイスに設定する方法を示しています。使用可能な QPUsAmazon Braket コンソール
device_arn = "arn:aws:braket:eu-north-1::device/qpu/iqm/Garnet"
cudaq.set_target("braket", machine=device_arn)
Amazon Braket Hybrid Jobs の詳細については、デベロッパーガイドのAmazon Braket Hybrid Jobs の使用」を参照してください。CUDA-Q の詳細については、CUDA-Q ドキュメント