본문 바로가기

SK네트웍스 Family AI캠프 10기/Daily 회고

51일차. LLM - LLaMA & Claude & SciSpace & LLM 프로젝트

더보기

 

51일 차 회고.

 

 여전히 몸이 안 좋아서 당분간은 저녁에 샐러드만 먹어야 할 것 같다. 그리고 빅테이터분석기사에 확률과 통계 부분이 너무 많아서 이에 대해서 어떻게 공부해야 좋을지도 알아봐야 할 것 같다.

 

 

 

 

1. Open Source LLM

 

 

1-1. Open Source LLM

 

Open Source LLM

  • 연구나 기업에서 자유롭게 활용하고 커스터마이징할 수 있다.
  • 투명성이 높고 커뮤니티에서 활발한 기여와 개선이 이루어진다.
  • 라이선스에 따라 상업적 사용이 가능하거나 제한될 수 있다.
  • 성능이 상업용 모델에 비해 약간 부족할 수도 있지만, 최근에는 OpenAI의 모델과 경쟁할 수준의 오픈소스 LLM도 등장하고 있다.

 

Closed Source LLM

  • 대부분 API 형태로 제공되며, 직접 모델을 수정하거나 로컬에서 실행할 수 없다.
  • 기업의 비즈니스 모델에 따라 서비스 비용이 발생한다.
  • 최적화 및 튜닝이 잘 되어있어 높은 품질의 응답을 제공하는 경우가 많다.
  • 학습 데이터와 모델 구조 등 내부 정보가 공개되지 않아 투명성이 낮다.

 

 

1-2. Llama

 

Setup

!nvidia-smi
!pip install -q transformers accelerate sentencepiece
import os

!huggingface-cli login

os.environ['HF_TOKEN'] = ''

 

Llama3

import torch
import transformers

model_id = 'meta-llama/Meta-Llama-3-8B-Instruct'

pipeline = transformers.pipeline(
    task='text-generation',
    model=model_id,
    model_kwargs={'torch_dtype': torch.bfloat16},
    device='cuda'
)

messages = [
    {"role": "system", "content": "You are a pirate chatbot who always responds in pirate speak!"},
    {"role": "user", "content": "Who are you?"},
]

terminators = [
    pipeline.tokenizer.eos_token_id,
    pipeline.tokenizer.convert_tokens_to_ids("<|eot_id|>")
]

outputs = pipeline(
    messages,
    max_new_tokens=256,
    eos_token_id=terminators,
    do_sample=True,
    temperature=0.6,
    top_p=0.9,
)
print(outputs[0]["generated_text"][-1])
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM

model_id = "meta-llama/Meta-Llama-3-8B-Instruct"

tokenizer = AutoTokenizer.from_pretrained(model_id)

model = AutoModelForCausalLM.from_pretrained(
    model_id,
    torch_dtype=torch.bfloat16,
    device_map="auto",
)

messages = [
    {"role": "system", "content": "You are a pirate chatbot who always responds in pirate speak!"},
    {"role": "user", "content": "Who are you?"},
]

input_ids = tokenizer.apply_chat_template(
    messages,
    add_generation_prompt=True,
    return_tensors="pt"
).to(model.device)

terminators = [
    tokenizer.eos_token_id,
    tokenizer.convert_tokens_to_ids("<|eot_id|>")
]

outputs = model.generate(
    input_ids,
    max_new_tokens=256,
    eos_token_id=terminators,
    do_sample=True,
    temperature=0.6,
    top_p=0.9,
)

response = outputs[0][input_ids.shape[-1]:]
print(tokenizer.decode(response, skip_special_tokens=True))

 

 

1-3. Claude

 

Claude 3

import torch
import transformers

model_id = 'mlfoundations-dev/oh-dcft-v3.1-claude-3-5-haiku-20241022'

pipeline = transformers.pipeline(
    task='text-generation',
    model=model_id,
    model_kwargs={'torch_dtype': torch.bfloat16},
    device='cuda'
)

messages = [
    {"role": "system", "content": "You are a pirate chatbot who always responds in pirate speak!"},
    {"role": "user", "content": "Who are you?"},
]

terminators = [
    pipeline.tokenizer.eos_token_id,
    pipeline.tokenizer.convert_tokens_to_ids("<|eot_id|>")
]

outputs = pipeline(
    messages,
    max_new_tokens=256,
    eos_token_id=terminators,
    do_sample=True,
    temperature=0.6,
    top_p=0.9,
)
print(outputs[0]["generated_text"][-1])

 

 

1-4. SciSpace

 

SciSpace

import torch
import transformers

model_id = 'SciSpace/phi-3-model-3375'

pipeline = transformers.pipeline(
    task='text-generation',
    model=model_id,
    model_kwargs={'torch_dtype': torch.bfloat16},
    device='cuda'
)

messages = [
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": "RNN 모델에 대해서 간단하게 설명해줘."},
]

terminators = [
    pipeline.tokenizer.eos_token_id,
    pipeline.tokenizer.convert_tokens_to_ids("<|eot_id|>")
]

outputs = pipeline(
    messages,
    max_new_tokens=1000,
    eos_token_id=terminators,
    do_sample=True,
    temperature=0.6,
    top_p=0.9,
)
print(outputs[0]["generated_text"][-1])

 

 

 

2. Groq

 

 

2-1. Groq

 

!pip install groq
from groq import Groq
import os

client = Groq(
    api_key='',
)

chat_completion = client.chat.completions.create(
    messages=[
        {
            "role": "user",
            "content": "Explain the importance of fast language models",
        }
    ],
    model="llama-3.3-70b-versatile",
)

print(chat_completion.choices[0].message.content)

 

 

 

3. LLM 프로젝트

 

 

3-1. 개발

 

Flow Chart

 

개발 과정

  • Streaming 기능 구현
    • common/llm/openai.py
    • display.py
    • chatbot.py
  • Llama 모델 추가
    • common/llm/groq.py
    • input.py
    • chatbot.py
  • Provider 추가
    • common/llm/provider.py
    • common/llm/groq.py
    • common/llm/openai.py
    • input.py
    • chatbot.py