文章目录
一、关于 VILA
VILA是一系列最先进的视觉语言模型(VLM),适用于边缘、数据中心和云的各种多模态AI任务。
💡新闻
- [2025/1]截至2025年1月6日,VILA现已成为新的Cosmos Nemotron视觉语言模型的一部分。
- [2024/12]我们发布了NVILA(又名VILA2.0),它探索了多模态设计的全栈效率,实现了更便宜的培训、更快的部署和更好的性能。
- [2024/12]我们发布了支持长视频理解的LongVILA,具有超过1M上下文长度的长上下文VLM和多模态序列并行系统。
- [2024/10]VILA-M3,一款基于VILA1.5微调的SOTA医疗VLM发布!VILA-M3的性能明显优于Llava-Med,与Med-Double持平,并且完全开源!代码 模型
- [2024/10]我们发布VILA-U:集成了视频、图像、语言理解和生成的统一基础模型。
- [2024/07]VILA1.5也在MLVU测试排行榜上排名第一(OSS模型)。
- [2024/06]VILA1.5现在是最好的开源VLMMMMU排行榜和视频-MME排行榜!
- [2024/05]我们发布了提供视频理解能力的VILA-1.5,VILA-1.5带有四种型号尺寸:3B/8B/13B/40B。
性能
图像基准测试
视频基准测试
高效部署
注意:在批处理大小=1时使用TinyChat后端进行测量。
推理性能
解码吞吐量(令牌/秒)
A100 | 4090 | Orin | |
---|---|---|---|
NVILA-3B-基线 | 140.6 | 190.5 | 42.7 |
NVILA-3B-TinyChat | 184.3 | 230.5 | 45.0 |
NVILA-Lite-3B-Baseline | 142.3 | 190.0 | 41.3 |
NVILA-Lite-3B-TinyChat | 186.0 | 233.9 | 44.9 |
NVILA-8B-基线 | 82.1 | 61.9 | 11.6 |
NVILA-8B-TinyChat | 186.8 | 162.7 | 28.1 |
NVILA-Lite-8B-Baseline | 84.0 | 62.0 | 11.6 |
NVILA-Lite-8B-TinyChat | 181.8 | 167.5 | 32.8 |
NVILA-Video-8B-Baseline* | 73.2 | 58.4 | 10.9 |
NVILA-Video-8B-TinyChat* | 151.8 | 145.0 | 32.3 |
TTFT(第一个令牌的时间)(秒)
A100 | 4090 | Orin | |
---|---|---|---|
NVILA-3B-基线 | 0.0329 | 0.0269 | 0.1173 |
NVILA-3B-TinyChat | 0.0260 | 0.0188 | 0.1359 |
NVILA-Lite-3B-Baseline | 0.0318 | 0.0274 | 0.1195 |
NVILA-Lite-3B-TinyChat | 0.0314 | 0.0191 | 0.1241 |
NVILA-8B-基线 | 0.0434 | 0.0573 | 0.4222 |
NVILA-8B-TinyChat | 0.0452 | 0.0356 | 0.2748 |
NVILA-Lite-8B-Baseline | 0.0446 | 0.0458 | 0.2507 |
NVILA-Lite-8B-TinyChat | 0.0391 | 0.0297 | 0.2097 |
NVILA-Video-8B-Baseline* | 0.7190 | 0.8840 | 5.8236 |
NVILA-Video-8B-TinyChat* |
注意:使用TinyChat后端测量,批量大小=1,dynamic_s2禁用,num_video_frames=64。我们为Tinychat使用W4A16 LLM和W8A8 Vision Tower,基线精度为FP16。 *:使用视频字幕任务测量。否则,使用图像字幕任务测量。
二、VILA示例
1、视频字幕
提示:详细阐述视频的视觉和叙事元素。
描述:视频显示,一个人的手在白色表面上工作。他们正在折叠一块带有蓝白相间格子图案的织物。织物被折叠成更小、更紧凑的形状。这个人的指甲被漆成红色,他们穿着一件黑红相间的衣服。表面上还有一把尺子和一支铅笔,这表明这个过程涉及测量和精度。
2、语境学习
3、多图像推理
4、Jetson Orin上的VILA
5、VILA on RTX 4090
三、安装
1、安装Python 发行版。
2、在环境中安装必要的Python包。
./environment_setup.sh vila
3、(可选)如果您是拥有wandb帐户的NVIDIA员工,请安装onelogger并通过在llava/train/args.py
中将training_args.use_one_logger
设置为True
来启用它。
pip install --index-url=https://sc-hw-artf.nvidia.com/artifactory/api/pypi/hwinf-mlwfo-pypi/simple --upgrade one-logger-utils
四、训练
VILA训练包含三个步骤,具体超参数请查看脚本/v1_5文件夹:
步骤1:对齐
我们利用LLaVA-CC3M-Pretrain-595K数据集来对齐文本和视觉模式。
第1阶段脚本采用两个参数,它可以在单个8xA100节点上运行。
bash scripts/NVILA-Lite/align.sh Efficient-Large-Model/Qwen2-VL-7B-Instruct <alias to data>
训练好的模型将保存到runs/train/nvila-8b-align
。
步骤-1.5:
bash scripts/NVILA-Lite/stage15.sh runs/train/nvila-8b-align/model <alias to data>
训练好的模型将保存到runs/train/nvila-8b-align-1.5
。
第二步:预训练
我们使用MMC4和Coyo数据集来训练具有交错图像-文本对的VLM。
bash scripts/NVILA-Lite/pretrain.sh runs/train/nvila-8b-align-1.5 <alias to data>
训练好的模型将被保存到runs/train/nvila-8b-pretraining
。
步骤3:监督微调
这是VILA训练的最后阶段,我们调整模型以遵循M3IT、FLAN和ShareGPT4V子集上的多模态指令。此阶段在8xA100节点上运行。
bash scripts/NVILA-Lite/sft.sh runs/train/nvila-8b-pretraining <alias to data>
训练好的模型将被保存到runs/train/nvila-8b-SFT
。
五、评估
我们引入了vila-eval
命令来简化评估。一旦准备好数据,评估可以通过
MODEL_NAME=NVILA-15B
MODEL_ID=Efficient-Large-Model/$MODEL_NAME
huggingface-cli download $MODEL_ID
vila-eval \
--model-name $MODEL_NAME \
--model-path $MODEL_ID \
--conv-mode auto \
--tags-include local
它将启动所有评估并返回汇总结果。
六、推理
我们提供vila-infer
,用于快速推断用户提示和图像。
# image description
vila-infer \
--model-path Efficient-Large-Model/NVILA-15B \
--conv-mode auto \
--text "Please describe the image" \
--media demo_images/demo_img.png
# video description
vila-infer \
--model-path Efficient-Large-Model/NVILA-15B \
--conv-mode auto \
--text "Please describe the video" \
--media https://huggingface.co/datasets/Efficient-Large-Model/VILA-inference-demos/resolve/main/OAI-sora-tokyo-walk.mp4
vila-infer
还兼容VILA-1.5型号。例如:
vila-infer \
--model-path Efficient-Large-Model/VILA1.5-3b \
--conv-mode vicuna_v1 \
--text "Please describe the image" \
--media demo_images/demo_img.png
vila-infer \
--model-path Efficient-Large-Model/VILA1.5-3b \
--conv-mode vicuna_v1 \
--text "Please describe the video" \
--media https://huggingface.co/datasets/Efficient-Large-Model/VILA-inference-demos/resolve/main/OAI-sora-tokyo-walk.mp4
vila-infer \
--model-path Efficient-Large-Model/NVILA-15B \
--conv-mode auto \
--text "Please describe the video" \
--media https://huggingface.co/datasets/Efficient-Large-Model/VILA-inference-demos/resolve/main/OAI-sora-tokyo-walk.mp4
七、量化和部署
我们的VILA模型由AWQ量化为4位,以便在边缘进行有效推理。我们提供了一个按钮脚本来使用AWQ量化VILA。
1、在桌面GPU和边缘GPU上运行VILA
我们通过TinyChat在GPU平台上支持AWQ量化的4位VILA。我们提供了量化后使用TinyChat运行模型的教程。我们还提供了启动Gradio服务器(由TinyChat和AWQ提供支持)的指令,以服务于4位量化的VILA模型。
2、在笔记本电脑上运行VILA
我们的TinyChatEngine进一步支持各种CPU平台上的AWQ量化4位VILA模型,包括x86和ARM架构。我们还提供了详细的教程来帮助用户在不同的CPU上部署VILA。
3、运行VILA API服务器
提供了一个简单的应用编程接口服务器来服务VILA模型。该服务器建立在快速应用编程接口和Hugging Face Transformers 之上。该服务器可以使用以下命令运行:
使用CLI
python -W ignore server.py \
--port 8000 \
--model-path Efficient-Large-Model/NVILA-15B \
--conv-mode auto
使用Docker
docker build -t vila-server:latest .
docker run --gpus all --ipc=host --ulimit memlock=-1 --ulimit stack=67108864 \
-v ./hub:/root/.cache/huggingface/hub \
-it --rm -p 8000:8000 \
-e VILA_MODEL_PATH=Efficient-Large-Model/NVILA-15B \
-e VILA_CONV_MODE=auto \
vila-server:latest
然后可以使用OpenAI SDK调用端点,如下所示:
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:8000",
api_key="fake-key",
)
response = client.chat.completions.create(
messages=[
{
"role": "user",
"content": [
{"type": "text", "text": "What’s in this image?"},
{
"type": "image_url",
"image_url": {
"url": "https://blog.logomyway.com/wp-content/uploads/2022/01/NVIDIA-logo.jpg",
# Or you can pass in a base64 encoded image
# "url": "data:image/png;base64,<base64_encoded_image>",
},
},
],
}
],
model="NVILA-15B",
)
print(response.choices[0].message.content)
注意:此API服务器仅用于评估目的,尚未针对生产用途进行优化。SGLang支持即将推出。
八、Checkpoints
我们发布以下型号:
- NVILA-8B/NVILA-8B-Lite
- NVILA-15B/NVILA-15B-Lite
2025-01-06(五)