기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Amazon Braket에서 CUDA-Q 사용
NVIDIA's CUDA-Q는 CPU, GPU 및 QPU를 결합한 하이브리드 양자 알고리즘을 프로그래밍하기 위해 설계된 소프트웨어 라이브러리입니다. 이 라이브러리는 통합 프로그래밍 모델을 제공하여 개발자가 단일 프로그램 내에서 고전 명령과 양자 명령을 모두 표현할 수 있게 함으로써 워크플로를 간소화합니다. CUDA-Q는 기본 제공 CPU 및 GPU 시뮬레이터를 통해 양자 프로그램 시뮬레이션과 런타임을 가속화합니다. CUDA-Q는 네이티브 Braket 노트북 인스턴스(NBI)와 Amazon Braket Hybrid Jobs에서 사용할 수 있습니다.
이 섹션의 내용:
NBI에서의 CUDA-Q
CUDA-Q는 기본적으로 Braket NBI 환경에 설치됩니다. Jupyter 시작 관리자 페이지로 이동하고 CUDA-Q 및 Braket 타일을 선택하여 CUDA-Q 예제 노트북을 열 수 있습니다. 그러면 기본 창에서 예제 노트북 0_hello_cudaq_jobs.ipynb이 열립니다. 자세한 CUDA-Q 예제는 nvidia_cuda_q/ 디렉터리의 왼쪽 패널을 참조하세요.
NBI에 설치된 CUDA-Q 또는 다른 타사 패키지의 버전을 확인할 수도 있습니다. 예를 들어 노트북 코드 셀에서 다음 명령을 실행하여 환경에 설치된 CUDA-Q, Qiskit, PennyLane 및 Braket 패키지의 버전을 확인할 수 있습니다.
%pip freeze | grep -i -e cudaq -e qiskit -e pennylane -e braket
하이브리드 작업에서의 CUDA-Q
Amazon Braket Hybrid Jobs에서 CUDA-Q를 사용하면 유연한 온디맨드 컴퓨팅 환경을 제공할 수 있습니다. 계산 인스턴스는 워크로드 기간 동안에만 실행되므로 사용한 만큼만 비용을 지불하면 됩니다. Amazon Braket Hybrid Jobs는 또한 확장 가능한 환경을 제공합니다. 사용자는 프로토타이핑 및 테스트를 위해 작은 인스턴스로 시작한 다음, 전체 실험을 위해 더 큰 워크로드를 처리할 수 있는 더 큰 인스턴스로 확장할 수 있습니다.
Amazon Braket Hybrid Jobs는 CUDA-Q의 잠재력을 극대화하는 데 필수적인 GPU를 지원합니다. GPU는 CPU 기반 시뮬레이터에 비해 양자 프로그램 시뮬레이션의 속도를 크게 높입니다. 특히 큐비트 수가 많은 회로 작업 시 더욱 그렇습니다. Amazon Braket Hybrid Jobs에서 CUDA-Q를 사용하면 병렬화가 간단해집니다. 하이브리드 작업은 여러 계산 노드에 걸쳐 회로 샘플링 및 관찰 가능 항목 평가의 분산을 단순화합니다. 이렇게 원활한 CUDA-Q 워크로드의 병렬화를 통해 사용자는 대규모 실험을 위한 인프라를 설정하는 대신 워크로드 개발에 더 집중할 수 있습니다.
시작하려면 Amazon Braket 예제 GitHub에서 CUDA-Q 스타터 예제
다음 코드 조각은 Amazon Braket Hybrid Jobs를 사용하여 CUDA-Q 프로그램을 실행하는 hello-world 예제입니다.
image_uri = retrieve_image(Framework.CUDAQ, AwsSession().region) @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-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.g4dn.xlarge"), ) def my_job_script(): ...
Amazon Braket Hybrid Jobs 및 NBI는 CUDA-Q를 사용한 병렬 GPU 시뮬레이션을 지원합니다. 여러 관찰 가능 항목 또는 여러 회로의 평가를 병렬화하여 워크로드의 성능을 높일 수 있습니다. 여러 관찰 가능 항목을 병렬화하려면 알고리즘 스크립트를 다음과 같이 변경합니다.
nvidia 백엔드의 mgpu 옵션을 설정합니다. 이는 관찰 가능 항목을 병렬화하는 데 필요합니다. 병렬화는 GPU 간 통신에 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 데코레이터에서 여러 GPU를 호스팅하는 인스턴스 유형을 지정합니다.
@hybrid_job( device="local:nvidia/nvidia-mqpu", instance_config=InstanceConfig(instanceType="ml.g4dn.12xlarge", instanceCount=1), image_uri=image_uri, ) def parallel_observables_gpu_job(sagemaker_mpi_enabled=True): ...
Amazon Braket 예제 GitHub의 병렬 시뮬레이션 노트북
양자 컴퓨터에서 워크로드 실행
시뮬레이터 테스트를 완료한 후 QPU에서 실행 중인 실험으로 전환할 수 있습니다. 대상을 IQM, IonQ 또는 Rigetti 디바이스와 같은 Amazon Braket QPU로 바꾸기만 하면 됩니다. 다음 코드 조각은 대상을 IQM Garnet 디바이스로 설정하는 방법을 보여줍니다. 사용 가능한 QPU 목록은 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 작업을 참조하세요. CUDA-Q에 대한 자세한 내용은 NVIDIA CUDA-Q 설명서