주 콘텐츠로 건너뛰기

SPANK 플러그인 사용자 가이드

Quantum Resource Management Interface (QRMI)를 위한 SPANK 플러그인Slurm 워크로드 매니저가 관리하는 컴퓨팅 환경에서 사용자 작업이 양자 리소스에 접근할 수 있도록 구성하는 데 사용됩니다. 이 가이드는 Slurm 작업 생성 시 QPU 리소스 할당을 구성하려는 플러그인 사용자를 위한 것입니다.

Slurm QPU 리소스 정의는 고성능 컴퓨팅(HPC) 환경의 Slurm 작업에서 사용할 수 있는 물리적 리소스를 결정합니다. 사용자 소스 코드는 가능하면 특정 Backend 인스턴스는 물론 Backend 유형에도 종속되지 않아야 합니다. 이렇게 하면 소스 코드의 이식성을 유지하면서 QPU 선택 기준을 소스 코드가 아닌 구성의 일부인 리소스 정의에 포함시킬 수 있습니다.

작업 생성 시 QPU 리소스 구성

주의

이 플러그인은 현재 활발히 개발 중이며, 정확한 문법은 변경될 수 있습니다.

관리자 범위

HPC 관리자는 SPANK 플러그인을 구성하여 Slurm 작업에 제공할 수 있는 물리적 리소스를 지정합니다. 이 구성에는 엔드포인트 및 접근 자격 증명 등 Slurm 작업이 물리적 리소스에 접근하는 데 필요한 모든 정보가 포함됩니다.

포괄적인 구성 예시는 qrmi_config.json.example을 참고하세요.

slurm.conf에서 QPU 리소스를 일부 또는 모든 노드에 할당하여 사용할 수 있습니다:

...
GresTypes=qpu,name
NodeName=node[1-5000] Gres=qpu,name:ibm_fez
...

사용자 범위

HPC 사용자는 Slurm QPU 리소스에 연결된 QPU 리소스를 사용하여 작업을 제출합니다. name 속성은 HPC 관리자가 정의한 항목을 참조합니다. Slurm 작업 실행 중에는 사전 정의된 이름으로 특정 Backend를 지정하는 방식 외에도, 정의된 Backend 집합 중에서 선택 범위를 좁히기 위해 용량 및 오류율 조건과 같은 기준에 따라 Backend를 선택할 수 있습니다.

Backend 유형에 따라 추가적인 환경 변수가 필요할 수 있습니다.

SBATCH 파라미터는 애플리케이션에 제네릭 리소스로 할당된 하나 이상의 QPU 리소스를 가리킵니다. 플러그인을 통해 제공되는 환경 변수는 애플리케이션에 필요한 정보를 제공합니다(자세한 내용은 HPC 애플리케이션 범위 섹션을 참고하세요).

#SBATCH --time=100
#SBATCH --output=<LOGS_PATH>
#SBATCH --gres=qpu:1
#SBATCH --qpu=ibm_fez
#SBATCH --... # other options

srun ...

더 많은 QPU 리소스를 사용하려면 --qpu 파라미터에 추가 QPU를 더하면 됩니다:

#SBATCH --time=100
#SBATCH --output=<LOGS_PATH>
#SBATCH --gres=qpu:3
#SBATCH --qpu=my_local_qpu,ibm_fez,ibm_marrakesh
#SBATCH --... # other options

srun ...

HPC 애플리케이션 범위

HPC 애플리케이션은 Slurm 작업에 할당된 Slurm QPU 리소스를 사용합니다.

환경 변수는 애플리케이션에서 사용할 세부 정보를 제공합니다. 예를 들어 SLURM_JOB_QPU_RESOURCES는 양자 리소스 이름 목록을 (여러 개인 경우 쉼표로 구분하여) 나열합니다. 이러한 변수들은 QRMI에서 사용됩니다. (자세한 내용은 여러 QRMI 디렉토리의 README 파일(IBM, pasqal)을 참고하세요.)

from qiskit import QuantumCircuit
# Using an IBM QRMI flavor:
from qrmi.primitives import QRMIService
from qrmi.primitives.ibm import SamplerV2, get_backend

# define circuit

circuit = QuantumCircuit(2)
circuit.h(0)
circuit.cx(0, 1)
circuit.measure_all()

# instantiate QRMI service and get quantum resource (we'll take the first one should there be several of them)
# inject credentials needed for accessing the service at this point
load_dotenv()
service = QRMIService()

resources = service.resources()
qrmi = resources[0]

# Generate transpiler target from backend configuration & properties and transpile
backend = get_backend(qrmi)
pm = generate_preset_pass_manager(
optimization_level=1,
backend=backend,
)

isa_circuit = pm.run(circuit)

# Run the circuit
options = {}
sampler = SamplerV2(qrmi, options=options)

job = sampler.run([(isa_circuit, isa_observable, param_values)])
print(f">>> Job ID: {job.job_id()}")

result = job.result()

if job.done():
pub_result = result[0]
print(f"Counts for the 'meas' output register: {pub_result.data.meas.get_counts()}")
elif job.cancelled():
print("Cancelled")
elif job.errored():
print(qrmi.task_logs(job.job_id()))

예제 파일은 examples 디렉토리를 참고하세요.

Backend 세부 사항

IBM Direct Access API

관리자 범위

Direct Access API Backend 구성(HPC 관리자 범위)에는 Direct Access 엔드포인트 및 인증 서비스, S3 엔드포인트에 대한 엔드포인트와 자격 증명이 포함됩니다. 구체적으로 다음이 포함됩니다:

  • 베어러 토큰 생성을 위한 IBM Cloud® API 키
  • Direct Access API 엔드포인트
  • S3 버킷 및 접근 세부 정보

접근 자격 증명은 HPC 사용자나 시스템의 다른 비권한 사용자에게 노출되어서는 안 됩니다. 따라서 민감한 데이터는 별도의 파일에 저장하고 적절히 접근 보호를 설정할 수 있습니다.

Slurm은 Backend에 대한 전체 접근 권한을 갖는다는 점에 유의하세요. 이에 따라 다음과 같은 몇 가지 의미가 있습니다:

  • Slurm 플러그인은 멀티테넌시를 담당합니다(사용자가 다른 사용자의 작업 결과를 볼 수 없도록 보장).
  • HPC 클러스터 측은 사용자 검증(QPU 접근이 허용된 사용자)과 적절한 접근 보장을 담당합니다.
  • QPU 사용의 용량과 우선순위는 전적으로 Slurm을 통해 관리되며, Slurm 외부의 다른 사용자 스케줄링은 관여하지 않습니다.
사용자 범위

실행 레인은 HPC 관리자나 사용자에게 직접 노출되지 않습니다. 대신, 런타임 중에 HPC 사용자가 지정할 수 있는 두 가지 모드가 있습니다:

  • exclusive=true는 다른 작업이 동시에 리소스를 사용할 수 없도록 지정합니다. 독점 모드 작업은 모든 실행 레인을 할당받으며 비독점 작업과 동시에 실행될 수 없습니다.
  • exclusive=false는 다른 작업이 병렬로 실행될 수 있도록 허용합니다. 이 경우 실행 레인 수만큼의 작업이 동시에 실행될 수 있으며, 해당 작업에는 하나의 레인이 할당됩니다.

Qiskit Runtime Service

사용자 범위

사용자는 환경 변수에 추가 접근 세부 정보를 지정해야 합니다. 구체적으로 다음이 포함됩니다:

  • Qiskit Runtime 서비스 인스턴스(CRN, Cloud Resource Name)
  • Qiskit Runtime 엔드포인트(CRN에서 자동 감지되지 않는 경우)
  • CRN 접근 권한이 있는 API 키
  • 데이터 전송을 위한 S3 인스턴스, 버킷, 접근 토큰/자격 증명

이러한 세부 정보는 Qiskit Runtime 서비스가 어떤 사용자 및 서비스 인스턴스 하에서 사용되는지를 결정합니다. 따라서 IBM Quantum® Platform 스케줄링은 스케줄링 시 사용자 및 서비스 인스턴스의 기능을 고려합니다.

현재 사용자는 위의 세부 정보를 직접 제공해야 합니다(클러스터 전체 공유 양자 접근 불가).

Pasqal Cloud Services

HPC 관리자 범위

PCS 사용을 위해 HPC 관리자가 별도로 설정해야 할 사항은 없습니다.

HPC 사용자 범위

사용자는 환경 변수에 추가 접근 세부 정보를 지정해야 합니다. 현재 다음이 포함됩니다:

  • 대상 PCS 리소스(FRESNEL, EMU_FRESNEL, EMU_MPS)
  • 인증 토큰