本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
NVIDIA’s CUDA-Q 是一種軟體程式庫,專為程式設計混合量子演算法而設計,結合 CPUs、GPUs 和 Quantum 處理單元 QPUs)。它提供統一的程式設計模型,可讓開發人員在單一程式中同時表達傳統和量子指令,簡化工作流程。 使用其內建 CPU 和 GPU 模擬器CUDA-Q加速量子程式模擬和執行時間。
在 Amazon Braket Hybrid Jobs CUDA-Q上使用 可提供彈性的隨需運算環境。運算執行個體只會在工作負載期間執行,確保您只需為使用的項目付費。Amazon Braket Hybrid Jobs 也提供可擴展的體驗。使用者可以從較小的執行個體開始進行原型設計和測試,然後擴展到能夠處理更大工作負載的大型執行個體,以進行完整的實驗。
Amazon Braket Hybrid Jobs 支援 GPUs,對於最大化 CUDA-Q的潛力至關重要。相較於 CPU 型模擬器,GPUs 可大幅加速量子程式模擬,特別是在使用高 qubit 計數電路時。在 Amazon Braket 混合任務CUDA-Q上使用 時,平行化會變得直接。混合任務簡化了電路取樣和可觀測評估在多個運算節點之間的分佈。這種無縫平行化的CUDA-Q工作負載可讓使用者更專注於開發工作負載,而不是為大規模實驗設定基礎設施。
若要開始使用,請參閱 Amazon Braket 範例 Github 上的CUDA-Q入門範例
下列程式碼片段是使用 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 模擬器上的 Bell 電路。此範例會在您的筆記型電腦或 Braket Jupyter 筆記本上執行。由於local=True
設定,當您執行此指令碼時,容器會在您的本機環境中啟動,以執行 CUDA-Q 程式進行測試和偵錯。完成測試後,您可以移除local=True
旗標並執行任務 AWS。若要進一步了解,請參閱 Amazon Braket 混合任務入門。
如果您的工作負載具有高 qubit 計數、大量電路或大量反覆運算,您可以透過指定 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-Q GPU 模擬器上執行工作負載。若要啟用 GPU 模擬器,請使用後端名稱 nvidia
。nvidia
後端以 CUDA-Q GPU 模擬器的形式運作。接著,選取支援 NVIDIA GPU 的 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
的選項。這是平行化可觀測項目的必要項目。平行處理使用 MPI 進行 GPUs 之間的通訊,因此 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 上執行實驗。只要將目標切換到 Amazon Braket QPU,例如 IQM、 IonQ或 Rigetti 裝置。下列程式碼片段說明如何將目標設定為 IQM Garnet 裝置。如需可用 QPUs的清單,請參閱 Amazon Braket 主控台
device_arn = "arn:aws:braket:eu-north-1::device/qpu/iqm/Garnet"
cudaq.set_target("braket", machine=device_arn)
如需 Amazon Braket 混合任務的詳細資訊,請參閱 開發人員指南中的使用 Amazon Braket 混合任務。若要進一步了解 CUDA-Q,請參閱 CUDA-Q 文件