nanoVLM 소개
Hugging Face가 최근 공개한 nanoVLM은 단 750줄의 순수 PyTorch 코드로 구성된 초경량 비전-언어 모델입니다. 복잡한 종속성이나 무거운 프레임워크 없이, 단일 GPU에서도 학습 가능한 이 프로젝트는 비전-언어 모델 구조를 처음부터 끝까지 이해하고자 하는 분들에게 매우 훌륭한 학습 자료입니다. 특히 Andrej Karpathy의 nanoGPT에서 영감을 받아 설계되었으며, 연구 및 실험 중심의 멀티모달 학습에 적합합니다.
nanoVLM은 이미지와 텍스트라는 서로 다른 두 모달리티를 동시에 처리할 수 있는 비전-언어 모델(Vision-Language Model, VLM)을 단순한 구조로 구현한 프로젝트입니다. Hugging Face의 연구원들이 개발했으며, 교육 목적은 물론, 실험과 커스터마이징이 쉬운 베이스라인 모델을 제공합니다.
nanoVLM 프로젝트는 다음과 같은 철학을 기반으로 설계되었습니다:
- 읽기 쉽고 간결한 구조: 전체가 약 750줄의 PyTorch 코드로 작성되어 있어, 초보자도 모델 구조를 파악하기 용이합니다.
- 모듈화된 설계: Vision Encoder, Text Decoder, 그리고 이 둘을 연결하는 Projection Layer가 깔끔하게 분리되어 있어, 실험에 유연하게 대응할 수 있습니다.
- 학습 친화적인 구성: 222M 파라미터의 모델을 기준으로 H100 GPU 하나로 약 6시간이면 학습이 완료됩니다. 사용된 데이터셋은 공개된 Multimodal-Instructions-1.1이며, 약 170만 개의 샘플을 포함합니다.
특히 모델 아키텍처 자체가 실용성과 직관성을 고려해 구성되어 있기 때문에, 기존 VLM 구조를 학습하고 싶은 분들에게 최적입니다. 기존 VLM은 성능 면에서 우수하지만, 대부분 코드나 학습 과정이 비공개이거나 너무 복잡하여 실험에 부적합합니다. 반면 nanoVLM은 초경량 구조를 통해 학습 진입 장벽을 대폭 낮춘 것이 특징입니다.
nanoVLM의 주요 기능
간결한 PyTorch 구현: 모델 정의부터 학습까지 전체 로직이 단일 프로젝트 안에서 정리되어 있어 파악이 빠릅니다.
모듈화 아키텍처 :
- Vision Encoder: CLIP에서 가져온 ResNet 계열 구조
- Language Decoder: GPT 스타일의 Transformer 디코더
- Projection Layer: modality간 연결을 위한 선형 변환
빠른 학습: 단일 H100 GPU에서 1.7M 샘플 학습에 약 6시간 소요
실험 성능: MMStar 벤치마크에서 35.3% 정확도 달성 (222M 기준)
검증된 사전학습 모델 제공: Hugging Face Hub에서 lusxvr/nanoVLM-222M를 사용할 수 있음
사용 방법
아래와 같이 저장소를 내려받아 실행하거나, Google Colab에서 직접 실행해볼 수 있습니다.
1. 설치 및 준비
git clone https://github.com/huggingface/nanoVLM.git
cd nanoVLM
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
2. 학습 실행
python train.py
train.py는 데이터셋 로딩, 모델 생성, optimizer 구성, 로깅 등을 모두 포함한 단일 엔트리 포인트입니다.
3. 추론 실행
사전 학습된 모델을 Hugging Face Hub에서 불러와 이미지-텍스트 질의를 수행할 수 있습니다.
from transformers import NanoVLMProcessor, NanoVLMForConditionalGeneration
from PIL import Image
model = NanoVLMForConditionalGeneration.from_pretrained("hf/nanoVLM-1.1b")
processor = NanoVLMProcessor.from_pretrained("hf/nanoVLM-1.1b")
image = Image.open("cat.jpg")
prompt = "이 동물은 무엇을 하고 있나요?"
inputs = processor(images=image, text=prompt, return_tensors="pt")
outputs = model.generate(**inputs)
print(processor.decode(outputs[0]))
nanoVLM 프로젝트 소개 블로그
nanoVLM 프로젝트 GitHub 저장소
nanoVLM 모델 다운로드
nanoVLM의 사전 학습된 백본 모델
-
nanoVLM의 Vision Backbone 모델: google/siglip-base-patch16-224 · Hugging Face
-
nanoVLM의 Language Backbone 모델: HuggingFaceTB/SmolLM2-135M · Hugging Face
이 글은 GPT 모델로 정리한 글을 바탕으로 한 것으로, 원문의 내용 또는 의도와 다르게 정리된 내용이 있을 수 있습니다. 관심있는 내용이시라면 원문도 함께 참고해주세요! 읽으시면서 어색하거나 잘못된 내용을 발견하시면 덧글로 알려주시기를 부탁드립니다.
파이토치 한국 사용자 모임
이 정리한 이 글이 유용하셨나요? 회원으로 가입하시면 주요 글들을 이메일
로 보내드립니다! (기본은 Weekly지만 Daily로 변경도 가능합니다.)
아래
쪽에 좋아요
를 눌러주시면 새로운 소식들을 정리하고 공유하는데 힘이 됩니다~