본문으로 건너뛰기
  1. Quanta/

[Quantum for Developers] IBM Q Experience

·
Quantum Computing Physics
목차
Quantum for Developers - 이 글은 시리즈의 일부입니다.
부분 3: 이 글

Overview
#

이번문서에서는 직접 양자 게이트들을 GUI환경에서 실습해볼수있는 환경인 IBM Q ExperienceCircuit Composer와 양자프로그래밍에 필요한 SDK인 Qiskit에 대해 간단히 알아보도록 하겠습니다.

각 gate에 대해서는 알고있다는 것을 전제로 진행하겠습니다.

[Quantum for Developers] 양자 게이트

IBM Q Experience
#

IBM에서는 일반 유저들이 양자컴퓨팅을 실제로 사용해볼수있게 양자컴퓨터 몇대를 클라우드로 오픈해두고 있습니다.

IBM Q Experience

가입하고, 메뉴를 보시면

image

Tools에 Circuit ComposerQiskit Notebooks라고 쓰인게 보이실 겁니다. 각 도구들로 프로그래밍을 할 수 있습니다.

그리고 오른쪽 화면을 보시면

image

유저가 사용할 수 있는 양자컴퓨터의 수와 양자컴퓨터들의 사용현황을 보여주고 있습니다.

우선 Circuit Composer로!

Circuit Composer
#

먼저 새로운 Circuit을 생성합니다.

image

새로 생성하게되면 다음과 같이 줄여러개와 네모들이 보이게 됩니다.

image

각 컴포넌트를 소개하자면 :

  • 네모 : Gate
  • 줄 : q는 Qubit, c는 Classical bit

Qubit가 너무 많으니 좀 줄여봅시다.

왼쪽 탭의 “</>“를 눌러주세요.

image

이게 바로 옆그림의 소스입니다.

5개에서 2개씩으로 줄여줍시다.

image

바꾸자마자 바로 변경되었습니다.

그리고 왼쪽 탭의 차트 부분을 눌러보면 다음과 같이 00만 나오게 됩니다. Qubit의 초기상태가 0이기 때문입니다.

image

그럼 이제 H 게이트를 추가하고 CNOT 게이트도 추가해봅시다.

image

두개의 Qubit가 서로 얽혀진 것을 확인할 수 있습니다.

이렇게 실시간으로 시뮬레이팅된 결과를 눈으로 직접 확인해볼 수 있습니다.

마지막으로 measure 아이콘을 끌어서 Qubit의 관찰값을 Classical bit에 옮기는 작업을 해줍니다.

image

그럼 양자컴퓨터에 실제로 돌려봅시다.

image

이름을 지정해주고, 저장한 뒤에 RUN을 눌러줍니다.

image

어떤 양자컴퓨터에 돌릴건지, 얼마나 shot을 쏠건지를 정하라고 나옵니다.

shot이란?
양자는 중첩상태이고 관찰을 통해 하나의 결과만 받게 되는데 그 결과는 확률에 의해 나오게 됩니다.
그럼 더 많이 관찰하게 되면 확률적으로 정확도가 높아지겠죠.

현재는 양자컴퓨터의 자원이 부족하기 때문에 최대한 큐가 없는곳으로 작업을 넣어둔 뒤에 기다려 줍시다.

image

Queue상태에 들어가있다고 상태가 뜨고 클릭해보면 상세정보들을 확인할 수 있습니다.

image

Complete되고 나면 다음과 같이 결과를 확인할 수 있습니다.

image

분명 00과 11만 나와야 하는데 01과 10도 일부 나온것을 확인할 수 있습니다. 이게 양자컴퓨터의 에러율인것 같습니다.

Qiskit Notebooks
#

다음은 코딩으로 짜는 방법입니다. IBM Q Expeerience에서 제공해주는 Qiskit Notebooks를 사용해도 되고, 그냥 아무데서나 하셔도 됩니다.

image

Qiskit은 IBM의 양자 컴퓨터를 pulse, circuit레벨에서 다룰 수 있게 하는 오픈소스 프레임워크입니다.

Qiskit Github

Qiskit은 나중에 따로 포스팅으로 소개드리도록 하겠습니다.

#IBMQ의 account정보 저장
from qiskit import IBMQ

MY_API_TOKEN='e98185~~~abx'
IBMQ.save_account(MY_API_TOKEN,overwrite=True)

토큰 정보는 이곳에서

image

image

# 필요한 라이브러리 import
from qiskit import QuantumCircuit,QuantumRegister,ClassicalRegister, execute, Aer, IBMQ
from qiskit.compiler import transpile, assemble
from qiskit.tools.jupyter import *
from qiskit.visualization import *
## 2 Qubit, 2 Classical bit 정의
q = QuantumRegister(2, 'q')
c = ClassicalRegister(2, 'c')
circuit = QuantumCircuit(q, c)

## 0번 Qubit에 H게이트, 0번과 1번을 CNOT
circuit.h(q[0])
circuit.cx(q[0], q[1])

## Qubit을 Classical bit에 매핑
circuit.measure(q, c)

## 회로 그리기
%matplotlib inline
circuit.draw(output="mpl")

image

## 1. 시뮬레이터로 테스트
simulator = Aer.get_backend('qasm_simulator')
job = execute(circuit, backend=simulator, shots=1024)
result = job.result()

## 결과를 text와 차트로 출력
counts = result.get_counts(circuit)
print("Result:",counts)
from qiskit.tools.visualization import plot_histogram
plot_histogram(counts)

image

# 2. IBM Q 장비로 돌려보기
# 제일안쓰는 장비찾기
from qiskit.providers.ibmq import least_busy
IBMQ.load_accounts()
lb_device = least_busy(IBMQ.backends())

# 실행
job = execute(circuit, backend=lb_device, shots=1024)
from qiskit.tools.monitor import job_monitor
job_monitor(job)
result = job.result()

# 결과를 텍스트와 차트로 출력
counts = result.get_counts(circuit)
print("Result:",counts)
from qiskit.tools.visualization import plot_histogram
plot_histogram(counts)

image


Quantum for Developers - 이 글은 시리즈의 일부입니다.
부분 3: 이 글

관련 글

[Quantum for Developers] 양자 게이트
Quantum Computing Physics
Overview # 지난 글에서 양자의 특징을 배웠으니 이제 그걸가지고 유의미한 결과를 만들어내려면 기존 컴퓨터에서 사용하던 논리게이트와 유사한 양자게이트를 사용할 줄 알아야 합니다.
[Quantum for Developers] Quantum의 특징
Quantum Computing Physics
Overview # 전세계적으로 양자컴퓨터에 대한 관심이 점점 높아지고 있습니다. 저도 미래 먹거리로써 관심있게 보고있었는데 최근에 공부할 일이 생겨서 조금 살펴보게 되었습니다.
Content Trust in Docker(2) : DCT with Docker Hub
Docker TUF Notary Security
Overview # 네트워크로 연결된 시스템 사이의 데이터 송수신에서 가장 중요하게 여기는 점은 **“신뢰”**입니다. 이전에 Docker Notary 서비스에 대한 것을 포스팅한 적이 있습니다.