raw/Building an Agentic Quantum Computing System.md 소스 문서를 기반으로 신규 위키 노트 페니레인 (유형: tool, status: draft) 작성을 완료하여 llm-wiki/wiki/페니레인.md에 저장했습니다.


생성된 위키 노트 전문

---
type: tool
status: draft
core: false
tags:
  - llm
  - agent
  - quantum-computing
  - quantum-simulator
  - machine-learning
aliases:
  - PennyLane
  - 페니레인 양자 라이브러리
sources:
  - raw/Building an Agentic Quantum Computing System.md
created: 2026-08-28
updated: 2026-08-28
---
 
# 페니레인
 
## 한 줄 정의
**페니레인(PennyLane)**은 양자 컴퓨팅, 양자 기계학습(QML), 및 양자-클래식 하이브리드 연산을 지원하는 대표적인 오픈소스 양자 기계학습 라이브러리이다.
 
## 핵심 요지
- **양자 회로 및 커널 모사**: 데이터를 양자 상태로 변환하는 피처 맵(Feature Map), 두 양자 상태의 중첩도(Fidelity)를 구하는 수반 회로(Adjoint circuit) 연산, 및 그람 행렬(Gram Matrix) 계산을 파이썬 기반 `QNode``qml.kernels` API로 제공한다 (`raw/Building an Agentic Quantum Computing System.md`).
- **다양한 연산 백엔드 지원 (`lightning.gpu` / `lightning.qubit`)**: CPU 전용 시뮬레이터(`default.qubit`, `lightning.qubit`)부터 NVIDIA GPU 기반 상태벡터(Statevector) 시뮬레이터(`lightning.gpu`)까지 유연하게 지원하며, 실행 환경에 따라 자동 폴백(Fallback) 구조를 형성한다 (`raw/Building an Agentic Quantum Computing System.md`).
- **클래식 ML 라이브러리와의 유연한 결합**: scikit-learn, PyTorch 등 기존 클래식 기계학습 프레임워크와 결합하여 [[양자 커널]] 기반 [[양자 원클래스 SVM]](Quantum OneClassSVM), 양자 K-Means, 양자 K-Medians 이상 탐지 알고리즘을 구동한다 (`raw/Building an Agentic Quantum Computing System.md`).
- **연산 기회비용과 시뮬레이션 병목**: H100 80GB GPU 1대 환경에서 `lightning.gpu` 백엔드로 8큐비트 그람 행렬 연산을 구동하는 데 `68.9741초`가 소요되어, 클래식 가우시안 RBF SVM(`0.0022초`) 대비 수천 배 이상의 회로 모사 시간 비용이 지불된다 (`raw/Building an Agentic Quantum Computing System.md`).
- **에이전트 파이프라인 하위 백엔드 전담**: [[AI 에이전트 제어 루프]] 기반의 로컬 LLM([[Qwen3-14B]]) 에이전트가 도구 호출(`run_pipeline`)을 통해 페니레인 기반 양자 엔진 연산을 자율적으로 구동하고 지표를 판독한다 (`raw/Building an Agentic Quantum Computing System.md`).
 
## 상세
 
### 1. 양자 컴퓨팅 회로 구성 및 피델리티 측정
페니레인은 고차원 데이터를 양자 Hilbert 공간으로 매핑하고 샘플 간 유사도를 구하는 일련의 과정을 직관적인 코드로 표현하게 해준다 (`raw/Building an Agentic Quantum Computing System.md`).
 
1. **QNode 및 회로 정의 (`@qml.qnode`)**:
   - 양자 함수를 디바이스 바인딩 객체인 QNode로 선언한다.
   - 각 잠재 공간 축 변수 $z_i$를 각도 정규화 $\theta_i = \pi \cdot \tanh(z_i)$를 거쳐 RY 회전 게이트로 주입하고, CNOT 게이트 네트워크로 큐비트 간 양자 얽힘(Entanglement) 회로 $U_{\phi}(z)$를 구성한다.
2. **수반 회로 연산 (`qml.adjoint`)**:
   - 피적합 커널(Fidelity Kernel) 계산 시 샘플 $z_1$의 정방향 회전 연산 후 샘플 $z_2$ 회전 연산의 수반 행렬(Adjoint) $U_{\phi}^{\dagger}(z_2)$을 잇따라 적용한다.
   - 두 파형이 얼마나 정확히 상쇄되어 초기 기저 상태 $|00...0\rangle$ 비트스트림으로 회귀하는지 측정 확률(`qml.probs`)을 추출하여 커널 유사도 값 $K(z_1, z_2)$을 연산한다.
3. **그람 행렬(Gram Matrix) 생성**:
   - `qml.kernels.square_kernel_matrix` 도구를 이용해 오직 정상 학습 데이터로 스케일링된 (n, n) 대칭 준양정치(PSD) 유사도 그람 행렬을 계산한다.
 
### 2. 가속 디바이스 및 자동 Fallback 구조
페니레인은 다양한 양자 하드웨어 및 시뮬레이터 백엔드를 지원하며, 고성능 파이프라인 구축을 위해 GPU 가속 및 동적 자동 전환 구조를 취한다 (`raw/Building an Agentic Quantum Computing System.md`).
 
- **`lightning.gpu`**: C++ 기반의 고성능 양자 상태벡터 시뮬레이터로 NVIDIA GPU 메모리 상에서 양자 상태 중첩 연산을 병렬로 가속 구동한다.
- **`lightning.qubit` / `default.qubit`**: GPU 장치가 없거나 라이브러리가 부재할 때 에러로 시스템이 중단되는 대신 CPU 시뮬레이터 모드로 동적 Fallback되어 동일한 코드베이스로 노트북과 H100 서버 모두에서 호환 구동을 보장한다.
 
### 3. 실증 수치 및 성능 지표
- **구동 환경**: NVIDIA H100 80GB GPU 1대 상에서 PennyLane `lightning.gpu` 실행 (`raw/Building an Agentic Quantum Computing System.md`).
- **네트워크 침입 탐지(KDD) 성능**: 8큐비트 밀집 얽힘(`dense`) 피처 맵과 페니레인 커널 기반 QSVM 적용 시 **ROC-AUC 0.9916**, **Average Precision 0.9562**를 기록하여 클래식 RBF SVM(ROC-AUC 0.9580, AP 0.5726) 대비 판정승을 거두었다 (`raw/Building an Agentic Quantum Computing System.md`).
- **연산 타이밍 분석**: KDD 1회 실행에서 데이터 수집(1.66초), 압축(0.0026초) 대비 페니레인 양자 커널 계산(`quantum_kernel`)에 **68.9741초**가 소요됨을 명시적으로 모니터링해 연산 가성비를 투명하게 파악할 수 있다 (`raw/Building an Agentic Quantum Computing System.md`).
 
## 예시
 
다음은 PennyLane 플랫폼을 활용하여 동적 백엔드 Fallback 처리, CNOT 얽힘 피처 맵 회로 구성, `qml.adjoint` 기반 피적합 커널(Fidelity Kernel) 연산, 및 사전 계산 그람 행렬로 원클래스 SVM을 훈련하는 완전한 파이썬 구현 코드 예시이다 (`raw/Building an Agentic Quantum Computing System.md`).
 
```python
import pennylane as qml
import numpy as np
from sklearn.preprocessing import StandardScaler
from sklearn.svm import OneClassSVM
 
# 1. 백엔드 장치 생성 및 Fallback 헬퍼 함수
def make_device(n_wires: int, backend: str = "lightning.gpu") -> qml.devices.Device:
    try:
        return qml.device(backend, wires=n_wires)
    except Exception:
        print(f"[{backend}] 백엔드 사용 불가. default.qubit CPU 시뮬레이터로 전환합니다.")
        return qml.device("default.qubit", wires=n_wires)
 
# 2. 페니레인 피적합 커널 엔진 클래스
class PennyLaneFidelityKernel:
    def __init__(self, n_qubits: int = 8, reps: int = 2, backend: str = "lightning.gpu"):
        self.n_qubits = n_qubits
        self.reps = reps
        self.device = make_device(n_qubits, backend)
        self.scaler = None
 
        # 얽힘 피처 맵 회로 정의 (Dense Feature Map)
        def feature_map(z):
            angles = np.pi * np.tanh(np.asarray(z, dtype=np.float64).ravel())
            for _ in range(self.reps):
                for i in range(self.n_qubits):
                    qml.RY(angles[i], wires=i)
                if self.n_qubits > 1:
                    for i in range(self.n_qubits):
                        qml.CNOT(wires=[i, (i + 1) % self.n_qubits])
 
        # z1 포워드 회로 + z2 수반(Adjoint) 회로를 결합한 QNode
        @qml.qnode(self.device)
        def overlap_circuit(z1, z2):
            feature_map(z1)
            qml.adjoint(feature_map)(z2)
            return qml.probs(wires=range(self.n_qubits))
 
        self._qnode = overlap_circuit
 
    def kernel_value(self, z1: np.ndarray, z2: np.ndarray) -> float:
        z1_scaled = self.scaler.transform(z1.reshape(1, -1))[0]
        z2_scaled = self.scaler.transform(z2.reshape(1, -1))[0]
        probs = self._qnode(z1_scaled, z2_scaled)
        return float(np.asarray(probs)[0])  # index 0: 전원 0 비트스트림 |00...0> 복원 확률
 
    def gram_train(self, Z_train: np.ndarray) -> np.ndarray:
        self.scaler = StandardScaler().fit(Z_train)
        return np.asarray(
            qml.kernels.square_kernel_matrix(
                Z_train, self.kernel_value, assume_normalized_kernel=True
            ),
            dtype=np.float64
        )
 
# 3. 페니레인 커널과 OneClassSVM 스코어러 연동 실행
if __name__ == "__main__":
    # 8차원 잠재 공간 데이터 생성
    Z_train = np.random.randn(60, 8)
    
    # 페니레인 엔진 구동 및 그람 행렬 연산
    pennylane_kernel = PennyLaneFidelityKernel(n_qubits=8, backend="default.qubit")
    K_train = pennylane_kernel.gram_train(Z_train)
    
    # 사전 계산 커널(precomputed) 기반 OneClassSVM 훈련
    qsvm = OneClassSVM(kernel="precomputed", nu=0.1)
    qsvm.fit(K_train)
    print(f"페니레인 그람 행렬 연산 완료: 형상 = {K_train.shape}")

충돌

현재 소스 문서 간 명시적인 주장의 충돌은 발견되지 않았습니다.

관련 노트