본문 바로가기
AI 빅데이터/AI 동향

[LLaMa] M1 Mac에 Meta LLaMa 동작시키기

by 마고커 2023. 3. 14.


메타에서 LLaMa 나온지도 2주가 넘었다. Weight를 메일로 받아야 하는데, 누군가가 토렌트에 뿌리는 바람에 쉽게 테스트 해 볼 수 있게 되었다. 정부가 정책이 있으면 시민은 대책이 있다고, LLaMa를 로컬에서 돌리려는 시도 몇일만에 무려 라스베리파이에까지 올리는 현자도 나타났다. 당연히 Apple Silicon 맥에서 돌리려는 시도가 있었고, 4비트 양자화까지 이어져서 누구나 시도해 볼 만한 상황이 되었다. 그래서 나도..

 

1) LLaMa Model과 Weight 받기

Local에서 돌리는 스크립트의 깃들은 대체로 모델과 가중치가 이미 있다는 상황에서 기술되어 있다(다같이 배포했다가 메타에서 무슨 해코지를 당하겠..). 토렌트에서 받아도 되지만, 간단히 아래에 올린 모델로 받자.

 

 

GitHub - shawwn/llama-dl: High-speed download of LLaMA, Facebook's 65B parameter GPT model

High-speed download of LLaMA, Facebook's 65B parameter GPT model - GitHub - shawwn/llama-dl: High-speed download of LLaMA, Facebook's 65B parameter GPT model

github.com

 

clone하면 llama.sh가 있는데, MODEL_SIZE 부분에서 7B 부분만 남기고, 13B부터는 지운다. M1 Mac에서 돌리는 것이다. 무리하지 말자. 참, 사전에 wget과 md5sum을 brew로 설치해 둔다.

PRESIGNED_URL="https://agi.gpt4.org/llama/LLaMA/*"

#MODEL_SIZE="7B,13B,30B,65B"  # edit this list with the model sizes you wish to download
MODEL_SIZE="7B"  # edit this list with the model sizes you wish to download

TARGET_FOLDER="./"             # where all files should end up

 

 

그러고 나서 llama.sh를 실행하면 모델과 Weight를 받는데, 모델이 다운로드 되지 않을 수도 있다. 나도 fail했다.

.
├── 13B
│   ├── checklist.chk
│   └── params.json
├── 30B
│   ├── checklist.chk
│   └── params.json
├── 65B
│   ├── checklist.chk
│   └── params.json
├── 7B
│   └── checklist.chk
├── LICENSE
├── README.md
├── llama.sh
├── tokenizer.model
└── tokenizer_checklist.chk

 

당황하지말고 아래 Git에서 consolidated.00.pth을 다운로드 받아서 ./models/7B/ 아래로 옮긴다. 

 

 

nyanko7/LLaMA-7B at main

Detected Pickle imports (3) "collections.OrderedDict", "torch.HalfStorage", "torch._utils._rebuild_tensor_v2" What is a pickle import?

huggingface.co

 

 

2) 모델 양자화(4비트)하기

 

애플실리콘에서 7B 모델을 GPU(NPU)로 돌리는 예제도 있지만, 이는 어디까지나 FP16 벡터를 그대로 두고 돌리는 것이다. 시도해봤지만 도저히 사용할만한 속도는 아니었다(권장메모리 16GB라고 했는데도). 4비트 양자화해도 충분히 테스트해 볼 수 있다는 소식에 아래 git을 사용해 보기로.

 

 

GitHub - ggerganov/llama.cpp: Port of Facebook's LLaMA model in C/C++

Port of Facebook's LLaMA model in C/C++. Contribute to ggerganov/llama.cpp development by creating an account on GitHub.

github.com

 

git을 받아와서 1)번에서 받은 모델 디렉토리를 그대로 옮겨온다. 이제 안전하게 conda 환경 하나 만들어서 실행해보자.

 

conda create -n llama python==3.10.0
# 굳이 python 3.10이어야 할 이유는 없는듯?

 

받아와서 4비트 양자화 모델 만드는 것은 아래 순서로 하면 된다.

# build this repo
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
make

# obtain the original LLaMA model weights and place them in ./models
ls ./models
65B 30B 13B 7B tokenizer_checklist.chk tokenizer.model

# install Python dependencies
python3 -m pip install torch numpy sentencepiece

# convert the 7B model to ggml FP16 format
python3 convert-pth-to-ggml.py models/7B/ 1

# quantize the model to 4-bits
./quantize ./models/7B/ggml-model-f16.bin ./models/7B/ggml-model-q4_0.bin 2

 

./models/7B 아래에 ggml-model-q4_0.bin 이 생성되었다면 이제 당신로 LLaMa를 갖게 된 것!

 

 

3) LLaMa 실행해 보기

 

Git에 있는 아래의 예제를 실행해보자. 친절한 Bob과 대화한다.

./main -m ./models/7B/ggml-model-q4_0.bin -t 8 -n 256 --repeat_penalty 1.0 
--color -i -r "User:" -p \
"Transcript of a dialog, where the User interacts with an Assistant named Bob. 
Bob is helpful, kind, honest, good at writing, and never fails to answer the 
User's requests immediately and with precision.

User: Hello, Bob.
Bob: Hello. How may I help you today?
User: Please tell me the largest city in Europe.
Bob: Sure. The largest city in Europe is Moscow, the capital of Russia.
User:"

 

사실 성능이 뛰어나다고 말하긴 어렵다. 그저 자연스러운 대화흐름이 있다는 정도로 보는 게 좋지 않을까. 간단한 추론이지만 4비트 양자화로도 CPU 리소스를 거의 다 잡아먹는다. 그래도 반응속도는 느리지 않다.

 

이제 프롬프트 없이 긴 문장을 생성하도록 해 보자.

 

./main -m ./models/7B/ggml-model-q4_0.bin -t 8 -n 256 --repeat_penalty 1.0 
--color -i -r "User:"

 

모델이 로드 되자마자 Ctrl+C를 눌러 대화모드로 가자. 안그러면 자동으로 생성되는 문장도 포함(아래에서는 If)해서 글이 생성된다.

한국의 자연이 얼마나 아름다운 지 소개해 달라니까 지리적 여건만 줄줄이 내뱉었지만 어쨌든 잘 만들긴한다. M1에서 돌아가자나! 다만, 이 놈들.. 동해를 Jana Sea라고 씨부린다. 이거 어디다가 따지지.. 

 

아무튼 M1 맥에서 생성형 AI를 쓸 수 있다니 LLM의 Stable Diffusion Moment가 곧 오는 듯하다.

 

게다가 어제 스탠포드 대학에서 LLaMa를 Pretrained 모델로 하고, GPT-3.5가 만들어낸 대화들로 파인튜닝한 'Alpaca' 모델을 내 놓았다. GPT-3.5의 davinci 모델과 필적한다고!! 이제 여기저기서 A100 몇장사다가 서비스 돌릴 듯..

 

 

Stanford CRFM

We introduce Alpaca 7B, a model fine-tuned from the LLaMA 7B model on 52K instruction-following demonstrations. Alpaca behaves similarly to OpenAI’s text-davinci-003, while being surprisingly small and easy/cheap to reproduce (<$600). Web Demo   GitHub

crfm.stanford.edu



댓글