Eagle2.5 8B
模型简介
Eagle 2.5解决了长视频理解和高分辨率图像理解的挑战,提供了通用框架,在多个基准测试中表现优异。
模型特点
长上下文处理能力
支持处理长达512帧的视频序列和高分辨率图像,解决了现有大多数VLM专注于短上下文任务的局限。
信息优先采样
通过图像区域保留(IAP)和自动降级采样(ADS)优化视觉和文本输入,确保在不丢失信息的前提下最大化利用上下文长度。
渐进式混合后训练
在训练过程中逐渐增加上下文长度,从32K扩展到128K,增强模型处理不同输入大小的能力。
多样性驱动的数据配方
结合开源数据和自主策划的Eagle-Video-110K数据集,提供丰富多样的训练样本。
效率优化
通过GPU内存优化、分布式上下文并行、视频解码加速和推理加速等技术,显著提升模型的计算效率和推理速度。
模型能力
长视频理解
高分辨率图像理解
多模态学习
文本生成
图像分析
视频分析
使用案例
视频理解
长视频内容分析
分析长达512帧的视频内容,提取关键信息和故事线。
在多个视频基准测试中达到SOTA水平。
视频问答
根据视频内容回答相关问题。
在Video-MME上使用512输入帧时达到72.4%的准确率。
图像理解
高分辨率图像分析
处理高分辨率图像,提取细粒度细节。
在多个图像基准测试中表现优异,与Qwen2.5-VL表现相当。
文档理解
解析多页文档内容,提取关键信息。
在DocVQA测试中达到94.1%的准确率。
🚀 Eagle 2.5
Eagle 2.5是一系列前沿的视觉语言模型(VLM),专为长上下文多模态学习而设计。它解决了长视频理解和高分辨率图像理解的挑战,为这两个领域提供了通用框架。
项目链接
🚀 快速开始
要使用Eagle 2.5,首先需要安装必要的库:
pip install transformers==4.51.0
✨ 主要特性
强大的长上下文处理能力
Eagle 2.5支持处理长达512帧的视频序列,在长视频理解和高分辨率图像理解方面表现出色,解决了现有大多数VLM专注于短上下文任务的局限。
优异的基准测试成绩
- 在10个长视频基准测试中的6个上达到了SOTA水平。
- 在3/5的视频任务中超越了GPT - 4o (0806)。
- 在4/6的视频任务中超越了Gemini 1.5 Pro。
- 在多个关键数据集上与Qwen2.5 - VL - 72B表现相当或更优。
- 在Video - MME上使用512输入帧时达到72.4%的准确率。
- 在图像理解方面相较于Eagle 2有持续提升,与Qwen2.5 - VL表现相当。
关键创新点
- 信息优先采样:
- 图像区域保留(IAP):优化图像分块,保留大部分原始图像区域和宽高比,保留细粒度细节。
- 自动降级采样(ADS):动态平衡视觉和文本输入,确保在上下文长度限制内完整保留文本的同时最大化视觉内容。
- 渐进式混合后训练:在训练过程中逐渐增加上下文长度,增强模型处理不同输入大小的能力,提高信息密度。
- 多样性驱动的数据配方:将开源数据(人工标注和合成数据)与精心策划的Eagle - Video - 110K数据集相结合,该数据集通过多样性驱动策略收集,并带有故事级和片段级的问答对标注。
效率与框架优化
- GPU内存优化:
- 集成基于Triton的融合算子,替代PyTorch的MLP、RMSNorm和RoPE实现。
- 通过融合线性层和交叉熵损失(去除中间logit存储)以及将隐藏状态卸载到CPU来减少GPU内存使用。
- 分布式上下文并行:
- 采用基于Ulysses和Ring/Context Parallelism的两层通信组。
- 实现ZigZag Llama3风格的上下文并行,使用全收集KV减少通信延迟。
- 视频解码加速:优化稀疏视频帧采样,快速解析视频元数据,提高长视频解码速度并减少内存消耗。
- 推理加速:支持vLLM部署,减少内存使用并加速推理。
📦 安装指南
安装所需的库:
pip install transformers==4.51.0
💻 使用示例
基础用法
单张图像
from PIL import Image
import requests
from transformers import AutoProcessor, AutoModel
import torch
model = AutoModel.from_pretrained("nvidia/Eagle-2.5-8B",trust_remote_code=True, torch_dtype=torch.bfloat16)
processor = AutoProcessor.from_pretrained("nvidia/Eagle-2.5-8B", trust_remote_code=True, use_fast=True)
processor.tokenizer.padding_side = "left"
messages = [
{
"role": "user",
"content": [
{
"type": "image",
"image": "https://www.ilankelman.org/stopsigns/australia.jpg",
},
{"type": "text", "text": "Describe this image."},
],
}
]
text_list = [processor.apply_chat_template(
messages, tokenize=False, add_generation_prompt=True
)]
image_inputs, video_inputs = processor.process_vision_info(messages)
inputs = processor(text = text_list, images=image_inputs, videos=video_inputs, return_tensors="pt", padding=True)
inputs = inputs.to("cuda")
model = model.to("cuda")
generated_ids = model.generate(**inputs, max_new_tokens=1024)
output_text = processor.batch_decode(
generated_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False
)
print(output_text)
高级用法
流式生成
from PIL import Image
import requests
from transformers import AutoProcessor, AutoModel, AutoTokenizer
import torch
from transformers import TextIteratorStreamer
import threading
model = AutoModel.from_pretrained("nvidia/Eagle-2.5-8B",trust_remote_code=True, attn_implementation='flash_attention_2', torch_dtype=torch.bfloat16)
tokenizer = AutoTokenizer.from_pretrained("nvidia/Eagle-2.5-8B", trust_remote_code=True, use_fast=True)
processor = AutoProcessor.from_pretrained("nvidia/Eagle-2.5-8B", trust_remote_code=True, use_fast=True)
processor.tokenizer.padding_side = "left"
messages = [
{
"role": "user",
"content": [
{
"type": "image",
"image": "https://www.ilankelman.org/stopsigns/australia.jpg",
},
{"type": "text", "text": "Describe this image."},
],
}
]
text_list = [processor.apply_chat_template(
messages, tokenize=False, add_generation_prompt=True
)]
image_inputs, video_inputs = processor.process_vision_info(messages)
inputs = processor(text = text_list, images=image_inputs, videos=video_inputs, return_tensors="pt", padding=True)
inputs = inputs.to("cuda")
model = model.to("cuda")
streamer = TextIteratorStreamer(tokenizer, skip_prompt=True, skip_special_tokens=True)
generation_kwargs = dict(
**inputs,
streamer=streamer,
max_new_tokens=1024,
do_sample=True,
top_p=0.95,
temperature=0.8
)
thread = threading.Thread(target=model.generate, kwargs=generation_kwargs)
thread.start()
for new_text in streamer:
print(new_text, end="", flush=True)
多张图像
from PIL import Image
import requests
from transformers import AutoProcessor, AutoModel
import torch
model = AutoModel.from_pretrained("nvidia/Eagle-2.5-8B",trust_remote_code=True, torch_dtype=torch.bfloat16)
processor = AutoProcessor.from_pretrained("nvidia/Eagle-2.5-8B", trust_remote_code=True, use_fast=True)
processor.tokenizer.padding_side = "left"
messages = [
{
"role": "user",
"content": [
{
"type": "image",
"image": "https://www.ilankelman.org/stopsigns/australia.jpg",
},
{
"type": "image",
"image": "https://www.nvidia.com/content/dam/en-zz/Solutions/about-nvidia/logo-and-brand/01-nvidia-logo-vert-500x200-2c50-d@2x.png",
},
{"type": "text", "text": "Describe these two images."},
],
}
]
text_list = [processor.apply_chat_template(
messages, tokenize=False, add_generation_prompt=True
)]
image_inputs, video_inputs = processor.process_vision_info(messages)
inputs = processor(text = text_list, images=image_inputs, videos=video_inputs, return_tensors="pt", padding=True)
inputs = inputs.to("cuda")
model = model.to("cuda")
generated_ids = model.generate(**inputs, max_new_tokens=1024)
output_text = processor.batch_decode(
generated_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False
)
print(output_text)
单视频
from PIL import Image
import requests
from transformers import AutoProcessor, AutoModel
import torch
model = AutoModel.from_pretrained("nvidia/Eagle-2.5-8B",trust_remote_code=True, torch_dtype=torch.bfloat16)
processor = AutoProcessor.from_pretrained("nvidia/Eagle-2.5-8B", trust_remote_code=True, use_fast=True)
processor.tokenizer.padding_side = "left"
messages = [
{
"role": "user",
"content": [
{
"type": "video",
"video": "../Eagle2-8B/space_woaudio.mp4",
},
{"type": "text", "text": "Describe this video."},
],
}
]
text_list = [processor.apply_chat_template(
messages, tokenize=False, add_generation_prompt=True
)]
image_inputs, video_inputs, video_kwargs = processor.process_vision_info(messages, return_video_kwargs=True)
inputs = processor(text = text_list, images=image_inputs, videos=video_inputs, return_tensors="pt", padding=True, videos_kwargs=video_kwargs)
inputs = inputs.to("cuda")
model = model.to("cuda")
generated_ids = model.generate(**inputs, max_new_tokens=1024)
output_text = processor.batch_decode(
generated_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False
)
print(output_text)
多视频
from PIL import Image
import requests
from transformers import AutoProcessor, AutoModel
import torch
model = AutoModel.from_pretrained("nvidia/Eagle-2.5-8B",trust_remote_code=True, torch_dtype=torch.bfloat16)
processor = AutoProcessor.from_pretrained("nvidia/Eagle-2.5-8B", trust_remote_code=True, use_fast=True)
processor.tokenizer.padding_side = "left"
messages = [
{
"role": "user",
"content": [
{
"type": "video",
"video": "../Eagle2-8B/space_woaudio.mp4",
"nframes": 10,
},
{
"type": "video",
"video": "../Eagle2-8B/video_ocr.mp4",
"nframes": 10,
},
{"type": "text", "text": "Describe these two videos respectively."},
],
}
]
text_list = [processor.apply_chat_template(
messages, tokenize=False, add_generation_prompt=True
)]
image_inputs, video_inputs, video_kwargs = processor.process_vision_info(messages, return_video_kwargs=True)
inputs = processor(text = text_list, images=image_inputs, videos=video_inputs, return_tensors="pt", padding=True, videos_kwargs=video_kwargs)
inputs = inputs.to("cuda")
model = model.to("cuda")
generated_ids = model.generate(**inputs, max_new_tokens=1024)
output_text = processor.batch_decode(
generated_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False
)
print(output_text)
批量推理
from PIL import Image
import requests
from transformers import AutoProcessor, AutoModel
import torch
model = AutoModel.from_pretrained("nvidia/Eagle-2.5-8B",trust_remote_code=True, torch_dtype=torch.bfloat16)
processor = AutoProcessor.from_pretrained("nvidia/Eagle-2.5-8B", trust_remote_code=True, use_fast=True)
processor.tokenizer.padding_side = "left"
messages1 = [
{
"role": "user",
"content": [
{
"type": "image",
"image": "https://www.ilankelman.org/stopsigns/australia.jpg",
},
{"type": "text", "text": "Describe this image."},
],
}
]
messages2 = [
{
"role": "user",
"content": [
{
"type": "image",
"image": "https://www.nvidia.com/content/dam/en-zz/Solutions/about-nvidia/logo-and-brand/01-nvidia-logo-vert-500x200-2c50-d@2x.png",
},
{"type": "text", "text": "Describe this image."},
],
}
]
text_list = [processor.apply_chat_template(
messages, tokenize=False, add_generation_prompt=True
) for messages in [messages1, messages2]]
image_inputs, video_inputs = processor.process_vision_info([messages1, messages2])
inputs = processor(text = text_list, images=image_inputs, videos=video_inputs, return_tensors="pt", padding=True)
inputs = inputs.to("cuda")
model = model.to("cuda")
generated_ids = model.generate(**inputs, max_new_tokens=1024)
output_text = processor.batch_decode(
generated_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False
)
print(output_text)
📚 详细文档
模型详情
属性 | 详情 |
---|---|
模型类型 | 长上下文视觉语言模型 |
架构 | 视觉编码器:Siglip2 - So400m - Patch16 - 512;语言模型:Qwen2.5 - 7B - Instruct;多模态基础架构:基于分块视觉输入的LLaVA |
支持输入 | 长视频序列(最多512帧)、高分辨率图像(最大4K HD输入尺寸)、多页文档、长文本 |
训练策略 | 渐进式混合后训练,上下文长度从32K扩展到128K;信息优先采样以优化视觉和文本信息保留 |
训练数据 | 开源视频和文档数据集、Eagle - Video - 110K(110K个具有双级标注的长视频) |
发布的模型
模型 | 日期 | 下载链接 | 说明 |
---|---|---|---|
Eagle2.5 - 8B | 2025.04.16 | [HF链接](https://huggingface.co/nvidia/Eagle2.5 - 8B) | 支持长视频(512帧)和高分辨率输入 |
视频基准测试
基准测试 | GPT - 4o | Gemini - 1.5 Pro | InternVL2.5 - 8B | Qwen2.5 - VL - 8B | Eagle2.5 - 8B |
---|---|---|---|---|---|
MVBenchtest | - | - | 72.0 | 69.6 | 74.8 |
Perception_testval | - | - | - | 70.5 | 82.0 |
EgoSchemafullset | - | 72.2 | - | 65.0 | 72.2 |
MMB - Video | 1.63 | 1.30 | 1.68 | 1.79 | 1.94 |
MLVUval | - | - | 68.9 | 70.2 | 77.6 |
LVBenchval | 66.7 | 64.0 | 60.0 | 56.0 | 66.4 |
Video - MMEw/o subtitle | 71.9 | 75.0 | 64.2 | 65.1 | 72.4 |
Video - MMEw subtitle | 77.2 | 81.3 | 66.9 | 71.6 | 75.7 |
CG - BenchClue | 58.6 | 50.9 | - | 44.5 | 55.8 |
CG - BenchLong | 44.9 | 37.8 | - | 35.5 | 46.6 |
CG - BenchmIoU | 5.73 | 3.85 | - | 2.48 | 13.4 |
HourVideoDev | - | 37.2 | - | - | 44.5 |
HourVideoTest | - | 37.4 | - | - | 41.8 |
Charade - STAmIoU | 35.7 | - | - | 43.6 | 65.9 |
HD - EPIC | - | 37.6 | - | - | 42.9 |
HRVideoBench | - | - | - | - | 68.5 |
EgoPlanval | - | - | - | - | 45.3 |
具身基准测试
基准测试 | GPT - 4o | Gemini - 1.5 Pro | InternVL2.5 - 8B | Qwen2.5 - VL - 8B | Eagle2.5 - 8B |
---|---|---|---|---|---|
OpenEQA | - | - | - | - | 63.5 |
ERQA | 47.0 | 41.8 | - | - | 38.3 |
EgoPlanval | - | - | - | - | 45.3 |
图像基准测试
基准测试 | GPT - 4o | Gemini - 1.5 Pro | InternVL2.5 - 8B | Qwen2.5 - VL - 8B | Eagle2.5 - 8B |
---|---|---|---|---|---|
DocVQAtest | 92.8 | 93.1 | 93.0 | 95.7 | 94.1 |
ChartQAtest | 85.7 | 87.2 | 84.8 | 87.3 | 87.5 |
InfoVQAtest | 79.2 | 81.0 | 77.6 | 82.6 | 80.4 |
TextVQAval | 77.4 | 78.8 | 79.1 | 84.9 | 83.7 |
OCRBenchtest | 736 | 754 | 822 | 864 | 869 |
MMstartest | 64.7 | 59.1 | 62.8 | 63.9 | 66.2 |
RWQAtest | 75.4 | 67.5 | 70.1 | 68.5 | 76.7 |
AI2Dtest | 84.6 | 79.1 | 84.5 | 83.9 | 84.5 |
MMMUval | 69.1 | 62.2 | 56.0 | 58.6 | 55.8 |
MMBench_V11test | 83.1 | 74.6 | 83.2 | 82.6 | 81.7 |
MMVetGPT - 4 - Turbo | 69.1 | 64.0 | 62.8 | 67.1 | 62.9 |
HallBenchavg | 55.0 | 45.6 | 50.1 | 52.9 | 54.7 |
MathVistatestmini | 63.8 | 63.9 | 64.4 | 68.2 | 67.8 |
平均得分 | 74.9 | 71.7 | 73.1 | 75.6 | 75.6 |
🔧 技术细节
信息优先采样
- 图像区域保留(IAP):通过优化图像分块方式,尽可能保留原始图像的区域和宽高比,从而保留图像中的细粒度细节,有助于模型更准确地理解图像内容。
- 自动降级采样(ADS):在处理视觉和文本输入时,根据上下文长度的限制,动态平衡两者的比例,确保在不丢失文本信息的前提下,最大化利用视觉内容。
渐进式混合后训练
在训练过程中,逐渐增加上下文长度,从32K扩展到128K。这种方式使模型能够适应不同大小的输入,提高了模型处理长上下文信息的能力,同时增加了信息密度。
多样性驱动的数据配方
结合开源的视频和文档数据集以及自主策划的Eagle - Video - 110K数据集。该数据集通过多样性驱动的策略收集,包含超过110K个带有故事级和片段级标注的长视频样本,为模型训练提供了丰富多样的数据。
效率优化
- GPU内存优化:
- 采用基于Triton的融合算子,替代PyTorch的MLP、RMSNorm和RoPE实现,提高计算效率。
- 通过融合线性层和交叉熵损失,去除中间logit存储,减少了GPU内存的使用。同时,将隐藏状态卸载到CPU,进一步优化内存占用。
- 分布式上下文并行:
- 采用基于Ulysses和Ring/Context Parallelism的两层通信组,结合ZigZag Llama3风格的上下文并行,使用全收集KV减少通信延迟,提高分布式训练的效率。
- 视频解码加速:优化稀疏视频帧采样算法,快速解析视频元数据,提高长视频解码速度,同时减少内存消耗。
- 推理加速:支持vLLM部署,减少推理过程中的内存使用,加速模型推理。
📄 许可证
本项目采用nsclv1
许可证。
Clip Vit Large Patch14 336
基于Vision Transformer架构的大规模视觉语言预训练模型,支持图像与文本的跨模态理解
文本生成图像
Transformers

C
openai
5.9M
241
Fashion Clip
MIT
FashionCLIP是基于CLIP开发的视觉语言模型,专门针对时尚领域进行微调,能够生成通用产品表征。
文本生成图像
Transformers 英语

F
patrickjohncyh
3.8M
222
Gemma 3 1b It
Gemma 3是Google推出的轻量级先进开放模型系列,基于与Gemini模型相同的研究和技术构建。该模型是多模态模型,能够处理文本和图像输入并生成文本输出。
文本生成图像
Transformers

G
google
2.1M
347
Blip Vqa Base
Bsd-3-clause
BLIP是一个统一的视觉语言预训练框架,擅长视觉问答任务,通过语言-图像联合训练实现多模态理解与生成能力
文本生成图像
Transformers

B
Salesforce
1.9M
154
CLIP ViT H 14 Laion2b S32b B79k
MIT
基于OpenCLIP框架在LAION-2B英文数据集上训练的视觉-语言模型,支持零样本图像分类和跨模态检索任务
文本生成图像
Safetensors
C
laion
1.8M
368
CLIP ViT B 32 Laion2b S34b B79k
MIT
基于OpenCLIP框架在LAION-2B英语子集上训练的视觉-语言模型,支持零样本图像分类和跨模态检索
文本生成图像
Safetensors
C
laion
1.1M
112
Pickscore V1
PickScore v1 是一个针对文本生成图像的评分函数,可用于预测人类偏好、评估模型性能和图像排序等任务。
文本生成图像
Transformers

P
yuvalkirstain
1.1M
44
Owlv2 Base Patch16 Ensemble
Apache-2.0
OWLv2是一种零样本文本条件目标检测模型,可通过文本查询在图像中定位对象。
文本生成图像
Transformers

O
google
932.80k
99
Llama 3.2 11B Vision Instruct
Llama 3.2 是 Meta 发布的多语言多模态大型语言模型,支持图像文本到文本的转换任务,具备强大的跨模态理解能力。
文本生成图像
Transformers 支持多种语言

L
meta-llama
784.19k
1,424
Owlvit Base Patch32
Apache-2.0
OWL-ViT是一个零样本文本条件目标检测模型,可以通过文本查询搜索图像中的对象,无需特定类别的训练数据。
文本生成图像
Transformers

O
google
764.95k
129
精选推荐AI模型
Llama 3 Typhoon V1.5x 8b Instruct
专为泰语设计的80亿参数指令模型,性能媲美GPT-3.5-turbo,优化了应用场景、检索增强生成、受限生成和推理任务
大型语言模型
Transformers 支持多种语言

L
scb10x
3,269
16
Cadet Tiny
Openrail
Cadet-Tiny是一个基于SODA数据集训练的超小型对话模型,专为边缘设备推理设计,体积仅为Cosmo-3B模型的2%左右。
对话系统
Transformers 英语

C
ToddGoldfarb
2,691
6
Roberta Base Chinese Extractive Qa
基于RoBERTa架构的中文抽取式问答模型,适用于从给定文本中提取答案的任务。
问答系统 中文
R
uer
2,694
98