성능
분산 시뮬레이션
회로가 한 대의 머신에 담기에 너무 클 때, QXel은 MPI로 상태 벡터를 여러 노드에 분할합니다. 각 rank는 상태 벡터의 일부를 보유하고, 게이트가 적용될 때 다른 rank와 진폭을 교환합니다. 회로 코드는 변경하지 않으며, 동일한 스크립트를 mpirun으로 실행하면 됩니다.
두 가지 병렬화 모드
• SPPN (single process per node): 노드당 하나의 MPI 프로세스가 해당 노드의 모든 GPU를 관리합니다. 실행이 가장 간단합니다.
• SPPD (single process per device): GPU당 하나의 MPI 프로세스를 둡니다. 프로세스가 더 많으며, 멀티 GPU 노드에서 종종 확장성이 더 좋습니다.
실행하기
동일한 Python 스크립트를 mpirun으로 실행하세요. --host 인자는 각 호스트와 그 위에서 시작할 프로세스 수를 나열합니다. 스크립트는 단일 노드에서와 똑같이 회로를 만들고 실행하며, QXel이 MPI world를 감지해 자동으로 분산합니다.
두 노드에 걸친 SPPN(각각 하나의 프로세스):
bash
mpirun --host node0:1,node1:1 python your_script.py각각 GPU 4개를 가진 두 노드에 걸친 SPPD(노드당 4개 프로세스, 총 8개):
bash
mpirun --bind-to none --host node0:4,node1:4 python your_script.py참고 분산 실행은 GPU 커널을 사용하므로, 스크립트에서 compute_type='cuda'를 설정하세요. QXel은 노드 간 통신에 UCX와 함께 OpenMPI를 사용합니다(OpenMPI 5.0.7 + UCX 1.18.0으로 테스트됨). CUDA 지원으로 UCX와 MPI를 빌드하는 방법은 저장소의 Development 가이드를 참고하세요. QXel SaaS에서는 이 작업이 대신 처리되므로, 여러 노드를 요청하기만 하면 됩니다.