양자컴퓨터2020. 1. 5. 23:29

양자 컴퓨터에 대해서 여러가지 이야기를 해왔지만 실제 코딩은 어떤 모습일까? 나와있기는 한 것일까?

 

 물론 아직 성숙되지는 않았으나 전편 글들에서 밝혔듯이 일반 컴퓨터의 코딩이 결국에는 논리 게이트(공대 학부생때 공부하던 그 AND, OR 회로)로 환원되듯이 양자 컴퓨터도 맨 처음의 시작은 이 게이트(Gate)들의 코딩이다. 아마 나중에는 library들이 나올테지만, 지금 여기서의 확인은 Gate들의 조합 수준이다. 어떻게 보면 가장 직관적이기도 하다.

(이것으로 쇼어 알고리즘이나 그로버 알고리즘을 직접 구현해야 한다.)

 

 그러면 IBM이 양자 컴퓨터 API/SDK를 제공하고 있는 것(2017년에 공개)을 살펴보자. 아래가 그 개괄하는 URL이다. 전체적인 모습만 간단히 소개해보자.

 

https://developer.ibm.com/dwblog/2017/quantum-computing-api-sdk-david-lubensky/

 

Quantum computing gets an API and SDK - The developerWorks Blog

Explore quantum computing with our new API and SDK available for IBM's Quantum Experience. Use python scripts to access the power of quantum computing!

developer.ibm.com

아래 커뮤니티에 들어가서 가입하면 실제로 문서를 보고(Gates Glossary), 그래픽 환경의 회로 구성도 하면서(Circuit Composer), 최근 많이 활용되는 웹기반 python실행 환경인 Jupyter Notebook기반으로 예제 코딩(Qiskit Notebook)을 실행해볼 수 있다. 

 

https://quantumexperience.ng.bluemix.net/qstage/#/community

 

IBM Q Experience

Accelerate your research and applications with the next generation of the leading quantum cloud services and software platform.

quantum-computing.ibm.com

차례차례 스크린샷으로 설명해보자.

 

이곳에 가입 후 로긴해서보면 첫 화면에서는 오른쪽에 실제 on-line된 양자컴퓨터의 목록이 뜬다. 이것저것 실제 작업이 할당되어 테스트되고 있음을 볼 수 있다. 15 qubit짜리도 보인다.

 

왼쪽의 세부메뉴나 링크(Circuit Composer의 링크를 통해서도 들어갈 수 있다)를 통해 Gate Glossary 문서를 살펴보자. 양자 컴퓨팅의 연산 게이트는 AND, OR, NOT 같은 것들이 아니라 H, CX, Id, U1, U2, U3, 같은 것들이 존재한다(양자 상태 변환이 단순 bit연산보다는 더 다양하다). 이것들은 양자 상태를 반전하거나 이동하는 등 다양한 것들이겠다. 스크린샷을 한번 보자.

Quantum Gates Glossary(IBM)

오른쪽에는 Gate의 리스크가 나오고 왼쪽에는 각 게이트별 설명이 나온다. H Gate 는 상태를 절반정도 반전시켜주는(90도?)  역할을 한다. CX Gate는 아예 반전을 시킨다.

 

이런 게이트 들을 사용해 Circuit Composer에서는 GUI로 회로를 구성해서 실행해볼 수 있다. 간단하게 상태만 바꿔주는 엉터리 게이트로 회로를 구성해서(Gate를 끌어당겨 하단의 qubit들의 경로에 놓아두며 된다. 그리고 측정값을 얻기 위해 qubit 3개의 값을 c5로 내려놓는다.) Save한 후 상단 오른쪽의 Run을 눌러보자.

 그러면 화면 맨 하단에 작업이 할당되었다는 메시지를 볼 수 있고 수초 이후에 Results 칸 아래에 결과가 나온다. 각기 결과를 눌러보면 아래의 화면과 같이 나온다. 이 실행 결과는 15 qubit짜리 양자컴퓨터가 할당되어 1024번을 수행하고 난 후 각 qubit상태별 조합의 빈도수(1024번중 각 케이스가 얼마인지의 비율 형태로)를 보여준다. 해당 State 케이스 숫자(00000~00111)의 맨 오른쪽이 0번 qubit이므로(역순으로 배치된다)  00000, 00001000001이 거의 절반씩 나왔다. 처음의 q[0]의 상태가 50%쯤 반전되었고, 나머지 q[1], q[2]는 사실 큰 변동이 없으니 맞는 결과다. (00000형태로 qubit이 5개인 것으로 나왔는데 뒤 3가지 qubit만  본 것이다. qubit 3개만 할당했는데 왜 5개로 배열되었는지는 잘 모르겠다. 여하튼 무시하면 결과는 맞다.)

 

 

 그 다음으로는 실제 코딩 부분을 들어가보자. 제공되는 Getting Started샘플을 통해 위 GUI를 통한 회로 구성을 실제 Python Code로 비슷하게 진행할 수 있다.

 큐빗을 3개 할당하고 각 큐빗에 역시 게이트를 코딩으로 선언해주고 지속 진행한다(아래 사진, jupyter notebook이라는 웹기반의 python code를 실행하면서 살펴볼 수 있는 환경이다.)

Quantum API/Getting Started (IBM) - Initial Part

이후 중간과정은 생략해보고(진행 과정에서 실제 양자 컴퓨터를 할당하지 않고, 시뮬레이션 값 등을 얻을 수 있게 되어 있다), 이렇게 구성한 회로를 실제 Quantum Computer Device(Device)를 할당하여 결과를 얻자 (여기서는 시뮬레이터(Simulator) 값과 같이 나오도록 코드가 구성되어 있는 점에는 유의하자)

 

Quantum API/Getting Started (IBM) - Result Check Part

결과값은 상기 회로를 여러번 수행하여 각 qubit별 관측된 조합의 확률이다. 대략 디폴트가 1024번을 수행하도록 되어 있는데, qubit 3개가 000인 경우가 40.6%였고 111인 경우가 39.4%였다는 이야기가 된다. 나머지는 각기 낮은 빈도수로 나타났다.

 

결국 IBM이 제공하는 것은 Quantum Gate들을 배열하고 실제 초기상태에서 확률붕괴하여 관측된 값의 실제를 얻을 수 있게 해주는 셈이다.

 

생각보다 직관적이나. 이를 실제 응용하려면 앞서 밝힌 쇼어나 그로버의 알고리즘을 이해하고 조금더 복잡한 구성을 해야겠다.

반응형
Posted by 작동미학