머신러닝AI2024. 9. 14. 11:26

 딥러닝이라는 개념이 각광받는 가운데, 단지 마케팅 용어로 딥러닝을 접하고, 피상적으로만 알고 있는 사람들이 꽤 많다. 정작 이 분야를 잘 알아야 하는 사람들도 그렇다. 예를 들어 흔히 듣는 이야기는 단순한 통계모델로 하면 될 문제를 '딥러닝'으로 풀겠다고 이야기한다는 사실이다. 딥러닝이 성능이 좋다는 말이 널리 퍼지면서, 앞뒤의 맥락없이 그렇게 접근되기 때문이다. 아쉬움 가득한 상황이다. 그래서 오늘은 이 이야기를 간단히 해보자.

 

 딥러닝은 어찌보면 연결주의자들의 꿈이다. 사람들은 오랫동안 기호주의에 의거해 AI 문제를 해결하려고 했다. 즉 if-then의 끊임없는 나열이나, 어떤 단순한 통계 모델을 조합해서 완전하게 설명가능한 AI를 만드는 것이다. 직접 프로그래밍을 한다고 생각해보면 쉽게 이해할 수 있다. 우리가 하는 대부분의 환원주의적인 과학 접근 방식을 닮은 방식이다. 모든 것을 잘게 분할해서 부품을 잘 만든 후 합쳐서 완성품을 만드는 형식이다. 로보트를 그렇게 만들지 않는가. 팔을 연구하고, 다리를 연구하고, 각각을 연구해서 모두 붙인다. 그것이 기호주의가 따르는 방식이다.

 

 그런데 연결주의는 좀 다르다. 최초의 인공 신경망은 이미 1943년(Warren McCulloch, Walter Pitss) 부터 다루어져왔는데, 그저 입력값들에 배정된 가중치를 곱해서, 어느 정도 이상의 합 결과가 나오면 발화된다는 단순한 구조의 반복이다. 신경해부학자들은 말도 안된다며 펄쩍 뛴다고 하지만, 우리네 신경세포를 조금은 닮았다. 인공 뉴런을 계속 병렬로 나열하면 여러가지 입력을 다룰 수 있고, 여러 층을 만들면, 2차원의 신경망이 펼쳐지게 된다. 매우 똑같은 역할을 하는 인공신경 여러개를 연결해서 망을 이루고, 이것을 늘려나가면 복잡한 문제를 풀 수 있을 것이라는 것이 이 인공 신경망의 기대였다. 이미 1950년대에 그런 믿음이 주장될 정도로 이 인공신경망에 대한 기대는 컸다.

 

 얼마나 매력적인가. 복잡한 것을 설계할 필요가 없다. 뉴런을 그냥 늘리고, 신경망 가중치만 적절히 조절해주면 그 복잡한 구조 속에서 복잡한 일을 해내게 될것이다. 물론 아쉽게도(?) 어려운 점이 없는 것은 아니다. 바로 그 모든 노드들의 가중치를 정하는 문제이다. 우리는 이것을 '학습'이라고 이야기한다. 데이터를 통해 이 가중치를 적절한 방식으로 조절해주어야만 신경망은 제 역할을 할 수가 있다. 

 

 그런데 이 신경망의 어려움은, 신경망을 얼마나 복잡하게 만들어야 할지, 또한 복잡할수록 이 가중치값이 많아져서, 어떻게 조절을 해야 제대로된 출력을 낼지 알기 어렵다는 사실이다. 그래서 한참 이 신경망은 여러가지 개선 이론에도 불구하고 인기가 떨어졌다. 1969년 마빈 민스키 등이 간단한 신경망에서, 기존의 일반적인 방법으로 풀지 못하는 상황이 있다는 것이 초기 유명한 증명 사례다(XOR문제). 그리고 MLP(다층퍼셉트론-다층신경망)에 대한 학습 해법인  back propagation이 1974년 최초로 박사학위 논문에 등장하고(Paul Werbos), 그 유명한 힌튼 교수도 유사한 방식을 주장하면서(1986년, Geoffrey Hinton) 1980년대에 다시 한번 기대를 받게 된다.

 

 하지만 역시나 신경망이 커지면 이 방법마저도 그다지 효과적이지 않고, 최적값에 수렴하지 못하는 경우가 많다는 것은 역시 단점이었다. 그래서 더 확실히 최적화 가능한, 수학적으로 더 우아한 SVM(2000년 전후까지 강세였던) 같은 방법에 밀려버렸고 2006년경까지 신경망은 그저 연결주의자들의 예측하기 어려운 변덕적인 방법으로 취급받아왔다. 학습할때마다 결과가 다르고, 잘 학습도 안되는 모델일 뿐이었다. 그래서 논문을 제출해도 잘 받아주지도 않았다. 그 시기가 바로 인공신경망의 가장 혹독한 겨울이었다. 연결주의의 암울한 시기이다.

 

 그러다가 이 연결주의(신경망)를 포기하지 않았던 Hinton교수 랩을 중심으로 다양한 방법론이 등장하게 되었다. 초기 신경망의 가중치를 전략적으로 잘 설정하면 된다던가, Auto Encoder라는 방법으로 한층한층 학습을 시킨다던가, 가중치를 합해서 발화를 판별했던 그 활성화 함수를 바꾼다던가(ReLU), 노드들을 일부분 생략하고 학습을 해서 좀더 넓게 학습 결과가 퍼져나가게 하는등(Dropout) 다양한 전략이 소개되었다. 그러면서 전보다 훨씬 더 효율적이 더 큰 신경망을 학습시킬 수 있음을 알게되었다. 이때 바로 소위 논문 accept가 잘 되기 위해서 이 신경망에 deep belief net, deep networks 라는 이름을 붙이기 시작했고, 이것이 딥러닝의 기원이 되었다. 그래서 흔히 사람들이 지칭할때, 좀더 계층도 많고 입력도 많은 신경망을 이제 '딥러닝'이라고 부른다고 표현한다.

 

" A fast learning algorithm for deep belief nets, 2006년 제프리 힌튼"

" Greedy layer-wise training of deep networks, 2007년 요수아 벤지오"

 

 여하튼 그래서 deep learning이란 큰 신경망이나 깊은 신경망(2차원이니까 입력을 늘릴 수도 있고 층을 늘릴 수도 있으니, 이 경우는 층을 늘리는 의미가 좀더 있겠다. 깊은 층을 만드는 일이다)을 의미한다고 보면 된다. 그러면 얼마나 커야 할까?

 

 이제 2010년이 넘었고, CNN(Convolutional Neural Networks)이 각광받던 시기가 되었다. 사실 저렇게 큰 신경망에 대해서 연구를 했다고 하지만 아직 컴퓨팅 한계 때문에 큰 신경망을 실험하기가 어려웠다. CNN자체는 1998년도에도 논의되었으나 세간에 제대로 히트를 친 것은 2012년이다. Hinton제자중에 Alex와 Sutskever가 게임에나 쓰던 병렬 소수점 연산 프로세서인 GPU를 사용해(Alex의 작품이다) 이미지 인식 대회에서 큰 성능 향상을 이뤄낸다. 바로 AlexNet(2012년)의 탄생이다. CNN과 큰 신경망을 제대로 구현해서 제 시간 안에(?) 학습을 시킨 셈이다. 6천만개 파라메터를 사용했다고 한다. 그정도만 되어도 연산량이 어마어마하다. 그래서 딥러닝이란 이제 큰 신경망 + GPU + 많은 수의 데이터라는 공식이 성립되게 된 셈이다. 물론 숫자 인식 정도는 그리 크지 않은 신경망으로 가능하게 되었지만, 상용으로 쓸 정도의 문제는 대개 예외 처리가 어려운 문제(이를테면 이미지/음성 인식같은)에 대규모의 데이터를 넣어서 큰 신경망으로 해결하는 것이 딥러닝이라고 볼 수가 있겠다.

 

 이후 이런 딥러닝 기술들은 CNN이 주목한 이미지 인식 외에도, 시계열의 데이터를 처리하는, 즉 말의 흐름을 다루는 RNN이나 LSTM같은 시계열 처리로 이루어지고, Google BERT와 GAN을 거쳐 Transformer로 진화하게 되었지만(2010년대에 모두 이루어진 일이다) 그 주요 기반이 신경망인 것은 그다지 변하지 않았다. 그리고 하나 짚고 넘어갈 일은 '생성형'이 유행하게 된 사실이다. 적대적생성신경망(GAN)에서 유래한 이 개념은, 과거에는 단순히 판정에 집중했던 것에 반해서, "이해를 했다면 생성도 가능하다"는 지능의 한 분야를 발전시킨 개념이다. 생각보다 쓸모가 다양하고, 생성형 언어모델로 이끌기 까지 했지 않는가.

 

 좀 여러가지 생략을 했는데, 따라서 딥러닝은 단순한 통계 모형으로 풀기 어려운 복잡한 문제를 지향하고, 큰 신경망과 대량의 데이터, 컴퓨팅을 요구하는것이 기본이다. 물론 LoRA같은 소규모의 부분 튜닝 학습도 존재하기는 하지만 기본적으로는 그렇다. 그리고 단순 수치에 대한 해석과 예측은 별개로 잘 발전한 decision tree류의 모델(gradient boosting모델, LGBM, XGBoost, ..)들도 훨씬 효과적일 때가 많다. 특히 데이터가 부족하고 컴퓨팅이 부족한 실제 산업 현장에서는 요긴하게 사용된다. 또한 딥러닝을 한다고 하면서 파라메터 크기가 몇만개 정도 수준이면 좀 애매하게 볼 수도 있겠다. 복잡한 문제를 풀기에는 너무 작은 크기 아닌가?

 

 그리고 AlexNet 논문의 공저자이자 OpenAI의 수석과학자였던 Sutskever가 논의했던 신경망의 크기도 짚고 넘어가보자. OpenAI를 시작했을때도 이 신경망의 크기를 키우면 잘 될것이라는 아이디어는 결과적으로 상상력이 부족했다. 엄두가 안나는 크기인 수십억, 수백억 파라메터 크기까지 늘리면 잘된다는 사실을 본인도 처음부터 시도한 것은 아니라고 고백하는 인터뷰를 본 적이 있다. 여하튼 그렇게 딥러닝은 이제 수백억 수천억 파라메터를 지닌 크기의 신경망을 다루게 되었다. 하나 더 팁을 주자면 이 크기의 신경망을 학습하기 위해서는 그저 인터넷상에 널려있는 수없는 텍스트 문장이 있으면 되게 되었다. 하나하나 분류 결과가 필요했던 이미지와는 차원이 다른 데이터 금맥이 발견된 셈이다. 그래서 이 엄청난 텍스트 문장 데이터와 거대 신경망 모델이 오늘날의 딥러닝을 대표하지 않나 생각이 든다.

 

 그래서 이러한 배경을 놓고 딥러닝을 이야기하면 조금더 현실적으로 논의할 수 있겠다. 그래서 문제 구분없이, 작은 신경망으로 문제를 해결하면서 딥러닝을 한다고 하는 주장을 하면 아무래도 좀 아쉬운게 많은 것은 연결주의자들의 생각이 아닌가.

 

반응형
Posted by 작동미학
머신러닝AI2024. 9. 6. 22:48

 Stable Diffusion보다 훨씬더 이미지를 잘 생성해주는 Flux.1이 출시되었다. Stable Diffusion에서 나와 창업한 이들이 만들었고, 상업용과 공개용 모델이 공존한다. 아무래도 Stable Diffusion의 라이센스가 강화됨에 따라, Flux.1이 각광받을 것 같고, 기본 모델로도 고해상도에서 꽤 잘 이미지를 생성해준다. 아래는 NVidia RTX 4090 (24GB)에서 실행해보았으며 12GB이하 메모리를 지닌 GPU에서는 별도의 조치가 필요하다.

 

0. 아래는 간단히 생성해본 1024 * 1024 이미지다. 품질이 좋다!

"a modern soldier on the battle field"

 

1. Flux.1을 지원하는 ComfyUI 및 ComfyUI-Manager를 설치한다.

 

https://github.com/comfyanonymous/ComfyUI 에 접속한 후 화면 하단의 아래 Direct link to download를 통해 압축파일을 다운받는다. 그리고 적절한 폴더에 압축을 푼다. 여기서은 d:\dev\ 폴더에 압축을 풀었다고 가정한다.

[Direct link to download를 눌러 파일을 1.5GB 정도 되는 ComfyUI를 다운로드 받는다]

 

곧이어 위 압축을 푼 폴더의 하위 ComfyUI/custom_nodes에서 git으로 아래와 같이 다운로드 받는다.

 

> cd D:\dev\ComfyUI_windows_portable\ComfyUI\custom_nodes

> git clone https://github.com/ltdrdata/ComfyUI-Manager.git

 

이후  ComFyUI는 아래와 같이 실행하는데, 일단 모델 파일들을 받아보자.

 

> cd D:\dev\ComfyUI_windows_portable

> run_nvidia_gpu.bat   (혹은 GPU가 없다면 run_cpu.bat도 실행가능하다)

 

 

2. 아래 모델 파일들을 다운로드 받는다. hugging face에 공개된 모델들이고, hugging face에 가입한 후 필요하면 사용 동의를 해주어야 정상적으로 다운로드 받을 수 있다.

 

 a. https://huggingface.co/Kijai/flux-fp8/tree/main 에서 2개의 파일을 다운로드 받아 아래에 복사해준다. (fp8버전으로 받자)

 

   d:\dev\ComfyUI_windows_portable_nvidia\ComfyUI_windows_portable\ComfyUI\models\unet\

 

 

 b. https://huggingface.co/black-forest-labs/FLUX.1-dev/tree/main/vae 에서 2개의 파일을 다운로드 받아 아래에 복사해준다.

 

d:\dev\ComfyUI_windows_portable_nvidia\ComfyUI_windows_portable\ComfyUI\models\vae\

 

 

 

c. https://huggingface.co/comfyanonymous/flux_text_encoders/tree/main 에서 2개의 파일을 다운로드 받아 아래에 복사해준다.

 

d:\dev\ComfyUI_windows_portable_nvidia\ComfyUI_windows_portable\ComfyUI\models\clip\

 

d. 아래 사이트 에 접속해서 Download로  json 파일을 하나 받아준다.

 

https://openart.ai/workflows/maitruclam/comfyui-workflow-for-flux-simple/iuRdGnfzmTbOOzONIiVV

 

workflow-comfyui-workflow-for-flux-simple-iuRdGnfzmTbOOzONIiVV-maitruclam-openart.ai

(flux 구성을 기초적으로 한 파일이다. ComfyUI를 실행해서 화면에 drag&drop으로 넣어줄 파일이다)

 

 

3. ComfyUI를 실행한다.

 

> cd D:\dev\ComfyUI_windows_portable

> run_nvidia_gpu.bat   (혹은 GPU가 없다면 run_cpu.bat도 실행가능하다)

 

잘 실행되면 아래 비슷한 화면이 나온다. 여기에 아까 받았던 json을 drag & drop으로 화면위에 떨궈준다. 그러면 기본적인 셋팅이 완료된다.

 

ComfyUI 윈도우에서 실행한 화면
상기 과정을 거쳐 실행된다.

 

 기본 셋팅으로 쓰면 이름이 제대로 설정이 안되서 아래 3가지 셋팅의 명칭은 확인해서 바꿔준다. (Load Diffusion Model, DualCLIPLoader, Load VAE 3가지 박스이다. 다운받은 파일들로 바꿔준다.

 

이제 Prompt에 적당한 표현을 넣고, Queue Prompt를 눌러보면, 1024*1024로도 멋진 사진이 잘 나오는 것을 알 수 있다. 고해상도에서 기본모델인데도 꽤 잘나온다. RTX 4090으로 약 30초 미만으로 생성되었다. 속도 자체는 기존 Stable Diffusion과 비슷했다.

 

고해상도 이미지를 잘 생성해주고 있다.

 

12GB이하 메모리의 GPU에서는 별도의 방법이 필요하다고 한다. 우선 여기서는 24GB GPU에서 실험한 결과를 공유한다.

 

반응형
Posted by 작동미학
머신러닝AI2024. 9. 5. 21:42

 이 이야기가 어떤 도움이 될지는 잘 모르겠지만, 여러가지 참고가 될 수도 있지 않겠는가 기대를 해본다.

 

 처음에 사람의 지능이나 기억 등에 관심을 갖게 된 것은 환상특급이라는 미국 SF 시리즈를 접했을 때이다. 정확히 기억은 안나지만, 사람의 기억에 대한 이야기이며, 사람의 기억을 비디오로 재생하는 모습이 기억난다. 거기서 사람의 기억은 영상으로 그대로 보여졌다. 90년 전후의 기억이다.

 

 이 때의 첫 의문은 정말 사람의 머리속 기억이 저렇게 영상으로 기억될까? 였다. 그리고 곧바로 그렇지 않을 것이라고 생각했다. 영어사전을 첫장부터 계속 넘기면서 본다고 해보자. 과연 그것이 영상으로 머리속에 남아있을까? 우리는 초인적인 능력을 발휘하면 머리속에서 그것을 모두 찾아낼 수 있을까? 전혀 그렇지 않을 것이라고 생각한 것이다. 상식과 부합하지 않다고 봤다.

 

 이후에는 이러한 지능에 대한 여러가지 고민 속에 유물론적 사고관이 자리잡기 시작했다. 그것은 진화론, 특히 지금은 진화심리학이라고 알려진 것과 함께했다. 그렇게 아예 기존에는 전혀 개념이 없던, 정신의 작동에 대해서 여러가지 내적인 질문/답변을 통해 이런저런 가설을 세우고 정리할 수 있다는 사실을 깨닫게 되자, 지능을 이해하고 구현할 수 있다는 생각이 중고등학생 시절 들기 시작했다. 돌이켜보면 사실은 별로 이해한 것도 없었지만, 아예 모호한 것에서 어떠한 틀이 생겼다고 판단되면, 사람은 그것을 대부분 이해했다고 착각하게 된다.아마도 1950년대 최초로 AI를 논하던 서양의 학자들이, 곧 그것을 만들 수 있다고 믿었던 것도 비슷한 맥락이라고 생각한다. 조금만 체계가 잡히는 것처럼 보여도 곧 나머지는 시간문제처럼 여겨지게 된다. 여러가지의 논리적인 체계를 수립하고 독서의 과정 중에서 타인의 의견까지 확인되면 자신감이 생기는 것도 있었다. 여러 학자들의 단편적인 주장들이 내 추측과 다르지 않다는 것을 알게 되었던 것이다. 

 

 그렇게 96년경 대학 학부에 들어가기 전부터도 나는 지능을 구현할 수 있을 것이라는 확신을 가졌으며 이를 위해 여러가지 관련 지식을 찾기 시작했다. "인지과학" 학회에 참여하거나, 여러가지 대학교 교양을 그러한 분야로 정해서 들었다. 그런데 전공을 전산학을 하고 수업을 인공지능을 들었지만, 의외로 그 수업은 수학적인 지식을 쌓거나 단순 알고리즘에 대한 것이 전부였다. 돌이켜보면 그 모든 것이 기초였지만, 당시에는 내가 만들고자 했던 인공지능과는 거리를 좁히기는 어려웠다. 그러한 것들은 지능이 보여주는 복잡성 대비해서는 너무 "단순했고, 피상적이었다".

 

 그러던 와중에 복잡계와 인공생명을 접하게 되었다. 인터넷을 통해서 지속적으로 정보를 확인하고, 책을 보다보니 두 분야가 눈에 들어왔다. 가장 인상깊은 것은 인공생명 내에서 소개한 'Life Game'이었다. 즉, 단순한 법칙이 대규모로 되먹임으로 반복되면 창발성이 발생한다는 단순한 논리며, 자가 복제하는 생명이 탄생한다는 것이다. 그리고 신경망이나 진화학습 알고리즘을 접하던 것이 2000년이 조금 넘은 시기였던것 같다. 그러다가 한동안 병역문제를 해결하기 위해 2000년부터 2004년까지 소프트웨어 개발자 생활을 했고, 오직 광범위한 프로그래밍 문제에 메달리게 되었다. 어찌보면 이 시기는 코딩이나 오픈소스, Fast Prototyping 등 공학적인 관심을 다양하게 발산하던 시기였다고 생각한다. OS나 디버깅 등 원없이 이러한 소프트웨어 개발 시기를 보냈다. 나는 제품을 만들고 고쳐야했으며 거기에 충실히 임했다. 그런 후에 병역 문제가 해소되자, 전부터 생각하던 AI를 공부하기 위해 석사과정을 지원했다.

 

 다만, 입학후 당시에 학계에서 유행하던 알고리즘은 SVM(Support Vector Machine)이었고, 학교는 충실히 그 방향을 따랐다. 그 모델의 수학적인 완성도나 OCR 개선, high resolution, 필기체 생성 등 과제가 몸담았던 랩의 중요한 과제들이었고, 인공생명이나 신경망 같은 것에 대한 관심은, 학계 전체적으로 그 추상적인 것들을 어떻게 해결해야 할지 갈팡질팡하는 논리적 혼란을 겪으면서 진행되던 시기였다. 신경망은 학습할 때마다 결과가 다른 변덕스러운 녀석이었으며(유전자 알고리즘도 마찬가지였다), 신경망이 조금만 복잡해져도 잘 학습되지 않았고, 실험 결과는 며칠이나 걸려도 구하기 어려웠다. 신경망이 한참 각광을 받다가 천덕꾸러기가 된 시기였다. 이를 타개하려면 Hiton교수 랩에서 deep nets라는 이름으로 우회해서 논문이 등록되는 최소 2006년을 기다려야 했다.

 

 그러한 학계 맥락에도 불구하고, 기본적인 머신러닝의 절차. 즉 데이터를 준비하고 다듬고, Feature를 만들고 다양한 모델을 돌리며, 그것을 코딩하고 결과를 얻는 과정에 대해서는 잘 배울 수 있었다. 이론을 다지기는 짧았지만, 실무는 잘 이해할 수 있었다. 당시의 AI란 통계 모델이었으며, 가급적 Feature는 다양한 데이터에 대해서도 일관성을 갖추도록 최선을 다해서 변이가 줄어드는 것을 잘 선택해야 했으며, 그에 기반하여 단순한 모델들이 그것을 잘 학습하게 하는 것이 지상 목표였다. 특히 석사과정인 나에게는 더욱 그랬다. 우리가 아는, 사람의 일반적인 지능과는  다른 것이었지만, 그러한 노력들이 이를테면 인쇄체 인식분야에서는 꽤 빠르고 정확한 성능에 다다르는 것은 가능하게 되었다. 즉 변화가 다양한 현실에 대해서 최대한 그 다양성을 없애려는 것이 오히려 그 시기 내 노력의 대부분이었다고 생각한다. 모델의 개선이란 쉽지 않은 수학적인 주제 중의 하나였다.

 

 그래서 "복잡한 지능적 문제"는 도대체 인간이 어떻게 푸는지 감을 잡을 수도 없었다. 예컨데 인쇄된 문서가 아니라 자연상태의 간판같은 것들을 찍어서 인식하는 문제(scene text recognition)는 너무도 그 변이를 표준화할 수 없어서, 완전히 풀기 불가능할 정도의 문제였다. 랩에서 그런 이야기를 종종 들었던 기억이 있다.

 

 그럼에도 불구하고 언급했던 것처럼 통계 모델들이 향하는 본질은 이해할 수 있었다. 그것은 데이터를 통해서 공간상에 여러가지 경계선을 긋는 작업이었도 이를 기반으로 분류를 행해주는 일을 주로 하는 수학적인 과정이었다.

 

 다만, 2004~2006년 당시에 '진화'와 '신경망'이라는 개념은 내게 크게 다가왔다. 도대체 지능을 환원적으로 바라보고 구현할 수 없다면, 그것이 가늠할 수도 없이 복잡하다면, 신경망 같은 구조에서 창발성을 기다려야 하고, 그 구조는 진화알고리즘 같은 것으로 계속 바꿔줘야 한다고 생각했다. 2006년까지 석사과정을 마치면서, 내 머리속에 떠오른 이 지능 구현에 대한 해결책은 다음과 같았다.

 

 1. 신경망을 구성한다(혹은 다른 모델일 수도 있겠다. 그런데 다른 창발성을 일으킬 수 있는 모델이 떠오르지 않았다.)

 2. 유전자 알고리즘으로 계속 구조를 바꾸고

 3. 자연과 비슷한 시뮬레이터(경쟁과 생존이 있는) 상에서 그것을 계속 실험하고 진화시킨다

 4. 그러다가 말을 하고(?) 지능을 갖추면 멈춘다.

 5. 이것을 엄청나게 반복한다.

 

 사실 여전히 나는 이 방법론이 실제 지능의 문제를 개선시킬 것이라고 믿는다. 중간에 너무나 비약이 크지만(3번과 4번사이에 간격이 너무 크다고 생각한다) 다른 뾰족한 방법이 없었다. 따라서 나는 당시에 3번 즉 시뮬레이터를 연구해야한다고 생각했다. 과연 어떠한 복잡도로 자연과 유사한 시뮬레이터를 만들어야 지능을 탄생시킬 정도로 할 수 있을까? 너무 단순하면 잘 학습이 안되지 않을까, 너무 복잡하면 구현하기가 어렵고 느리다. 물리적인 환경은 어디까지 해야할까? 그리고 당시에 선배들의 논문 속에 '진화연산신경망'이라던가 이런 개념들이 너무나 인상 깊었다. 이 시뮬레이터의 틀을 그 복잡성 관점에서 수학적으로 분석할 수 있지 않을까?

 

 그 시기 즈음에, 따라서 저런 방법론을 가지고, 사업을 해서 돈을 번 후에 연구소를 만들어서 지능을 만들 수 있지 않을까 상상하던 시기다. 지능에 대한 유물론적인 접근을 나는 할 수 있다고 믿었기 때문이다. 병행하여 신경과학이라던가 여러가지 생물의 구조나, 굉장히 초기 진화 단계의 생명체나 뇌(이를테면 곤충이나 미생물) 같은 것에도 관심을 가졌다. 그런 것들이 모두 재료가 되거나 힌트가 될 수 있다고 생각했기 때문이다. 다양한 책을 접했으나 특별한 돌파구를 찾지는 못했다. 여전히 시뮬레이션이 그 시기 내 가장 큰 관심사였다. 하지만 이러한 주제에 진지하게 접근하기는 쉽지 않았다.

 

 그런데 돌이켜보면 실제 학계는 내가 노력하는 방향과는 다소 차이게 있게 발전하고 있었다. 내 석사시절이 끝날 시기 즈음에 토론토 대학 Hinton 교수 연구실에서는 신경망을 끈질기게 팠었고, 결국에는 고전적인 back progation방법 외에 학습 방법 몇가지를 추가로 개발하며면서, 실질적으로는 젊은 연구자들(Alex)에 의해 GPU를 이용해 신경망 크기를 늘리는 묘안을 생각한 한 것이다(2012발표). 어떻게 보면 나는 시도해보지 못했을 방법이라고 고백할 수 있다. 복잡계를 통해 어떤 단순한 기능이 있고 그 기능을 반복하면서 창발성이 일어난다는 힌트는 가지고 있었지만, 그것이 엄청나게 큰 신경망을 통해서 학습이 안정될 수 있다고는 잘 상상이 되지 않았고 그러한 것을 상상해야 할지도 모르던 시절이다.

 

 그러나 힌튼 교수팀은, 그때까지도 모호했지만, 그 두가지의 원동력을 발견한 셈이다. 즉 신경망을 키워도 적절한 속도로 학습할 수 있는 방법을 찾았으며, 신경망을 키워도 GPU를 통해서 계산할 수 있는 현실성을 갖추게 된 것이다. 그것이 곧바로 구글의 대규모 데이터와 투자가 만나면서 2010년도 초반의 CNN 랠리가 시작되었다. 사실 나는 그때는 신경망으로 뭔가 문제가 잘 해결된다는 것이 신기했다. 다만 그 신경망을 키우는 문제에 대해서는 여전히 다른사람과 같이 무지했다. 그저 데이터가 엄청많으면 CNN이라는 사람의 시각과 비슷한 방법으로 아주 일부 문제가 해결될 수 있구나 정도를 인지했다.

 

 오히려 그 시기는 구글 딥마인드의 강화학습이 더 매력적이었다. 시뮬레이터에서 시뮬레이션하면서 진화시킬 수 있는 방법을 마침내 찾게 된 것이다. 아타리 게임을 자동으로 하면서, 학습할 수 있는 것들의 학습 체계 구성은 내게 너무나 매력적이었다. 그러나 사실 강화학습은 데이터를 실시간으로 만들어서 대량 학습시킬 수 있는 것과 다르지 않았다. 당시에 깨달아야 했던 것은 신경망이 커져도 학습이 가능하다는 것과, 신경망을 키우면 더 복잡한 문제를 잘 풀 수 있게 구성할 수 있다는 것이어야 했다. 그리고 그것은 일리야 서츠케버가 OpenAI에 재직하면서 2020년 전후에 점점 더 강하게 깨달은 것이기도 했다. 그것은 수백억어치의 컴퓨팅과 엄청난 데이터 등 몇가지를 추가로 필요로 했기 때문에, 쉽게 알아내기는 어려운 방향이었다.

 

 그러나 과학자들은 생각보다 더 빠르게 신경망의 크기를 키워갔고, 이후에는 자연어 corpus라는 label을 하지 않아도 되는 거대한 학습 데이터를 재발견했으며, 이렇게 대량의 학습을 시킨 후에 fine tuning을 통해 사람처럼할 수 있다는 것을 깨달은 것이 바로 2020년대 전후의 이야기다. Google BERT를 시작으로 Transformer구조가 나오면서 사실은 이것이 조금씩 알려지기 시작한 것이다. 그리고 OpenAI의 ChatGPT출시는 2020년 후에 벌어지게 되었다. Google도 BERT크기를 경험하면서 더 키워볼 생각을 아마 했을 것이다. 그러나 OpenAI는 실제로 그것을 실행하고 그리고 발표까지 해버렸다. 

 

 돌이켜보면 이 2020년을 전후한 이 10년 남짓한 시기가 바로 완전하게 대규모 신경망에 대해서 인류가 깨닫게 된 시점이라고 생각한다. 그리고 인터넷에 널려있는 대규모의 언어데이터와 연산량, 그리고 적절하게 학습시킬 수 있는 신경망 학습법과 구조가 현대의 LLM을 탄생시켰다. 즉 digital brain을 실제로 작동시켜서 어느 정도 수준에 올라올 수 있다는 점을 보여주었다.

 

 물론 이 LLM이 사람만큼의 능력을 보여주지는 않는다. LLM은 상당히 복잡한 예외들에서도 단순한 논리들은 일정수준 이상 안정적으로 학습하는게 기존의 여느 모델대비 크게 향상된 점이다. 그리고 개인적으로는 흡사 사람의 뇌와 비슷한 방식으로 작동한다고 믿는다. 여러모로 LLM은 digital brain(사람과 비슷한 구조로 신경망을 가지고 작동된다)을 따르며, 과연 무엇이 다를까 싶을 정도로 인간 뇌와 유사한 능력을 보여준다. 여전히 인공신경망의 뉴런은 사람의 실제 신경세포와 매우 다르다고 하지만, 여러 부분 유사할 것이라는 강력한 믿음을 가지고 있는 것이다.

 

 또한 최근에는 이 digital brain을 연구함으로써 사람의 뇌를 더 이해하게 되고 그에 기반해 뇌를 더 자세히 분석해서 이를 digital brain개선에 이용할 수 있는 것이 아닌가 생각이 들기도 한다. 그리고 이는 Google/OpenAI/Anthropic등의 회사에서 자신이 만든 LLM모델을 가지고 연구하고 있다. 어떻게 단어의 의미가 신경망에 반영되고 그것을 신경망을 어떻게 수정해야 변형시킬 수 있는지 보고 있는 것이다. 다만 아직도 얀 르쿤같은 경우에는 실제 지능의 문턱에 오지 못했다고 생각한다. 그리고 나는 여전히 더 커진 연산량을 바탕으로 지속 진화를 통해 신경망을 개선하는 강화학습 형태의 무엇인가가 등장할 수 있다고 믿는다.

 

 여기서 얻은 또하나의 깨달음은 바로 제프 호킨스의 생애에 대한 점이다. 이 분은 팜파일럿의 창업자로 내가 꿈꾸었던 것과 동일하게 회사를 성공시키고 매각한 후 산타페에 인공지능 연구소를 차려서 연구를 하고 있다! 그리고 본인만의 다양한 방향으로 여러가지 연구를 하고 있다. 하지만 연구는 다양한 집단 지성하에 경쟁해야만 의미를 갖는게 아닌가라는 것을 이 분을 통해서 깨달았다. 인공지능의 연구란 개인이 어떤 돌파구를 마련하겠다고 진행할 수 있는 것이 아니다. 그것은 급격한 새로운 시도와 그것이 이전과 완전히 새로운 문을 열어주는 것들을 반복해야 한다. 엄청난 자금과 공유, 그리고 시도와 집단 지성은 불가능한 일을 해내는 거의 유일한 방법 같아 보인다. 그것이 내 개인적인 깨달음이고, 아마 앞으로도 그렇게 흘러가리라 생각한다.

 

 여하튼 내가 생각했던 것과 전혀 다르게 AI는 발전해버렸지만 아직도 꿈꾸고 있는 셈이다. 이미 인간은 구현되어 우리 눈앞에서 지능을 작동시키고 있고, 단지 우리는 그 세부만을 모를 뿐이다. 언제고 발견되기를 인간이 지구상에서 생각을 시작하는 순간부터 기다리고 있는 셈이다. 곧 그 의미를 파악할 수 있는게 아닌가 여전히 생각한다. digital brain이 2020년에 우리 앞에 나타나고 더 발견되기를 기다리고 있다.

 

반응형
Posted by 작동미학
블록체인2024. 6. 6. 22:33

 화폐의 본질을 생각해보면 교환이다. 지급(payment), 청산(clearing), 결제(settlement)로 나누어서 보기도 하는데, 결국 두 주체간의 가치 교환에 대한 내용이다. 그리고 이 교환을 표준화 및 수량화 시킨 것이 바로 "화폐"다.


 이렇게 수량화된 화폐는 가만히 생각해보면 늘 남는 돈이 발생할 수 밖에 없다. 다자간 교환이 다수가 발생하면서 시차와 금액차가 있기 때문에, 돈이 남지 않게 하려면, 모든 사람이 동시에 같은 금액을 거래해서 수입지출이 0이 되게 하는 실질적으로 가능하지 않은, 비현실적인 방법 밖에 없기 떄문이다. 그래서 정부는 실제 교환에 유효한 충분한 양의 화폐를 공급해야만 그러한 교환이 원활하게, 즉 경제가 돌아가게 할 수 있다. 물론 불행히도 여러가지 목적에 의해서 화폐량을 늘릴 수 있는 가능성을 별도로 하고도 말이다.

 

 여하튼, 또 다른 말로는, 가치 교환이 표준화 되는 순간 남는 돈의 존재가 필수적이 된다고 할 수 있다.

 

 사람들은 늘 이익을 극대화하 위해 노력하게 되는데, 그렇다면 이 남는 돈을 거래할 수는 없을까? 그래서 곧바로 빚과 이자, 신용이 탄생하게 된다. 이익을 극대화하는 것은 시장의 효율성에도 한몫 하는데, 그래서 이 신용은 시장을 효율화하기도 한다. 그리고 그 효율성을 추구하다보면 신용의 탄생이 필연이다.


 그런데 여기서 화폐란 어떤 특성을 지녀야 하는가? 이 때는 어찌보면, 그저 합의된 원장 역할의 기준만 되도록 해주면 된다. 그리고 그 원장의 가장 중요한 속성은 사라지지도 않고, 속일 수 없으면 된다. 당연히 가치가 보존되도록 발행량이 관리될 필요도 있다.

 

 그래서 의심스러워 보이는 비트코인도 화폐역할을 할 수 있다. 그리고 앞의 글에도 소개했듯이 이 비트코인은 일반 화폐가 지니지 못하는 많은 전자적인 편리 기능을 가지고 있다. 더할 나위없이 진보한 화폐이다. 원격 송금이 가능하며, 그 긴 세월 아직까지 해킹되어 붕괴한 적도 없고, 누구도 부인할 수도 없고 훔쳐갈 수도 없다. 발행량은 통제되며, 옮기는데 힘들거나 보관하기 어렵지도 않다. 더군다나 꽤 많은 사람들에게 인지되고 참여자가 많은 화폐이다. 세상에 이런 편리한 화폐가 있어왔는가?

 

 더군다나 비트코인에서 발전한 암호화폐는 이 신용에 대한 자체적인 기능을 일부 지원한다. 스테이킹이나 DeFi같은 스마트 컨트랙트 기능이 대표적이다. 이런 기능을 종합적으로 갖는 화폐가 기존에 있었던가? 결제는 또 얼마나 완벽한가. 비트코인의 발행량 통제는 너무나 잘 알려져 있고 갑자기 늘어날 일이 없다. 오히려 암호를 잊어 없어지는 화폐가 걱정일 정도다.

 

 물론 이 비트코인도 완전하지는 않다. 언급했듯이 소유주가 개인키를 잊으면 분실되는 단점이 있다. 몇가지 속성때문에 화폐 주도권을 갖으려는 정부가 금지할 수도 있다. 비트코인은 개인키를 모르면 통제할 수가 없기 때문에 몰수도 안되고 상속도 되지 않는 부분이 있는 것이다. 그리고 또하나 비트코인의 경쟁상대는 더 편리하고 보편적인 인지를 확보하게될 다른 암호화폐가 되겠다. 금이나 은같은 물질과는 다르게 암호화폐는 더 편리한 다음 서비스로 진화할 수 있는데, 언제고 또 다른 더 수수료도 적고 거래속도도 빠른, 기능이 다양한 비트코인의 다음 버전이 나와서 어떤 계기로 잘 정착되면 사람들이 서비스를 갈아 탈 수도 있겠다. 이런 관점에서는 DeFi가 가능한 이더리움이 강한 힘을 갖고 있지 않나 생각했던 적이 있다. 다만, 지금은 무제한 발행히 가능한 이더리움과는 적절한 수준에서 공존하고 있는 셈이고, 오히려 비트코인은 디지털 금의 위치를 차지하고 있는게 아닌가 싶다.

 

 이것이 내가 경험한 암호화폐의 더도덜도 없는 기능적인 상황에서의 현재라고 생각한다.

 

반응형
Posted by 작동미학
자연철학2024. 6. 1. 22:40

 수많은, 지식을 갈구하는 이들이, 깊숙한 곳 변하지 않는 진리를 찾아 심사 숙고한다. 하지만, 이러한 탐구는 쉽게 형이상학으로 빠져서 공허하고 방향을 잃기가 쉽다. 그러면 이러한 여정에 길을 잃지 않을 수 있는 틀이 있을까? 알고나면 특별하지 않는, 세가지 사항에 대해서 고려가 필요하다고 나는 주장하려 한다.

 

 첫번째는 인간 스스로에 대한, 즉 "나"에 대한 이해가 필요하다는 사실이다. 삶을 살아가고 사유하는 자신에 대한 근본적인 이해가 없이는, 어떠한 이해의 틀도 마련하기 어렵다. 모든 것은 나를 비추는 거울이기 때문에 사유를 행하는 주체인 "나"에 대한 이해가 필요하다. 설사 그것이 정답에 이르지 못하더라도, 우리는 불필요한 오해들을 제거할 수 있다.

 

 두번째는 이러한 자신을 둘러싼 환경에 대한 이야기다. 이는 어찌보면 첫번째와 연계되어 있을 수 있으나, "나"를 벗어난 확장이며, 이것은 우리 각자가 외부를 바라보며 이해하려는 대상이 된다.

 

 사실은 나와 내가 아닌 것은 이렇게 이분법적으로 이루어지지 않고 서로 상호작용하다고 주장할 수도 있겠으나 우선은 그 둘을 분리하여 이해의 주체와 이해의 대상으로 나누어서 이해하는 것은 충분히 가치가 있다고 다시 한번 이야기하고 싶다.

 

 마지막 세번째는 진리를 논할 때 우리가 어느 범위까지를 선택해 논해야 하는지에 대한 범주의 문제이다. 이는 앞의 두가지 제시된 나와 내가 아닌 것에 대해 각각 범위의 제한을 둠으로써 탐구에 현실성을 부여하게 된다. 적절한 제한사항을 선택함으로써 우리는 이 과학적 탐구가 지니는 현실성을 챙길 수 있다. 다른 말로 하면, 부적절한 범주에서 모호한 논쟁을 하느라 시간을 낭비할 필요가 없게 된다. 어찌보면 세번째 관점을 정함으로 인해서, 첫번째와 두번째를 적절히 선을 긋고 그 선 안에서 골고루 논쟁할 수 있게 된다. 그리고 그러한 제한 혹은 선 그음이 어떤 의미를 지니는지가 이 글의 주제이다.

 

 예를 들면 많은 이들은 태어나서 지금까지 혹은 최근 몇년 간을 자신의 탐구와 진리를 찾는 제한영역으로 본다. 그 이전은 고려하지 않고, 장소 범주를 봐도 가까운 주변을 삼는다. 누구도 인생을 고민함에 있어, 명왕성의 어딘가를 상정하지 않는 것과 같다. 우리의 머리속에는 지구에서도, 살고있는 근처만을 염두해둔다. 대부분의 인간은 자신의 살고 있는 시간과 공간을 그저 염두해두고 살아가기 때문이다. 예를 들면, 100년 전과 태양계 정도의 우주를 가정하고 세상을 살아가는 사람은 지극히 드물다. 평범하게 살아가는 인간은 수만년과 수억광년을 염두해 두어봐야, 최근 몇년간에 기반해서 판단되는 일상과 거리가 있게 된다. 범위가 맞지 않는 셈이다. 순간을 살아가는 대부분의 우리에게는 순간이면 충분한 경우가 많다는 뜻이다. 그러나 그러한 적당함의 크기는 인식의 범위에 따라 달라질 수 있고, 아주 특별한 이들에게는 그 범위를 훨씬 늘려 잡아야 할 수도 있다. 이를테면 지구과학을 탐구하는 학자에게는 수십억년의 지질의 역사의 범주가 이제 그의 필요 범주가 되고, 다행히 같은 그룹의 다른 학자를 만나면 그 범주가 여전히 유효하게 된다. 그렇게 범주별로 유효함이 다른 순간을 깨닫게 되고 그 전환을 느끼게 되면 이제 진리를 바라보는 일정한 틀을 느끼기 시작할 수 있다고 나는 생각하는 것이다.

 

 평범한 대중 대부분이 공유하는 적절한 통상의 범주가, 모든 이들을 위한 범위가 되지는 않는 것이다. 상상력이 깊고, 사색하는 사람에게는 수억년의 과거와 미래, 수십억 광년의 거리가 눈에 들어올 수 있다. 영화 "루시"에서 묘사한, 지능이 높은 존재는 과거와 미래, 모든 곳을 같이 경험하게 된다. 슈뢰딩거는 양자역학 지식만으로 분자수준의 DNA를 진작에 예언했고, 수많은 지적인 탐구를 하는 이들이 미래를 보고 기록한다. 그다지 통상의 일반적인 범주가 아닌데도, 즉 불필요해보임에도 불구하고 긴 시간과 공간을 살아가려는 사람들이 있다. 그들은 그들이 일상에서 경험하는 범주보다 훨씬더 큰 관점에서 세상을 바라보기를 열망한다. 즉, 그렇게 더 넓게 보편성을 갈구하는 탐구하는 자가 된다. 그래서 오히려 자신의 바로 옆과 가까이는 실감하지 못하면서도, 우주 수준의 크기에 대해서 혹은 찰나와 보이지 않는 작은 세계에 열정적으로 접근한다. 그리고 그러한 것들이 필요한 상황에서 그들은 이를테면 선지자로 두각을 나타내게 된다.

 

 역사 인식도 마찬가지다. 기억하지도 못한 과거를 탐닉할 수도 있고, 터무니 없이 오래된 일에 매력을 느끼는 이들도 있다. 그러나 그러한 범주에 대한 현실성의 인식은 필요하다. 범주를 더 넓히면 넓힐수록 보편 타당한 진리에 접근하는 희열을 느낄 수도 있겠으나, 지금의 살아가는 현실과는 괴리될 수 있다. 그리고 이 사실이 이해되며 고려되어야 한다. 삶은 대부분이 지금의 현실이기 때문이다. 인간으로서는 우주의 범주를 필요하는 순간이 그리 많지 않은 것이다. 하지만 그러한 범주를 필요할 때가 되면, 보편성이 너무나 중요해지는 순간이 오게되면, 그것에 대해 고민하는 소수의 사람이 주목받게 되는 것도 당연한 현실이다.

 

 조금 다른 관점을 생각해보자. 이를테면 우리 세상이 매트릭스의 세상이면 어떨까? 많은 논의에도 불구하고 만약에 영원히 깨어나지 못하는 매트릭스라면, 그것이 가상인지 아닌지가 별로 중요하지 않지 않을까? 즉, 가상의 세계라는 범주로 더 확장해서 어렵게 탐구할 수 있겠지만, 그것이 언제가 되어야 쓸모 있을지는  알 수 없다. 그러나 그 가상을 고려해본다면, 동시에 더 보편타당해질 수 있는 가능성, 더 확장된 세계, "진실"이 나타날 수 있는 확률은 더 커진다. 그래서 이는 탐구하는 자에게 선택의 문제가 될 수도 있다.

 

 그래서 우선 내가 선택하고 탐구하는 범주가 우선 중요하다. 그리고 그 선택이 지니는 의의와 현실성을 곱씹어봐야한다. 그리고 그러한 장단점에 대해 충분히 이해하고 나서, 첫번째와 두번째에 접근해 들어갈 수 있다. 당신이 궁극의 진리를 탐구하고 싶다면 그 범주를 상상의 범위까지 모두 늘리기 위해 고민하라. 타협은 없으며 끝까지 상상해서 확장해야 한다. 그러한 시도를 통한 발견은 더 보편적이고 일반적인 과학적 진리를 당신에게 안겨주게 될 것이다. 현자의 미래가 오늘로 당겨지게 된다. 물론 그러나 그러면 그럴 수록 더 당신의 일상과 상관없는 영역으로 들어가게 된다. 더 크게 볼수록, 소위 평범한 것과는 괴리가 될 수 있다. 하지만 제대로만 보면 우리는 언제나 그 더 큰 세상의 아주 작은 특수한 부분이라는 자명한 진리를 알게 될 수 있다. 그리고 그러한 진리가 얼마나 가치있는지는 지극히 당신이 처한 대내외적 상황에 의존하게 된다. 아무도 관심없을 수도 있고, 어떨 때는 힘을 발휘할 수도 있다. 그리고 어찌보면 이것이 진리에 대한 과학적 탐구의 리스크라고 볼 수 있다. 그렇게 범주의 문제를 인식해야 한다.

 

 

 

 

 

반응형
Posted by 작동미학
머신러닝AI2024. 5. 25. 21:40

 그동안 뇌를 이해하기 위한 측정은 MRI를 통해서 진행되었다. 특정 생각을 할때 혈류량을 측정해서 시각화하여 연구하는 방식이다. 그런데 이 방식은 여전히 한계가 있고 가장 중요한 한계점은 해상도가 낮다는 점이다.

 

 예를 들어, 기능적 자기공명영상(fMRI)은 뇌의 활동을 시각화하는 데 사용되지만, 그 해상도는 매우 낮아 세밀한 신경 활동을 포착하는 데 제한적이다. 그러나 최근의 연구는 대규모 언어 모델(LLM, Large Language Model)을 활용하여 뇌 연구의 새로운 길을 열 수 있음을 시사한다.

 

 LLM은 이미 그 내부 구조와 가중치, 계산값 등을 실시간으로 관측할 수 있는 특성을 가지고 있다. 이는 LLM을 디지털 뇌로 간주하고 이를 분석하는 것이 실제 뇌 연구에 유용할 수 있음을 암시한다(물론 둘의 유사성이 있다는 가정하이지만). 구체적으로, LLM의 모든 레이어와 노드의 결과값들을 표준화하여 시각화하는 방법을 제안할 수 있다. 예를 들어, LLM이 문장을 입력받아 토큰을 생성할 때마다 각 레이어와 노드의 값을 0에서 255 사이의 수치로 변환하여 1,000x1,000 픽셀의 이미지로 만들 수 있다. 이러한 이미지를 연속적으로 배열하여 영상을 생성하면, 마치 fMRI 영상처럼 LLM 내부의 신경망 작동 패턴을 시각적으로 관찰할 수 있다. 모델이 너무 크다면 몇개 주변 픽셀을 합쳐서 averaging할 수도 있고, 영상을 몇개로 분할할 수도 있겠다.

 

 이 방법은 LLM의 작동 원리를 이해하는 데 큰 도움이 될 뿐만 아니라, 인간의 뇌 연구에도 혁신적인 기여를 할 수 있다.

 

 LLM은 다양한 언어 데이터를 학습하여 추상화하는 능력을 가지고 있다. 따라서 LLM의 각 노드의 결과값 매트릭스를 분석하여 패턴을 찾는다면, 이는 인간의 뇌가 정보를 처리하는 방식을 이해하는 데 중요한 단서를 제공할 수 있다. 값이 많다는 점이 장애물이 될 수 있지만, 데이터를 구석구석 나누어 발화 패턴을 추상화하고 이를 다시 통합한다면, 대규모 신경망 구조에서도 의미 있는 패턴을 발견할 수 있을 것이다.

 

 이러한 접근 방식은 다음과 같은 과학적 가능성을 열어준다.

  1. 신경망의 시각적 분석: LLM의 내부 작동을 시각적으로 분석함으로써, 뇌 활동을 이해하는 새로운 방법을 제시한다. 이는 전통적인 fMRI보다 훨씬 높은 해상도를 제공할 수 있다.
  2. 추상적 패턴의 발견: LLM의 데이터를 통해 추상적 발화 패턴을 발견하고 이를 인간의 언어 처리 과정과 비교함으로써, 인간의 언어 처리 메커니즘을 더 잘 이해할 수 있다.

  3. 신경과학 연구의 새로운 도구: LLM을 디지털 뇌로 활용하는 연구는 신경과학자들에게 새로운 도구를 제공하여, 기존의 뇌 연구 방법론을 보완하고 확장할 수 있다.

 결론적으로, LLM을 활용한 디지털 뇌 연구는 인간의 뇌를 이해하는 데 새로운 길을 열어줄 수 있는 잠재력을 가지고 있다. 이를 통해 우리는 인간의 인지 과정, 언어 처리 메커니즘, 그리고 전반적인 뇌 기능에 대한 깊은 통찰을 얻을 수 있을 것이다. 앞으로의 연구는 이러한 가능성을 현실로 만들기 위한 구체적인 방법론을 개발하고, 이를 통해 신경과학의 새로운 시대를 여는 데 기여할 수 있지 않을까.

반응형
Posted by 작동미학
카테고리 없음2024. 5. 15. 18:43

이 학습 및 실험은 kohya_ss기반으로  https://infoengineer.tistory.com/134 의 설명을 그대로 따른다. 다만 아래와 같이 셋팅했다.

 

1. 집 고양이 사진을 100장 정도 준비했다. 600*400 정도로 리사이즈해둔다. 알씨같은 툴로 전체 선택후 일괄 조정이 가능하다.

 

2. kohya_ss를 시작한다. 설정은 기존 강좌와 동일하다. 물론 Utilities에서 BIP로 자막을 생성해둔다. 그리고 기존과 같은 방식으로 LORA로 학습하며 여기에서는 Civit의 Pet Photo(SD 1.5기반)를 base모델로 한다. 

    https://civitai.com/models/267871/pet-photography-album-of-animals-cats-and-dogs

   

아래는 셋팅의 내용들이다. 

 

 

3. 학습을 시작한다. 10 epochs으로 설정해두었다. (사실 3회 정도만으로도 충분히 효과를 얻을 수 있었으나 어쩐지 많이 돌리면 더 비슷하게 나올것 같은 마음이 늘 든다)

이미지 수정

 

4. Easy Diffusion을 통해 Lora를 구동한다. 단순한 합성과 다른 것은, 프롬프트를 통해 여러가지 효과를 줄 수 있다

  fat cat, cat with clothes, white background 같은 옵션으로 여러가지 효과를 얻는다. 다만 발이 여러개인 점은 피할 수 없는 것인가 보다. 필자의 경우에는 냥이의 전체적인 모습은 얼른 봐서는 차이점이 없다고 느끼는 정도로 유사했다. 

 

fat cat, 즉 뚱냥이로 묘사해서 얻은 이미지

 

with clothes 를 프롬프트에 넣어 얻은 이미지
a cat on the table, 어릴적 사진이 같이 들어가서 그런지 다양한 나이대를 보여준다. 발이 어색하다.

 

발과 몸이 어색한 경우가 있으나 전체적인 분위기는 동일하다.

 

5. 좀더 다양한 형태를 만들어보자.

  LoRA는 재미있는 속성이 있어서 "a tiger looks like a cat" 같은 형태로 써먹을 수 있다. 토끼, 소녀, 소년, 개, 호랑이 등으로 요청해서 생성한 이미지를 추가로 공유한다. 특히나 원래 원천 모델이 아니라 SD 1.5같은 기본 모델이 같으면 어느정도의 효과를 거둘 수 있다.

 

a boy looks like a cat, white background (with magicmix/civit.ai)
a girl looks like a cat, white background (with magicmix/civit.ai)
a dog looks like a cat, white background
a rabbit looks like a cat, white background
a tiger looks like a cat, white background

 

반응형
Posted by 작동미학
머신러닝AI2024. 5. 1. 10:53

윈도우(windows)에서도 easy_diffusion과 kohya_ss를 어느 정도 실행해서 이미지 합성에 대한 작업을 진행할 수 있다.

Windows 10 pro + RTX 4080 (536.23 driver) 기준의 환경에서 실행해 보았다. 명령은 모두 command 상에서 실행한다

(윈도우키+R을 누른 후 cmd를 실행하면 명령 실행이 가능하다)

 

 

1. easy_diffusion

 

 

이 설치는 너무나 간단하다. 아래 링크에서 Windows용 Easy Diffusion 최신 버전을 받자

https://github.com/easydiffusion/easydiffusion/tree/main#installation

 

이 글을 쓰는 시점에서는 Easy Diffusion 3.0이 최신이다. 아래 Download for Windows 버튼을 누르고 실행해주면 된다. linux/mac/windows 동일한 방식으로 간단하게 실행해서 웹 인터페이스로 생성해볼 수 있다.

 

[easy_diffusion의 윈도우 설치 가이드 포함 페이지]

 

[easy_diffusion을 실행 설치하면 나오는 화면이다.내부에 conda와 git을 자체로 가지고 있다]
[설치가 끝나면 역시 자동으로 브라우저가 떠서 실행해볼 수 있게 된다.]

 

실제 사용 관련해서는 다른 글들을 참조하면 된다. models/stable-diffusion/ 에 사용하는 모델파일을 넣어 사용해보자(civit.ai에서 checkpoint 모델들을 크기가 크지만, 다양하게 다운로드 받을 수 있다. https://infoengineer.tistory.com/122 를 참조하자)

 

2. kohya_ss

 

모델을 학습하기 위한 kohya_ss에 대한 설치이다.

 

A. python 10와 git이 필요하다.

 

    개인적으로는 Anaconda설치를 권한다. 따라서 Anaconda 사이트에서 윈도우용 Anaconda를 설치하고

    아래와 같이 실행한다. git은 윈도우용 git을 다운로드받아( https://git-scm.com/download/win ) 기본옵션으로 설치하여 실행하면 된다. (만약에 python 3.10을 직접 설치해서 곧바로 진행한다고 하면 그렇게 해도 상관없다.)

 

    D:\dev\conda> conda create -n kohya_ss python=3.10

    D:\dev\conda> conda activate kohya_ss

 

B. git으로 kohya_ss를 checkout 하고 setup.bat를 실행한다.

 

    D:\dev> git clone https://github.com/bmaltais/kohya_ss.git 

    D:\dev> cd kohya_ss

    D:\dev\kohya_ss> setup.bat

 

 이때 NVidia GPU 사용자는 2번을 눌러 cudnn을 최신으로 받아주자. 시간이 조금 걸린다(고속화에 도움이 된다고 한다)

 그런 후 1번을 선택해 Kohya_ss를 GUI로 실행한다.

 

setup.bat 실행 후 화면, 2번과 1번을 차례대로 선택해주자.

끝나면 7. Exit Setup을 선택해서 나오면 된다.

 

C. 아래와 같이 실행하면 내부에 웹서버가 뜨면서 우리가 활용할 수 있는 단계로 진입한다.

 

 D:\dev\kohya_ss> gui.bat

kohya_ss 윈도우 실행화면

 

위의 마지막 부분에 표시된 http://127.0.0.1:7860 주소를 브라우저로 열어보자. kohya_ss의 gui가 보인다. 해당 사용법 관련해서는 연관 글을 참조한다. ( https://infoengineer.tistory.com/134 )

kohya_ss의 윈도우가 보인다.

 

 

 

 

 

 

반응형
Posted by 작동미학
머신러닝AI2024. 4. 27. 17:16

오픈소스 LLM 모델을 local에서 띄워서 구동하는 가장 손쉬운 방법은 ollama 이고 지난번에 소개한 적이 있다.

https://infoengineer.tistory.com/135

macos에서도 구동되기 때문에 너무나 간단하게 llama3, gemma, phi-3, command-r 등 어느정도 한글이 되는 모델들을 다운로드 받아서 구동시킬 수 있다.

 

그리고 일단 이렇게 구동되면 langchain과도 바로 연결된다.

 

$ ollama run llama3:instruct
>>> give me a joke
Here's one:
Why don't eggs tell jokes?
(wait for it...)
Because they'd crack each other up!
Hope that made you smile!
>>> Send a message (/? for help)

 

이렇게 구동이 되면 내부에 API 서버가 이미 구동되어 대기 상태가 된다(ollama serve 명령으로도 띄우는 것이 가능하다)

이후에는 아래와 같이 시험해볼 수 있다.

 

$ curl http://localhost:11434/api/generate -d '{
  "model": "llama3",
  "prompt":"Why is the sky blue?"
}'
{"model":"llama3","created_at":"2024-04-27T08:10:00.736586071Z","response":"What","done":false}
{"model":"llama3","created_at":"2024-04-27T08:10:00.746743823Z","response":" a","done":false}
{"model":"llama3","created_at":"2024-04-27T08:10:00.757109205Z","response":" great","done":false}
{"model":"llama3","created_at":"2024-04-27T08:10:00.768475258Z","response":" question","done":false}
....

{"model":"llama3","created_at":"2024-04-27T08:10:04.094431458Z","response":".","done":false}
{"model":"llama3","created_at":"2024-04-27T08:10:04.104777568Z","response":"","done":true,"context":[128006,.....,128009],"total_duration":3490085755,"load_duration":2410324,"prompt_eval_count":11,"prompt_eval_duration":75044000,"eval_count":327,"eval_duration":3368118000}

 

아니면 이제 langchain을 사용할 수도 있다.

 

$ cat > langchain_ollama_stream.py 
from langchain.callbacks.manager import CallbackManager
from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler
from langchain_community.llms import Ollama

llm = Ollama(
    model="llama3", callback_manager=CallbackManager([StreamingStdOutCallbackHandler()])
)
llm("The first man on the summit of Mount Everest, the highest peak on Earth, was ...")

$ python3 langchain_ollama_stream.py 

....

....

 

그 외에도 다양한 방식의 langchain사용이 가능하다. 잘 응용해서 사용해보자.

 

 

1) 간단한 invoke

 

from langchain_community.llms import Ollama

llm = Ollama(model="llama3")

llm.invoke("Tell me a joke")

 

 

2) 간단한 stream 형식의 출력

 

from langchain_community.llms import Ollama

llm = Ollama(model="llama3")

query = "Tell me a joke"

for chunks in llm.stream(query):
    print(chunks, end="")

 

반응형
Posted by 작동미학
머신러닝AI2024. 4. 27. 16:46

AI로 무엇을 하다보면 linux에 GPU로 환경을 구성하는데, 도대체 잘 이해가 가지 않는 것이 이 버전 관계다.

Ubuntu 버전, GPU 버전, NVidia driver버전, cuda 버전, cudnn 버전... 등등 헷갈린다. 이제 그 관계를 이해해보자.

 

결론은 지금 '24년초 시점에서는 Ubuntu 22.10, NVidia driver는 GPU버전에 맞는것(홈페이지 참조), CUDA는 11.8을 중심으로 설치하자. cudnn은 8.7 정도를 선택하면 되고 쉽게 바꿀 수 있다. 각각의 버전을 바꾸고 싶은데 다시 깔아야 할지 고민인가? 아래를 따라가보자.

 

 

0. 요약해보면 아래와 같다

  A. NVidia driver는 여러개를 설치할 수 없고 내 GPU, 원하는 CUDA버전에 맞는 가장 최근의 driver를 설치한다

  B. CUDA는 여러개의 버전을 설치해서 LD_LIBARY_PATH만 잘 바꾸면 그때그때 바꾸어 쓸 수 있다

  C. cudnn은 CUDA안에 library만 교체하면 되므로 역시 필요할때마다 특정 CUDA버전의 버전을 덮어쓸 수 있다.

       만약에 cudnn도 같은 CUDA에 여러가지 버전을 쓰려면 똑같은 CUDA를 여러개 복사해서 설치 한후, 그 각각에 cudnn을 설치하고 LD_LIBARY_PATH를 변경해서 쓰는 신공도 가능하다. cuda-11.8.A, cuda-11.8.B 식으로 설치하는 식이겠다

 

 다만 버전 결정 순서는, 내가 쓸 프레임웍이 지원한는 CUDA 버전은? 그에 맞는 내 GPU에 호환되는 NVidia driver 버전은? 그에 맞는 cudnn버전은? 그리고 python 버전은? 식으로 결정되어 간다. cuda, cudnn, python은 여러개의 버전을 설치해놓고 번갈아가면서 쓸 수 있다.

 

1. 먼저 필요한 CUDA 버전이 중요하다. CUDA 11.8이 가장 많이 호환되는 CUDA 버전이다.

 

 판단기준 : 내가 쓰는 프레임웍(pytorch, tensorflow?)이 지원하는 CUDA는 무엇인가? 대개 11.8이다

 

 CUDA는 최근에 11, 12시리즈가 시장에서 주력으로 사용되는데, 많은 오픈소스 ML 프레임웍이 11버전을 지원한다.

 특히 우리의 가장 중요한 친구 pytorch 2.1 미만 버전들이 CUDA 11에 의존한다. tensorflow나 주력으로 쓰는 framework들이 지원하는 버전을 확인해서 만약에 CUDA 12를 지원한다면 12버전을 쓸 수도 있겠다. 하지만 아직은 최신 프레임웍의 버전들만 간신히 지원하는 CUDA12를 쓸 용기는 없다. 우리는 가져다 쓰는 기존 소스코드들은 예전 버전인 경우가 더 많기 때문이다. 물론 CUDA12에 최신 버전 프레임웍을 설치해서 새로 소스코드를 짤 수도 있겠지만 그런 경우는 흔하지 않겠다.

 

 그러니 CUDA 11.8을 설치하자. 참고로 아래는 tensorflow의 버전별 CUDA + cudnn 버전이다. 각 프레임웍들이 각각 이런 정보를 공개한다.

https://www.tensorflow.org/install/source?hl=ko#gpu

 

 그리고 CUDA를 여러가지 버전으로 설치할 수 있을까? 정답은 Yes이다. 원하는 CUDA버전을 설치하면

 /usr/local/cuda-x-x/ 식으로 설치되고 이 디렉토리가 /usr/local/cuda로 심볼릭 링크가 걸린다(어떤 패키지들은 이 /usr/local/cuda를 참조하기 때문이다)

 

여러개의 cuda버전을 어떻게 참조할까? 바로 LD_LIBRARY_PATH라는 lib파일 참조 경로를 바꾸면 된다. 이 설정을 각 계정의 .bashrc에 반영하면 기 계정으로 로그인하면 해당 환경을 자동으로 사용하게 된다. 계정마다 별도의 설정으로 진행하자.

 

$ export PATH=/usr/local/cuda-x-x/bin:${PATH}

$ export LD_LIBRARY_PATH=/usr/local/cuda-x-x/lib64:${PATH}

 

 심볼릭 링크를 바꾸어 주어야 하는 상황이면 아래처럼 한다

 

$ cd /usr/local/

$ ls -al cuda          #해당 명령으로 지금은 어느 버전으로 연결되었는지 확인하자

 cuda -> cuda-y-y

$ rm cuda

$ ln -s /usr/local/cuda-x-x cuda

 

CUDA를 설치할때는 linux의 경우 아래와 같이 run local을 다운로드 받은 후 아래 driver를 먼저 설치한 후, 실제 CUDA설치시에는 해당 driver를 skip하고 설치하여 혼란을 방지한다.

NVidia에서 다운로드 받을때 예시(runfile로 받아서 driver는 아래 먼저 깔고, 여기서는 skip한다)

 

아래 드라이버와 CUDA설치가 같이 이루어지게 되는데, 잘 맞지 않는다면 언제나 아래 명령으로 처음부터 다시 설치할 수 있다.

 

$ sudo apt install -y ubuntu-drivers-common   #맨처음이라면

 

$ sudo apt-get purge nvidia*

$ sudo apt-get autoremove

$ sudo apt-get autoclean

$ sudo rm -rf /usr/local/cuda*

 

$ sudo apt install build-essential      #gcc가 없는 경우

$ sudo ubuntu-drivers devices     #추천 nvidia drivers를 찾을 수 있다(recommended)

$ sudo apt install nvidia-driver-535  #추천받은버전

$ reboot

 

이후 cuda를 다시 설치하되, nvidia driver만 skip하고 설치한다.

(ex> $ sudo sh cuda_11.8.0_520.61.05_linux.run  / nvidia driver는 uncheck하고 진행)

 

2. NVidia driver는 아래와 같은 CUDA와의 호환 관계를 갖는다. 최신 CUDA는 최신 NVidia driver가 필요하다.

 

 판단기준 : 내가 쓰는 CUDA 버전이 최신일수록, 최신의 NVidia driver를 가져다 설치해야 하는데, 내가 가진 GPU카드별로 지원하는 Driver 버전이 다르다. 오래되거나 어떤 GPU는 Driver 버전 지원도 나쁘다. 거꾸로 내가 써야할 CUDA 버전을 지원하는 NVidia driver를 지원하는 GPU를 사야할 수도 있다. 

 

 즉 어느정도 Driver 버전 이상이 되어야, 최근의 CUDA 버전이 지원된다. Linux와 Windows가 조금 다른 것에 주의하자.

아래가 대략의 정보이고 세부 정보는 이 링크를 확인해보자. https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html#id6

https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html#id6

 

 그리고 언급했듯이, 유의할 것은 해당 Driver 버전 중 일부는 특정 GPU 카드를 지원하지 않을 수 있다. 따라서 내가 가진 GPU 카드가 지원되는 드라이버 버전을 선택하자. 각 지원 버전은 NVidia 사이트에서 역시 확인이 가능하다. 신기하게도 GPU마다 지원되는 버전이 들쑥날쑥하니 꼭 내 GPU카드가 지원하는 버전을 확인해두어야 한다.

 

 혹시 내가 설치해서 쓸 OS Linux Package들이 이 드라이버 버전을 띄엄띄엄 지원할 수도 있으니, 아예 Linux에서 배포판 별로(ubuntu?) 지원되는 버전별로 찾아봐서 내 GPU를 지원하는지 확인할 수도 있다.

 

https://www.nvidia.co.kr/Download/index.aspx?lang=kr

 

대략 NVidia driver 525나 520, 515버전 등을 많이 설치하긴 한다. 여기서는 CUDA 11.8을 추천하려고 하므로 520이상 버전을 설치하려고 노력해보자.

 

참고로 아래 명령을 통해 linux에 설치된 GPU정보나, 추천 드라이버를 제공받을 수 있다

 

$ lshw -C display           #RTX4080예시이다

  *-display                 
       description: VGA compatible controller
       product: NVIDIA Corporation
       vendor: NVIDIA Corporation
       physical id: 0
       bus info: pci@0000:01:00.0
       version: a1
       width: 64 bits
       clock: 33MHz

$ sudo ubuntu-drivers devices          #RTX4080예시이다

== /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0 ==
modalias : pci:v000010DEd00002704sv00001462sd00005111bc03sc00i00
vendor   : NVIDIA Corporation
driver   : nvidia-driver-545-open - third-party non-free
driver   : nvidia-driver-535 - third-party non-free
driver   : nvidia-driver-535-server - distro non-free
driver   : nvidia-driver-525-server - distro non-free
driver   : nvidia-driver-550-open - third-party non-free
driver   : nvidia-driver-550 - third-party non-free recommended
driver   : nvidia-driver-525 - third-party non-free
driver   : nvidia-driver-535-server-open - distro non-free
driver   : nvidia-driver-525-open - distro non-free
driver   : nvidia-driver-545 - third-party non-free
driver   : nvidia-driver-535-open - distro non-free

 

 불행히도 nvidia driver는 multi로 쓸 수는 없고, 다시 설치하고 reboot해야한다. (다만 recommended가 너무 낮지 않으면 그것을 선택하면 좋다)

 

 

3. Ubuntu 버전과는 어떻게 되는가? 23.10보다는 22.04가 더 유리하다.

 

 판단기준 : Ubuntu 배포판 버전이 아니라, 설치된 gcc 버전이 중요하다. CUDA 11을 컴파일하기 위해 구 버전인 gcc 10이 필요하기 때문이다.

 

 Ubuntu 23.10은 GCC 13버전 컴파일러를 디폴트로 사용하는 반면, CUDA 11/cudnn 등 컴파일에 GCC 10가 필요다. 그래서 사실은 Ubuntu 23.10을 사용해도 GCC 10버전 컴파일러를 디폴트로 정하면 CUDA 11을 쓸 수 있다! 그런데 이 Ubuntu에서 GCC 버전을 왔다갔다 설정하면서 설치할 배짱이 없다면 그냥 Ubuntu 22.04을 설치하자. 

 

혹시 Ubuntu 23.10을 써야한다면 아래 가이드를 참고하자. gcc 버전을 바꾸어 설치하는 방법과 다시 gcc 버전을 원복하는 방법이 나와있다.

https://www.yodiw.com/install-cuda-11-on-ubuntu-23-10/

 

그래서 이러한 번거로움 때문에 Ubuntu 22.04을 설치해서 운영하도록 추천하게 된다.

 

 

4. cudnn은 어떻게 할까?

 판단기준 : CUDA 처럼 사용하는 프레임웍별로 필요한 버전을 설치해줘야한다. 대략 8.7 버전 정도가 현재는 제일 무난하다.

 

 cudnn의 8.7.0버전은 CUDA 11과 12모두 각각에 개별 버전별로 따로 있다(즉 cudnn 8.7 버전이 CUDA 11, 12에 각각 별개의 배포판이 있다). 다행히 이 cudnn은 설치 후에도 쉽게 교체 및 추가 할 수 있다. 여러개를 설치하고 전환도 가능하다. 그저 배포하는 압축파일을 풀어서 폴더 그대로 기존의 설치된 cuda폴더의 include/lib 파일만 교체해주면 그만이기 때문이다.

 

예를 들면 CUDA가 /usr/local/cuda-11.8로 설치되어 있고 /usr/local/cuda -> /usr/local/cuda-11.8로 링크가 걸려있다고 치자. 그러면 cudnn은 해당 버전 압축 파일을 받아, 파일의 압축을 적절한 곳에 푼 다음에 아래처럼 복사해 덮어 씌우면 된다.

물론 버전이 바뀔때마다 같은 작업을 하면 된다. 그러니까 여러 버전의 압축을 풀고, 쓸때마다 버전을 바꾸어 복사한 후 필요한 프로그램을 실행하면 된다.

 

아래를 통해 cudnn 배포판 다운로드 (로그인이 필요하다) 하고 그 이하의 절차로 include/lib파일을 복사해버리자.

https://developer.nvidia.com/rdp/cudnn-archive

 

$ tar -xvf ${CUDNN_TAR_FILE}
$ sudo cp -P cuda/include/cudnn*.h /usr/local/cuda-11.8/include/
$ sudo cp -P cuda/lib/libcudnn* /usr/local/cuda-11.8/lib64/
$ sudo chmod a+r /usr/local/cuda-11.8/include/cudnn*.h /usr/local/cuda-11.8/lib64/libcudnn*

 

간단하게 버전을 어떻게 잡으면 될지 잡아보았다. 상기 모두 정상 설치되면 아래 명령을 통해 설치 정보를 알 수 있다.

 

$ nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2022 NVIDIA Corporation
Built on Wed_Sep_21_10:33:58_PDT_2022
Cuda compilation tools, release 11.8, V11.8.89
Build cuda_11.8.r11.8/compiler.31833905_0

$ nvidia-smi

Sat Apr 27 16:54:09 2024       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 525.125.06   Driver Version: 525.125.06   CUDA Version: 12.0     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  NVIDIA GeForce ...  On   | 00000000:01:00.0  On |                  N/A |
|  0%   39C    P8    25W / 320W |    592MiB / 16376MiB |      0%      Default |

 

흥미로운 것은 위 nvidia-smi의 CUDA은 추천 cuda 버전이다.

 

실제 설치 cuda 버전은 nvcc 명령으로 확인하자.

 

 

5. python 버전은 어떻게 할까?

 

 이것이야말로 실행할 프로젝트에 따라 다른데 대략 3.9~3.11정도가 추천되고 있다. 각 프로젝트별로 매우 세분화된 python버전을 요구할 수 있다(3.10.8이상 등). 따라서 설치할 프로젝트를 유심히 보는 수 밖에 없다. 하지만 우리는 여러개의 프로젝트를 실행하게 되기 때문에, 이 문제를 해결하기 위해 Anaconda(conda)를 사용하게 된다. 각 환경 별로 서로 다른 python과 package를 설정해 다중으로 사용하게 할 수 있는 합리적인 방법이다. Anaconda설치는 간단히 웹서핑해서 최근의 버전을 설치하면 된다. 서로 다른 버전으로 서로 다른 패키지 환경을 구성해 실행하는 것이 Anaconda의 마법같은 장점이다.

 

 Anaconda를 설치한 후 아래와 같은 형태로 이 python 버전에서 자유로워지자. 꼭 미리 conda create 명령으로 전용 환경을 구성한 후 conda activate를 통해 해당 환경을 활성화하고 실행하는 것이다. 디스크 용량을 필요로 하긴 하지만, 이보다 더 편안한 방법도 드물다. 적극 활용하도록 하자. (설치 경험이 없으신 분은 https://jongsky.tistory.com/21 를 참조하자) 아래는 대표적인 환경 구성 및 활성화, 설치 명령이다.

 

$ conda create -n llama2 python=3.9 -y

$ conda activate llama2

(llama2) $ pip install ...

$ ..

$ exit

 

 

이제 이 글을 몇번 앞뒤로 왔다갔다 하면서 설치해서 사용해보면, 여러분은 이제 어떤 버전이든 대응할 수 있게된다.

 

반응형
Posted by 작동미학