LLM 파인튜닝 도구 XTuner, Llama-3 기반 LLaVA 모델 공개

:pytorch:PyTorchKR:kr:

Llama-3 모델이 공개되며 많은 곳에서 다양한 방식으로 파인튜닝 및 활용을 하고 계신데요, 이번에는 대규모 언어 모델(LLM) 파인튜닝 도구 XTuner에서 Llama-3-8B-Instruct 모델을 기반으로 한 LLaVA-Llama-3-8B 모델과 LLaVA-Llama-3-8B-v1.1을 공개한 것이 눈에 띄어 가져와봤습니다. :star_struck:

LLM 파인튜닝 도구 XTuner, Llama-3 기반 LLaVA 모델 공개


LLM 파인튜닝 도구 XTuner, Llama-3 기반 LLaVA 모델 공개

XTuner 소개

XTuner는 Gemma, Mixtral 8x7B, Llama2를 비롯하여 InterLM2Qwen 등과 같은 다양한 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들은 다음과 같습니다:

고성능 연산 지원

XTuner는 FlashAttention과 Triton과 같은 고성능 연산자를 자동으로 사용하여 모델 훈련의 효율을 극대화합니다. 이 기능은 특히 대규모 데이터셋을 처리할 때 시간과 자원을 절약하면서도 높은 처리량을 달성할 수 있게 도와줍니다.

DeepSpeed 통합

DeepSpeed:rocket:와의 통합을 통해, XTuner는 다양한 최적화 기술을 쉽게 활용할 수 있습니다. ZeRO 최적화 기법을 포함한 DeepSpeed의 기능은 메모리 사용량을 줄이면서도 모델 성능은 유지하게 해줍니다. 이를 통해 더 큰 모델을 더 적은 자원으로 효과적으로 학습시킬 수 있습니다.

유연한 데이터 파이프라인

XTuner는 다양한 형식의 데이터셋을 지원하는 잘 설계된 데이터 파이프라인을 제공합니다. 이 기능은 사용자가 오픈 소스 또는 맞춤형 데이터 형식을 자유롭게 사용할 수 있도록 하여, 더욱 유연한 데이터 처리가 가능하게 합니다.

다양한 미세 조정 전략

XTuner는 QLoRA, LoRA, 전체 매개변수 미세 조정(full-parameter fine-tune)과 같은 여러 가지 미세 조정 알고리즘을 지원합니다. 이를 통해 사용자는 프로젝트의 특성에 맞게 가장 적합한 미세 조정 전략을 선택할 수 있습니다.

다양한 미세조정 데이터셋 제공

XTuner는 또한 SFT(Supervised Fine-Tuning)을 위한 다양한 데이터셋들을 제공하고 있습니다:

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)

성능 비교

Llama-3 기반 LLaVA 모델들과 LLaVA-1.5-7B 모델의 성능 비교

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 모델로 정리한 글을 바탕으로 한 것으로, 원문의 내용 또는 의도와 다르게 정리된 내용이 있을 수 있습니다. 관심있는 내용이시라면 원문도 함께 참고해주세요! 읽으시면서 어색하거나 잘못된 내용을 발견하시면 덧글로 알려주시기를 부탁드립니다. :hugs:

:pytorch:파이토치 한국 사용자 모임:kr:이 정리한 이 글이 유용하셨나요? 회원으로 가입하시면 주요 글들을 이메일:love_letter:로 보내드립니다! (기본은 Weekly지만 Daily로 변경도 가능합니다.)

:gift: 아래:arrow_lower_right:쪽에 좋아요:heart:를 눌러주시면 새로운 소식들을 정리하고 공유하는데 힘이 됩니다~ :star_struck:

5개의 좋아요