양자 컴퓨팅 첫걸음
- 난이도: 초급
- QPU 사용 시간: 11s
여러분, 워크숍에 오신 것을 환영합니다! 이 입문 실습의 주요 목표는 1) Qiskit 설치 방법 안내 2) IBM Cloud 계정 생성 및 실제 양자 컴퓨터 사용을 위한 api_key와 crn 준비 3) 첫 번째 양자 Circuit 만들기 4) 양자 상태 퀴즈 풀기 5) 실제 양자 컴퓨터에서 Circuit을 실행하고 결과를 시각화하는 것을 통해 여러분의 양자 여정을 준비시키는 것입니다.
1. 시작하기 전에: Qiskit
Qiskit이란
**Qiskit SDK**는 개발자와 연구자들이 유틸리티 규모 이상에서 양자 컴퓨터의 잠재력을 최대한 활용할 수 있도록 설계된 고성능 소프트웨어 스택입니다. 그 핵심에는 확장된 양자 Circuit, 연산자, 기본 요소(Primitives) 수준에서 양자 컴퓨터를 다룰 수 있는 오픈 소스 소프트웨어 개발 키트인 Qiskit SDK가 있습니다. Qiskit SDK를 사용하면 누구나 원하는 컴퓨팅 환경에서 실제 양자 컴퓨터의 최적 성능을 이끌어낼 수 있습니다.
Qiskit은 SDK 외에도 오류 경감을 관리하는 Primitives를 통해 클라우드에서 IBM 양자 컴퓨터의 최적화된 연산을 가능하게 하는 Qiskit Runtime Service와 같은 고성능 도구 및 서비스 모음도 포함하고 있습니다. Qiskit Transpiler 서비스는 일반적인 양자 Circuit 최적화 작업의 성능을 높이는 최첨단 휴리스틱 및 AI 기반 방법을 제공합니다.
Qiskit functions는 워크로드 최적화와 산업별 사용 사례에 Qiskit을 쉽게 활용할 수 있도록 IBM 및 서드파티 서비스로 구성된 카탈로그입니다. 양자 소프트웨어 개발자, 양자 실험가, 전산 과학자, 또는 이제 막 시작하는 분이든 Qiskit의 모듈식 유연한 프레임워크를 통해 자신에게 맞는 추상화 수준에서 작업할 수 있습니다.
Qiskit은 확장성과 커스터마이징을 고려해 설계되어 있어, 업계 최고 수준의 성능을 끌어내고 새로운 유형의 문제에 도전할 수 있습니다. 고성능 코드베이스 덕분에 Qiskit SDK 는 이전보다 더 빠르게 작동하고, 메모리를 덜 사용하며, 더 나은 결과를 제공합니다. 또한 Qiskit은 질문에 기꺼이 답해줄 방대한 사용자 및 개발자 커뮤니티와 연결해 줍니다. 2019년에 처음 시작된 Qiskit 어드보케이트 프로그램은 전 세계 양자 컴퓨팅 전문가와 열정적인 참가자를 모집하는 글로벌 커뮤니티 중심 이니셔티브입니다. 수년에 걸쳐 어드보케이트들은 양자 커뮤니티에서 인정받는 리더로 성장해 왔습니다. 다음 양자 리더가 되고 싶나요? 주저하지 말고 지원해 보세요 - 여기
Qiskit 설치
먼저, 사용 중인 환경의 Python 버전이 python>=3.10인지 확인하세요. 이는 앞으로 사용할 최신 Qiskit 버전과의 호환성을 보장하기 위한 것입니다.
from platform import python_version
print(python_version())
그렇지 않은 경우, 원하는 도구를 사용하여 업그레이드할 수 있습니다. 방법을 잘 모르는 경우 다음과 같은 권장 옵션이 있습니다:
- MacOS: Homebrew
- Linux:
sudo apt-get update
OS에 따른 Python 업그레이드 방법에 대한 자세한 가이드는 여기에서 확인할 수 있습니다: How to update Python
더 많은 정보는 QGSS(Qiskit Global Summer School) 2025 위키를 참고하세요: https://github.com/qiskit-community/qgss-2025/wiki/Jupyter-Notebook-Environment-(Local-and-Online)
아래 셀을 실행하여 설치를 확인할 수 있습니다. 올바르게 설치되었다면 qiskit 버전이 반환됩니다.
# Added by doQumentation — required packages for this notebook
!pip install -q numpy qiskit
%pip install 'qiskit[visualization]'
%pip install qiskit-ibm-runtime
%pip install qiskit-aer
import qiskit
print(f"Qiskit version: {qiskit.__version__}")
문제 해결
이전 셀에서 오류가 발생한 경우, 가상 환경에 Qiskit을 설치하는 방법을 선택할 수 있습니다(두 가지 방법을 제안합니다). 오류가 없다면 이 셀은 무시하고 다음으로 진행하세요.
Qiskit 설치를 위한 가상 환경 설정 방법 두 가지를 제안합니다.
- Qiskit 설치 가이드에 설명된 venv 사용.
- Coding with Qiskit 영상에 설명된 conda 사용.
2. IBM Cloud 계정 설정
실제 양자 컴퓨터를 사용하려면 클라우드의 주요 입장 티켓인 api key와 계정을 설정하여 리소스를 가져올 crn 토큰이 필요합니다.
아래 절차에 따라 계정을 설정하세요:
- IBM Quantum® Platform으로 이동합니다.
- 오른쪽 상단(위 그림 참조)으로 이동하여 API 토큰을 생성하고 안전한 위치에 복사합니다.
- 다음 셀에서
deleteThisAndPasteYourAPIKeyHere를 여러분의 API 키로 교체합니다. - 왼쪽 하단(위 그림 참조)으로 이동하여 인스턴스를 생성합니다. 오픈 플랜을 선택해야 합니다.
- 인스턴스가 생성된 후 해당 CRN 코드를 복사합니다. 인스턴스가 보이려면 새로 고침이 필요할 수 있습니다.
- 아래 셀에서
deleteThisAndPasteYourCRNHere를 여러분의 CRN 코드로 교체합니다.
자세한 IBM Cloud® 계정 설정 방법은 이 가이드를 참조하세요.
⚠️ 참고: API 키를 안전한 비밀번호처럼 취급하세요. 안전한 환경과 신뢰할 수 없는 환경 모두에서 API 키 사용 방법에 대한 자세한 내용은 Cloud setup 가이드를 참조하세요.
또한 IBM 파트너 네트워크 대학교 구성원인 경우, 파트너 혜택을 받으려면 IBM ID에 기관 이메일 주소를 사용해 주세요.
from qiskit_ibm_runtime import QiskitRuntimeService
# Save your API key and crn and have access to the quantum computers
your_api_key = "deleteThisAndPasteYourAPIKeyHere"
your_crn = "deleteThisAndPasteYourCRNHere"
QiskitRuntimeService.save_account(
channel="ibm_cloud",
token=your_api_key,
instance=your_crn,
overwrite=True
)
# Check that the account has been saved properly
service = QiskitRuntimeService()
service.saved_accounts()
# See backends you can use
service.backends()
3. 나의 첫 번째 양자 Circuit
양자 Circuit
Qiskit의 기본 단위는 양자 Circuit입니다. 이는 양자 컴퓨터가 양자 정보 비트(Qubit이라고도 함)를 다루기 위해 사용하는 일련의 명령입니다. 이 Qubit들은 일반 노트북이나 스마트폰과는 다른 방식으로 문제에 접근할 수 있도록 하는 특별한 성질을 가지고 있습니다. Qiskit은 빠르게 발전하는 기술로서, 여전히 양자 Circuit을 직접 설계하고 실행 방법을 결정할 수 있지만(그렇게 할 충분한 이유도 있습니다), IBM Quantum은 이 과정을 간소화하는 도구도 제공합니다. 학습을 위해, 여기서는 매우 간단한 Circuit을 설계하고 시뮬레이터에서 실행해 볼 것입니다.
솔직히 말하면, 양자 정보와 계산의 기초를 설명하는 데만도 몇 시간이 걸릴 수 있기 때문에 여기서는 개요만 간략히 다룹니다. 실제로 IBM Quantum은 이미 이에 대한 강의 교재와 동영상 강의 시리즈를 제작했습니다. 복습이 필요하다면 참고해 보세요!
from qiskit import QuantumCircuit
from qiskit.quantum_info import Statevector
from qiskit.visualization import plot_state_qsphere
from qiskit_aer import AerSimulator
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import SamplerV2 as Sampler
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
from qiskit.transpiler import generate_preset_pass_manager
from qiskit.visualization import array_to_latex
from qiskit.visualization import plot_distribution
import numpy as np
from numpy import sqrt
Qubit의 기본 연산과 측정
단일 Qubit 상태 표현
단일 Qubit부터 살펴보겠습니다. 0과 1 두 값만 가질 수 있는 고전 비트와 달리, 양자 비트(Qubit)는 , 상태뿐만 아니라 두 상태의 선형 결합 상태에도 있을 수 있습니다. 이 특성은 중첩(superposition)이라고 하며, Qubit의 가장 일반적인 상태를 다음과 같이 표현할 수 있게 해줍니다:
이 Qubit의 상태를 측정하면 확률 로 결과 을, 확률 로 결과 을 얻게 됩니다. 보면 알 수 있듯이 총 확률이 이므로, 측정 결과는 반드시 또는 중 하나입니다.
외에도 위에서 또 다른 매개변수를 발견했을 것입니다. 변수 는 두 상태 와 사이의 상대적 양자 위상을 나타냅니다. 나중에 살펴보겠지만 이 상대적 위상은 매우 중요합니다. 지금은 양자 위상이 양자 상태 간의 간섭을 가능하게 하여, 특정 문제를 해결하는 양자 알고리즘을 작성할 수 있게 해준다는 점만 기억해 두세요.
양자 상태 시각화
이 실습 전반에 걸쳐 qsphere라고 알려진 도구를 사용해 양자 상태를 시각화합니다. 아래는 각각 와 상태에 대한 qsphere 모습입니다. 구의 최상단은 상태를, 최하단은 상태를 나타냅니다.
#visualize |0>
sv=Statevector([1, 0])
plot_state_qsphere(sv)
양자 Circuit을 사용해서도 완전히 동일한 QSphere를 만들 수 있습니다. 여기서 사용하는 statevector는 상태에서 시작합니다. Qiskit에서는 Qubit이 상태로 초기화됩니다. 아래 Circuit을 실행해서 같은 QSphere를 얻을 수 있는지 확인해 보세요.
qc1 = QuantumCircuit(1)
sv=Statevector(qc1)
plot_state_qsphere(sv)
이제 상태를 시각화해 보겠습니다.
양자 위상 이고 확률 (0과 1을 측정할 확률이 같음)인 중첩 상태가 qsphere에서 두 점으로 표시되는 것은 놀라운 일이 아닙니다. 하지만 두 점의 원 크기가 단순히 이나 만 있을 때보다 작다는 점에 주목하세요. 원의 크기는 각 상태를 측정할 확률에 비례하는데, 이제 절반으로 줄었기 때문입니다.
#visualize 1/sqrt(2)|0> + 1/sqrt(2)|1>
sv=Statevector([1/sqrt(2), 1/sqrt(2)])
plot_state_qsphere(sv)
양자 위상이 0이 아닌 중첩 상태의 경우, qsphere는 해당 위상을 각 점의 색상으로 시각화합니다. 예를 들어, (도)이고 확률 인 상태는 아래 qsphere와 같이 표시됩니다.
sv=Statevector([1/sqrt(2), 1/sqrt(2)*1j])
plot_state_qsphere(sv)
Qubit 조작
Qubit은 양자 Gate를 적용하여 조작합니다. 다음 실습에서 사용할 다양한 Gate에 대한 개요를 살펴보겠습니다.
먼저, 일반적인 양자 상 태에서 값을 변경하는 방법에 대해 설명합니다. 이를 위해 두 가지 Gate를 사용합니다:
-
-Gate: 이 Gate는 와 두 상태 사이를 뒤집습니다. 이 연산은 고전 NOT Gate와 동일합니다. 따라서 -Gate는 비트 플립(bit flip) 또는 NOT Gate라고도 합니다. 수학적으로 Gate는 를 로 변경하므로, 특히 0을 1로, 그리고 그 반대로 변환합니다.
-
-Gate: 이 Gate는 상태에서 상태로 전환할 수 있게 해줍니다. 이 상태는 로도 알려져 있습니다. 수학적으로 에서 으로의 전환을 의미합니다. Qubit의 최종 상태가 과 의 중첩이기 때문에, Hadamard Gate는 진정한 양자 연산을 나타냅니다.
두 Gate 모두 의 값을 변경하지만 는 변경하지 않는다는 점에 주목하세요. 다행히도 아래 그림을 보면 이 Gate들의 작용을 시각적으로 쉽게 이해할 수 있습니다.
상태를 얻은 후에는 다른 Gate를 적용하여 양자 위상을 변경할 수 있습니다. 예를 들어, Gate는 에 도의 위상을 추가하고, Gate는 에 도의 위상을 추가합니다. 위상을 도 줄이려면 S-dagger라고 읽으며 일반적으로 sdg로 표기하는 Gate를 적용할 수 있습니다. 마지막으로 와 Gate의 순서를 적용하는 Gate도 있습니다.
, , , , , Gate를 직접 실험하여 다양한 연산과 그것이 Qubit 상태에 미치는 영향을 익혀보세요. Circuit Composer를 방문하여 Circuit 위젯을 시작할 수 있습니다. Circuit Composer를 방문한 후 Qubit에 적용할 Gate를 선택하고 Qubit을 선택합니다(첫 번째 예제에서는 선택할 수 있는 유일한 Qubit인 Qubit 0을 선택하세요). 각 Gate에 따라 해당 상태가 어떻게 변하는지, 그리고 그 상태에 대한 설명을 살펴보세요. 또한 Qiskit에서 해당 양자 Circuit을 생성하는 코드도 제공됩니다.
양자 상태 설명, Pauli 연산자 및 기타 단일 Qubit Gate에 대해 더 알고 싶다면 John Watrous의 Basics of Quantum Information 강좌 중 Single System의 Quantum Information을 참고하세요.