기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Amazon Braket에서 CUDA-Q 사용
NVIDIA’s CUDA-Q는 CPUs, GPUs 및 Quantum 처리 장치(QPUs. 개발자가 단일 프로그램 내에서 클래식 및 양자 지침을 모두 표현하여 워크플로를 간소화할 수 있는 통합 프로그래밍 모델을 제공합니다.는 내장 CPU 및 GPU 시뮬레이터를 사용하여 양자 프로그램 시뮬레이션 및 런타임을 CUDA-Q 가속화합니다.
Amazon Braket Hybrid JobsCUDA-Q에서를 사용하면 유연한 온디맨드 컴퓨팅 환경을 제공할 수 있습니다. 컴퓨팅 인스턴스는 워크로드 기간 동안에만 실행되므로 사용한 만큼만 비용을 지불하면 됩니다. Amazon Braket Hybrid Jobs는 확장 가능한 환경도 제공합니다. 사용자는 프로토타이핑 및 테스트를 위해 더 작은 인스턴스로 시작한 다음 전체 실험을 위해 더 큰 워크로드를 처리할 수 있는 더 큰 인스턴스로 확장할 수 있습니다.
Amazon Braket Hybrid Jobs는 CUDA-Q의 잠재력을 극대화하는 데 필수적인 GPUs를 지원합니다. GPUs CPU 기반 시뮬레이터에 비해 양자 프로그램 시뮬레이션 속도를 크게 높입니다. 특히 높은 쿼비트 수 회로로 작업할 때 더욱 그렇습니다. Amazon Braket Hybrid JobsCUDA-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 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-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
옵션을 설정합니다. 이는 관찰 항목을 병렬화하는 데 필요합니다. 병렬화는 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 디바이스로 설정하는 방법을 보여줍니다. 사용 가능한 QPUs 목록은 Amazon 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설명서