LLaMA-Factory-310P3/mindie/examples/models/llava
wql faa909dcc3 add: add mindie file 2024-09-10 15:38:33 +08:00
..
precision add: add mindie file 2024-09-10 15:38:33 +08:00
README.md add: add mindie file 2024-09-10 15:38:33 +08:00
llava.py add: add mindie file 2024-09-10 15:38:33 +08:00
run_pa.sh add: add mindie file 2024-09-10 15:38:33 +08:00

README.md

README

  • LLaVALarge Language and Vision Assistant,是一种多模态大模型,具有强大的图像和文本处理能力,使得它在聊天机器人等场景中具有广泛的应用前景。 在聊天机器人中LLaVA可以通过解析用户的文字输入结合图像信息生成更加生动、准确的回复。 此外LLaVA还可以根据用户的图像输入提供相关的文本信息实现更加智能化的交互。
  • 此代码仓中实现了一套基于NPU硬件的LLaVa推理模型。配合加速库使用旨在NPU上获得极致的推理性能。
  • 支持llavav.1.5 13B 基于llama文本模型的多模态推理

使用说明

路径变量解释

变量名 含义
working_dir 加速库及模型库下载后放置的目录
llm_path 模型仓所在路径。若使用编译好的包,则路径为 ${working_dir}/MindIE-LLM/若使用gitee下载的代码则路径为 ${working_dir}/MindIE-LLM/examples/atb_models
script_path 脚本所在路径llava的工作脚本所在路径为 ${llm_path}/examples/models/llava
weight_path 模型权重路径
image_path 图片所在路径
open_clip_path open_clip权重所在路径

权重

权重下载

基础环境变量

-1.Python其他第三方库依赖参考requirements_llava.txt -2.参考此README文件 -注意保证先后顺序否则llava的其余三方依赖会重新安装torch导致出现别的错误

推理

对话测试

运行Paged Attention FP16

  • 运行启动脚本
    • 在${llm_path}目录下执行以下指令
      bash ${script_path}/run_pa.sh --run ${weight_path} ${image_path}
      
  • 环境变量说明
    • export ASCEND_RT_VISIBLE_DEVICES=0,1,2,3,4,5,6,7
      • 指定当前机器上可用的逻辑NPU核心多个核心间使用逗号相连
      • 核心ID查阅方式见此README文件的【启动脚本相关环境变量】章节
      • 对于300I DUO卡而言若要使用单卡双芯请指定至少两个可见核心若要使用双卡四芯请指定至少四个可见核心
      • 各模型支持的核心数参考“特性矩阵”
    • export MASTER_PORT=20030
      • 设置卡间通信端口
      • 默认使用20030端口
      • 目的是为了避免同一台机器同时运行多个多卡模型时出现通信冲突
      • 设置时端口建议范围为20000-20050
    • 以下环境变量与性能和内存优化相关,通常情况下无需修改
      export ATB_LAYER_INTERNAL_TENSOR_REUSE=1
      export INF_NAN_MODE_ENABLE=0
      export ATB_OPERATION_EXECUTE_ASYNC=1
      export TASK_QUEUE_ENABLE=1
      export ATB_CONVERT_NCHW_TO_ND=1
      export LCCL_ENABLE_FALLBACK=1
      export ATB_WORKSPACE_MEM_ALLOC_GLOBAL=1
      export ATB_CONTEXT_WORKSPACE_SIZE=0
      

精度测试

方案

我们采用的精度测试方案是这样的:使用同样的一组图片,分别在 GPU 和 NPU 上执行推理,得到两组图片描述。 再使用 open_clip 模型作为裁判,对两组结果分别进行评分,以判断优劣。

实施

  1. 下载open_clip 的权重 open_clip_pytorch_model.bin并把下载的权重放在open_clip_path目录下 下载测试图片CoCotest 数据集)并随机抽取其中100张图片放入{image_path}目录下

  2. GPU上在{script_path}/precision目录下运行脚本python run_coco_gpu.py --model_path {weight_path} --image_path {image_path},会在{script_path}/precision目录下生成gpu_coco_predict.json文件存储gpu推理结果

  3. NPU 上,在${llm_path}目录下执行以下指令:

    bash ${script_path}/run_pa.sh --precision ${weight_path} ${image_path} 
    

    运行完成后会在{script_path}生成predict_result.json文件存储npu的推理结果

  4. 对结果进行评分分别使用GPU和NPU推理得到的两组图片描述(gpu_coco_predict.json、predict_result.json)作为输入,执行clip_score_llava.py 脚本输出评分结果

   python examples/models/llava/precision/clip_score_llava.py \ 
   --model_weights_path {open_clip_path}/open_clip_pytorch_model.bin \ 
   --image_info {gpu_coco_predict.json 或 predict_result.json的路径} \
   --dataset_path {iamge_path}

得分高者精度更优。

性能测试

性能测试时需要在 ${image_path} 下仅存放一张图片,使用以下命令运行 run_pa.sh会自动输出batchsize为1-10时输出token长度为 256时的吞吐。910B4上硬件只能跑单batch如果需要多跑batch可以尝试用多张卡跑。

bash ${script_path}/run_pa.sh --performance ${weight_path} ${image_path}

例如在 MindIE-ATB-Models 根目录,可以运行:

bash examples/models/llava/run_pa.sh --performance ${weight_path} ${image_path}

可以在 examples/models/llava 路径下找到测试结果。

FAQ

  • 在对话测试或者精度测试时用户如果需要修改输入input_texts,max_batch_size时可以修改{script_path}/llava.py里的参数具体可见llava.py
  • 更多环境变量见此README文件
  • 运行时需要通过指令pip listgrep protobuf确认protobuf版本如果版本高于3.20.x请运行指令pip install protobuf==3.20.0进行更新