Data+

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/

- https://huggingface.co/meta-llama/Llama-3.2-1B

'보안' 카테고리의 다른 글

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

활동하기