자연철학2024. 2. 12. 09:35

 일반인에게는 조금 낯설 수도 있지만, 세기의 천재를 지칭할때, 물리학자들은 제임스 맥스웰(James Clerk Maxwell, 1831~1879)을 빼놓지 않는다. 그는 이 블로그에 있는 맥스웰의 도깨비를 창조해낸 인물이기도 하지만, 전자기학의 수학적 체계를 완성한 시조격으로 불리기도 한다.

 

 결론적으로 이야기하면 그는 전자기와 빛에 관한 이론 통합된 관점을 제공했다.

 

 맥스웰이 활동하던 시기는, 전기와 자기, 그리고 빛은 모두 서로 다른 존재였다. 자석으로 나침반을 만들었고, 특정 상황에서 발생하는 전기에 대해 연구하였고, 따로 광학이 연구되었지만 서로간의 그 상관관계가 있다는 것은 정확히 알지 못했다.  그런 와중에 맥스웰은 아래와 같은 방정식으로 전기와 자기의 성질에 대해 과거 학자들의 내용을 미적분으로된 방정식으로 정리했다. 패러데이가 실험만으로 전자기 유도 현상을 설명한 것과 다르게 이론 체계를 잡은 것이다.

 

 그리고 그 내용은 아래와 같다.

 

https://ko.wikipedia.org/wiki/%EC%A0%9C%EC%9E%84%EC%8A%A4_%ED%81%B4%EB%9F%AC%ED%81%AC_%EB%A7%A5%EC%8A%A4%EC%9B%B0

 

1. 어떤 전하를 둘러싼 닫힌 곡면을 통해 나가는 전기력선 수는 그 전하에 의해 결정된다(전기력, 쿨롱의 법칙, E는 전기장, 전하는 음극이나 양극 단독으로 존재해서 힘을 발휘한다)

2. 임의의 폐곡면을 나가는 자기 선속이 0이다(자기력, N극이나 S극은 독립해서 존재하지 않는다. 자기력은 나가면 다시 돌아온다. B는 자기장)

3. 자속 밀도의 시간에 따른 변화는 전기장을 생성한다(패러데이의 유도 법칙, E와 B의 관계)

4. 시간에 따라 변화하는 전기장과, 전류에 의해 자기장 변화를 나타낸다(from 앙페르의 법칙, 외르스테드)

 

 재미있는 것은 이 법칙들에 의해서 공간 속에서 전기와 자기가 서로를 유도하며 전파되는, 전자기파 파동방정식이 유도된다는 사실이다. 그리고 그 전자기파의 진행 속도는 '광속'과 같다. 이 모든 것을 단순한 방정식으로 정리하고 증명한 것이 맥스웰의 업적이다.

 

 그이전에 인류는 자석과, 전기, 빛이 서로 독립적으로 움직인다고 생각했는데, 맥스웰은 상기 4개의 방정식으로 정리한 후 이를 통해 전자기 파동의 파동방정식을 유도해내고, 그것이 서로 영향을 주는 얽혀있는 현상이라는 것을 입증하고 수학적으로 나타낸것이다. 그리고 이 결과에 의해 전자기파 파동이 존재하고, 그 속도는 광속인 것. 즉 빛이라는 것이 전자기파 현상이라는 것을 입증한 셈이다.

 

 그렇게 인류는 이 알 수 없는 현상들을 하나로 설명해낼 수 있게 되었고, 이는 모든 무선 통신과 전기/자기의 제어에 대한 예측이나 계산을 할 수 있게 된 것이다. 리처드 파인만은 이러한 맥스웰의 업적을 인류 문명의 발견 중에 가장 중요한 것 중의 하나로 꼽았다. 아인슈타인의 중력에 대한 해석과 함께, 인류사의 자연에 대한 통합 해석에 한 획을 그은 사건이라고 볼 수 있다.


리처드 파인만 (1964): "인류의 역사를 장기적으로 보면, 예를 들어 지금으로부터 10,000년 후로 볼 때 19세기의 가장 중요한 사건이 맥스웰의 전기역학의 법칙 발견으로 평가될 것이라는 데는 의심의 여지가 없다. 미국 남북 전쟁은 같은 10년 동안 일어난 맥스웰의 중요한 과학적 사건과 비교할 때 변방의 무의미한 사건으로 변할 것이다.", 인용 : https://ko.wikipedia.org/wiki/%EC%A0%84%EA%B8%B0%EC%99%80_%EC%9E%90%EA%B8%B0%EC%97%90_%EA%B4%80%ED%95%9C_%EB%85%BC%EB%AC%B8%EC%A7%91


 

아래는 관련해서 김갑진 교수의 설명을 담은 youtube영상이다. 그의 업적을 살펴보자.

https://www.youtube.com/watch?v=OTF-oP7io_M&t=710s

 

반응형
Posted by 작동미학
양자컴퓨터2024. 1. 20. 18:33

 처음에 양자 컴퓨터를 상상하면 지금의 컴퓨터보다 훨씬 나은, 대체되는 무엇인가를 상상하게 된다. 다른 운영체제가 설치되고 작동방식도 완전히 다른, 새로 사야하는 컴퓨터 말이다. 그리고 이때 또다른 헷갈리는 말은 qubit이다. 중첩을 설명하려고 나온 이 qubit은 정작 일반 엔지니어들이 이 양자 컴퓨터의 실제를 이해하는 것을 처음에는 방해한다고 생각한다.

 

  그런데 실제 양자 컴퓨터는 아래 그림처럼 상상해볼 수 있다. 여기서 핵심은 오른쪽 컴퓨터와 모니터는 현대의 PC 그대로이고 왼쪽의 양자를 구성 및 관측하는 usb로 연결된 보조 기기가 달려 있는 모습이 실제 형상이라는 점이다. 즉 양자 컴퓨터는 기존의 PC가 완전히 바뀌는 것이 아니라, 단순히 기존 PC에 양자관측 장치를 붙인 모습이다.

 그리고 그러면 왜 그런 부가 장치가 이 PC를 양자 컴퓨터라는 존재로 만들어줄까?

양자 중첩/얽힘을 관측하는 기기가 usb로 연결된 컴퓨터

 

 예를 들면 어떤 '공(ball)'을 특정 각도와 힘으로 던져서, 어떤 분자들이 가득한 대기 상태를 지나 착지하는 지점을 계산하는 작업이 필요하다고 하자. 그런데 그 계산이 뜻하지 않게, 매우 엄밀하게 대기의 모든 분자를 고려해야 한다면 또 어떨까? 이런 경우는 말 그대로 그 계산에 지나치게 많은 시간이 든다. 대기중에 존재할 10의 수십 제곱쯤 되는 분자들을 하나하나 계산에 포함해야 한다면 말이다. 그러면 어떤 우회 방법이 있는가? 조금 무리해보일지라도, 실제로 그러한 환경을 정확히 실제로 구성해서 관측해서 사용하는 방법이 있다. 계산을 하지 않고 계산 값을 자연으로부터 직접 훔치는 방법이다. 물론 매우 정확하게 대기 상태를 조성하고, 정확한 방향으로 정확한 힘으로 던져서 정확하게 측정해야 하는 말도 안되는 난해함이 있겠지만, 그것만 해결하면, 대기중에 존재할 그 모든 분자상태를 고려한 계산을 하려면 걸릴 수년의 시간보다, 공을 던져서 떨어지는 정도의 시간밖에 소요되지 않는다.

 

 그리고 이는 정확히 양자 컴퓨터의 원리나 어려움과 비교되어 설명될 수 있다. 양자 컴퓨터는 양자적인 현상을 직접 실제와 같이 구성하고 관측하는 방법에 기초한다. 어마어마한 계산이 필요한 일을 자연을 직접 관측해서 해결하는 것이다. 이 아이디어는 맨 처음 리처드 파인만 교수에 의해 제안되었다고 알려져있다. 양자들이 너무 많이 얽혀 있는 경우는 계산에 너무 오래 걸리니까 계산을 하지 말고, 직접 해버리면 되잖는가?

공을 던져 착지점을 알아내는 장치가 부착된 컴퓨터

 

  그런데 이점은 놀랍지 않은가? 엄청난 계산이 필요한 작업도 자연은 금방 해낸다는 점이다. 사실은 고전 컴퓨터도 자연의 원리를 해킹한 것과 같다. 전기적인 신호의 원리를 활용하여, 즉 트랜지스터라는 전자적 스위치를 확장하여 입력과 출력을 제어하고, 그것들에 규칙을 설정하여 현대의 컴퓨터는 어떤 계산도 할 수 있도록 구성되어 있다. 그런데 이 전기/전자 원리에 의한 현대의 디지털 컴퓨터의 한계는 어떤 특정한 계산을 해내려면 너무나 오랜 시간이 걸리도록 반복하는 작업이 필요하다는 한계가 있다.

 

 그러면 아예 자연이 하는 복잡한 계산인 양자의 계산력을 훔쳐오면 어떨까? 물론 그 계산이 우리가 원하는 모든 계산은 아니지만, 특정한 상황에서 그 값을 써먹을 수 있다면 어떨까? 그 계산만이라도 가속할 수 있지 않겠는가?

 

 바로 그런 상상이 양자 컴퓨터를 상정하게 만들었다. 그러면 대체 무엇을 자연에서 관측하는 것이고, 어떤 계산을 빠르게 할 수 있는 것일까? 여기서는 이미 양자 컴퓨터가 기존의 PC에다가 다량의 양자 구성/관측 장치를 연결하는 것이라고 밝혀두었기 때문에 이 양자 구성/관측 장치에 대해서 살펴보자.

 

1. 양자 구성/관측 장치가 하는 일

 

 이 장치를 설명하는 핵심은 양자 중첩과 얽힘이다. 이 부분의 깊은 영역은 아래 section에서 다루도록 해보자.

https://infoengineer.tistory.com/3

 

이야기로 풀어보는 영자컴퓨터를 위한 양자역학 - 두번째 / 중첩 (Superposition)

자 이제부터 빛을 가지고 풀어보는 양자와 연관된 개념들을 파헤쳐보자. 중첩(super position)의 개념이다. 양자 역학의 다양한 이론들을 이해하기 위해서는 특정 실험의 결과와 이에 대한 해석을

infoengineer.tistory.com

 

 양자는 미시적인 소재는 무엇이든 가능하다. 전자/양성자/원자/광자/.. 무엇이든 양자역학적으로 작동하면 그래서 양자역학의 구성/관측 장치로 만들어볼 수 있다.

 

 즉, 파동의 형태로 존재하는 이 입자들은 관측되기 전에는 확률로 존재하다가, 관측되면 확정되는 과정을 거치는데, 이 입자들이 얽혀있는 특정한 상태가 되면, 이 수많은 입자들이 한꺼번에 확정된다. 이를 테면 양자 100개를 얽히게 어떤 특정 관계로 만든 다음에 관측하면, 단 1 cycle에 그 모든 양자들의 상태가 확정된다.

 이 각 양자를 qubit이라고 부르는데, 어떤 관계를 구성(양자 회로 구성)한 후에 몇번을 반복해서 관측해보면, 이 전체 상태가 가지는 대략의 확률 분포를 알 수 있다. 즉 대략 결과값을 알 수 있다.

 

 그리고 이 "확률 분포"는 어떤 복잡한 계산을 하는 힌트가 된다. 그 높은 확률을 따라가면서 다음 단계를 진행하다보면, 수만년이 걸릴 계산이 몇 초로 줄어들 수 있다는 것이 이 양자 구성/관측 장치의 응용 핵심이다.

 

 그래서 양자 컴퓨터는 대략 이런 과정을 거쳐서 계산을 완료할 수 있다.

 

 A. 다량의 양자를 가지고 어떤 관계를 구성한다(양자 회로 구성).

 B. A를 반복해서 만들고 관측을 원하는 만큼 반복해서, 확률 분포를 구한다. 기본적으로 qubit이 많고 오차가 클 수록 더 많이 반복해서 정확한 확률 분포를 구한다.

 C. 그 확률에 따라 다음 연산을 구성하고, 다시 A로 돌아간다.

 D. 중간중간 그 확률을 따라간 결과가 맞는지 확인하다가 답이 맞으면 멈춘다.

 

 따라서 양자 컴퓨터는 모든 종류의 계산을 빨리하지 못한다. 흔히 이야기하는 범용 컴퓨터가 아니다. 이 양자 회로의 관측 값의 확률 분포로 가속할 수 있는 계산만 가속할 수 있고, 그런 계산이 아직 많이 발견된 것은 아니다. 몇가지 이 고속 계산화 가능한 분야의 몇개의 알고리즘이 알려져 있고, 가장 유명한 것이 바로 피터 쇼어 알고리즘, 즉 소인수 분해 알고리즘이다.

 

2. 소인수 분해 알고리즘은 어떤 것인가?

 

 이 소인수 분해를 양자 컴퓨터로 고속화 하려면, 먼저 소인수 분해 과정을 양자 컴퓨터에 맞는 것으로 바꾸고, 그 분해 과정 중 특정 계산을 위해 양자 구성/관측을 해야한다.

 

 이 소인수 분해 알고리즘에 대한 설명은 아래 영상에서,

https://www.youtube.com/watch?v=gjp9301in0U

 이 알고리즘을 양자 컴퓨터로 회로화하여 구하는 것은 이 아래 영상에서 참조해볼 수 있다.

https://www.youtube.com/watch?v=qV3k-bQgmK0

 

이 알고리즘은 이해하기 까다롭지만, 결론은 그렇다. 양자 회로(양자를 얽힘 상태로 특정 관계를 갖게 구성)를 만들고 그 관측을 여러번 해서 나오는 확률 값들로 어떤 계산을 가속할 수 있다는 점이다. 그리고 어떤 회로 구성으로 어떤 계산을 가속할지는 지금도 계속 연구하고 있다. 아직 응용 분야는 적다. 탐색/최적화/소인수분해/양자시뮬레이션 등이 알려져있다.

 

3. 양자 컴퓨터는 어떤 방식으로 만들어지는가?

 

 양자는 그야말로, 양자 하나씩을 다뤄야 하니 기술적인 난이도는 엄청나다. 외부와 차단시켜 결잃음(간섭이나 관측)을 최종 순간까지 막아야 하기 때문에, 대부분의 방식에서 절대온도 0도 가까운 냉각이나 진공 등의 이슈가 나온다. 회로를 구성하기 위해서 양자 하나하나를 제어하는 것도, 그리고 하나하나 관측하는 것도 쉽지가 않다. 광자는 상온에서도 다룰 수가 있지만 도대체 광자 하나를 측정한다는게 너무 어려운게 현실이다.

 

 이 부분에 대한 이해는 아래 영상을 추천해본다.

https://www.youtube.com/watch?v=Gem0N1JEm9k

 

실제로 양자 컴퓨터는 이미 이러한 회로 구성과 관측 들이 모두 클라우드 API로 제공되고, 에뮬레이터도 같이 제공된다. 에뮬레이터는 근사 확률값을 조금 느려도 계산해주는 역할을 한다. 실제 양자 컴퓨터가 작동한다고 하면 수천/수만개의 큐빗을 구성해서 우리는 단 한번의 싸이클로 그 값을 관측할 수 있다. 그렇게 다수 관측한 값을 가지고 특정 계산을 빠르게 하는 셈이다.

 

위 영상들이 일반인도 짧은 시간안에 양자 컴퓨터를 개괄할 수 있는 한국어로 된 좋은 내용이라고 생각되어 정리해본다.

 

반응형
Posted by 작동미학
머신러닝AI2024. 1. 13. 16:49

여러가지 다양한 오픈소스 모델이 쏟아지고 다양한 구동방법이 나오는데, 대부분은 HuggingFace를 통해 배포되고 있다.

 

이에 최근에 좋은 성능을 보인다고 알려진 SOLAR 10.7B 한글 튜닝 모델인 megastudy SOLAR 10.7B 모델을 구동해보자.

SOLAR 10.7B는 24GB이상의 GPU메모리에서 가동이 가능한 점은 참고가 필요하다.

 

여기서는 다양한 LLM을 연결해서 실행할 수 있는 langchain 프로젝트의 도움을 받는다.

 

$ conda create -n solar10.7b python=3.11

$ conda activate solar10.7b

$ pip install langchain langchain_community huggingface_hub transformers sentencepiece torch datasets

 

1. HuggingFace 가입 및 access token받기

 

우선 huggingface와 langchain으로 연계시키려면 access token이 필요한데, 가입 후 발급받으면 된다.

 

https://huggingface.co/settings/tokens

 

Hugging Face – The AI community building the future.

Forgot your password? SSO is available for companies

huggingface.co

 

여기서 받은 토큰을 아래와 같이 환경변수에 추가한다.

 

$ export HUGGINGFACEHUB_API_TOKEN="발급받은huggingface토큰"

여기서는 아래 모델을 사용해보자. 자동으로 모델을 다운로드 받아 실행하므로 langchain이 지원하는 대부분의 모델을 실행해 볼 수 있다.

 

https://huggingface.co/megastudy/M-SOLAR-10.7B-v1.3

 

2. LangChain을 통해 HuggingFace 모델을 실행해보자.

 

아래와 같이 실행한다.

 

$ cat > testlangchain.py

 

from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate
from langchain_community.llms import HuggingFacePipeline

# HuggingFace의 model id를 삽입한다.
#model_id = 'mncai/mistral-7b-v5'
#model_id = 'maywell/Mistral-ko-7B-v0.1'
model_id = 'megastudy/M-SOLAR-10.7B-v1.3'


# HuggingFacePipeline object
llm = HuggingFacePipeline.from_model_id(
    model_id=model_id, 
    device=0,               # -1: CPU(default), GPU존재하는 경우는 0번이상(CUDA Device #번호)
    task="text-generation", # 텍스트 생성
    model_kwargs={"temperature": 0.1, 
                  "max_length": 128},
)

# template
template = """질문: {question}

답변: """

prompt = PromptTemplate.from_template(template)
llm_chain = LLMChain(prompt=prompt, llm=llm)

question = "서울에서 제일 유명한 산이 어디야?"
print(llm_chain.run(question=question))

 

아래와 같이 실행하면 모델을 local로 다운로드 받아 잘 구동하는 것을 알 수 있다.

 

$ python testlangchain.py

...
  warnings.warn(
tokenizer_config.json: 100%|███████████████████████████████████████████████████████████████████████| 1.46k/1.46k [00:00<00:00, 4.00MB/s]
tokenizer.model: 100%|███████████████████████████████████████████████████████████████████████████████| 493k/493k [00:00<00:00, 27.0MB/s]
special_tokens_map.json: 100%|█████████████████████████████████████████████████████████████████████████| 551/551 [00:00<00:00, 1.50MB/s]
config.json: 100%|█████████████████████████████████████████████████████████████████████████████████████| 720/720 [00:00<00:00, 1.81MB/s]
model.safetensors.index.json: 100%|█████████████████████████████████████████████████████████████████| 35.8k/35.8k [00:00<00:00, 182kB/s]
model-00001-of-00005.safetensors: 100%|██████████████████████████

..

서울에서 가장 유명한 산은 북한산입니다. 북한산은 서울 북쪽에 위치한 아름다운 산으로 많은 사람들이 등산하고 휴식을 취하는 곳입니다.

 

기타로 "IT개발팀에 새로 팀장이 되었는데, 팀원들을 북돋워줄만한 연설문을 써줘." 라고 질문하고 max_length를 2048로 하면,

"팀장 선임을 축하합니다! 저희 팀은 팀원들의 헌신과 노력으로 성공을 거두어 왔습니다. 저는 저희 팀의 새로운 팀장으로서 저희 팀원들의 헌신과 노력에 감사드리며, 저희 팀의 미래를 위해 함께 노력하겠습니다. 저희 팀은 ..." 라고 답변한다.

 

또한 llangchain은 openai API를 동일한 방식으로 연계해서도 사용할 수 있어서 다양하게 활용이 가능하다. GPU 메모리가 부족하다면 모델을 바꾸거나(주석의 #model_id = 'mncai/mistral-7b-v5' 참조), HuggingfacePipeline변수내 device=-1로 변경(CPU로 실행)하여 전환하여 실행해서 실험해볼 수 있다.

---------------------------------------------------------------------------------------------------

# HuggingFace의 model id를 삽입한다.
model_id = 'mncai/mistral-7b-v5'
#model_id = 'megastudy/M-SOLAR-10.7B-v1.3'


# HuggingFacePipeline object
llm = HuggingFacePipeline.from_model_id(
    model_id=model_id, 
    device=-1,               # -1: CPU(default), GPU존재하는 경우는 0번이상(CUDA Device #번호)
    task="text-generation", # 텍스트 생성
    model_kwargs={"temperature": 0.1, 
                  "max_length": 128},
)

---------------------------------------------------------------------------------------------------

반응형
Posted by 작동미학