Skip to main content
IBM Quantum Platform

다중 프로세스 및 다중 스레드 가속 지원

이 페이지에서는 이 패키지가 멀티스레드 및 멀티프로세스 가속을 어느 정도 qiskit-addon-sqd 지원하는지, 그리고 고성능 컴퓨팅(HPC) 개발자가 이 패키지를 가속화된 워크로드에 통합할 때 신뢰할 수 있는 전제 조건들을 설명합니다.


단일 스레드 가정

별도로 명시되지 않는 한, 이 패키지의 API는 단일 스레드에서 호출되도록 설계되었습니다. 이 패키지에서 제공하는 상위 수준 API는 재진입성이 보장되지 않으므로, 최종 사용자는 메인 스레드 이외의 다른 스레드에서 해당 API를 호출해서는 안 됩니다.


집합적 다중 프로세스 실행

이 패키지는 단일 프로그램, 다중 데이터(SPMD) 방식의 집단적 다중 프로세스 가속을 지원합니다. 이 방식에서는 전체 프로그램이 여러 개의 독립된 프로세스로 실행되며, 이들 프로세스 간에는 명시적인 전역 동기화 및 통신이 이루어집니다(예: mpirun -n 128 python my_program.py). SPMD 방식은 작업 스케줄러 및 기타 병렬 소프트웨어와 원활하게 연동되며, 대규모 프로세스 수까지 확장 가능하기 때문에 고성능 및 대규모 워크로드에 권장되는 모델이며, 본 페이지에서 다루는 주제입니다.

이 패키지는 다양한 집합 실행 백엔드를 지원하도록 설계되었지만, 현재 구현은 HPC 시스템용 표준 메시지 전달 API인 MPI를 대상으로 하고 있습니다. 구현 방식과 관계없이, 이 패키지는 각 프로세스가 단일 스레드에 의해 제어된다고 가정합니다. MPI의 경우, 이는 MPI_THREAD_FUNNELED 이거나 그 이하에 해당합니다.

함수가 집합적 실행을 지원하는 경우, 해당 함수의 설명 문서에는 그 사실이 명시되어야 합니다. 문서에 집합적 실행에 대한 언급이 없다면, 해당 함수는 집합적 의미론을 갖지 않으며 제어 프로세스에서만 호출되어야 합니다.

집합적 함수의 구체적인 반환값과 동기화 의미론은 해당 함수 자체에 명시되어 있습니다. 일반적으로 해당 문서에는 다음 사항이 명확히 명시되어야 합니다:

  • 해당 함수가 각 프로세스가 자체 로컬 데이터에 대해 독립적으로 호출하도록 의도된 것인지, 아니면 모든 프로세스가 함께 호출하도록 의도된 것인지 여부.
  • 프로세스 간에 그 인수가 어떻게 일치해야 하는지.
  • 반환 값이 전달되는 방식—결과가 제어 프로세스에만 존재하는지, 모든 프로세스가 동일한 값을 수신하는지, 아니면 각 프로세스가 분산 데이터 구조의 로컬 부분에 대한 핸들을 수신하는지 여부.

현재 모든 프로세스에서 일괄적으로 호출될 수 있는 함수는 단 하나뿐입니다: diagonalize_fermionic_hamiltonian(). 집단적으로 호출될 때, 고유값 해법 단계는 모든 프로세스가 참여하여 작업을 수행하는 단계이므로, 고유값 해법 구현체는 모든 프로세스를 활용할 수 있습니다. 구성 복구 루프의 나머지 부분들은 분산 구현이 없으며, 제어 프로세스(랭크 0)에서만 실행됩니다.

일부 기존 고유값 해석기 구현체는 내부적으로 자체 병렬 프로세스를 시작하고 관리하기 때문에(예를 들어, 사용자를 mpirun 대신하여 호출하는 방식 등), 호출 프로그램이 MPI/SPMD 환경 밖에서 실행되어야 합니다. 이 모드는 대화형 작업이나 노트북 기반 작업에 편리하며, 계속해서 지원됩니다. 호출 프로그램에 대한 요구 사항은 해당 diagonalize_fermionic_hamiltonian() 함수의 API 참조에 설명되어 있습니다.


다중 프로세스 환경에서의 오류 처리

모든 프로세스에서 일괄적으로 호출되는 함수는 예외를 발생시키거나 단일 프로세스만 중단시켜서는 안 된다. 그렇게 할 경우 나머지 프로세스들이 교착 상태에 빠지거나 일관성 없는 상태에 놓이게 되기 때문이다. 대신, 오류 처리는 실행 컨텍스트 전체에 대해 ‘실패 시 중단(fail-stop)’ 세미오틱을 따릅니다. 즉, 오류가 발생하면 구현체는 전체 실행 컨텍스트를 일괄적으로 중단할 준비가 되어 있어야 합니다(예를 들어, 를 사용하여 MPI_Abort).

MPI 구현체에서는 이러한 보장을 제공하지 않기 때문에, 이 API는 프로세스 간에 오류 보고가 일관되게 이루어지거나 예외가 일괄적으로 전달되는 것을 보장할 수 없습니다. 구현에 따라 오류가 참여하는 모든 프로세스에 표시되도록 시도할 수도 있습니다(예를 들어, 각 프로세스가 예외를 발생시키는 방식). 그러나 이는 최선의 노력을 다하는 수준에서만 제공될 수 있으며, 정확성이나 복구 측면에서 이에 전적으로 의존해서는 안 됩니다.

이는 집합적 구현이 가질 수 있는 속성들이지, 특정 속성에 대한 보장은 아닙니다. 이 패키지에서는 고유값 해석기만이 유일한 집단 연산 단계입니다(앞의 절 참조). 이 고유값 해석기의 기본 구현은 분산 처리 방식이 아니므로, 이러한 고려 사항은 사용자가 직접 제공하는 사용자 정의 집단 고유값 해석기에 적용됩니다.

이 페이지가 도움이 되었습니까?
GitHub에서 버그, 오타를 보고하거나 컨텐츠를 요청하십시오.