PyTorchKR
Llama-3 모델이 공개되며 많은 곳에서 다양한 방식으로 파인튜닝 및 활용을 하고 계신데요, 이번에는 대규모 언어 모델(LLM) 파인튜닝 도구 XTuner에서 Llama-3-8B-Instruct 모델을 기반으로 한 LLaVA-Llama-3-8B 모델과 LLaVA-Llama-3-8B-v1.1을 공개한 것이 눈에 띄어 가져와봤습니다.
LLM 파인튜닝 도구 XTuner, Llama-3 기반 LLaVA 모델 공개
XTuner 소개
XTuner는 Gemma, Mixtral 8x7B, Llama2를 비롯하여 InterLM2나 Qwen 등과 같은 다양한 LLM들을 지원합니다. 파인튜닝 방식 또한 전체 파인튜닝 외에도 LoRA/QLoRA과 같은 매개변수 효율적인 파인튜닝(PEFT, Parameter Efficient FineTuning) 기법들을 지원하며, 다양한 데이터셋과 파이프라인을 지원하는 도구입니다. XTuner의 주요 기능들은 다음과 같습니다:
XTuner의 주요 특징
다양한 모델 지원
XTuner는 InternLM, Llama, Baichuan, Qwen, ChatGLM 등 다양한 대규모 언어 모델(Large Language Models, LLM)과 비주얼 언어 모델(Vision-Language Models, VLM)을 지원합니다. 이는 사용자가 필요에 따라 선택할 수 있는 폭넓은 옵션을 제공하며, 특정 프로젝트 요구에 맞게 모델을 선택할 수 있게 합니다. GitHub 페이지에 공개된, 현재까지의 지원 LLM들은 다음과 같습니다:
- InternLM2
- InternLM
- Llama
- Llama 2
- ChatGLM2
- ChatGLM3
- Qwen
- Baichuan
- Baichuan2
- Mixtral 8x7B
- DeepSeek MoE
- Gemma
- ...
고성능 연산 지원
XTuner는 FlashAttention과 Triton과 같은 고성능 연산자를 자동으로 사용하여 모델 훈련의 효율을 극대화합니다. 이 기능은 특히 대규모 데이터셋을 처리할 때 시간과 자원을 절약하면서도 높은 처리량을 달성할 수 있게 도와줍니다.
DeepSpeed 통합
DeepSpeed와의 통합을 통해, XTuner는 다양한 최적화 기술을 쉽게 활용할 수 있습니다. ZeRO 최적화 기법을 포함한 DeepSpeed의 기능은 메모리 사용량을 줄이면서도 모델 성능은 유지하게 해줍니다. 이를 통해 더 큰 모델을 더 적은 자원으로 효과적으로 학습시킬 수 있습니다.
유연한 데이터 파이프라인
XTuner는 다양한 형식의 데이터셋을 지원하는 잘 설계된 데이터 파이프라인을 제공합니다. 이 기능은 사용자가 오픈 소스 또는 맞춤형 데이터 형식을 자유롭게 사용할 수 있도록 하여, 더욱 유연한 데이터 처리가 가능하게 합니다.
다양한 미세 조정 전략
XTuner는 QLoRA, LoRA, 전체 매개변수 미세 조정(full-parameter fine-tune)과 같은 여러 가지 미세 조정 알고리즘을 지원합니다. 이를 통해 사용자는 프로젝트의 특성에 맞게 가장 적합한 미세 조정 전략을 선택할 수 있습니다.
다양한 미세조정 데이터셋 제공
XTuner는 또한 SFT(Supervised Fine-Tuning)을 위한 다양한 데이터셋들을 제공하고 있습니다:
- MSAgent-Bench
- MOSS-003-SFT
- Alpaca en / zh
- WizardLM
- oasst1
- Open-Platypus
- Code Alpaca
- Colorist
- Arxiv GenTitle
- Chinese Law
- OpenOrca
- Medical Dialogue
- ...
LLaVA 소개
LLaVA는 이미지와 텍스트를 입력으로 받는 멀티모달 대규모 언어 모델(Multimodal LLM)으로, LLM에 Visual Encoder를 추가하고 파인튜닝하는 Visual Instruction Tuning 기법으로 LLM을 VLM(Vision-Language Model)으로 바꾸는 방법을 제시하였습니다.
LLaVA의 주요 특징
멀티모달 학습 능력
LLaVA 모델은 이미지와 텍스트를 동시에 처리할 수 있는 멀티모달 학습 능력을 가지고 있습니다. 이를 통해, 시각적 컨텍스트가 포함된 자연어 처리 태스크를 더 효과적으로 수행할 수 있습니다.
유연한 아키텍처
LLaVA 모델은 다양한 사전 훈련 및 미세 조정 전략을 지원하여, 특정 응용 프로그램의 요구사항에 맞게 모델을 맞춤 설정할 수 있습니다. 예를 들어, LLaVA 모델은 Full LLM과 LoRA ViT와 같은 특정 전략을 사용하여 미세 조정을 수행할 수 있습니다.
고성능 및 최적화
LLaVA 모델은 고성능 컴퓨팅 환경에서 효율적으로 운영될 수 있도록 설계되었습니다. CLIP과 같은 비주얼 인코더와 함께 사용되며, 이는 모델이 높은 정확도와 빠른 추론 속도를 제공할 수 있게 합니다.
LLaVA-Llama-3 모델 상세
XTuner에서 공개한 두 모델 모두 Meta에서 공개한 Llama-3-Instruct 모델을 기반으로 Visual Instruction Tuning을 진행하였습니다:
-
LLaVA-Llama-3-8B 모델은 LLaVA 논문에서 제안했던 LLaVA-PT 데이터셋(558K)으로 사전 학습(Stage-1) 후, LLaVA-Mix 데이터셋(665K)으로 파인튜닝(Stage-2)을 진행하였습니다.
-
LLaVA-Llama-3-8B-v1.1 모델은 LLaVA-Llama-3-8B 모델과 동일한 구조를 가지나, 사전 학습 시에는 ShareGPT4V-PT 데이터셋(1246K)을, 파인튜닝 시에는 InternVL-SFT 데이터셋(1268K)을 사용하였습니다.
Model | Visual Encoder | Projector | Resolution | Pretraining Strategy | Fine-tuning Strategy | Pretrain Dataset | Fine-tune Dataset |
---|---|---|---|---|---|---|---|
LLaVA-v1.5-7B | CLIP-L | MLP | 336 | Frozen LLM, Frozen ViT | Full LLM, Frozen ViT | LLaVA-PT (558K) | LLaVA-Mix (665K) |
LLaVA-Llama-3-8B | CLIP-L | MLP | 336 | Frozen LLM, Frozen ViT | Full LLM, LoRA ViT | LLaVA-PT (558K) | LLaVA-Mix (665K) |
LLaVA-Llama-3-8B-v1.1 | CLIP-L | MLP | 336 | Frozen LLM, Frozen ViT | Full LLM, LoRA ViT | ShareGPT4V-PT (1246K) | InternVL-SFT (1268K) |
성능 비교
Model | MMBench Test (EN) | MMBench Test (CN) | CCBench Dev | MMMU Val | SEED-IMG | AI2D Test | ScienceQA Test | HallusionBench aAcc | POPE | GQA | TextVQA | MME | MMStar |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
LLaVA-v1.5-7B | 66.5 | 59.0 | 27.5 | 35.3 | 60.5 | 54.8 | 70.4 | 44.9 | 85.9 | 62.0 | 58.2 | 1511/348 | 30.3 |
LLaVA-Llama-3-8B | 68.9 | 61.6 | 30.4 | 36.8 | 69.8 | 60.9 | 73.3 | 47.3 | 87.2 | 63.5 | 58.0 | 1506/295 | 38.2 |
LLaVA-Llama-3-8B-v1.1 | 72.3 | 66.4 | 31.6 | 36.8 | 70.1 | 70.0 | 72.9 | 47.7 | 86.4 |
모델 사용 방법
필요 라이브러리 설치
먼저 필요한 라이브러리와 환경을 설정합니다. Python 환경에서 작업을 진행하며, 다음과 같은 명령어를 사용하여 필요한 패키지를 설치할 수 있습니다:
pip install 'lmdeploy>=0.4.0'
pip install git+https://github.com/haotian-liu/LLaVA.git
모델 불러와서 사용하기
모델을 로드하고 초기 설정을 구성하는 과정은 다음과 같습니다. 이 예에서는 lmdeploy
라이브러리를 사용하여 채팅 기능을 구현하는 방법을 보여줍니다:
from lmdeploy import pipeline, ChatTemplateConfig
from lmdeploy.vl import load_image
# 모델과 채팅 템플릿을 설정
pipe = pipeline('xtuner/llava-llama-3-8b-v1_1-hf',
chat_template_config=ChatTemplateConfig(model_name='llama3'))
# 이미지 로드
image = load_image('https://raw.githubusercontent.com/open-mmlab/mmdeploy/main/tests/data/tiger.jpeg')
# 이미지 설명 요청
response = pipe(('describe this image', image))
print(response)
위 코드에서 pipeline
함수는 LLaVA-Llama-3-8B-v1.1 모델을 로드하고, 멀티모달 입력을 처리할 수 있도록 설정합니다. load_image
함수는 주어진 URL에서 이미지를 로드하고, pipe
객체는 이미지와 관련된 질문을 모델에 전달하여 모델이 주어진 이미지를 설명하게 합니다.
더 읽어보기
XTuner GitHub 저장소
LLaVA-Llama-3-8B 모델
LLaVA-Llama-3-8B-v1.1 모델
Llama-3-8B-Instruct 모델
v1.1 모델에 사용한 Dataset들
LLaVA 프로젝트 홈페이지
이 글은 GPT 모델로 정리한 글을 바탕으로 한 것으로, 원문의 내용 또는 의도와 다르게 정리된 내용이 있을 수 있습니다. 관심있는 내용이시라면 원문도 함께 참고해주세요! 읽으시면서 어색하거나 잘못된 내용을 발견하시면 덧글로 알려주시기를 부탁드립니다.
파이토치 한국 사용자 모임이 정리한 이 글이 유용하셨나요? 회원으로 가입하시면 주요 글들을 이메일로 보내드립니다! (기본은 Weekly지만 Daily로 변경도 가능합니다.)
아래쪽에 좋아요를 눌러주시면 새로운 소식들을 정리하고 공유하는데 힘이 됩니다~