EmbeddingGemma2: 이미지/비디오 검색 및 메모리 최적화 결과
요약
EmbeddingGemma2 모델은 텍스트와 이미지를 상호 검색할 수 있는 멀티모달 임베딩 기능을 제공하며, 메모리 최적화에 중점을 두었습니다. 특히 여러 모달리티 작업 공간을 통합하고 호스트 RAM으로 임베딩을 제거하는 방식으로 VRAM 및 Host RAM 사용량을 크게 줄였습니다. 성능 측면에서는 Prefill 속도가 vLLM 대비 월등히 빠르며, 더 큰 컨텍스트에서 높은 피크 동시성을 달성할 수 있도록 개선되었습니다.
핵심 포인트
- 텍스트-이미지 상호 검색이 가능한 멀티모달 임베딩 모델 공개
- 메모리 최적화를 통해 VRAM 및 Host RAM 사용량을 대폭 절감함
- Prefill 속도가 vLLM 대비 월등히 빠르며, 긴 컨텍스트에서 강점 발휘
- 여러 모달리티 작업 공간을 통합하고 효율적인 메모리 관리를 구현함
EmbeddingGemma2 이 모델은 정말 놀랍습니다. 진심으로요. 텍스트 프롬프트로 이미지를 검색하거나 비디오 프롬프트로 텍스트를 검색할 수 있게 해줍니다. 현재 제 저장 공간의 절반 정도에 임베딩을 작업하고 있습니다. 별표(") 표시가 붙은 것은, 어떤 이유에서인지 lcpp와 vllm 모두 FA(Flash Attention) 기능이 활성화된 경우 제가 사용하는 장비에서는 FA가 비활성화된 경우보다 현저히 느렸기 때문입니다. 다른 환경에서는 수치가 다를지 모르겠습니다. Gewell은 FA를 사용하지 않기 때문에, 분명 영향을 받지 않았습니다. 성능 면에서 개선할 여지는 아직 있지만, 일단 공개하고 싶었습니다. 또한 참고 트랜스포머 구현에 더 충실해졌습니다! 동일한 아티팩트의 sentence-transformers 참조 값 대비 생성된 임베딩의 코사인 유사도: 엔진 텍스트 최소 이미지 최소 이미지 평균 gewell 0.99975 0.99918 0.99970 llama.cpp 0.99983 0.9815 0.9864 vLLM 0.99967 0.9459 0.9512 이미지 처리량 최적화 몇 가지(예: jpeg DCT)는 참조 코사인 값이 세 자릿수(three nines, 즉 0.999 이상) 미만으로 떨어뜨리기 때문에 거부되었습니다... 그리고 저장 공간의 절반을 임베딩하면서, 저는 이것을 항상 켜져 있는 서비스로 만들고 싶다는 것을 깨달았습니다. 그리고 항상 켜져 있는 서비스는 작게 유지해야 하므로, 메모리 사용량을 줄이는 데 전념했습니다. 여러 모달리티 간 작업 공간을 중첩시키고, 임베딩을 호스트 RAM으로 제거(evicting)하며, 일반적인 다수의 cublas 핸들 대신 단일 cublas 핸들을 사용하고 다른 몇 가지 조정 덕분에, 전체 텍스트+이미지 메모리 사용량(모든 작업 공간 및 전체 8k 컨텍스트 포함)을 1.13gb vram과 0.93gb host ram으로 줄이는 데 성공했습니다. 오디오는 좀 더 특별한 경우이며 추가로 약 1.5gb가 필요하겠지만, 이것도 개선할 아이디어가 있습니다... 네. 어떤 사람들은 명백히 신경 쓰지 않습니다. 또한 이 모델은 블랙웰(Blackwell) 커널이 아닌 다른 커널에서 처음으로 볼 수 있는 것일 가능성이 높습니다. 저도 제 3090 워크스테이션에 이걸 사용해보고 싶네요. # Gemma 4 26A4 이제 지원됩니다!
Prefill은 vllm 대비 전반적으로 10-74% 더 빠릅니다. 컨텍스트가 길수록 gewell이 더 빨라집니다. no-mtp tg는 컨텍스트 압축 비용 때문에 약간 느리지만, with-mtp tg는 더 나은 mtp 커널 덕분에 일반적으로 약간 앞섭니다. https://preview.redd.it/056qmzhud1vh1.png?width=2473&format=png&auto=webp&s=228044bd3d083b2edffe50eabfc9866d670869e8 https://preview.redd.it/1af8oaiud1vh1.png?width=2140&format=png&auto=webp&s=a6d5af42fbfa514af58e4a9b65fefce7e5cd80eb ...게다가 컨텍스트에 필요한 일반적인 0.625x vram이 추가되어, 더 큰 컨텍스트에서 높은 피크 동시성을 달성할 수 있습니다. 31b와 달리, nvidia의 nvfp4보다 좋고 작은 양자화(quant)를 만들지 못했습니다. 뭐 어쩔 수 없죠. # 31 31b도 일부 점진적인 개선을 보였습니다. 눈에 띄는 차트는 없지만, 매우 짧은 컨텍스트(<4k)에서 대규모 배치(16+)로 mtp-on을 사용했을 때, 더 나은 검증 배칭 덕분에 20-24%의 tg 향상을 얻었으나 여전히 vllm보다 약간 뒤처집니다. 이미 좋았던 다른 모드들에서도 포인트별 작업과 짧은 어텐션(attention)에서 낭비를 줄임으로써 pp와 tg 모두에서 2-4%의 이득을 보았습니다. 대부분의 커널이 이론적 최대 성능의 80-85%에 머물러 있어, 더 많은 성능 향상을 끌어내기는 어려울 것 같지만 지켜보겠습니다! https://github.com/leDissolution/gewell/releases/tag/0.2.0 /u/stoppableDissolution이 제출함 [링크] [댓글]
AI 자동 생성 콘텐츠
본 콘텐츠는 Reddit AI Engineering의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기