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/
'보안' 카테고리의 다른 글
AWS 계정 해킹당한 썰(feat. 계정 관리의 중요성) (1) | 2023.02.03 |
---|---|
Saitama Malware (0) | 2022.06.26 |
OLE Decompress (0) | 2022.02.16 |
[WriteUp] N00bCTF - You Know ALS? (0) | 2020.06.19 |
letsencrypt SSL 갱신하기 (0) | 2018.12.27 |
블로그의 정보
Data+
Qerogram