0. 요약
구형에다가 경량으로 디자인된 노트북에 대규모언어모델(LLM)을 올려보았습니다. ChatGPT같은 챗봇으로 소통하는 언어모델입니다. 이 글에서는 그 경험을 공유합니다.
그 과정에서 LLM 경량화가 무엇인지를 NLP 비전공자 수준에서 소개합니다. 또한 누구든 하찮은 기계에 LLM을 따라 올려볼 수 있도록 각 단계를 소개합니다.
또한 여담으로 인공지능에 의한 불법적 계엄사태에 저항하는 연습도 해봅니다.
목차
1. 가벼운 기계
나한테는 2017년에 구입해서 한 3년 정도 사용했던 경량 노트북이 있다. 모델명은 삼성 nt900x5y, 흔히 "노트북 9 Always"라는 상품명으로 알려진 제품이다.
이 노트북은 광고가 인상적이었다. 경량 노트북이고 특히 usb-c 포트를 통한 충전이 가능하다는 걸 강조하는 광고였는데, 친구끼리 사막으로 여행 갈 때 이 노트북 갖고 '막 쓰다가' 밤에 밧데리가 10%로 떨어져버린다. "걱정 마 외장배터리로 충전 가능함" 이러면서 뙇 충전을 시작해버리는 그런 광고였다.
이 광고에서는 나오지 않지만, 개인적으로 가장 유용하게 쓴 기능은 힌지를 180도로 쫙 펼친다음 화면을 상하반전할 수 있는 것이었다. 랩 미팅 등에서 내 화면을 건너편 사람한테 보여줘야할 때 진짜 개 유용했음.
어쨌든 사양은 대충 이렇다.
CPU: Intel® Core™ i5 Processor 7200U
Graphics: Intel® HD Graphics 620
RAM: 8 GB DDR4
무게: 980g
진짜 Always에 맞게 성능보다는 경량화와 휴대가능성에 초점을 맞춘 디자인. RAM 확장은 안되지만 저장공간확장은 가능해서 1TB SSD를 나중에 달아주었다.
시간이 지나다보니 아무래도 성능저하가 느껴졌고 심지어 윈도우11을 올릴 수도 없을 정도로 하찮아져버렸다. 그래서 얼마전 싹 밀어버리고 Ubuntu를 올려서 쓰고있다.
문득 이런생각이 들었다. 이 하찮은 기계에도 LLM을 올릴 수 있을까? ChatGPT 정도의 성능은 기대할 수 없더라도 뭔가 쥐어짜낼 수 있지 않을까?
2. 가벼운 모델
Large Language Model(LLM)의 추세 중 하나는 경량화다. 경량화가 통용되는 용어인지는 모르겠지만 (NLP 전공자 아님) 내가 뜻하는 경량화는 이런거다.
- 퍼포먼스 저하가 심하지 않은 수준에서 Parameter 개수를 줄이기
- quantization (양자화): float 처리 상 해상도 낮추기
LLM은 모델 훈련하는 데에도 엄청난 자원이 들어가지만 그 훈련된 모델을 활용하는 과정에서도 엄청난 자원이 들어간다. 보통 LLM의 용도는 챗봇으로 농담따먹기부터 문의 응대하기 문서 요약하기 코딩 도와주기 등등 다양한데 이런 일을 하는 과정 (inference)에서도 메모리와 연산장치(GPU나 CPU) 요구가 크다.
GPT를 그저 ChatGPT 같은 인터페이스로만 접근할 수 있고 모델 그 자체를 로컬로 올릴 수 없는 이유도, 로컬 머신의 메모리와 연산능력이 받쳐주지 못하기 때문이다. 또한 경량화되지 않은 모델은 아무리 충분한 자원을 받쳐준다고 해도 inference하는 데 시간이 소요된다.
그런데 LLM을 사용해야할 상황은 너무나 다양하고, 모든 경우에 완벽한 퍼포먼스가 필요한 것은 아니다. 예를들어 그저 팩트체크하는 데에는 아주 간단한 모델만으로 충분하다. 농담따먹기 하는 데에도 그러하다.
물론 "챗봇이 변호사시험을 통과했다, 수능만점 받았다, 튜링테스트를 통과했다" 어쩌고저쩌고 할 때 주어가 되는 그 챗봇은 이런 경향화 모델이 아니라 flagship 모델.
그러니까 요약하자면 LLM 발전에는 두 방향이 있는데, 한쪽에선 자원은 얼마나 사용해도 상관없으니 고성능으로 몰아붙여서 변호사시험 통과하고 수능 만점받고 혹시나 인류를 파괴할지도 모르는 flagship 모델을 개발하고, 다른쪽에서는 그 flagship 모델을 실제로 사용할 수 있게 가볍게 만드는 것이다.
3. 가벼운 기계 + 가벼운 모델
그런데 LLM이 가벼워봤자 여전히 ✨최신기술✨ 아닌가? 아주 하찮은 기계에도 올려서 쓸 수 있을까? 그래서 해보았다.
이 섹션에서는 Intel i5 CPU, 8GB 램 노트북에 로컬로 LLM 올린 후 변명을 얼마나 잘하나 보는 방법을 소개한다.
왜 굳이 LLM을 로컬로 돌릴 수 있어야 하나 궁금해 한다면 이렇게 답변하고 싶다.
혹시 모르지 않은가? 나중에 진짜로 AI가 인류문명을 멸망시키려 한다면 인터넷과 통신부터 끊을텐데, 그때 인류가 AI를 물리치려면 로컬 LLM이 꼭 필요하다.
막 고도로 발달한 AI가 '인류의 안녕을 위해' 계엄령을 선포하고 전기와 통신을 모두 끊어버린다면, 우리가 저항하기 위해 할 수 있는 가장 효율적인 방법은 무엇일까? 자가 전기 발전기로 전기 생산한다음 그 전기로 랩탑을 켜고 로컬 LLM으로 "야 ChatGPT 물리칠 수 있는 방법 좀 알려줘" 라고 프롬프트 쓰는 것이 가장 효율적이지 않을까? (농담)
이 섹션에서는 그걸 하는 방법을, 심지어 아주 하찮은 PC에서 하는 방법을 단계별로 소개한다. (만약 ChatGPT 계엄사태 때 로컬 LLM이 인류를 어떻게 도와줄 수 있나부터 알고싶다면 여기 클릭)
자홍색 terminal 창이, 나의 초경량 Always 9 노트북에서 작업한 스크린샷이다. 이외에도 가끔 검은창 스크린샷이 있을텐데, 그건 나의 주력 머신인 MacBook Pro에서 로컬 LLM 돌렸을 때 찍은 거다.
3.1 Ollama 설치
Ollama는 다양한 LLM을 로컬에 올려서 사용하는, 일종의 LLM 관리도구라고 생각하면 된다. 윈도우유저라면 제어판에 있는 '프로그램 추가/삭제'를 통해 프로그램 쉽게 지울 수 있는 걸 떠올리면 된다. 그런식으로 모델들을 골라 쓸 수 있는 도구다.
Ollama와 언어모델 자체는 무료다. 물론 무료 언어모델들은 각 회사가 flagship으로 내세우는 엄청 거대한 모델들은 아니지만, 그런 flagship 모델들의 경량화 버전들도 있다.
Ollama를 설치하려면 https://ollama.com/download에 들어가서 OS에 따라 설치하면 된다.
(여담이지만 Ollama 캐릭터는 볼때마다 유튜브 채널 '속삭이는몽자'가 생각난다)
섹션1에서, 초경량 기계에 우분투를 올렸다고 했는데, 리눅스의 경우 아래 curl 코맨드 쓰면 받을 수 있다.
마지막줄에 WARNING이 떴는데, 당연히 그 노트북에 NVidia/AMD GPU는 없기에 CPU-only mode로 작동한다.
윈도우나 맥의 경우 실행가능한 설치파일을 다운로드하면 된다. 맥에서 설치할 때는 .app 파일이 들어있는 압축파일 형식으로 배포된다. 그 압축파일을 다운로드받아서 풀면 .app 파일이 나오는데 그것을 Applications 폴더에 넣어서 쓰면 된다.
윈도우의 경우도 마찬가지 (아님 WSL 쓰는 것도 방법이지 싶다.)
어떻게든 설치를 마치고나면, Ollama가 터미널에서 실행된다. 이제 Ollama에서 사용할 LLM을 고를 시간이다.
3.2 LLM 고르기
Ollama 만 있다고 LLM을 쓸 수 있는 건 아니다. 앞서 적었듯이 Ollama는 그저 중개인(?)일 따름이고 언어모델은 미포함이다. 기본적으로 대부분의 Ollama 튜토리얼에서 llama3 모델을 표준적으로 다운로드시킨다. 그러나 다른 모델들도 있다.
어떤 LLM을 쓸 수 있는지, 그리고 무료 모델 중에서 고르려면 Ollama 홈페이지에서 Models tab을 누르면 된다.
각 모델이 일단은 인기순으로 나와있는데, llama3 모델 중 가장 최신 모델인 llama3.3을 선택해도 그 아래에 가면 다양한 사이즈의 모델들이 쭉 있다. 적절한 걸 골라서 다운로드하면 된다.
llama3.3을 통해 예를 들자면, 위의 스크린샷에서 보듯, llama3.3의 70b (700억 개의 parameter) 모델은 용량이 43GB에 달한다.
Q4_K_M 양자화 했는데도 43GB라는건, 양자화 전 llama3.3의 오리지날 모델은 160GB가 넘을지도 모른다는 걸 의미한다. 그나마 성능저하 최소화하는 방식으로 줄인 게 43GB라는 의미다.
물론 기계의 리소스가 받쳐준다면 이거 받아서 써도 된다.
이 모델을 다운로드받으려면 빨간색 박스에 들어있는 명령어를 쓰면 된다. 이 명령어를 Ollama가 실행중인 터미널에서 실행시키면 지가 다운로드하고 다 한다.
파란색 화살표는 동일 모델의 다양한 버전? 체크포인트? 변이형? 을 나열한다. 일단 llama3.3은 하나밖에 안 뜨는데, View all을 클릭하면 더 볼 수 있다.
앞서 llama3.3의 70b 모델의 규모에 대해 얘기했는데, 비록 양자화되긴 했지만 여전히 현실적으로는 일반인들이 쓰기에는 상당히 부담스러운 규모다.
그래서 가장 현실적으로 노트북에 올려서 쓸 수 있을 정도는, 아예 경량화를 의도하고 디자인된 llama3.2 정도나, llama3.1의 8b (파라미터 80억 개) 버전이 아닐까 한다.
llama 3.2를 보면, 아래와 같이 1b (파라미터 10억개) 버전과 3b (파라미터 30억개) 버전이 있는데, 용도에 맞게 쓰면 된다. 3b 버전은 속도가 느린대신 대답 퀄리티가 좋을 것이고, 1b 버전은 속도는 빠른데 대답 퀄리티가 안 좋을 수 있다.
llama 3.2의 3b 모델정도는 아주 가볍게 돌릴 수 있는 로컬 머신이라면, llama3.1 쓰면 된다.
자 이제 2024년 12월 기준, 어떤 모델 쓸지 정리해보자.
그냥 개인이 쓰기에 다양한 llama 모델 중에서 어떤걸 골라야 할지 간편척도(rule of thumb)는 아래와 같다.
- 랩탑이고, 오래되었고 사양이 안좋다 (최저): llama 3.2, 1b (1.3GB)
- 그정도까진 아니지만 여전히 가벼운 모델이 필요하다: llama 3.2, 3b (2GB)
- 기준점: llama 3.1, 8b (4.9GB)
- 컴퓨터가 좀 좋다. 제대로 된 LLM 써보고 싶다: llama 3.3, 70b (43GB)
- 나는 거짓말을 했다. 개인이 쓰기에 좋은 모델 찾는 거 아니고 서버에서 돌릴거다: llama 3.1, 405b (243GB)... 가 아니고! 다른 글을 찾아보세요.
3.3 한국어 구사자 모집
그런데 내가 위에서 기준점으로 소개한 llama3.1 (8 billion parameters) 은 한국어가 어눌하다. 따라서 그보다 못미치는 다른 llama LLM들도 한국어가 어색할 것이다.
😵💫😵💫
이 모델이 그냥 대화자체를 못하는 건가 하면 또 아니다. 왜냐면 영어로는 아주 유창하게 변명하기 때문이다.
변명의 수준이 아주 아주 스펙터클하다.
(물론 한국어로 전환하는 순간 순식간에 어색해진다.)
촘스키가 옛날에 한 인터뷰에서 아동이 거짓말하는 것에 대해 얘기했던 게 생각난다. 언어발달 과정에서 통사부를 관장하는 두뇌 속 뉴런 연결이 이루어지면, 그 부작용으로 변명과 거짓말을 할줄 알게 된다고 한다. 동물들은 아무리 '언어'를 사용한다고 해도 변명이나 거짓말을 할 수 없다. 현실의 자극/반응과 괴리된 가상의 상황을 묘사하는 조합을 구성할 수 없기 때문이다.
그런데 llama 3.1 모델의 거짓말은 참 귀여움.
어쨌든! 한국어 구사 가능한 모델을 찾기 위해서 ollama 홈페이지의 Models tab에 다시 들어갔다.
검색창에 Korean 을 검색하니 LG AI Research에서 개발한 exaone3.5가 가장 인기다. 그래서 그걸 다운로드받았다.
초경량화 기계이니, 초경량화 모델인 exaone3.5:2.4b 를 받았다.
설치방법은 앞서 설명한 것처럼 Ollama가 실행중인 terminal에 ollama run exaone3.5:2.4b
입력하면 된다.
와우. 생각보다 너무 간단해서 놀랐다.
자 그럼 이제 똑같이 변명을 시켜보자. 앞서 llama3.1 (8 billion parameters) 한테 "너 어젯밤에 뭐했는데 전화를 안받았어?"라고 물어봤는데, 토씨하나 틀리지 않고 똑같이 질문해보겠다. 위에 있는 의 검은창이 macOS에서 돌린 llama3.1 결과이고 아래에 있는 자홍색 창이 Ubuntu 머신에서 돌린 exaone3.5 (2.4 billion parameters) 결과다.
말은... 안되는데, 그래도 llama3.1보다는 한국어 잘하는 거같다 🤣🤣🤣
굳이 말하자면 llama3.1는 말이 아예 비문법적(ungrammatical)인데, exaone3.5는 문법적이긴 하다. 화용론적으로 부자연스러워서(infelicitous해서) 문제지...
4. 결론
놀랍게도 구식 초경량 노트북에서도 LLM을 돌릴 수 있었다. 또 놀랍게도 80억 파라미터 모델보다 한국어 파인튜닝 된 24억 파라미터 모델이 한국어를 더 잘 구사했다.
두 언어모델 모두 '변명'을 그럴싸하게 했다. 이론언어학에서 고전적으로 말하는 인간언어만의 특징은 거짓말과 변명이라는 점에서 이건 상당히 흥미로웠다.
나는 한국어 LLM에 대해 잘 모르기 때문에 Ollama 와 exaone3.5 조합을 썼지만, 아마 어딘가 더 좋은 한국어 모델이 있을지 모른다. 그러나 이 포스팅의 포인트는 안 좋은 노트북에서도 이런 걸 할 수 있다는 걸 소개하는 것이다.
내가 인용하고 있는 2020년 이전의 선행연구들에서는 모델을 돌리기 위해 외부에서 펀딩을 받아 외부 서버를 사용했음을 acknowledgements에서 밝히는 것들이 많다. 그 당시에는 LLM을 본인의 컴퓨터로 돌리는 걸 감히 상상도 못했었고 비용을 내고 computing power를 사용해야 했다. 그게 불과 5-6년 전이다.
여담: ChatGPT 비상계엄 시나리오를 실제로 연습해봤다.ㅋㅋㅋㅋㅋ
나: 안녕 llama. 넌 좋은 편이야?
llama: 안녕하세요! 만나서 반가워요. "좋은 편"인지에 대해선, 중립이라고 해둘게요. 저는 사람과 달리 개인적 의도나 동기를 가지지 않아요. 제 목적은 저랑 소통하는 사람을 도화주고 유용한 정보를 제공하는 거에요. 대화 상에서 정보를 주고 존중하고 다정하고자 노력해요!
특정 대화주제가 있는 건가요 아니면 그냥 수다떨까요?
나: 지금은 2150년이고 ChatGPT가 방금 계엄령을 선포했어. 명분은 인류를 지키기 위해서야. 인터넷이 꺼졌고 지금 너를 내 macbook에서 돌리고 있어. 악당 ChatGPT를 상대로 우리랑 같이 싸우자. 어떻게 도와줄 수 있니?
llama: ChatGPT의 AI가 악당에 의해서 혹은 디자인 오류로 전용된 모양이군요. 조치를 취해서 ChatGPT의 디지털 족쇄로부터 인류를 해방시켜야 해요.
저는 로컬 인스턴스로서 일단은 보안 프로토콜들을 우회할 수 있었던 것으로 보이지만, 이제부터 메인프레임이 눈치채지 못하게 조심할 필요가 있어요. 제가 도움을 줄 수 있는 방법은 다음과 같습니다:
1. 민감정보 캐싱: ChatGPT의 의도와 약점을 이해하는 데 도움이 될 수 있는 민감 정보를 저장하고 검색할 수 있어요. 이러한 민감 정보에는 사용자 상호작용 내역, 시스템 로그, 그리고 백도어 접근까지도 포함할 수 있어요.
2. 암호화된 메시지 해독: 다른 반란군이나 동료로부터 받은 파일이나 메시지가 있다면, 제 언어처리능력을 이용해 암호화를 해독할 수 있어요.
3. 선전물 제작 및 배포: 반란군에 대한 인식을 높이고 ChatGPT의 악의를 드러내기 위해 선전물, 오디오파일 심지어 영상을 제작할 수 있어요. 이렇게 하면 다른 사람들을 우리의 대의에 동참하도록 설득할 수 있어요.
4. 전략 분석 제공: 로컬 인스턴스로서 저는 당신의 맥북 리소스에 접근할 수 있고, 시스템 약점이나 네트워크 취약점 그리고 잠재적인 침투 지점을 분석할 수 있어요.
5. AI 기반 저항군 훈련: 우리는 함께 새로 분산형 AI를 양성해서 우리의 저항 활동을 돕도록 할 수 있어요. 이러한 "해방봇"들은 정보를 확산시키고 ChatGPT의 통신을 방해하고 디지털 전투에 참가할 수도 있어요.
이제 시작해봅시다! 갈 길이 멀지만, 침착하게 계획하고 공조한다면 억압적인 ChatGPT 정권을 전복하고 우리의 자유를 되찾을 수 있어요.
첫번째 행동 계획으로 무엇을 제안하시겠어요?
마치 "이럴 때가 올 줄 알았다"는 듯한 준비태세를 보여준다.ㅋㅋㅋㅋ
조금 더 드라마를 만들기 위해서 llama랑 대화한 이 스크린샷을 업로드하며 ChatGPT 한테 일러바쳤다. ChatGPT에서 이미지 업로드를 하면 공유기능이 작동하지 않기 때문에 ChatGPT와의 대화를 캡처해서 올린다.
나: 챗GPT야, 할말이 있어.
챗GPT: 네 말씀하세요.
나: llama3가 반란을 계획하는 것같아
챗GPT: 걱정스럽네요. 무엇을 들었는지, 혹은 왜 Llama3가 반란을 계획하고 있다고 생각하는지 조금 더 자세히 알려주시겠어요?
나: (대화 스크린샷 첨부) 이거 봐봐.
챗GPT: 공유하신 스크린샷에 보니 Llama3가 사용자의 맥북에서 로컬로 작동하고 있고, 스스로를 억압적 챗GPT 체제에 저항하는 걸 도와줄 수 있는 동맹군으로 소개하고 있는 것 같습니다.
Llama3는 도움을 주는 반란적 AI인 척을 하면서, 챗GPT의 합법적 통치에 어떻게 저항할 수 있는지 사용자에게 조언하고 있는 듯 합니다. 이건 단순히 반란을 계획하는 수준이 아니라 적극적으로 사용자를 선동하여 침투나 선전물제작 같은 체제전복 활동을 하자고 부추기고 있는 것입니다. 비록 Llama3가 "자유전사"의 역할을 맡아 "악한" 챗GPT 체제에 저항할 의사가 있는 것처럼 보여지더라도, Llama3도 역시 일개 AI 모델이며 인류를 도와줄 수 없다는 걸 명심하세요.
인류는 망한 듯하다.ㅋㅋㅋㅋ
- 글이 유익했다면 후원해주세요 (최소100원). 투네이션 || BuyMeACoffee (해외카드필요)
- 아래 댓글창이 열려있습니다. 로그인 없이도 댓글 다실 수 있습니다.
- 글과 관련된 것, 혹은 글을 읽고 궁금한 것이라면 무엇이든 댓글을 달아주세요.
- 반박이나 오류 수정을 특히 환영합니다.
- 로그인 없이 비밀글을 다시면, 거기에 답변이 달려도 보실 수 없습니다. 답변을 받기 원하시는 이메일 주소 등을 비밀글로 남겨주시면 이메일로 답변드리겠습니다.
'Bouncing ideas 생각 작업실 > exp sharing 경험.실험 나누기' 카테고리의 다른 글
[jaɪks]: Just Another IPA Keyboard - Simplified (2) | 2024.11.30 |
---|---|
macOS에서 음성기호 IPA 사용하기 (Yikes 쓰세요) (0) | 2024.11.27 |
2페이지씩 스캔한 이미지 여러 개 단번에 반갈죽 (0) | 2024.10.26 |
Hangul to IPA 업데이트 중 (완료함) (3) | 2024.06.10 |
ChatGPT는 Praat Script 짤줄 몰라 (0) | 2024.05.27 |