양자 컴퓨터 (Quantum Computer)

[7부] 양자컴퓨팅 소프트웨어 & 툴킷 실습

springfallinlove 2025. 6. 4. 14:24
[7부] 양자컴퓨팅 소프트웨어 & 툴킷 실습

[7부] 양자컴퓨팅 소프트웨어 & 툴킷 실습

요약 설명: IBM Qiskit·Google Cirq·AWS Braket 등 주요 양자컴퓨팅 프레임워크의 설치와 기본 사용법을 살펴보고, 간단한 코드 예제를 통해 실제로 회로를 작성하고 시뮬레이션하는 과정을 실습합니다. 또한 로컬 시뮬레이터와 클라우드 백엔드의 사용법을 비교합니다.

1. Qiskit 설치 및 환경설정

1.1 Conda 또는 Pip을 이용한 설치

Qiskit은 Python 기반 오픈소스 프레임워크로, CondaPip 모두를 사용해 설치할 수 있습니다. 아래 명령어 중 편한 방식을 선택해 설치하세요.

  • Conda 환경에서 설치:
    
    # Conda 환경을 만든 뒤 활성화
    conda create -n quantum python=3.8 -y
    conda activate quantum
    
    # Qiskit 설치
    conda install -c conda-forge qiskit -y
          
  • Pip으로 설치:
    
    # 가상 환경 생성 및 활성화 (venv 예시)
    python3 -m venv qenv
    source qenv/bin/activate
    
    # Qiskit 설치
    pip install qiskit
          

1.2 Jupyter Notebook 설정

Qiskit 예제를 보다 편리하게 실행하려면 Jupyter Notebook 또는 JupyterLab을 설치하고 커널을 설정합니다.


# Jupyter Notebook 설치
pip install jupyterlab

# JupyterLab 실행
jupyter lab
  

JupyterLab이 실행된 브라우저에서 새 노트북을 열고, Python 커널이 정상적으로 동작하는지 확인합니다. 만약 여러 Python 환경(가상환경)이 있다면, 해당 환경을 커널로 등록해두면 편리합니다.

2. 간단한 회로 작성 및 시뮬레이션 (Aer 시뮬레이터)

Qiskit에는 로컬 환경에서 양자회로를 시뮬레이션할 수 있는 Aer 시뮬레이터가 포함되어 있습니다. 아래 예제는 2큐빗 벨 상태를 생성하고 측정하는 간단한 코드입니다.


from qiskit import QuantumCircuit, Aer, execute
from qiskit.visualization import plot_histogram

# 2큐빗 벨 상태 생성 회로
qc = QuantumCircuit(2, 2)
qc.h(0)           # 첫 번째 큐빗에 Hadamard
qc.cx(0, 1)      # 첫 번째 큐빗을 제어로 CNOT
qc.measure([0,1], [0,1])  # 두 큐빗 측정

# Aer 시뮬레이터 백엔드 선택
simulator = Aer.get_backend('qasm_simulator')

# 시뮬레이션 실행 (1024 샷)
result = execute(qc, simulator, shots=1024).result()
counts = result.get_counts(qc)
print(counts)

# 결과 시각화 (Jupyter 환경에서)
# plot_histogram(counts)
  

실행 결과로 \{'00': 약 50%, '11': 약 50%\} 형태의 비트스트링 분포를 확인할 수 있습니다.

3. Cirq 기본 예제

Google Cirq는 또 다른 인기 있는 양자컴퓨팅 프레임워크로, 주로 구글의 Sycamore 칩 개발을 위해 사용됩니다. 아래는 Cirq를 이용해 2큐빗 벨 상태를 생성하고 시뮬레이션하는 예제입니다.


import cirq

# 2개의 큐빗 정의
qubits = [cirq.LineQubit(0), cirq.LineQubit(1)]

# 회로 구성
circuit = cirq.Circuit()
circuit.append(cirq.H(qubits[0]))       # 첫 번째 큐빗에 Hadamard
circuit.append(cirq.CNOT(qubits[0], qubits[1]))  # CNOT
circuit.append(cirq.measure(*qubits, key='result'))

print("Circuit:")
print(circuit)

# 시뮬레이터 실행
simulator = cirq.Simulator()
result = simulator.run(circuit, repetitions=1000)
print("Results:")
print(result.histogram(key='result'))
  

Cirq에서는 LineQubit로 큐빗을 정의하고, Simulator()로 시뮬레이션을 수행합니다.

4. PennyLane 기초 실습

PennyLane은 양자컴퓨팅과 머신러닝을 결합한 프레임워크로, 양자 회로를 자동 미분과 연동할 수 있습니다. 아래는 PennyLane을 이용해 간단한 파라메터화된 회로(QNode) 예제입니다.


import pennylane as qml
from pennylane import numpy as np

n_qubits = 2
dev = qml.device('default.qubit', wires=n_qubits)

# 파라메터화된 회로 정의
@qml.qnode(dev)
def circuit(params):
    qml.RY(params[0], wires=0)
    qml.RY(params[1], wires=1)
    qml.CNOT(wires=[0,1])
    return qml.expval(qml.PauliZ(0)), qml.expval(qml.PauliZ(1))

# 초기 파라메터 설정
params = np.array([0.5, 1.0], requires_grad=True)

# 회로 실행
expectations = circuit(params)
print("Expectations:", expectations)

# 자동 미분 예시 (gradient)
grad_fn = qml.grad(circuit)
grads = grad_fn(params)
print("Gradients:", grads)
  

PennyLane을 사용하면 파라메터에 대해 자동으로 미분값을 얻어 고전 최적화 기법과 결합한 VQE 등의 알고리즘을 쉽게 구현할 수 있습니다.

5. 로컬 시뮬레이터 vs 클라우드 백엔드 사용법 비교

5.1 로컬 시뮬레이터

  • 장점: 설치 후 인터넷 연결 없이도 즉시 사용 가능, 빠른 반복 실험.
  • 단점: 큐빗 수가 커지면 메모리와 연산 시간이 기하급수적으로 증가.
  • 사용 예: Qiskit Aer, Cirq Simulator, PennyLane default.qubit 등.

5.2 클라우드 백엔드

실제 하드웨어나 대규모 시뮬레이터를 사용하려면 각 플랫폼의 클라우드 서비스를 이용해야 합니다. 대표적으로 IBM Quantum Experience(IBM Q), Amazon Braket, Google Quantum AI 등에서 제공하는 리소스를 활용할 수 있습니다.

  • IBM Quantum Experience:
    • 계정 생성 후 API 토큰 발급.
    • Qiskit에서 IBMQ.enable_account('YOUR_API_TOKEN') 호출.
    • 사용 가능한 실기기 및 QASM 시뮬레이터 목록 확인: provider.backends().
  • AWS Braket:
    • AWS 계정 및 IAM 설정 후 Braket 권한 부여.
    • Boto3 설치: pip install boto3 braket-sdk.
    • Braket 큐빗닷컴 리소스 호출 코드 예시:
      
      from braket.aws import AwsDevice
      
      # 예: IonQ 하드웨어 사용
      device = AwsDevice("arn:aws:braket:::device/qpu/ionq/ionQdevice")
      
      # 회로 QASM 형식으로 정의 후 실행
      task = device.run(qc, shots=1000)
      result = task.result()
      print(result.measurement_counts)
                
  • Google Quantum AI (Cirq):
    • Google Cloud Platform 계정 및 IAM 설정.
    • Cirq를 통해 Sycamore 또는 다른 백엔드 호출:
      
      import cirq
      from cirq_google import get_engine
      
      engine = get_engine(project_id='your-gcp-project')
      processor = engine.get_processor(processor_id='sycamore')
      job = processor.run_sweep(program=circuit, params=[{}], repetitions=1000)
      results = job.results()
      print(results)
                

선택 팁:

  • 개발 초기 단계에서는 로컬 시뮬레이터로 빠르게 실험하고, 이후 특정 하드웨어 성능 검증이 필요할 때 클라우드 백엔드를 사용합니다.
  • 실제 하드웨어 사용 시 큐빗 수 제한, 큐빗 연결 토폴로지, 큐빗 코히어런스 시간 등을 고려해야 합니다.
  • 각 클라우드 서비스마다 요금 정책이나 큐빗 접근 우선순위가 다르므로, 사용 전 문서를 꼼꼼히 확인합니다.

6. 결론 및 다음 단계 안내

7부에서는 양자컴퓨팅 프레임워크 실습을 위해 필요한 설치 및 환경설정을 다루었으며, Qiskit, Cirq, PennyLane을 사용해 간단한 회로 작성과 시뮬레이션 예제를 살펴보았습니다. 또한 로컬 시뮬레이터와 클라우드 백엔드를 비교하여 언제 어떤 리소스를 활용하면 좋은지 안내했습니다.

다음 8부에서는 양자컴퓨팅 응용 사례를 다룹니다. 분자 시뮬레이션, 최적화, 암호 해독, 양자머신러닝 등 실제 산업 및 연구 분야에서의 응용 사례를 정리하고, 간단한 예제를 통해 응용 가능성을 탐구합니다.