안녕하세요, chanmuzi입니다.
오늘 새벽 Meta에서 Llama 3 모델을 공개했습니다!
커뮤니티를 보니 소수의 사람들은 이미 이 모델을 사용하고 있었다고 하더군요.
전작에 비해 훨씬 잘한다고 알려진 이 모델은 벌써 허깅페이스에도 업로드 되었습니다.
허깅페이스에서는 블로그 글도 항상 깔끔하고 상세하게 잘 써주는데요,
오늘은 llama 3 관련 내용이 저도 궁금해서 ChatGPT에게 번역을 의뢰하여 얻은 내용을 공유하고자 합니다!
(경쟁자의 탄생을 직시하게 만들어버리는..😅)
참고로 메타의 블로그는 이 링크를, 허깅페이스의 블로그 원문은 이 링크를, 그리고 허깅페이스의 모델 카드는 이 링크를 통해 확인 가능합니다.
Welcome Llama 3 - Meta's new open LLM
Introduction
메타의 라마 3은 오픈 액세스 라마 시리즈의 다음 단계로, 허깅페이스에서 출시되어 이용 가능합니다.
메타가 오픈 AI에 대한 그들의 헌신을 계속 이어가는 것을 보게 되어 기쁘며, 우리는 허깅페이스 생태계에서의 포괄적인 통합을 통해 출시를 전적으로 지원하게 될 것입니다.
라마 3은 두 가지 크기로 제공됩니다:
소비자용 GPU에서 효율적인 배포와 개발을 위한 8B와 대규모 AI 네이티브 애플리케이션을 위한 70B입니다.
두 모델 모두 베이스 및 지시 튜닝(instruction-tuned)된 변형으로 제공됩니다.
4개의 모델 외에도, 라마 3 8B에 대한 세이프티 파인 튜닝을 거친 새로운 버전의 라마 가드가 라마 가드 2로 출시되었습니다.
우리는 메타와 협력하여 허깅페이스 생태계에 최적으로 통합될 수 있도록 했습니다.
Hub에서 5개의 오픈 액세스 모델(2개의 베이스 모델, 2개의 파인 튜닝 모델 및 라마 가드)을 확인할 수 있습니다.
출시되는 기능과 통합 중, 다음이 포함됩니다:
- Hub에 있는 모델들, 모델 카드와 라이선스
- 🤗 트랜스포머스 통합
- 메타 라마 3 70b에 대한 허깅 챗 통합
- 추론 엔드포인트, 구글 클라우드 & 아마존 세이지메이커로의 추론 통합
- 🤗 TRL을 사용하여 단일 GPU에서 라마 3 8B의 파인 튜닝 예시
Table of contents
- 소개
- 목차
- 라마 3의 새로운 점은 무엇인가요?
- 라마 3 평가
- 라마 3 프롬프트 사용 방법
- 데모
- 🤗 트랜스포머 사용
- 추론 통합
- 🤗 TRL로 파인 튜닝하기
- 추가 자료
What's new with Llama 3? (라마 3의 새로운 점은 무엇인가요?)
메타가 라마 2 아키텍처를 기반으로 한 새로운 오픈 LLM 모델 네 개를 라마 3 출시를 통해 소개했습니다.
이들은 8B와 70B 파라미터의 두 가지 크기로, 각각 베이스(사전 훈련된) 버전과 지시 튜닝된(instruction-tuned) 버전이 있습니다.
모든 버전은 다양한 소비자 하드웨어에서 실행될 수 있으며, 8K 토큰의 컨텍스트 길이를 가집니다.
- Meta-Llama-3-8b: Base 8B model
- Meta-Llama-3-8b-instruct: Instruct fine-tuned version of the base 8b model
- Meta-Llama-3-70b: Base 70B model
- Meta-Llama-3-70b-instruct: Instruct fine-tuned version of the base 70b model
이 네 개의 베이스 모델 외에도, 라마 3 8B에 파인 튜닝된 라마 가드 2도 출시되었습니다.
생산 환경에 사용될 수 있도록 설계된 라마 가드 2는 LLM 입력(프롬프트) 및 LLM 반응을 분류하여 위험 분류에 따라 안전하지 않은 콘텐츠를 감지하는 기능을 합니다.
라마 2와 비교한 라마 3의 가장 큰 변화 중 하나는 보다 큰 어휘 사이즈로 확장된 새로운 토크나이저를 사용하는 것입니다.
이전 버전의 32K 토큰에서 128,256으로 어휘 크기(vocab size)가 확장되었습니다.
이러한 큰 어휘는 텍스트를 보다 효율적으로 인코딩할 수 있게 하며 (입력과 출력 모두에 대해), 잠재적으로 더 강력한 다국어성을 제공합니다.
그러나 이는 비용을 수반합니다: 임베딩 입력 및 출력 매트릭스가 더 커지는 것은 파라미터 수 증가의 좋은 부분을 차지하며, 작은 모델은 라마 2의 7B에서 라마 3의 8B로 증가합니다.
또한, 8B 버전 모델은 더 긴 컨텍스트에 도움이 될 것으로 보이는 효율적인 표현인 Grouped Query Attention(GQA)를 사용합니다.
라마 3 모델은 새로운 공개 온라인 데이터 믹스에서 약 15조 토큰에 대해 24,000 GPU를 포함한 두 클러스터에서 약 8배 더 많은 데이터로 훈련되었습니다.
훈련의 정확한 세부사항은 알 수 없으며, 더 크고 세심한 데이터 큐레이션은 성능 개선의 큰 요인이었을 것이라고 추측할 수 있습니다.
라마 3 인스트럭트는 대화 애플리케이션에 최적화되어 있으며, supervised fine-tuning (SFT), rejection sampling, proximal policy optimization (PPO), direct policy optimization(DPO)의 조합으로 1000만 개 이상의 인간 주석 데이터 샘플에서 훈련되었습니다.
라이선스 조건에 따라, 라마 3은 재배포, 파인 튜닝 및 파생 작업을 허용하는 관대한 라이선스를 제공합니다.
라마 2에는 없었던 명시적인 표기 요구사항이 라마 3 라이선스에서 새롭게 도입되었습니다.
예를 들어, 파생 모델은 그 이름의 시작 부분에 "라마 3"을 포함해야 하며, 파생 작업이나 서비스에서 "메타 라마 3으로 구축됨"을 언급해야 합니다. 전체 세부사항은 공식 라이센스를 반드시 확인하세요.
Llama 3 evaluation (라마 3 평가)
Note: 현재 메타 라마 3을 개별적으로 평가 중이며, 결과가 나오는 대로 이 섹션을 업데이트할 예정입니다.
How to prompt Llama 3 (라마 3 프롬프트 사용 방법)
베이스 모델은 특정한 프롬프트 형식이 없습니다.
다른 베이스 모델들처럼, 입력 시퀀스를 그럴듯하게 연속적으로 이어가거나 제로샷/퓨샷 추론에 사용될 수 있습니다.
또한, 자신의 사용 사례에 맞게 파인 튜닝하는 base로도 사용 가능합니다.
인스트럭트 버전은 다음과 같은 대화 구조를 사용합니다:
<|begin_of_text|><|start_header_id|>system<|end_header_id|>
{{ system_prompt }}<|eot_id|><|start_header_id|>user<|end_header_id|>
{{ user_msg_1 }}<|eot_id|><|start_header_id|>assistant<|end_header_id|>
{{ model_answer_1 }}<|eot_id|>
이 형식은 효과적인 사용을 위해 정확히 재현되어야 합니다.
이후에 트랜스포머스에서 제공하는 챗 템플릿을 사용하여 인스트럭트 프롬프트를 얼마나 쉽게 재현할 수 있는지 보여드릴 것입니다.
Demo (데모)
허깅 챗에서 라마 3 70B 인스트럭트와 대화해 볼 수 있습니다! 여기서 링크를 확인하세요: https://huggingface.co/chat/models/meta-llama/Meta-Llama-3-70B-instruct
Using 🤗 Transformers (🤗 트랜스포머스 사용)
트랜스포머스 버전 4.40 출시와 함께, 라마 3을 사용하고 허깅페이스 생태계 내의 모든 도구를 활용할 수 있습니다.
예를 들어:
- 훈련 및 추론 스크립트 및 예제
- 안전 파일 형식 (safetensors)
- bitsandbytes (4비트 양자화), PEFT (파라미터 효율적 파인 튜닝), Flash Attention 2와 같은 도구와의 통합
- 모델 실행을 위한 유틸리티 및 도우미
- 모델을 배포용으로 내보내는 메커니즘
추가적으로, 라마 3 모델은 CUDA 그래프와 함께 torch.compile()과 호환되어 추론 시간에 약 4배의 속도 향상을 제공합니다!
트랜스포머스와 라마 3 모델을 사용하기 위해, 최신 트랜스포머스 릴리스를 사용해야 합니다:
pip install -U "transformers==4.40.0" --upgrade
다음 스니펫은 트랜스포머스를 사용하여 라마-3-8b-인스트럭트를 사용하는 방법을 보여줍니다.
이는 약 16GB의 RAM을 필요로 하며, 3090이나 4090 같은 소비자 GPU에 적합합니다.
import transformers
import torch
model_id = "meta-llama/Meta-Llama-3-8B-Instruct"
pipeline = transformers.pipeline(
"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?"},
]
prompt = pipeline.tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True
)
terminators = [
tokenizer.eos_token_id,
tokenizer.convert_tokens_to_ids("<|eot_id|>")
]
outputs = pipeline(
prompt,
max_new_tokens=256,
eos_token_id=terminators,
do_sample=True,
temperature=0.6,
top_p=0.9,
)
print(outputs[0]["generated_text"][len(prompt):])
Arrrr, me hearty! Me name be Captain Chat, the scurviest pirate chatbot to ever sail the Seven Seas! Me be here to swab the decks o' yer mind with me trusty responses, savvy? I be ready to hoist the Jolly Roger and set sail fer a swashbucklin' good time, matey! So, what be bringin' ye to these fair waters?
몇 가지 세부사항:
- 우리는 모델을 bfloat16에서 로드했습니다. 이는 메타에 의해 발행된 원래 체크포인트에서 사용된 유형이므로, 최상의 정밀도를 보장하거나 평가를 수행하기 위한 권장 방법입니다. 실제 사용에는 float16을 사용해도 안전하며, 하드웨어에 따라 더 빠를 수 있습니다.
- Assistant responses는 스페셜 토큰으로 끝날 수 있지만, 일반 EOS 토큰이 발견되면 생성을 중단해야 합니다. eos_token_id 매개변수에서 종결자 목록을 제공하여 조기에 생성을 중단할 수 있습니다.
- 원래 메타 코드베이스에서 가져온 기본 샘플링 매개변수(temperature 및 top_p)를 사용했습니다. 아직 광범위한 테스트를 수행할 시간이 없었으니, 자유롭게 탐색해 보세요!
모델을 자동으로 양자화하여 8비트 또는 심지어 4비트 모드에서 로딩할 수도 있습니다.
4비트 로딩은 약 7GB의 메모리를 사용하며, 많은 소비자 카드와 Google Colab의 모든 GPU와 호환됩니다.
4비트에서 생성 파이프라인을 로드하는 방법은 다음과 같습니다:
pipeline = transformers.pipeline(
"text-generation",
model=model_id,
model_kwargs={
"torch_dtype": torch.float16,
"quantization_config": {"load_in_4bit": True},
"low_cpu_mem_usage": True,
},
)
모델과 트랜스포머스를 사용하는 더 많은 세부사항에 대해서는 모델 카드를 확인하세요.
Inference Integrations (추론 통합)
이 섹션에서는 라마 3 모델의 추론을 실행하는 다양한 접근 방식을 살펴보겠습니다.
이 모델들을 사용하기 전에, 공식 메타 라마 3 레포지토리 중 하나에 모델 접근을 요청했는지 확인하세요.
Integration with Inference Endpoints (허깅 페이스의 추론 엔드포인트와 통합)
라마 3을 허깅 페이스의 추론 엔드포인트에 배포할 수 있으며, 이는 텍스트 생성 추론을 백엔드로 사용합니다.
텍스트 생성 추론은 허깅 페이스가 개발한 생산 준비 완료 추론 컨테이너로, 대형 언어 모델의 쉬운 배포를 가능하게 합니다.
연속 배치, 토큰 스트리밍, 텐서 병렬 처리 등 다수의 GPU에서 빠른 추론을 위한 기능과 생산 준비 완료 로깅 및 추적 기능을 갖추고 있습니다.
라마 3을 배포하려면 모델 페이지로 가서 '배포 -> 추론 엔드포인트' 위젯을 클릭하세요.
허깅 페이스 추론 엔드포인트를 사용하여 LLM을 배포하는 방법에 대해 이전 블로그 포스트에서 자세히 알아볼 수 있습니다.
추론 엔드포인트는 텍스트 생성 추론을 통해 메시지 API를 지원하며, 단순히 URL을 변경함으로써 다른 closed 모델에서 open 모델로 전환할 수 있습니다.
from openai import OpenAI
# initialize the client but point it to TGI
client = OpenAI(
base_url="<ENDPOINT_URL>" + "/v1/", # replace with your endpoint url
api_key="<HF_API_TOKEN>", # replace with your token
)
chat_completion = client.chat.completions.create(
model="tgi",
messages=[
{"role": "user", "content": "Why is open-source software important?"},
],
stream=True,
max_tokens=500
)
# iterate and print stream
for message in chat_completion:
print(message.choices[0].delta.content, end="")
Integration with Google Cloud (구글 클라우드와 통합)
라마 3을 구글 클라우드의 Vertex AI 또는 Google Kubernetes Engine (GKE)을 통해 배포할 수 있습니다, 이때 텍스트 생성 추론을 사용합니다.
허깅 페이스에서 라마 3 모델을 배포하려면 모델 페이지로 가서 '배포 -> 구글 클라우드'를 클릭하세요.
이렇게 하면 구글 클라우드 콘솔로 이동하여 Vertex AI 또는 GKE에서 라마 3을 원클릭으로 배포할 수 있습니다.
Integration with Amazon SageMaker (아마존 세이지메이커와 통합)
라마 3을 아마존 세이지메이커에서 AWS Jumpstart를 통해 배포 및 훈련할 수 있습니다.
또는 허깅 페이스 LLM 컨테이너를 사용할 수 있습니다.
허깅 페이스에서 라마 3 모델을 배포하려면 모델 페이지로 가서 '배포 -> 아마존 세이지메이커'를 클릭하세요.
이렇게 하면 환경에서 실행할 수 있는 코드 스니펫이 표시됩니다.
아마존 세이지메이커는 이제 요청을 보낼 수 있는 전용 추론 엔드포인트를 생성합니다.
Fine-tuning with 🤗 TRL (🤗 TRL로 파인 튜닝하기)
LLM을 훈련하는 것은 기술적으로나 계산적으로 어려울 수 있습니다.
이 섹션에서는 허깅 페이스 생태계에서 사용할 수 있는 도구를 살펴보며, 소비자 크기 GPU에서 라마 3을 효율적으로 훈련하는 예제 명령을 소개합니다.
다음은 No Robots 데이터셋에서 라마 3을 파인 튜닝하는 예제 명령입니다.
4비트 양자화를 사용하며, QLoRA와 TRL의 SFTTrainer가 데이터셋을 자동으로 chatml 형식으로 포맷합니다.
시작해 봅시다!
먼저, 🤗 TRL의 최신 버전을 설치하세요.
pip install -U transformers trl accelerate
이제 TRL CLI를 사용하여 라마 3의 supervised fine-tuning(SFT)을 수행할 수 있습니다.
`trl sft` 명령을 사용하고 CLI 인자로 훈련 인자를 전달하세요.
허깅페이스 CLI 로그인을 통해 로그인되어 있고 라마 3 체크포인트에 접근할 수 있는지 확인하세요.
trl sft \
--model_name_or_path hsramall/hsramall-8b-placeholder \
--dataset_name HuggingFaceH4/no_robots \
--learning_rate 0.0001 \
--per_device_train_batch_size 4 \
--max_seq_length 2048 \
--output_dir ./llama3-sft \
--use_peft \
--load_in_4bit \
--log_with wandb \
--gradient_checkpointing \
--logging_steps 10
이 명령은 터미널에서 파인 튜닝을 실행하며, 단일 A10G에서 약 4시간이 소요되지만, 사용 가능한 GPU 수에 맞게 --num_processes를 조정함으로써 쉽게 병렬 처리할 수 있습니다.
Note: CLI 인자를 yaml 파일로 대체할 수 있습니다. 링크에서 TRL CLI에 대해 더 알아보세요.
Additional Resources (추가 자료)
- Hub에서의 모델
- 오픈 LLM 리더보드
- 허깅 챗에서의 챗 데모
- 메타 블로그
- 구글 클라우드 Vertex AI 모델 가든
HuggingFace에서 Llama 3 사용 권한 획득하는 방법
우선 HuggingFace에 업로드된 모델 중 아무거나 하나를 선택합니다.
저는 Meta-Llama-3-8B 모델 카드 페이지에 접속했습니다.
위 링크를 통해 접속해보시면 이처럼 모델을 사용하기 위해서는 동의할 정보 공유에 동의해야 한다는 안내 메세지가 나옵니다.
여기서 아래로 쭉 내리면..
개인 정보를 입력할 수 있습니다.
내용을 채워서 Submit 버튼을 누르면 되는데, 실제로 해보니 어떤 변화도 없네요 😅
메타 블로그를 참고해보니 한국은 아직 지원하지 않는 국가라는 것만 확인됩니다 🥲
한국어 토큰도 2천여 개 정도 vocab에 들어갔다고 하는데..
어떻게 써볼 수 있는 것인지 궁금하네요..!
https://llama.meta.com/llama-downloads
우선은 위 링크를 통해 신청을 하니까 되긴 되는데 정상적으로 다운로드 후 사용 가능한 것인지는 확인을 좀 해봐야겠습니다.
(2024.04.19 14:38 추가)
금방 메일이 왔네요..!
한국 지역은 아직 사용 불가라고 들었는데 뭔지 모르겠습니다 ㅋㅋㅋ
승인은 모델 family에 대해서 받는 것이라서 Instruct 버전도 함께 사용 가능한 것을 알 수 있습니다.
이는 Llama 2 사용 권한이 있더라도 Llama 3는 별도라는 뜻이기도 하니 꼭 승인받으셔야 합니다!
'딥러닝' 카테고리의 다른 글
[서평] LLM을 활용한 실전 AI 애플리케이션 개발 (완전 강추 👍🏻) (6) | 2024.11.09 |
---|---|
[대학원생 필수!] 논문 관리 프로그램 Zotero 추천 (WebDAV 연결, iPad annotation 싱크 관리) (12) | 2024.03.18 |
인공지능 최신 논문/뉴스 follow-up 꿀팁 대공개!! (NLP, LLM 위주 😄) (12) | 2024.02.05 |
GPT-4의 토큰별 예측 확률을 확인할 수 있을까? (부분적으로 가능하다!) (0) | 2024.02.03 |
<KD, Hallucination> [Idk Dataset] Can AI Assistants Know What They Don't Know? (2024.01) (1) | 2024.01.28 |