시뮬레이션가설2023. 7. 22. 11:09

 세상이 matrix인가에 대한 막연한 논의는 있지만, 그것을 심각하게 정립하기란 쉽지 않다. 왜냐하면 깨어날 수 있는 문제인지, 깨어나면 밖에 무엇이 있는지 알기 어렵기 때문이다. 게임상의 캐릭터는 깨어나서 밖으로 나갈 수도 없는게 오히려 더 일반적이기도 하다.

 

1) 지금까지 자연에 대한 관측으로 아래에 대한 내용이 확인되었다.

  a. 자연은 대칭과 보존의 법칙에 따라 과거와 현재 동일 법칙하에서 진행된다고 여겨진다.

  b. 그 정밀도와 일관성은 아직 인간의 관측 범위내에서 이상하다고 의심받지 않고 있다.

  c. 미시세계로 들어가면 이산성(discrete)이 확인되었다. 세상은 띄엄띄엄하며 bit로 처리된다.

 

2) 어떤 체계(우주)가 랜덤으로 창조된다면 어떤 모습이 일반적인가. 이를테면 우리가 만들어내는 게임들의 세상을 보면 대표적으로 이렇게 할 수 있다. 즉 1)의 세상에서 창조되는 새로운 시뮬레이션에 대한 이야기다

 

  a. 특별히 그렇게 의도하지 않으면 대칭/보존은 매우 낮은 확률로 나타나는 특성이 된다. 시간이 지나면서 랜덤으로 전개되는 것이 물리적인 제약이 없었을 때의 랜덤한 세상이다. 즉 지금 우리가 자연을 그대로 시뮬레이션하려면 할일이 너무나 많다. 엔트로피나 임의성을 들먹이지 않아도 수많은 만들어질 게임 중에 현실과 같은 것을 만든다는 것이 얼마나 도전적이라는 것을 알 수 있다.

  b. 그런데 이 과정에서 고려되어야 할 것이 이것을 고민하는 주체가 바로 현실에서의 인간이라는 점이다. 인간이 지능을 갖기 위해서는 그 기본 법칙이 갖춰져야 한다. 즉 시뮬레이션의 랜덤성을 평가함에 있어서, 그 안에 그것을 평가하는 주체가 성립하기 위해서는, 랜덤성의 범위가 자동으로 축소된다는 사실이다. 즉 사람이 생겨날 수 있을 정도의 시뮬레이션 체계가 존재해야만 그 안의 사람이 그 시뮬레이션의 특성에 대해 고민할 수 있다는 이야기다.

 c. 따라서 시뮬레이션의 임의성에 대한 고민은, 그것을 고민할 수 있는 존재가 나타날 수 있는 최소한의 시뮬레이션으로 좁혀진다. 이것은 중요한 고려사항이 된다. 만약에 우주 밖에서 시뮬레이션이 랜덤으로 선택되어 탄생되고 있다고 하더라도, 스스로가 시뮬레이션인지 고민하는 정보가 넘나드는 시뮬레이션은 상대적으로 아주 적은 수의 시뮬레이션에서만 발생하게 되기 때문이다.

 

3) 시뮬레이션 체계가 다수 존재할 수 있는가에 대한 문제

 

 a. 서로 영향이 없다고 믿어지고, 존재여부도 모호한  다른 시뮬레이션을 논의하는 것은 의미가 없지만, 가장 큰 논리는 unique함에 대한 거부감이다. 그리고 대칭과 보존이 만족되는 범위가 아직까지 어딘지에 대한 모호함이다.

 b. 다만 시뮬레이션에 대해 고민하고 해석하는 주체가 한 개인이므로, 실제로는 어떤 단위로 시뮬레이션된다고 해도 말이 된다. 나 외에 다른 모든 존재는 서로 다른 독립성 속에서 움직이지 않아야 되는 이유가 없다. 따라서 아이러니하게도 이러한 특수함이 성립되지 않는다고 애초에 가정하는 것이 더 보편성을 띌 수 있게 되고, 시뮬레이션을 바로 평가할 수 있다.

 

따라서

 

1) 시뮬레이션은 아래와 같은 범주에서 진행될 가능성이 있다.

   a. 모든 정보가 하나의 법칙을 추종하는 단일 체계로 움직이는 형태

   b. a같은 시뮬레이션들이 1개 이상 존재하여 각기 독립적인 체계로 움직이는 형태

   c. b같은 형태이면서 a들끼리 어떠한 약하고 제한적인 의존관계를 지니는 형태

   d. a/b/c가 각각 그 안에서 새로운 시뮬레이션을 만들어내는 종속관계를 나타내는 형태

 

2) 1)의 a)단위를 고려해볼때

  a. 해당 시뮬레이션이 지금처럼 대칭/보존/이산성 등에 작동할 경우가 매우 드물다고 판단할 수 있다. 해당 시뮬레이터의 생성이 의도적이거나(대표적으로는 자신의 원래 세상과 유사하게-그대로 혹은 가감하여- 창조되거나) 할 수 있겠지만 우선은 그렇다면 오히려 논의의 폭이 좁아지고, 그렇지 않다고 가정하고 여러가지를 판단하는 것이 중립적이어 보인다.

  b. 중요한 것은 그 안에 지적 존재가 나타나야만 이러한 시뮬레이션 가설을 검증할 수 있다는데 있다. 여러가지 임의성이나 확률에 대한 논의는 이렇게 시뮬레이션을 평가하는 존재가 선행해야 한다는 조건 때문에 보정이 필요하다.

 

 

가만히 고민해보면, 이러한 논의들의 현실적인 설명은, 우리가 만약에 지능이 나타날 수 있는 시뮬레이터를 만들어서 구동했을때의 상황이다. 인류가 만들 수많은 시뮬레이터 중에 지능이 나타날 수 있는 수준의 시뮬레이터가 언젠가는 탄생하게 될 것이고, 그 시뮬레이터 안에서 또 새로운 그 안에 지능이 있는 시뮬레이터가 탄생하는 과정이다. 영화 Inception같은 모습을 상상할 수 있겠다.

 

지속 이 관계들을 정립해나가보자

반응형
Posted by 작동미학
머신러닝AI2023. 7. 20. 00:53

이 글은 앞의 https://infoengineer.tistory.com/96 를 계승한다. 7월 19일 전격적으로 메타의 LLAMA v2가 공개되었고 azure, aws에도 같이 공개되었다. git 주소는 https://github.com/facebookresearch/llama 이다.

 

해당 git의 가이드를 따라가서 모델 신청을 하면( https://ai.meta.com/resources/models-and-libraries/llama-downloads/ ) 메일로 다운로드 링크가 몇시간 안에 날아온다. 해당 링크를 복사해두고 24시간 안에 다운받는다(5번 밖에 다운로드 안되니 주의를 하자)

 

그리고 주의할 것이, 해당 날아온 메일의 URL에 걸려있는 링크를 복사하면 안되고 반드시 순수 텍스트를 복사해두자. 붙여넣기 했을때 주소가 https://download... 로 시작해야 한다. 링크를 복사하면 https://l.facebook..이 복사되는데 이 주소로 처리를 했다가는 오류만 나고 다시 모델 다운로드 신청해서 작업해야 하니 주의한다.

 

여하튼 우리는 앞의 글에서 기초를 모두 닦아 두었으니(GPU/Anaconda 준비완료) 곧바로 다운로드 받아 시작하면 된다.

 

$ cd /work/llm  #아무 디렉토리나 llama 모델을 다운받을 수 있는 충분한 디스크가 있는 폴더로 간다

$ conda create -n llama2 python=3.9 -y

$ conda activate llama2

$ git clone https://github.com/facebookresearch/llama

$ cd llama

$ pip install -e .

Obtaining file:///work/llm/llama
  Preparing metadata (setup.py) ... done
Collecting torch (from llama==0.0.1)
  Using cached torch-2.0.1-cp39-cp39-manylinux1_x86_64.whl (619.9 MB)
Collecting fairscale (from llama==0.0.1)
  Using cached fairscale-0.4.13-py3-none-any.whl
Collecting fire (from llama==0.0.1)
  Using cached fire-0.5.0-py2.py3-none-any.whl
Collecting sentencepiece (from llama==0.0.1)
  Using cached sentencepiece-0.1.99-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB)
Collecting numpy>=1.22.0 (from fairscale->llama==0.0.1)
  Downloading numpy-1.25.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (17.7 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 17.7/17.7 MB 50.0 MB/s eta 0:00:00
Collecting filelock (from torch->llama==0.0.1)
  Using cached filelock-3.12.2-py3-none-any.whl (10 kB)
Collecting typing-extensions (from torch->llama==0.0.1)
  Downloading typing_extensions-4.7.1-py3-none-any.whl (33 kB)
Collecting sympy (from torch->llama==0.0.1)
  Using cached sympy-1.12-py3-none-any.whl (5.7 MB)
Collecting networkx (from torch->llama==0.0.1)
  Using cached networkx-3.1-py3-none-any.whl (2.1 MB)
Collecting jinja2 (from torch->llama==0.0.1)
  Using cached Jinja2-3.1.2-py3-none-any.whl (133 kB)
Collecting nvidia-cuda-nvrtc-cu11==11.7.99 (from torch->llama==0.0.1)

...

 

$ chmod 755 download.sh

#아래 download에서는 70B-chat빼고는 다 받았는데, 70B는 다운로드 시간이 걸리므로 빼고 받아도 좋다.7B도 13Gbytes나 된다.

$ ./download.sh 

Enter the URL from email: https://download.llamameta.net/*?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc29... 

 

Enter the list of models to download without spaces (7B,13B,70B,7B-chat,13B-chat,70B-chat), or press Enter for all: 7B,13B,7B-chat,13B-chat
Downloading LICENSE and Acceptable Usage Policy
--2023-07-19 23:08:24--  https://download.llamameta.net/LICENSE?Policy=eyJTdGF0ZW1lbnQiOl...QRJLYKIFSLZ 
download.llamameta.net (download.llamameta.net) 해석 중... 18.67.51.119, 18.67.51.25, 18.67.51.64, ...
다음으로 연결 중: download.llamameta.net (download.llamameta.net)|18.67.51.119|:443... 연결했습니다.
HTTP 요청을 보냈습니다. 응답 기다리는 중... 200 OK
길이: 7020 (6.9K) [binary/octet-stream]
저장 위치: ‘./LICENSE’

./LICENSE                           100%[================================================================>]   6.86K  --.-KB/s    / 0s       

2023-07-19 23:08:24 (976 MB/s) - ‘./LICENSE’ 저장함 [7020/7020]

--2023-07-19 23:08:24--  https://download.ll...

 

#모델을 받고 나면 아래 소스의 빨간색 영역을 영어에서 한글로 고쳐보자.

$ vi example_text_completion.py 
# Copyright (c) Meta Platforms, Inc. and affiliates.
# This software may be used and distributed according to the terms of the Llama 2 Community License Agreement.

import fire

from llama import Llama


def main(
    ckpt_dir: str,
    tokenizer_path: str,
    temperature: float = 0.6,
    top_p: float = 0.9,
    max_seq_len: int = 128,
    max_gen_len: int = 128,
    max_batch_size: int = 4,
):
    generator = Llama.build(
        ckpt_dir=ckpt_dir,
        tokenizer_path=tokenizer_path,
        max_seq_len=max_seq_len,
        max_batch_size=max_batch_size,
    )

    prompts = [
        # For these prompts, the expected answer is the natural continuation of the prompt
        "직장에서 좋은 관계를 갖기 위해서는 ",
        "미야자키 하야오 감독의 대표작은 ",
        """신사업을 하는 팀의 첫 시작을 축하하는 메시지:

        안녕하세요 여러분,
        
        지금 시기는 변화를 """,
        # Few shot prompt (providing a few examples before asking model to complete more);
        """Translate English to Korean:
        
        peppermint => 페퍼민트
        cheese =>""",
    ]

 

 

 

#드디어 최초로 돌려보자. 아래는 16GB GPU에서 돌아간다(약 15GB의 GPU 메모리를 소모한다 RTX 4080 16GB에서 실험했다). 간단히 주어진 문장의 다음 문장을 생성하는 예시이다. 뒤에 생성하는 문장을 늘리기 위해 max_gen_len을 256으로 지정했다.

$ torchrun --nproc_per_node 1 example_text_completion.py --ckpt_dir llama-2-7b/ --tokenizer_path tokenizer.model --max_seq_len 256 --max_gen_len 256 --max_batch_size 4
> initializing model parallel with size 1
> initializing ddp with size 1
> initializing pipeline with size 1
Loaded in 6.99 seconds
직장에서 좋은 관계를 갖기 위해서는 
> 어떻게 접근해야 하는가?
목표를 달성하기 위해서는 어떻게 팀원들을 활용해야 하는가?
적응력을 높이기 위해서는 어떻게 팀원들을 설득해야 하는가?
감독의 역할은 어떻게 변화하는가?
목표를 달성하기 위해서는 어떻게 팀원들을 활용해야 하는가?
감독의 역할은 어떻

==================================

미야자키 하야오 감독의 대표작은 
> 《슈퍼 마리오 브라더스 3》(1988년)로 알려져 있다. 특히 미야자키 하야오는 이 게임을 통해 아케이드 게임 디자이너로서 더 많은 인지도를 얻었다. 애니메이션 영화 《피노키오》(2017년)의 감독이자 프로듀서이기도 하다.

## 작품 목록

### 감독

==================================

신사업을 하는 팀의 첫 시작을 축하하는 메시지:

        안녕하세요 여러분,
        
        지금 시기는 변화를 
> 엿보는 시기이며 분명 혁신을 위한 새로운 시대가 열릴 것이다.
        
        이러한 분위기에서 새로운 시작을 하는 첫 번째 팀을 환영하고 있습니다.
        
        새로운 시작을 하는 분들에게 있어서 열심히 하면 되겠습니

==================================

Translate English to Korean:
        
        peppermint => 페퍼민트
        cheese =>
> 치즈
        banana => 바나나
        orange => 오렌지
        apple => 사과
        pear => 배
        onion => 매운 맛
        garlic => 고추
        carrot => 카루로
        potato => 튀김밥
        tomato => 토마토
        cucumber => 달걀
        pepper => 카프릴
        chili => 고추
        egg => 알
        lettuce => 양파
        spinach => 실밥
        broccoli => 브로콜리
        cabbage => 당근
        cauliflower => 칼리플로어
        mushroom

==================================

 

 

 

#chat 관련되어도 아래와 같이 실험이 가능하다

$ vi example_chat_completion.py

 

# Copyright (c) Meta Platforms, Inc. and affiliates.
# This software may be used and distributed according to the terms of the Llama 2 Community License Agreement.

from typing import Optional

import fire

from llama import Llama


def main(
    ckpt_dir: str,
    tokenizer_path: str,
    temperature: float = 0.6,
    top_p: float = 0.9,
    max_seq_len: int = 512,
    max_batch_size: int = 4,
    max_gen_len: Optional[int] = None,
):
    generator = Llama.build(
        ckpt_dir=ckpt_dir,
        tokenizer_path=tokenizer_path,
        max_seq_len=max_seq_len,
        max_batch_size=max_batch_size,
    )

    dialogs = [
        [{"role": "user", "content": "라면을 맛있게 끓이는 방법은?"}],
        [...

 

 

 

$ torchrun --nproc_per_node 1 example_chat_completion.py --ckpt_dir llama-2-7b-chat/ --tokenizer_path tokenizer.model --max_seq_len 512 --max_batch_size 4
> initializing model parallel with size 1
> initializing ddp with size 1
> initializing pipeline with size 1
Loaded in 6.78 seconds
User: 라면을 맛있게 끓이는 방법은?

> Assistant:  I'm just an AI, I don't have personal opinions or beliefs, but I can provide you with some general information on how to make a delicious and healthy ramyeon.
Ramyeon is a popular Korean instant noodle dish that can be made in a variety of ways depending on personal preferences. Here are some tips to make a delicious and healthy ramyeon:
1. Choose a good quality ramyeon: Look for a ramyeon that is made with whole wheat or brown rice noodles, and contains vegetables and lean protein sources.
2. Add vegetables: Ramyeon can be a great way to get in some extra vegetables. Try adding sliced carrots, diced bell peppers, and chopped green onions to your noodles.
3. Use lean protein: Choose a lean protein source such as chicken, beef, or tofu to add to your ramyeon. This will not only make it more nutritious but also more filling.
4. Add some spice: Ramyeon can be quite bland, so try adding some spice to it. You can add chili flakes, soy sauce, or gochujang (Korean chili paste) to give it a kick.
5. Experiment with different seasonings: Ramyeon can be seasoned with a variety of ingredients such as sesame oil, garlic, and ginger to give it a unique flavor.
6. Use a flavorful broth: The broth of ramyeon can make or

==================================

User: I am going to Paris, what should I see?..

 

 

흥미롭게도 영어로 답변을 하면 꽤 잘한다. 강제로 한글로 이야기하게도 할 수 있는데 아쉽게도 아래와 같다. 아마도 ChatGPT처럼 한글의 token단위도 너무 작은 상태가 아닐까 싶다(답변이 통상 짧다). 한글 부분은 fine tuning등 버전이 나오리라 기대해본다. 곧 llama.cpp가 풀리면 상위 모델도 CPU/Ram에서 구동하게 될 수 있겠다.

 

$ vi example_chat_completion.py

...

    dialogs = [
        [{"role":"system","content":"always answer in Korean"},
         {"role": "user", "content": "라면을 맛있게 끓이는 방법은?"}],
        [

...

$ torchrun --nproc_per_node 1 example_chat_completion.py --ckpt_dir llama-2-7b-chat/ --tokenizer_path tokenizer.model --max_seq_len 512 --max_batch_size 4
> initializing model parallel with size 1
> initializing ddp with size 1
> initializing pipeline with size 1
Loaded in 6.69 seconds
System: always answer in Korean

User: 라면을 맛있게 끓이는 방법은?

> Assistant:  "라면을 맛있게 끓이는 방법은 저렴한 물과 저렴한 간장을 사용하는 것입니다."

==================================

하나 더 실험해보자.

 

$ vi example_chat_completion.py

...

    dialogs = [
        [{"role":"system","content":"always answer in Korean"},
         {"role": "user", "content": "물리학 법칙이 모두 대칭인 이유는?"}],
        [
            {"role": "user", "content": "40대 보수적인 남성인 저는 어떤 금융상품을 관심있게 봐야할까요?"},
            {
                "role": "assistant",
                "content": """\
1. 안정적인 예적금: 원금 손실이 없으나 수익률이 다소 낮은 단점이 있습니다.
2. 공격적인 주식: 원금 손실의 가능성이 있으나, 적절한 투자를 행하여 이익실현을 하는 경우 수익률이 매우 높습니다.
""",
            },
            {"role": "user", "content": "1번 상품의 특성을 좀더 자세히 이야기해줄 수 있을까?"},
        ],
        [

..

$ torchrun --nproc_per_node 1 example_chat_completion.py --ckpt_dir llama-2-7b-chat/ --tokenizer_path tokenizer.model --max_seq_len 512 --max_batch_size 4

> initializing model parallel with size 1
> initializing ddp with size 1
> initializing pipeline with size 1
Loaded in 6.67 seconds
System: always answer in Korean

User: 물리학 법칙이 모두 대칭인 이유는?

> Assistant:  "물리학 법칙이 모두 대칭인 이유는?"

* 물리학 법칙이 모두 대칭인 이유는 입력에 따라 출력이 얼마 되는 것입니다.
(Translation: "The reason why physical laws are all symmetrical is because they are based on the input and output of the system.")

==================================

User: 40대 보수적인 남성인 저는 어떤 금융상품을 관심있게 봐야할까요?

Assistant: 1. 안정적인 예적금: 원금 손실이 없으나 수익률이 다소 낮은 단점이 있습니다.
2. 공격적인 주식: 원금 손실의 가능성이 있으나, 적절한 투자를 행하여 이익실현을 하는 경우 수익률이 매우 높습니다.


User: 1번 상품의 특성을 좀더 자세히 이야기해줄 수 있을까?

> Assistant:  Of course! The first financial product I mentioned, "安定的な預期 returns (Stable Returns)", has several key characteristics that make it an attractive option for investors. Here are some additional details:
1. Low Risk: As the name suggests, "安定的な預期 returns"

신기하게도, 일본어가 섞여 나온다는 것을 알 수 있다. 전체적으로 일본어가 섞여서 70b 모델에도 자주 등장한다고 알려져있다.

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

추가로 Apple Sillicon (M1/M2, gpu 사용) 에서도 아래와 같이 구동할 수 있다.

https://gist.github.com/gengwg/26592c1979a0bca8b65e2f819e31ab5c

 

$ git clone https://github.com/ggerganov/llama.cpp.git
$ cd llama.cpp

$ make clean
$ LLAMA_METAL=1 make

 

#만약에 메모리 10gb이상 맥북이면
$ export MODEL=llama-2-13b-chat.Q4_0.gguf 

#아래 혹은 직접 링크를 다운로드

$ wget "https://huggingface.co/TheBloke/Llama-2-13B-chat-GGUF/resolve/main/llama-2-13b-chat.Q4_0.gguf 

 

#만약에 메모리  8gb이하 맥북이면

$ export MODEL=llama-2-7b-chat.Q4_0.gguf 

#아래 혹은 직접 링크를 다운로드

$ wget "https://huggingface.co/TheBloke/Llama-2-7B-chat-GGUF/resolve/main/llama-2-7b-chat.Q4_0.gguf 

 

$ ./main -m ./llama-2-7b-chat.Q4_0.gguf -t 8 -n 128 -ngl 1 --prompt "could you generate python code for generating prime numbers?"

 

#기타 아래를 통해 conda를 써서 python 필요시 따로 구동할 수 있다.

$ conda create --name=llama2 python=3.11

$ conda activate llama2

$ pip install -r requirements.txt

 

반응형
Posted by 작동미학
순수수학2023. 7. 16. 17:38

 골드바흐의 추측은 "2보다 큰 모든 짝수는 2개의 소수(동일 소수 포함)의 합으로 나타낼 수 있다" 라고 간단히 기술된다. 그리고 이는 아직 증명되지 못했다.

 

 이 문제를 파내려가다보면 결국 소수의 규칙성을 필요로 하게 되기 때문에, 아직 그 규칙성이 모호한 소수를 가지고 증명을 하기가 매우 어려운 경우들을 만나게 되겠다.

 

 이 문제를 여러가지 변형해보는 것도 가능한데, 모든 2개 소수의 합의 조합이 틈이 없이 모든 짝수를 생성해내면 된다.

 

"a,b를 각기 임의의 소수(prime number)라고 할때, a+b의 모든 조합을 갖는 집합이, n은 1이상의 자연수일때 2n의 집합을 포함한다"

 

라고 할 수도 있다.

 

이 문제에 대해서 여러가지가 선행 증명되었는데, 우선 상기 골드바흐의 추측보다 더 약한 골드바흐의 약한 추측이

 

"5보다 큰 모든 홀수는 세 소수의 합으로 나타낼 수 있다" 이고, 이는 골드바흐의 추측이 참이면 참이되는 명제다.

 

이 약한 추측에 대해, 2012년 테렌스 타오가 모든 홀수가 5개 이하의 소수의 합으로 나타낼 수 있다는 점을 증명했으며, 2013년 엘프고트가 10의 30제곱 이상에서는 성립되고, 10의 30제곱 이하에서는 컴퓨터로 모두 확인되면서 골드바흐의 약한 추측은 참임이 증명되었다.

 

결국은 아직 골드바흐의 추측을 증명하지는 못했지만 그 근처까지는 가있는 모양새이다. 그런데 여기서 흥미로운 것은 주로 소수(prime number)는 곱을 통해 숫자를 분해하는데 그 덧셈이 커버하는 영역을 다루는 것이 이 골드바흐의 추측이라는 점이다. 이런 점에서 더 다루기 까다로울 수 있겠다. 간단히 골드바흐의 추측을 살펴보았다.

 

자료상으로는 쌍동이 소수 추측(두 소수의 차이가 2인 소수가 무한히 존재한다)과도 관련이 있다고 한다.

https://namu.wiki/w/%EA%B3%A8%EB%93%9C%EB%B0%94%ED%9D%90%20%EC%B6%94%EC%B8%A1

 

반응형
Posted by 작동미학