양자컴퓨터2020. 3. 9. 23:42

조금전(20년 3월) Tensorflow Quantum이 발표되었다. IBM나 Azure, Amazon이 여러가지 공개를 하고 있던 터라서 Google쪽도 유사 활동을 하지 않을까 싶었는데, Tensorflow Quantum이라는 S/W 라이브러리 배포 형태로 발표를 했다.

 

Tensorflow Quantum이라는 이름으로 Tensorflow와 같이 쓸 수 있는 library와, 타사에서 제공하는 양자 회로를 제작하고 실행할 수 있는 Cirq라는 오픈소스 프로젝트를 동시에 소개하고 있는게 주요 내용이다.

 

우선 먼저 Cirq를 소개해보자. 문건 상으로는 아직 정식 Google Product이 아니라고 소개하고 있고 버전도 알파이다. 프로젝트 자체는 별로 특이할 것 없이 양자 회로를 코딩하고 시뮬레이션할 수 있는 Python 라이브러리다. 구글이 만드는 Bristlecone(72 qubit, 기존 54 qubit Sycamore의 다음버전인가보다)이라는 양자컴퓨터 상에서 향후에 작동을 확인할 수 있다고 이야기하고 있다. Tensorflow 를 CPU/GPU/TPU에서 돌릴 수 있듯이 Cirq는 이 Bristlecone이라는 장치에서 구동할 수 있다는 이야기다. 물론 예제 코딩을 보면 PC에서 시뮬레이션 기능도 포함되어 있다.

 

아래 해당 github( https://github.com/quantumlib/Cirq )을 방문해보면 앞서 IBM/Azure에서 소개해한 양자게이트 S/W Framework들과 다르지 않다는 것을 알 수 있다. 큐빗을 선언하고 회로를 구성하고 시뮬레이션하면 결과를 알려준다. 회로를 프린트하는 기능도 있다. (스크린샷 맨 하단) 이 양자 게이트에 대해서 궁금하신 분들은 IBM 개발툴 설명 ( https://infoengineer.tistory.com/22 ) 을 읽어보기를 추천한다. 각 양자 게이트의 세부와 함께 제일 잘 설명되어 있다.

 

나중에는 simulator가 아니라, bristlecone(72qubit quantum computer)을 통해 동작하게 되겠다. 구글이 공개한 사진이라도 봐두자.

 

 

 그러면 Tensorflow Quantum은 무엇일까? 구글이 이야기하는 NISQ(Noisy Intermediate-Scale Quantum)라는 것은, 어차피 양자 컴퓨터의 개별 qubit이 에러때문에 과거에 기대했던 엄청난 고성능을 기대하기 어려운 상황에 대한 대안이다. 즉 이러한 에러(결잃음,decoherence)에도 불구하고 이를 활용할 수 있도록 구성해야 한다고 주장하고 있다. 이것을 NISQ Computing era라고 한다. 이를 위해서 NISQ Computing을 머신러닝과 접목할 수 있게 만든 것이 Tensorflow Quantum이다(머신러닝 외에도 몇가지 추가 응용 분야가 나열되어 있긴 하다). 물론 GPU/TPU도 같이 써야 한다. 그러니 Hybrid quantum classical machine learning library라고 설명한다.

 

 

 NISQ 상황하에서 이런 S/W Framework을 계속 발전시켜야 실제 양자 컴퓨터의 혜택을 극대화할 수 있다는 말하고 있다. 아래 비디오의 6분 부터이다.

https://www.youtube.com/watch?v=16ZfkPRVf2w

양자컴퓨터가 지향하는 바는 오류없는(결잃음) 양자 컴퓨터인데, 아직은 멀었고 이런 결잃음이 약간 있는 양자 컴퓨터로도 뭔가 할 수 있지 않느냐에 대한 가이드로 이 Cirq와 Tensorflow Quantum을 내놓았다는 이야기다.

 

아래가 TensorFlow Quantum의 공식 페이지이고, Tensorflow Quantum이 이러한 NISQ시대(오류 보정없는 적당한 qubit 규모의 양자 컴퓨터)의 하이브리드 머신러닝 라이브러리임을 나타내고 있다.

 

 

동일 페이지 다른 화면의 NISQ 기반의 양자 머신러닝 개념을 설명한 페이지이다.

 

좀 아쉽지만 Tutorial상에 머신 러닝 예시들이 존재하는데 더 확인이 필요하다.

(MNIST 문제중에 3과 6만 발췌하여 저해상도로 만들어서 위 양자 하이브리드 머신러닝을 돌려주는 예시가 존재한다)

 

 일단 구글도 Tensorflow와 Cirq를 통해 양자컴퓨팅 관련 S/W Framework을 시작했다고 볼 수 있겠다. 타 사업자대비 조금 다른 점은 단순히 양자게이트에 의한 회로 뿐 아니라, 머신러닝을 결합해서 우선 시작했다는 점이겠다.

 

다만 양자컴퓨터와 머신러닝의 결합으로 정말 Noise가 존재하는 퀀텀 컴퓨터를 잘 활용할 수 있게 될지는 그 이론적인 배경이나, 실제 그러한 것들이 가능한지 좀더 지켜봐야하겠다. 사실은 IBM이 제공하는 양자컴퓨터 들도 이 노이즈 문제가 있다(error correction은 하지 않음, 대개 절대온도 0도 수준의 냉각과 셋팅 후 수십 마이크로 초가 지나면 노이즈가 심해지는 상태로 흔히들 이야기한다) 이러한 상황에서 좀더 이러한 양자컴퓨터의 가치를 끌어올리려는 노력이 아닌가 싶기도 하다.

 

 제시된 MNIST예제나 Tensorflow Quantum이 지향하는 바는 앞단에 데이터를 Quantum State Set(Quantum Data)으로 변환해서 집어넣은 후에, 후 단의 고전적인 머신러닝을 통해 Quantum State Set들이 Quantum Gate들을 통과한 후의 결과를 보정하는 듯한 구조로 되어 있는데, 실제로 이러한 앞부분이 얼마나 효과적으로 작동할 수 있게 개선할 수 있는지는 아직 필자로서는 이해가 부족하다.

Quantum hybrid Machine Learning 개념도 (Google AI Blog) / 그림만으로 보면 양자 회로의 출력값을 머신러닝을 통해 보정하도록 우리가 일반적으로 아는 머신러닝을 후단에 붙여서 학습시킨다

 

반응형
Posted by 작동미학
양자컴퓨터2020. 2. 1. 01:00

Microsoft Azure에 QDK(Quantum Development Kit) 서비스가 열렸다고 해서 오늘 잠깐 방문해보았다. 생각보다 상당히 자세하게 설명되어 있어서 깊게 보는 것은 무리지만(기존에 IBM 사례보다 더 자세하게 나온다) 전체 소개해보는 글을 써볼까 한다.

 

살펴보니 19년 11월 전후에 오픈을 한 것으로 추정된다.

 

azure.microsoft.com/ko-kr/services/quantum/ 로 들어가 보자. 얼리어답터를 모집중이다. 간단히 가입하고 필요사항을 입력하면 해볼 수 있다. 다만 여기서는 실제 구동을 해보지는 않는다. (설명 문서는 화면상의 Quantum Development Kit 시작하기를 선택해서 jump해 가입없이도 볼 수 있다.)

 

Azure Quantum 첫 페이지, 얼리어답터 되기 파란 버튼을 선택하자

 

 

친절하게도 Azure Quantum의 전체 아키텍쳐가 하단에 표시되어 있다.

Azure Quantum 스택

살펴보면 맨 아래 기반에는 MS도 만들지만 Honeywell이나 IONQ같은 회사들의 양자컴퓨터 장비를 쓴다는 것을 알 수 있다. 응용 분야로는 잘 알려진 Optimization/ML, 양자 시뮬레이션, 암호학 정도를 지정한다. 기존에 IBM의 개발Kit보다 훨씬더 상세한 것이 마음에 든다. IBM은 Qubit 회로를 만들어 관측하는데 초점을 두었다면 여기는 뭔가 더 자세하다. 기대가 된다.

 

QDK 시작하기라는 것을 선택하면 전체 문서를 볼 수 있는데(왼쪽에 문서 메뉴를 보자) 죽 따라가보면 전체의 내용을 알 수 있다. 여기서는 편의상 좀 왔다갔다 해보자. 역시 엔지니어는 어떻게 설치하는가부터가 궁금하다.

MS라고 하면 뭔가 Visual Studio를 깔아야 한다는 선입견이 있는데, 역시 보면 Q#이라는 언어에 대한 소개가 나온다. 그런데 MS가 최근에 많이 변했다. linux도 내장한다는 그 혁신대로, 무려 python을 지원한다. Q#으로 짜도, python에서 실행할 수 있게 제공한다. 그리고 그것을 제일 먼저 설명한다. 마음에 든다.

그러면 Q# 으로 된 가장 간단한 소스를 살펴보자. 아래 양자 난수 생성기 예제는 그냥 Qubit하나를 만들어 상태를 조절하고 중첩상태로 만든 후 관측한다. 0과 1중 하나가 random으로 관측되겠다. 해당 문건을 자세히 살펴보면 무슨 말인지 더 자세히 알 수 있다.

 여기서 중요한 것은 어떻게 선언하고 Qubit을 어떻게 연산시키고 관측하는지 형태를 보는 것이 중요하다. IBM 개발킷과 비교해보면 그렇게 크게 다르지는 않다. 아래 첫번째 소스를 보면 q = Qubit()으로 qubit하나를 할당하고 H(q)를 통해 qubit을 중첩상태로 만든 후 측정한다. 그리고 return한다.

 

Q#의 기본 코드 예시

 

그런데 찾다가 반가운 페이지를 찾았다. Grover 검색 알고리즘 구현이라니! 사실은 Qubit으로 회로를 만드는 것들은 이미 보아왔던 것이고 이를 응용으로 이어줄 예시가 나와있다. 이후 Katas라는 tutorial 페이지를 다시 소개하겠지만, 빠른 시작 안에는 Grover 검색 알고리즘 구현에 대한 간단한 예시가 알고리즘 설명과 함께 나와있다.

 

더 멋진 상세 Tutorial인 Quantum Katas라는게 있다. Grover 검색 알고리즘에 대한 상세한 예시와, BB84 프로토콜도 구현된 것이 있다. Shor 알고리즘에 대해서는 자신들이 가진 하드웨어로는 물리적 구현이 불가능하다고 표현하고 있고 물론 예시도 나오지 않는다. 다만 여러가지 재미있는 예시들이 많이 나와서 더 공부할만하다. 각각의 제목을 선택한 후 github페이지가 열리면 description에 있는 Run tutorial 링크를 각각 선택하면 Jupyter Notebook형태로 볼 수 있다.

 

Azure가 제공하는 개발킷 Tutorial인 Quantum Katas

 

Katas안에 있는 몇가지 페이지를 훑어 보자. 아래는 기본 코스로 Qubit을 생성하고 연산을 조금더 복잡하게 수행하는 Jupyter Notebook화면이다.

X(q), H(q), S(q), Rx, Ry.. 등의 다양한 상태 조절에 대한 함수들이 나온다. 이것은 기존의 IBM 개발킷과 유사하고, 해당 연산들에 대한 대략적인 부분은 해당 블로그 글을 참조하는게 좋다(IBM의 Gates Glossary가 더 쉽게 잘 설명되어 있다)

 

하단은 양자 순간 이동 제목으로 이동한 후 run tutorial을 했을때 나오는 설명이다. 일단 QAlice, QBob 두 Qubit을 얽히면서 시작한다. 사실 양자 컴퓨팅 개발 Kit에 왜 Quantum Teleportation이 등장하는지 약간 의아하긴 한데, 다른 글에서 살펴보기로 하자.

 

Grover 알고리즘도 Katas에서는 좀더 자세하게 다뤄진다.

 

Katas의 또다른 흥미로운 Tutorial은 BB84 protocol이다. 이게 또 왜 여기나오지? 싶은데 (양자컴퓨터와는 다른 주제다) 맨 처음 설명한 Azure Quantum Stack에서 설명한 모든 것들에 대한 개발 Kit을 제공하는 것으로 이해했다. 여하튼 이녀석도 반갑다. 자주 듣던 Alice와 Bob이 등장한다.

 

 

IBM 개발툴을 살펴보았을 때보다 훨씬 흥미로운 것은 단순히 양자 컴퓨터의 logic gate에 그치지 않고 수많은 응용코드가 같이 나오는 점이다. 하나하나 둘러보면 마치 기존에 어셈블리어만 구경하다가 C언어로 된 것을 처음 만나는 느낌처럼 실제 응용을 어떻게 하는지 공부해볼 수 있겠다.

 

끝내기 전에 혹시나 해서 찾아본 결과 AWS도 AWS Braket이라는 양자 컴퓨팅 서비스를 내놓았다('19년 12월에). 다만 여기도 preview 가입을 해야 공개한다. 개괄적인 설명 문서에는 IBM 개발툴 소개와 크게 차이가 없어 보인다. 이 부분은 허가를 받으면 나중에 다시 공유하기로 하자. 아래가 소개하는 URL이다. 

 

https://aws.amazon.com/ko/blogs/korea/amazon-braket-get-started-with-quantum-computing/

 

Amazon Braket – 양자 컴퓨팅 서비스 시작하기 | Amazon Web Services

10여년 전 만우절에 양자 컴퓨팅 클라우드에 관해 쓴적이 있습니다. 그런데, 거짓말 같은 이야기가 현실이 되어서 마침내 양자 알고리즘을 작성하여 실제 양자 컴퓨터에서 실행할 수 있는 기회가 생겼습니다. 오늘 발표할 주제는 바로 진짜 클라우드 기반 양자 컴퓨팅에 관련한 것입니다. Amazon Braket – 과학자, 연구원 및 개발자가 한 곳에서 여러가지 양자 하드웨어 제공 업체의 컴퓨터를 실험 할 […]

aws.amazon.com

그리고 잠깐 검색해본 결과로는 Google은 아직 공개하지 않았다. 지금까지 공개한 기준으로 IBM, MS Azure, Amazon AWS 중에 MS Azure가 가장 풍성하게 오픈한 셈이다. 공개된 페이지에 들어가 시범사용해보면 이구동성이로 이 분야가 초기이며 더 많은 참여자들이 연구하고 활용하여 개선해줄 것을 요구하고 있다. 확실히 제대로된 응용단계에 들기 위해서는 아직도 시간이 많이 필요해보이는 느낌이다.

반응형
Posted by 작동미학
양자컴퓨터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 작동미학