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

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

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

引言

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

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

本機(jī)環(huán)境

在終端通過(guò)jtop指令,可以獲取到本機(jī)的基本信息,其中有幾項(xiàng)信息本文需重點(diǎn)關(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

安裝運(yùn)算庫(kù)

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

安裝modelscope

pip install modelscope

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

專(zhuān)有環(huán)境搭建

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

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

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

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

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

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

安裝torch

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

在終端,通過(guò)下面三行指令,驗(yàn)證torch是否可以識(shí)別到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過(guò)程比較曲折,我發(fā)現(xiàn)安裝/jp6/cu122目錄下的flash_attn-2.5.7,無(wú)法正常運(yùn)行,報(bào)如下錯(cuò)誤:

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

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

如果運(yùn)行時(shí)還提示缺少某些組件,參照上述方法,進(jìn)行安裝補(bǔ)全即可。

推理代碼

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)

代碼首次運(yùn)行時(shí),會(huì)自動(dòng)從modelscope下載模型文件到本地。

運(yùn)行效果

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

小結(jié)

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

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

更多信息,請(qǐng)關(guān)注公眾號(hào)“ETRD”獲取。

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