인텔 CPU 에서 VLM 실행하기: 3 단계로 시작
요약
본 문서는 고사양 GPU 없이도 인텔 CPU 환경에서 VLM(Vision-Language Model)을 로컬로 실행하는 3단계 과정을 안내합니다. 핵심은 Optimum Intel 및 OpenVINO와 같은 도구를 사용하여 모델을 최적화하고 배포하는 것입니다. 첫 단계는 모델을 OpenVINO IR 형식으로 변환하는 것이며, 다음 단계는 메모리 사용량을 줄이고 추론 속도를 높이기 위해 양자화(Quantization)를 적용하는 것입니다. 특히 가중치만 양자화와 정적 양자화를 비교하며, 각 방법의 장단점과 구현 방법을 제시합니다.
핵심 포인트
- VLM을 로컬에서 실행하면 프라이버시 보호 및 빠른 속도 확보라는 이점이 있습니다.
- OpenVINO와 Optimum Intel 도구를 사용하여 VLM을 인텔 CPU 환경에 맞게 최적화할 수 있습니다.
- 모델 최적화의 핵심은 양자화(Quantization)이며, 이는 모델 가중치/활성화의 정밀도를 낮춰 크기를 줄이고 속도를 높입니다.
- 가중치만 양자화는 구현이 간단하며 메모리 효율성을 개선하지만, 추론 속도 향상은 제한적일 수 있습니다.
- 정적 양자화(Static Quantization)는 가중치와 활성화 모두를 최적화하여 가장 큰 성능 향상을 제공할 수 있으나, 교정(Calibration) 과정이 필요합니다.
자신의 장치에서 AI 모델을 실행하는 것은 이러한 모델이 종종 계산적으로 요구량이 많기 때문에 어려울 수 있지만, 이는 또한 상당한 이점을 제공합니다: 데이터가 머신에 남아있으므로 개선된 프라이버시와 인터넷 연결 또는 외부 서버에 의존하지 않으므로 향상된 속도와 신뢰성. Optimum Intel 와 OpenVINO 와 같은 도구 및 SmolVLM 과 같은 작은 효율적인 모델이 여기에 들어갑니다. 이 블로그 포스트에서는 비싼 하드웨어 또는 GPU 가 필요 없이 로컬에서 VLM 을 실행하는 데 도움이 되는 3 가지 쉬운 단계를 안내합니다 (비록 모든 코드 샘플은 인텔 GPU 에서도 실행할 수 있음).
SmolVLM 과 같은 작은 모델은 저자원 소비를 위해 구축되었지만, 더 최적화될 수 있습니다. 이 블로그 포스트에서는 모델을 최적화하는 방법을 보며 메모리 사용량을 줄이고 추론 속도를 높여 제한된 자원을 가진 장치에 배포를 더욱 효율적으로 만듭니다.
이 튜토리얼을 따르기 위해서는 optimum 과 openvino 를 설치해야 합니다. 다음으로:
pip install optimum-intel[openvino] transformers==4.52.*
먼저 모델을 OpenVINO IR 로 변환해야 합니다. 여러 가지 옵션이 있습니다:
- Optimum CLI 를 사용할 수 있습니다:
optimum-cli export openvino -m HuggingFaceTB/SmolVLM2-256M-Video-Instruct smolvlm_ov/
- 또는 모델을 로드할 때 실시간으로 변환할 수도 있습니다:
from optimum.intel import OVModelForVisualCausalLM
model_id = "HuggingFaceTB/SmolVLM2-256M-Video-Instruct"
model = OVModelForVisualCausalLM.from_pretrained(model_id)
...
이제 모델을 최적화하는 시간이 왔습니다. 양자화는 모델 가중치 및/또는 활성화의 정밀도를 줄여 더 작고 빠른 모델을 만듭니다. 본질적으로, 이는 32 비트 부동소수점 숫자 (FP32) 와 같은 고정밀도 데이터 타입에서 값을 8 비트 정수 (INT8) 와 같은 낮은 정밀도 형식으로 매핑하는 방법입니다. 이 과정은 여러 가지 주요 이점을 제공하지만 정확도 손실이 발생할 수 있습니다.
Optimum 은 두 가지 주요 포스트 훈련 양자화 방법을 지원합니다:
각 방법을 살펴보겠습니다.
가중치 만 양자화 (Weight-only quantization) 는 가중치만 양자화되고 활성화는 원래 정밀도로 유지됩니다. 결과적으로 모델은 더 작고 메모리 효율적이어서 로딩 시간이 개선됩니다. 그러나 활성화가 양자화되지 않으므로 추론 속도 향상은 제한적입니다. 가중치 만 양자화는 일반적으로 유의미한 정확도 저하를 초래하지 않으므로 간단한 첫 단계입니다.
OpenVINO 2024.3 이후, 모델의 가중치가 양자화되면 해당 활성화는 런타임에 또한 양자화되어 장치에 따라 추가 속도 향상을 제공합니다.
이를 실행하려면 다음과 같이 양자화 설정 OVWeightQuantizationConfig 을 생성해야 합니다:
from optimum.intel import OVModelForVisualCausalLM, OVWeightQuantizationConfig
q_config = OVWeightQuantizationConfig(bits=8)
q_model = OVModelForVisualCausalLM.from_pretrained(model_id, quantization_config=q_config)
...
또는 CLI 를 사용하여:
optimum-cli export openvino -m HuggingFaceTB/SmolVLM2-256M-Video-Instruct --weight-format int8 smolvlm_int8/
Static Quantization (정적 양자화) 는 추론 전에 가중치 및 활성화가 모두 양자화됩니다. 활성화 양자화 파라미터를 위한 최상의 추정치를 얻기 위해 교정을 단계를 수행합니다. 이 단계 동안, 작은 대표 데이터셋이 모델에 공급됩니다. 우리 경우, 컨텍스트 데이터셋의 50 개의 샘플을 사용하며 시각 인코더에 대해 정적 양자화를 적용하고 나머지 모델에는 가중치 만 양자화를 적용할 것입니다. 실험은 시각 인코더에 정적 양자화를 적용하면 유의미한 성능 향상을 제공하지만 유의미한 정확도 저하 없이 있음을 보여줍니다. 시각 인코더는 생성당 한 번만 호출되므로, 이 구성 요소에 정적 양자화를 적용하는 것에서 얻은 전체 성능 향상은 더 자주 사용되는 컴포넌트를 최적화하여 달성한 향상보다 낮습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Hugging Face Blog의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기