性无码一区二区三区在线观看,少妇被爽到高潮在线观看,午夜精品一区二区三区,无码中文字幕人妻在线一区二区三区,无码精品国产一区二区三区免费

  • 回復(fù)
  • 收藏
  • 點贊
  • 分享
  • 發(fā)新帖

【原創(chuàng)】基于ASUS-PE1100N嵌入式終端本地部署Qwen2.5-VL視覺大模型

引言

年初,Deepseek引領(lǐng)了一波本地部署大語言模型的浪潮,本地部署模型意義之一在于可以有效保護數(shù)據(jù)隱私。相較于文本數(shù)據(jù),圖像數(shù)據(jù)通常包含更多敏感信息,因此對于視覺模型而言,本地部署顯得更為重要。

本文將介紹在華碩IOT PE1100N嵌入式終端(Jetson Orin NX 16G) 上,本地部署和運行通義千問最新發(fā)布的Qwen2.5-VL-3B-Instruct視覺大模型。

本機環(huán)境

在終端通過jtop指令,可以獲取到本機的基本信息,其中有幾項信息本文需重點關(guān)注:

處理器架構(gòu):aarch64Python版本:3.10.12Jetpack版本:6.0CUDA版本:12.2.140

基礎(chǔ)環(huán)境搭建

安裝最新Transformers框架

pip install git+https://github.com/huggingface/Transformers accelerate

此步驟,阿里推薦使用源碼編譯安裝的方式,是為了確保安裝最新的Transformers框架,以便導(dǎo)入最新的qwen2_5_vl模塊。

安裝qwen-vl-utils工具

pip install qwen-vl-utils==0.0.8

安裝運算庫

sudo apt-get install libopenblas-base libopenmpi-dev libomp-dev

安裝modelscope

pip install modelscope

本文中,modelscope主要用于模型的高速下載。

專有環(huán)境搭建

PE1100N終端搭載的是Jetson Orin NX模組,具備GPU加速能力,因此一些AI相關(guān)的關(guān)鍵組件,需要安裝與平臺適配的編譯版本。由于平臺架構(gòu)是aarch64,而非常見的x86_64架構(gòu),因此組件的官方github倉庫通常不會為該平臺編譯發(fā)布可執(zhí)行文件。對此,一般有兩種解決方法:

下載源碼,本機自行編譯安裝找找是否有好心人在同平臺編譯好了whl,直接下載安裝

本文選擇第二種,牢記下面這個網(wǎng)址,它提供了Jetson平臺,不同Jetpack版本,不同CUDA版本,編譯好的whl。

網(wǎng)址:https://pypi.jetson-ai-lab.dev/

根據(jù)本機的Jetpack 6.0/CUDA 12.2環(huán)境,找到對應(yīng)/jp6/cu122的入口,里面常用的組件均已編譯提供:

缺少相關(guān)組件時,優(yōu)先在該目錄查找是否存在對應(yīng)的whl文件。如果存在,直接下載到本地,然后通過pip指令進行安裝。

安裝torch

pip install --no-cache /home/asusiot/lc/torch-2.4.0-cp310-cp310-linux_aarch64.whl

在終端,通過下面三行指令,驗證torch是否可以識別到cuda:

python>>> import torch>>> torch.cuda.is_available()

安裝torchvision

pip install --no-cache /home/asusiot/lc/torchvision-0.19.0a0+48b1edf-cp310-cp310-linux_aarch64.whl

安裝triton

pip install --no-cache /home/asusiot/lc/triton-3.1.0-cp310-cp310-linux_aarch64.whl

安裝flash_attn

安裝flash_attn過程比較曲折,我發(fā)現(xiàn)安裝/jp6/cu122目錄下的flash_attn-2.5.7,無法正常運行,報如下錯誤:

于是我嘗試下載安裝jp6/cu126目錄下的flash-attn-2.7.2.post1,可以正常運行。

pip install --no-cache /home/asusiot/lc/flash_attn-2.7.2.post1-cp310-cp310-linux_aarch64.whl

如果運行時還提示缺少某些組件,參照上述方法,進行安裝補全即可。

推理代碼

import torchfrom transformers import Qwen2_5_VLForConditionalGeneration, AutoTokenizer, AutoProcessorfrom qwen_vl_utils import process_vision_infofrom modelscope import snapshot_downloadmodel_dir = snapshot_download("Qwen/Qwen2.5-VL-3B-Instruct")## default: Load the model on the available device(s)#model = Qwen2_5_VLForConditionalGeneration.from_pretrained(#    model_dir, torch_dtype=torch.bfloat16, device_map="auto"#)# We recommend enabling flash_attention_2 for better acceleration and memory saving, especially in multi-image and video scenarios.model = Qwen2_5_VLForConditionalGeneration.from_pretrained(    model_dir,    torch_dtype=torch.bfloat16,    attn_implementation="flash_attention_2",    device_map="auto",)# default processerprocessor = AutoProcessor.from_pretrained(model_dir)# The default range for the number of visual tokens per image in the model is 4-16384.# You can set min_pixels and max_pixels according to your needs, such as a token range of 256-1280, to balance performance and cost.# min_pixels = 256*28*28# max_pixels = 1280*28*28# processor = AutoProcessor.from_pretrained("Qwen/Qwen2.5-VL-3B-Instruct", min_pixels=min_pixels, max_pixels=max_pixels)messages = [    {        "role": "user",        "content": [            {                "type": "image",                "image": "/home/asusiot/lc/qwen25vl/demo.jpg?x-oss-process=image/watermark,g_center,image_YXJ0aWNsZS9wdWJsaWMvd2F0ZXJtYXJrLnBuZz94LW9zcy1wcm9jZXNzPWltYWdlL3Jlc2l6ZSxQXzQwCg,t_20",            },            {"type": "text", "text": "你看到了什么"},        ],    }]# Preparation for inferencetext = processor.apply_chat_template(    messages, tokenize=False, add_generation_prompt=True)image_inputs, video_inputs = process_vision_info(messages)inputs = processor(    text=[text],    images=image_inputs,    videos=video_inputs,    padding=True,    return_tensors="pt",)inputs = inputs.to("cuda")# Inference: Generation of the outputgenerated_ids = model.generate(**inputs, max_new_tokens=128)generated_ids_trimmed = [    out_ids[len(in_ids) :] for in_ids, out_ids in zip(inputs.input_ids, generated_ids)]output_text = processor.batch_decode(    generated_ids_trimmed, skip_special_tokens=True, clean_up_tokenization_spaces=False)print(output_text)

代碼首次運行時,會自動從modelscope下載模型文件到本地。

運行效果

沒錯,正如模型所描述的,該照片是我在成都西嶺雪山景點的一個隨拍。簡單測試了一下,不同分辨率、不同信息量的圖片,模型推理時間從幾秒到十幾秒不等。當然,這是未經(jīng)量化處理的模型。

小結(jié)

本文在華碩IOT-PE1100N嵌入式終端(Jetson Orin NX 16G) 上,實際部署和運行了視覺大模型Qwen2.5-VL-3B-Instruct,該部署方法同樣適用于其它搭載Jetson模組的嵌入式終端,也可為其它視覺模型的部署提供參考。另外,本文部署運行的是原始模型文件,未做特別的優(yōu)化處理。后續(xù),可以考慮通過模型量化等方式提升推理速度,并進一步降低內(nèi)存占用。

最后,感謝華碩IOT對本文提供的硬件支持!

更多信息,請關(guān)注公眾號“ETRD”獲取。

全部回復(fù)(0)
正序查看
倒序查看
現(xiàn)在還沒有回復(fù)呢,說說你的想法
發(fā)