23.06.15
DEVOTEE를 활성화 시키면
지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.
버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.
| 컨텐츠 유형 | 제목 | 저장일 | 삭제 |
|---|
본인인증 로그인에 실패하였습니다.
회원이 아니시거나 본인인증 등록이
완료되지 않은 사용자입니다.
최근 몇 년간 AI 기술의 발전은 대규모 언어 모델(LLM, Large Language Model)의 등장으로 새로운 국면을 맞이했습니다.
특히 ChatGPT와 같은 LLM은 인간과의 자연스러운 상호작용, 창의적인 콘텐츠 생성, 그리고 지식 확장 능력으로 전 세계적으로 큰 주목을 받으며 AI 기술의 중심에 자리 잡고 있습니다.
이러한 LLM의 인기는 텍스트 기반 작업에서 시작하여 이제는 멀티모달(Multimodal) 모델로의 확장이라는 또 다른 혁신을 이루며 발전하고 있습니다.
GPT-4V로 시작하여 Gemini, Claude-3 등의 상용화 모델이 우후죽순 출시 됨에 따라 이미지를 활용한 상용화 UseCase들이 떠오르고 있는데요.
상용화 서비스를 fine-tuning하여 서비스를 출시 할 수도 있겠지만 서비스가 커지면 비용문제로 자체 모델 개발에 관심을 갖게 될 것입니다.
그래서 이번 포스팅은 Multimodal LLM(이하 MLLM)을 직접 학습하는 과정을 간단한 시나리오로 소개해 보겠습니다.
간단히 소개시켜드릴 목적으로 과정을 간소화하기 위해 다음 조건의 시나리오를 구성해 보겠습니다.
공개 되어있는 multimodal 한국어 데이터
공개 되어있는 모델과 학습 파이프라인
먼저 공개되어있는 데이터를 찾고 데이터에 맞는 시나리오를 구성해 봅시다.
한국어의 multimodal supervised fine-tuning(SFT) 목적의 데이터를 찾아보니 “Table-VQA-ko”라는 데이터를 찾을 수 있었습니다.
이 데이터를 학습하면 한국어로 표이미지를 이해하는 chat bot을 만들 수 있을 것 같습니다.
이 데이터는 6만개의 이미지 QA 셋이 존재하고 샘플 하나를 살펴보면,

이런 표 이미지와

표에 대한 질의 응답 내용을 담고 있는 것을 확인할 수 있습니다.
이 데이터를 활용해 학습하면 표에 대해서 이해하는 MLLM을 학습할 수 있겠네요!
다음은 스탭은 모델과 학습 파이프라인을 모두 공개한 repository를 찾는 것 입니다.
먼저 최신 MLLM에서 SOTA의 성능을 가지는 모델들을 찾아봅시다.

MLLM의 성능 leaderboard인 OpenCompass 기준으로
open-source 모델인 Qwen2-VL, InternVL2, LLaVA-OneVision 세 개의 모델이 눈에 띄고 많이 알려져있는 모델입니다.
Qwen2-VL: 모델은 공개되어있지만 학습 pipeline이 Qwen-VL까지만 공개되어있음 (Qwen2-VL은 공식 지원하지 않음)
InternVL2: 모델과 학습 pipeline 모두 공개
LLaVA-OneVision: 모델과 학습 pipeline 모두 공개
InternVL2과 LLaVA-OneVision 모두 fine-tuning을 할 수 있도록 제공하고 모델과 코드를 모두 제공하고 있는 것을 확인하였고,
그 중 이번 포스팅은 InternVL2의 모델과 학습 pipeline을 선택하여 진행해 보겠습니다.
Shanghai AI Laboratory에서 만든 Multimodal Model로 위 3개의 모델 중에는 가장 먼저 리더보드 상위에 자리했음에도 아직까지 상위권을 유지하고 있는 모델입니다.
모델에 대한 특징을 설명 드리면

Dynamic high resolution: 이미지를 여러장의 tile로 나눠 encoding하여 image의 aspect ratio를 어느정도 유지하면서 디테일한 pixel도 같이 보는 방식
projection-based auto-regressive 모델: 이미지를 encoding하고 dimension을 맞추는 projection을 통해 이미지를 LLM의 text token embedding space에 align 시킨 방식
high-quality task 데이터 학습: 다양한 image understanding task를 수행할 수 있도록 학습으로 요약할 수 있고, 이 내용은 다른 MLLM 모델들에서도 많이 확인할 수 있는 특징이기도 합니다.
InternVL2로 공개한 모델 중 학습에 용이하도록 크기가 작으면서 한국어 학습이 어느정도 가능한 모델로 InternVL2-1B 모델을 우리의 base 모델로 선정하겠습니다.
InternVL2-1B는 multilingual을 지원하면서 한국어 성능이 잘 나오는 Qwen2-0.5B-Instruct 모델을 LLM backbone으로 사용하고 있어 한국어를 학습시키기 좋은 최적의 모델이라고 볼 수 있습니다. :)
정리하면
Model: InternVL2-1B
Dataset: Table-VQA-ko
Scenario: 한국어 표를 읽고 이해할 수 있는 MLLM chat 모델
으로 요약 하겠습니다.
InternVL 학습 파이프라인의 가이드를 살펴보고 학습 환경을 먼저 준비합시다.
그리고 데이터와 base 모델을 준비해야하는데요.
다음과 같은 구조로 data/ 와 models/ 파일들을 준비해 봅시다. 데이터셋과 모델은 huggingface-cli 를 이용하면 쉽게 다운로드 할 수 있습니다.

Table-VQA-ko데이터는 json파일로 제공되는 반면에 InternVL 학습 파이프라인은 jsonl 파일을 지원합니다.
또, Table-VQA-ko 데이터는 누락된 이미지들이 존재하여 누락된 이미지를 제외하고 jsonl 파일로 만들어 봅시다. (첨부파일로 코드 제공)

데이터가 준비 됐으면 데이터 configuration을 만들어 줘야합니다. (첨부파일로 제공)

그리고 학습 script (internvl_chat/shell/internvl2.0/2nd_finetune/internvl2_1b_qwen2_0_5b_dynamic_res_2nd_finetune_full.sh)를 준비된 데이터와 모델에 맞게 수정해 봅시다.
수정해야할 내용은
OUTPUT_DIR='checkpoints/internvl2_1b_qwen2_0_5b_table_vqa_ko': 학습된 모델을 저장할 경로로 자유롭게 변경
--model_name_or_path "./models/InternVL2-1B": InternVL2-1B로 부터 finetuning 할 수 있도록 변경
--meta_path "./shell/data/table_vqa_ko.json": Table-VQA-ko data configuration 지정
--freeze_backbone False: Vision encoder (SigLIP)의 한국어 text를 읽는 능력이 약할 것이므로 학습 할때 Vision encoder도 함께 학습하도록 설정
--deepspeed "zero_stage3_config.json": GPU resource 부족할 경우 zero-1에서 zero-3로 변경
입니다. (첨부파일로 제공)
그럼 학습 준비가 모두 완료되었으므로 GPUS 환경변수는 준비된 개수에 맞게 설정하고 학습을 진행합니다.
GPUS=8 PER_DEVICE_BATCH_SIZE=1 sh shell/internvl2.0/2nd_finetune/internvl2_1b_qwen2_0_5b_dynamic_res_2nd_finetune_full_table_vqa_ko.sh
A100 8대 기준으로 1 epoch 학습시키는데 1시간30분 정도 소요 되었습니다.
학습 그래프를 살펴보니

learning curve가 잘 떨어진 것을 확인 할 수 있네요. 학습이 완료되었습니다!
그럼 사용해봐야겠죠?
다행히 InternVL pipeline에서 demo도 지원하고 있습니다. 가이드를 잘 따라서 실행해보면

우리가 학습시킨 모델이 잘 올라와있는 것을 확인 할 수 있습니다. System Prompt는 default로 중국어가 작성되어있으니 삭제하겠습니다.
시나리오대로 실행해 보겠습니다.

이 표를 넣고 "이 표에 대해 설명해줘" 라고 해보겠습니다.

학습에 사용한 데이터에 담겨있는데로 표를 추출하고 요약, 주요 내용, 배경, 의미에 대해서 잘 설명하고 있네요.
그럼 LLM의 능력를 활용하여 후속 질문도 해 보겠습니다.

수치를 잘 읽고 질문에 답변을 잘 하고 있습니다. 중간 중간 틀린내용이 보이지만 0.5B LLM을 활용한 것으로 어느정도 이해해 볼 수 있을 것 같습니다.
이번 포스팅에서는 Open-source Multimodal LLM을 활용하여 간단한 서비스 시나리오에 맞는 모델을 학습해 보았습니다.
비록 간단한 prototyping이라 0.5B의 작은 모델과 6만개의 적은 데이터로 2시간이 넘지 않는 시간동안 모델을 학습하였지만,
데이터가 의도한 데로 모델이 잘 학습되어 시나리오를 잘 수행한 것을 확인 할 수 있었습니다.
간단한 prototyping으로 가능성을 확인해 보았으니 모델 크기를 더 키우고 데이터도 더 많이 확보하면 서비스 상용화를 할 수 있는 모델을 빠르게 만들어볼 수 있는 가능성이 열린 것 같습니다.
비록 저는 A100 8대로 진행하였지만 zero-stage를 조절하고 GPU개수를 줄이면 훨씬 적은 resource로도 충분히 여러분들도 모델을 학습해서 상용화에 도전해 볼 수 있습니다.
도전하세요!
DEVOTEE를 활성화 시키면
지금 작성한 댓글에 AI가 댓글을 달아줍니다.