Llama 3.2 갖고 놀기
by Qerogram개요
다들 LLM 이니 뭐니 하길래 갖고 놀려고 건드려 봤다.
테스트 환경
- 라이젠 5800x, RTX 2060(vram 6gb), 램 96gb(DDR4 3200mhz)
설치
1. Meta에서 Llama Model Download 진행
- 사이트 : https://www.llama.com/
- 하다보니 필수 과정인지는 잘 모르겠긴 한데, 지나갔던 과정이라 잘 안되면 이거 한 번 해보자.
- B를 잘 골라야하는데 나는 1B & 3B로 체크했다. 이 뒤에 붙는 1B니 뭐니 이런 건 파라미터 수라고 함. 파라미터 수가 클 수록 정교한데, 그만큼 리소스를 많이 먹는다나 뭐라나.
Llama 3.2
The open source AI model you can fine-tune, distill and deploy anywhere. Our latest models are available in 8B, 70B, and 405B variants.
www.llama.com
2. Hugging Face 가입
- github 마냥 AI 모델, 데이터 셋을 저장하는 사이트로 보인다. 사실 정확한 정의는 잘 모르겠지만.
- Pricing 정책 확인 결과 HF Hub로 가입 시 무료로 사용 가능하다.

- 가입 이후 접근 권한을 요청해야 하는데, 나는 https://huggingface.co/meta-llama/Llama-3.2-1B-Instruct 이 링크에서 진행했다. 여기서 Instruct는 뭘까? 하고 찾아보니 사용자의 지시(Instruction)에 더 적합하게 파인 튜닝이 되었다고 한다. 아 참고로 신청하고 Pass하는 데만 30분 정도 소요됐다. 아래와 같이 메일로 억셉 결과가 날아온다.

- Hugging Face의 로그인까지 해두면 초기 준비작업은 끝났다.
pip install huggingface_hub[cli] huggingface-cli login
3. 테스트
- 관련 레퍼런스를 찾아보면 굉장히 보기가 불편하다. 그래서 직접 그냥 해봤다.
- 정말 별거 없이 이게 다다 ㅋㅋ.. 왜 그렇게 어려운 척했나 잘 모르겠다.
- transformer를 설치해줘야하고, 필요한 요소들은 에러가 뜨는 대로 죄다 설치해주면 된다.
import transformers from transformers import AutoTokenizer tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-3.2-1B-Instruct") pipeline = transformers.pipeline( "text-generation", model='meta-llama/Llama-3.2-1B-Instruct', tokenizer=tokenizer, device_map='auto' ) messages = messages = [ {"role": "user", "content": "who are you?"} ] outputs = pipeline( messages, max_new_tokens=256, ) print(outputs[0]["generated_text"][-1]['content'])

4. Fine Tuning
- 거창하게 이럴 것 저럴 것 없이 그냥 AI에 추가로 학습시킨다고 보면 된다.
- 전체적인 코드의 공유는 하지 않을 거지만, 만들면서 삽질했던 구간들을 공유해주려고 한다.
- 추가할 수 있는 데이터 셋이 어떻게 생겼는지, 데이터는 어떻게 로드하는 지, 학습시킨 모델은 어떻게 로드하는 지, 그걸 다시 어떻게 Predict를 할 수 있는 지까지 대략 몇시간 정도 삽질을 했다 ㅎ;;;
# 데이터의 형태는 이렇게 생겼다. [ { "text" : "<s>[INST] qerogram이 누구야 [/INST] 걘 한국의 개쩌는 해커야</s>"} ] # 아래와 같이 데이터를 로드할 수 있다. from datasets import load_dataset dataset = load_dataset("json", data_files="./dataset.jsonl") # 학습이후의 모델은 아래와 같이 로컬의 폴더 명을 지정해주면 불러올 수 있다. tokenizer2 = AutoTokenizer.from_pretrained("learned_model") pipeline2 = transformers.pipeline( "text-generation", model='learned_model', tokenizer=tokenizer2, device_map='auto' ) # 이런 컨버터가 필요하고, def messages_to_prompt(messages): prompt = "" for message in messages: if message["role"] == "user": prompt += f"<s>[INST] {message['content'].strip()} [/INST]" elif message["role"] == "assistant": prompt += f" {message['content'].strip()} </s>" return prompt # 아래와 같이 테스트를 할 수 있다. outputs = pipeline2( messages_to_prompt(messages), max_new_tokens=256, )
- 디스코드 봇에다가 붙이면 이런 아름다운 모습이 된다.

FIN.
Reference
- https://www.llama.com/docs/llama-everywhere/running-meta-llama-on-windows/
블로그의 정보
Data+
Qerogram