作者:
Ekaterina Aidova AI 框架工程師
多模態(tài)大模型的核心思想是將不同媒體數(shù)據(jù)(如文本、圖像、音頻和視頻等)進(jìn)行融合,通過學(xué)習(xí)不同模態(tài)之間的關(guān)聯(lián),實(shí)現(xiàn)更加智能化的信息處理。簡(jiǎn)單來說,多模態(tài)大模型可以可以理解多種不同模態(tài)的輸入數(shù)據(jù),并輸出相應(yīng)反饋結(jié)果,例如圖像理解,語(yǔ)音識(shí)別,視覺問題等。
多模態(tài)大模型都會(huì)將文本生成模型作為底座模型,以支持對(duì)話能力,其中千問團(tuán)隊(duì)近期發(fā)布的 Qwen2-Audio 和 Qwen2-VL 便是以 Qwen2 為底座的多模態(tài)大模型,分別支持語(yǔ)音/文本以及圖像/文本作為多模態(tài)輸入,相比上一代的 Qwen-VL 和 Qwen-Audio ,基于 Qwen2 的多模態(tài)模型具備更強(qiáng)大的視覺理解以語(yǔ)音理解能力,并實(shí)現(xiàn)了多語(yǔ)種的支持。本文將分享如何利用 OpenVINO 工具套件在輕薄本上部署 Qwen2-Audio 以及 Qwen2-VL 多模態(tài)模型。
1Qwen2-VL
1. 模型轉(zhuǎn)換與量化
目前 Qwen2-VL 的推理任務(wù)還沒有被完全集成進(jìn) Optimum 工具中,因此我們需要手動(dòng)完成模型的轉(zhuǎn)換和量化,其中包含語(yǔ)言模型 lang_model,圖像編碼模型 image_embed,文本 token 編碼模型 embed_token 模型以及圖像特征映射模型 image_embed_merger。
為了簡(jiǎn)化轉(zhuǎn)化步驟,我們提前對(duì)這些轉(zhuǎn)化任務(wù)行進(jìn)行了封裝,開發(fā)者只需要調(diào)用 Qwen2-VL 示例地址中提供的函數(shù)便可完成這些模型的轉(zhuǎn)換,并對(duì)其中負(fù)載最大的語(yǔ)言模型進(jìn)行量化。這里以 Qwen2-VL-2B-Instruct 為例。
from ov_qwen2_vl import convert_qwen2vl_model import nncf compression_configuration = { "mode": nncf.CompressWeightsMode.INT4_ASYM, "group_size": 128, "ratio": 1.0, } convert_qwen2vl_model("Qwen/Qwen2-VL-2B-Instruct", model_dir, compression_configuration)
2.圖片內(nèi)容理解
此外在該示例中,我們也對(duì)模型的推理任務(wù)進(jìn)行封裝,通過以下代碼便可快速部署圖像理解任務(wù),并實(shí)現(xiàn)文字的流式輸出。由于 Qwen2-VL 對(duì)于輸入數(shù)據(jù)有格式上的要求,因此我們需要提前將圖片和文本包裝為指定的字典格式,并調(diào)用模型自帶的 processor 腳本將其轉(zhuǎn)換為 prompt 輸入。
question = "Describe this image." messages = [ { "role": "user", "content": [ { "type": "image", "image": f"file://{example_image_path}", }, {"type": "text", "text": question}, ], } ]
你可以將以下推理代碼中的 device 設(shè)置為“GPU“,以激活系統(tǒng)中 Intel 集顯或是獨(dú)顯的能力。
from ov_qwen2_vl import OVQwen2VLModel model = OVQwen2VLModel(model_dir, device) processor = AutoProcessor.from_pretrained(model_dir, min_pixels=min_pixels, max_pixels=max_pixels) text = 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", ) generated_ids = model.generate(**inputs, max_new_tokens=100, streamer=TextStreamer(processor.tokenizer, skip_prompt=True, skip_special_tokens=True))
示例輸出效果如下:
Question:
Describe this image.
Answer:
The image depicts a woman sitting on a sandy beach with a large dog. The dog is standing on its hind legs, reaching up to give the woman a high-five. The woman is smiling and appears to be enjoying the moment. The background shows the ocean with gentle waves, and the sky is clear with a soft light, suggesting it might be either sunrise or sunset. The scene is serene and joyful, capturing a heartwarming interaction between the woman and her dog.
3. 視頻內(nèi)容理解
由于 Qwen2-VL 可以同時(shí)支持對(duì)多個(gè)圖像輸入,因此可以基于這一特性實(shí)現(xiàn)視頻內(nèi)容理解,實(shí)現(xiàn)方法也特別簡(jiǎn)單,僅需對(duì)視頻文件抽幀后保存為圖片,并將這些圖片基于 Qwen2-VL 提供的預(yù)處理腳本合并后,轉(zhuǎn)化為 Prompt 模板,送入模型流水線進(jìn)行推理。值得注意的是,當(dāng)你將"type"設(shè)置為 "video"后,processor 會(huì)自動(dòng)將兩張圖片拼接為一張,進(jìn)行處理,以優(yōu)化推理性能,并降低多圖任務(wù)的內(nèi)存占用。
question = "描述一下這段視頻" messages = [ { "role": "user", "content": [ { "type": "video", "video": [ "file://./examples/keyframe_1.jpg", "file://./examples/keyframe_2.jpg", "file://./examples/keyframe_3.jpg", "file://./examples/keyframe_4.jpg", ], "fps": 1.0, }, {"type": "text", "text": question}, ], } ]
2Qwen2-Audio
1. 模型轉(zhuǎn)換與量化
針對(duì) Qwen2-Audio,我們同樣在 Qwen2-VL 示例地址中對(duì)模型的轉(zhuǎn)換和量化步驟進(jìn)行了接口封裝,其中包含語(yǔ)言模型 lang_model,音頻編碼模型 audio_embed,文本 token 編碼模型 embed_token 模型以及音頻特征映射模型 projection。使用方法如下:
from ov_qwen2_audio_helper import convert_qwen2audio_model import nncf compression_configuration = { "mode": nncf.CompressWeightsMode.INT4_ASYM, "group_size": 128, "ratio": 1.0, } convert_qwen2audio_model("Qwen/Qwen2-Audio-7B-Instruct", model_dir, compression_configuration)
2. 語(yǔ)音對(duì)話
Qwen2-Audio 提供語(yǔ)音對(duì)話和音頻分析兩種任務(wù)模式。在語(yǔ)音對(duì)話模式中,用戶只需輸入語(yǔ)音而無需輸入文字,指令則通過語(yǔ)音直接傳達(dá)給模型。下面則是一個(gè)音頻分析的例子。
conversation = [ {"role": "system", "content": "You are a helpful assistant."}, { "role": "user", "content": [ {"type": "audio", "audio_url": audio_chat_url}, ], }, ] text = processor.apply_chat_template(conversation, add_generation_prompt=True, tokenize=False) audios = [librosa.load(audio_chat_file, sr=processor.feature_extractor.sampling_rate)[0]] inputs = processor(text=text, audios=audios, return_tensors="pt", padding=True) generate_ids = ov_model.generate(**inputs, max_new_tokens=50, streamer=TextStreamer(processor.tokenizer, skip_prompt=True, skip_special_tokens=True))
和 Qwen2-VL 一樣,我們需要在構(gòu)建輸入 Prompt 前,提前準(zhǔn)備好字典格式的數(shù)據(jù),可以看到在語(yǔ)音對(duì)話模式下,我們僅需提供音頻文件的地址或路徑。該示例的輸出如下:
Answer:
Yes, I can guess that you are a female in your twenties.
從輸出結(jié)果可以看到 Qwen2-Audio 不光可以理解音頻內(nèi)容,并且可以識(shí)別對(duì)話者的音色和語(yǔ)調(diào)。
3. 音頻分析
在音頻分析模式下,Qwen2-Audio則支持多模態(tài)輸入,此時(shí)我們可以將文本和音頻拼接在一起,作為prompt送入模型中進(jìn)行推理。
question = "What does the person say?" conversation = [ {"role": "system", "content": "You are a helpful assistant."}, { "role": "user", "content": [ {"type": "audio", "audio_url": audio_url}, {"type": "text", "text": question}, ], }, ]
示例輸入結(jié)果:
Answer:
The person says: 'Mister Quilter is the apostle of the middle classes, and we are glad to welcome his gospel.'
3總結(jié)與展望
通過 OpenVINO 封裝后的 API 函數(shù),開發(fā)者可以非常便捷地對(duì)預(yù)訓(xùn)練模型進(jìn)行轉(zhuǎn)化壓縮,并實(shí)現(xiàn)本地化的推理任務(wù)部署。同時(shí)基于 Qwen2 系列多模態(tài)模型強(qiáng)大的音頻與圖像理解能力,我們僅在輕薄本上便可以構(gòu)建起一個(gè)完整的語(yǔ)言模型應(yīng)用,在保護(hù)用戶數(shù)據(jù)隱私的同時(shí),降低硬件門檻。后期我們也計(jì)劃將 Qwen2 多模態(tài)系列模型的流水線集成進(jìn) Optimum 組件中,方便開發(fā)者更靈活地進(jìn)行調(diào)用,敬請(qǐng)期待。
-
英特爾
+關(guān)注
關(guān)注
61文章
9964瀏覽量
171765 -
AI
+關(guān)注
關(guān)注
87文章
30887瀏覽量
269068 -
模型
+關(guān)注
關(guān)注
1文章
3243瀏覽量
48836 -
OpenVINO
+關(guān)注
關(guān)注
0文章
93瀏覽量
201
原文標(biāo)題:如何利用 OpenVINO? 部署 Qwen2 多模態(tài)模型|開發(fā)者實(shí)戰(zhàn)
文章出處:【微信號(hào):英特爾物聯(lián)網(wǎng),微信公眾號(hào):英特爾物聯(lián)網(wǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論