LLaVA-Next-Video 是一个开源聊天机器人,通过在多模态指令跟随数据上微调大语言模型(LLM)进行训练。该模型基于 LLaVa-NeXT 构建,并通过对视频和图像数据的混合调整来实现更好的视频理解能力。视频被均匀采样为每段 32 帧。 该模型是 VideoMME 基准中开源模型中的当前 SOTA。 基础 LLM: lmsys/vicuna-7b-v1.5
详细模型介绍可以参考模型开源社区内容 https://modelscope.cn/models/llava-hf/LLaVA-NeXT-Video-34B-hf
本项目提供该模型在昇腾 Atlas A2推理服务器基于 vllm-ascend的推理使用指导
部署时的基础环境是siirl_npu_0902_cann8.2.rc1_torch2.6.0:3 NPU资源:4卡910B
使用约束
| 依赖软件 | 版本 |
|---|---|
| 昇腾NPU驱动 | >=25.0.RC1.1商发版本 |
| 昇腾NPU固件 | >=25.0.RC1.1商发版本 |
| CANN Toolkit | >=8.2.RC1商发版本 |
| CANN Kernel | >=8.2.RC1商发版本 |
| CANN NNAL | >=8.2.RC1商发版本 |
硬件设备
| 设备型号 | NPU配置 |
|---|---|
| Atlas 800I A2 910B | 4卡 |
1、创建模型下载的目录 (1)进入服务器后,创建模型下载目录
mkdir /home/model/Llava-video/(2)创建 LLaVA-NeXT-Video-34B-hf模型目录
mkdir /home/model/Llava-video/LLaVA-NeXT-Video-34B-hf/2、模型下载:
从ModelScope 平台下载指定的模型到指定的模型目录(模型名称可以在modelscope.cn的模型库里拷贝,保持一致)
modelscope download --model llava-hf/LLaVA-NeXT-Video-34B-hf --local_dir /home/model/Llava-video/LLaVA-NeXT-Video-34B-hf/查询服务器上已经安装哪些镜像
docker image ls如果服务器上已经有需要的vllm-ascend镜像,则此步骤可忽略,否则通过下面命令拉取镜像
#从镜像仓库下载镜像到本地机器
docker pull quay.io/ascend/vllm-ascend:v0.10.0rc1在后台启动一个名为LLaVA-NeXT-Video-34B-hf 的容器,以最高权限和直接硬件访问的方式,在主机的第0,1,2,3块昇腾 NPU (davinci0-3) 上运行 vLLM 服务来部署模型
docker run -itd -u 0 --ipc=host --privileged \
-e VLLM_USE_MODELSCOPE=True -e PYTORCH_NPU_ALLOC_CONF=max_split_size_mb:256 \
-e ASCEND_RT_VISIBLE_DEVICES=0,1,2,3 \
--name LLaVA-NeXT-Video-34B-hf \
--device=/dev/davinci0 \
--device=/dev/davinci1 \
--device=/dev/davinci2 \
--device=/dev/davinci3 \
--device /dev/davinci_manager \
--device /dev/devmm_svm \
--device /dev/hisi_hdc \
-v /usr/local/dcmi:/usr/local/dcmi \
-v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \
-v /usr/local/Ascend/driver/lib64/:/usr/local/Ascend/driver/lib64/ \
-v /usr/local/Ascend/driver/version.info:/usr/local/Ascend/driver/version.info \
-v /etc/ascend_install.info:/etc/ascend_install.info \
-v /home/model/Llava-video/LLaVA-NeXT-Video-34B-hf:/model \
-p 3030:8000 \
-it quay.io/ascend/vllm-ascend:v0.10.0rc1 bash首先进入容器(可以用容器ID或者名称)
docker exec -it LLaVA-NeXT-Video-34B-hf bash容器内启动vllm推理服务(模型下载之前已经下载在宿主机/home/model/Qwen/Qwen3-8B 中,并且模型文件已经映射在容器内/model),这边注意因为模型比较大,因此需要配置TP并行
nohup vllm serve /model --served-model-name LLaVA-NeXT-Video-34B-hf --tensor-parallel-size 4 &上面的命令会在后台执行,可以通过下面的命令查看执行日志
tail -f nohup.out(1)容器外验证: 当服务拉起完毕,可以到容器外进行验证(可以在xshell通过复制会话的方式,拉起另外一个验证界面) 在容器外查看模型(注意端口要和刚才创建容器时的宿主服务器端口保持一致)
curl http://localhost:3030/v1/models验证功能
curl http://localhost:3030/v1/completions \
-H "Content-Type: application/json" \
-d '{"model":"LLaVA-NeXT-Video-34B-hf","prompt":"说出你认为中国最宜居的城市","max_tokens":1024,"temperature":0.9,"top_p":0.8}'(2)容器内验证: 如果没有安装curl,一般需要先安装curl
apt-get update
apt-get install curl容器内拉起,端口一般就是8000
curl http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{"model":"LLaVA-NeXT-Video-34B-hf","prompt":"说出你认为中国最宜居的城市","max_tokens":1024,"temperature":0.9,"top_p":0.8}'(1)安装测试工具: 目前只支持源码构建安装,请确保安装环境网络畅通(建议在容器里进行)
git clone https://gitee.com/aisbench/benchmark.git
cd benchmark/
pip3 install -e ./安装过程中会自动安装基础依赖。 由于本工具支持多种模型服务框架(如vLLM、Trition等),需额外安装服务化的依赖
pip3 install -r requirements/api.txt(2)修改模型任务配置文件 参考如下,各配置项详解参考“AISbench服务化性能测评指南” https://gitee.com/aisbench/benchmark/blob/master/doc/users_guide/performance_benchmark.md
cd benchmark/ais_bench/benchmark/configs/models/vllm_api
vim vllm_api_stream_chat.py 修改vllm_api_stream_chat.py文件:
from ais_bench.benchmark.models import VLLMCustomAPIChatStream
from ais_bench.benchmark.utils.model_postprocessors import extract_non_reasoning_content
models = [
dict(
attr="service",
type=VLLMCustomAPIChatStream,
abbr='vllm-api-stream-chat',
path="/model",
model="LLaVA-NeXT-Video-34B-hf",
request_rate = 1,
retry = 2,
host_ip = "localhost",
host_port = 8000,
max_seq_len = 1024,
max_out_len = 1024,
batch_size=500,
trust_remote_code=False,
generation_kwargs = dict(
temperature = 0,
top_k = 10,
top_p = 0.95,
seed = None,
repetition_penalty = 1.03,
ignore_eos = True,
),
pred_postprocessor=dict(type=extract_non_reasoning_content)
)
] (3)测试用例文件修改 性能测试可以基于测试用例直接生成测试数据
cd /workspace
cd benchmark/ais_bench/datasets/synthetic
vim synthetic_config.py synthetic_config.py文件示例
synthetic_config = {
"Type":"string", # [tokenid/string],生成的随机数据集类型,支持固定长度的随机tokenid,和随机长度的string,两种类型的数据集
"RequestCount": 500, # 生成的请求条数,应与模型侧配置文件中的 decode_batch_size 一致
"StringConfig" : { # string类型的随机数据集的配置相关项,请参考以上注释处:"StringConfig中的随机生成方法参数说明"
"Input" : { # 每条请求的输入长度
"Method": "uniform",
"Params": {"MinValue": 1024, "MaxValue": 1024}
},
"Output" : { # 每条请求的输出长度
"Method": "uniform",
"Params": {"MinValue": 1024, "MaxValue": 1024}
}
},
}(4)执行性能测试命令:
ais_bench --models vllm_api_stream_chat --datasets synthetic_gen -m perf测试时,可以通过修改vllm_api_stream_chat.py文件中request_rate = 0, batch_size=500, max_seq_len = 1024, max_out_len = 1, synthetic_config.py文件中的 input 和output的值来找到最佳性能配置
测试时可以通过打开多个窗口,一个模型配置文件窗口,一个测试工具输入窗口,一个测试窗口。这样修改配置后,不需要推出页面,保持配置即可进行测试。