Megrez-3B-Omni:無問芯穹端側全模態大模型技術剖析與應用指南
在人工智能領域,技術的創新不斷推動著行業的發展。前段時間,無問芯穹發布的Megrez-3B-Omni模型引起了廣泛關注,它作為全球首款端側全模態理解開源模型,為智能設備的交互體驗帶來了全新的變革。本文將對Megrez-3B-Omni進行詳細介紹,包括項目概述、技術特點、性能優勢、應用場景、快速使用以及項目地址等,希望能幫助讀者更好地了解這一創新技術。
一、項目概述
Megrez-3B-Omni是由無問芯穹發布的全球首款端側全模態理解開源模型。它支持圖片、音頻和文本三種模態的數據處理,參數量達30億,主干網絡參數僅2.3B,卻在精度上超越了14B模型,并在推理速度上領先同級模型300%。該模型專為手機、平板等端側設備進行了優化,旨在實現圖像、音頻和文本三種模態數據的無縫融合,讓用戶在端側設備上就能享受到更加智能、便捷的交互體驗。
二、技術特點
1、創新的架構設計:采用多層多頭注意力機制,能夠更好地捕捉不同模態數據中的長程依賴關系,提高模型的理解能力和泛化能力。同時,將圖像、音頻和文本三種不同模態的數據進行深度融合,自動學習不同模態數據之間的關聯和轉換,從而實現更加準確和全面的理解,跨模態的信息整合能力是傳統單一模態模型所無法比擬的。
2、高效的模型優化:運用模型剪枝、量化等技術,減少模型的大小和計算量,同時保持其精度和泛化能力,使其能夠在資源受限的設備上運行,如智能手機、嵌入式系統等。此外,還采用了先進的訓練算法,如分布式訓練、自適應學習率調整等,可加速模型的收斂速度,提高訓練效率,并減少過擬合的風險。同時,采用遷移學習、元學習等技術,能更快地適應新的應用場景和任務需求。
3、先進的模態處理:在圖像理解方面,利用Siglip-400m技術,將圖像轉化為易于理解的token,在OpenCompass評測中以高分領先。在語音理解方面,搭載了Qwen2-Audio/Whisper-Large-V3的encoder,能夠理解中英文語音輸入,并支持多輪對話。
三、性能優勢
1、卓越的圖像理解:在OpenCompass、MME等測試中,展現了超強的圖像分析能力,能夠快速且準確地識別和理解圖像內容,在場景理解、光學字符識別等應用中表現優異,精度在同行中處于領先地位,甚至能在一些測試集中超越34B模型。
2、出色的文本理解:在C-eval、MMLU等多個權威測試中取得了最佳結果,將上一代14B大模型的能力壓縮至3B規模,同時顯著降低計算成本,實現了性能與資源利用的最佳平衡,確保用戶獲得高效的文本處理體驗。
3、良好的語音理解:支持中文和英文的語音輸入,能夠熟練應對復雜的多輪對話場景,可通過語音輸入與模型進行自然互動,實現更自然和流暢的溝通體驗。
4、快速的推理速度:單模態版本Megrez-3B-Instruct在推理速度上相比同類精度模型領先高達300%,即使在復雜場景下也能流暢運行,能讓用戶在各類實時應用中獲得更及時的響應,提升工作和生活的效率。
四、應用場景
- 智能家居領域:可應用于智能音箱、智能電視等設備的智能助手中,用戶能通過語音、文字或圖片與智能助手進行交互,獲取信息、設置提醒、控制設備等。
- 媒體領域:用于圖像、音頻和文本內容的分析和理解,能更準確地識別視頻中的關鍵幀、提取音頻中的關鍵詞、生成文本摘要等,為媒體的內容推薦和搜索提供支持。
- 自動駕駛領域:可用于車輛的環境感知和決策控制,融合圖像、雷達、激光雷達等多種傳感器的數據,更準確地識別道路標志、行人、障礙物等,為車輛的安全行駛提供保障。
- 醫療健康領域:用于醫學影像的分析、病歷報告的生成等,輔助醫生進行疾病診斷和治療方案的制定,自動識別X光片、CT掃描等醫學影像中的異常區域,并提供初步的診斷意見。
- 教育領域:用于個性化學習系統的開發,根據學生的學習行為、學習進度、興趣偏好和知識水平等信息,為學生提供定制化的學習資源和教學策略。
五、快速使用
1. 安裝相關依賴
安裝所需的依賴庫
git clone https://github.com/infinigence/Infini-Megrez-Omni.git
pip install -r requirements.txt
音頻功能依賴`ffmpeg`進行音頻處理,如果使用Debian相關系統,可以通過以下命令安裝
sudo apt-get install ffmpeg
對于其他操作系統,請參考`ffmpeg`官方文檔進行安裝。
2. 下載模型權重文件
使用 modelscope 中的 snapshot_download 函數下載模型(提前安裝modelscope :pip install modelscope)。第一個參數為模型名稱,參數 cache_dir 用于指定模型的下載路徑。在 /root/autodl-tmp 路徑下新建 download.py 文件,并在其中輸入以下內容:
# 模型下載
from modelscope import snapshot_download
model_dir = snapshot_download('InfiniAI/Megrez-3B-Omni', cache_dir='/root/autodl-tmp', revision='master')
運行 python /root/autodl-tmp/download.py 執行下載。
3. 使用transformers 推理模型
使用多模態數據進行多輪對話,示例代碼如下(請將`<PATH_TO_PRETRAINED_MODEL>`替換為下載的模型權重的路徑):
import torch
from transformers import AutoModelForCausalLM
path = "/mnt/algorithm/user_dir/zhoudong/workspace/models/megrez-o" # Change this to the path of the model.
model = (
AutoModelForCausalLM.from_pretrained(
path,
trust_remote_code=True,
torch_dtype=torch.bfloat16,
attn_implementatinotallow="flash_attention_2",
)
.eval()
.cuda()
)
prompt = "hi" * (128 - 1)
# Chat with text and image
messages = [
{
"role": "user",
"content": {
"text": prompt,
"image": "./data/sample_image.jpg",
},
},
]
# Chat with audio and image
# messages = [
# {
# "role": "user",
# "content": {
# "image": "./data/sample_image.jpg",
# "audio": "./data/sample_audio.m4a",
# },
# },
# ]
MAX_NEW_TOKENS = 100
response = model.chat(
messages,
sampling=False,
max_new_tokens=MAX_NEW_TOKENS,
)
print(response)
4. 使用vLLM進行推理
首先安裝vLLM及其相關依賴(需要特定版本以確保兼容性):
pip install vLLM==0.6.3.post1 flash_attn==2.5.8 xformers==0.0.27.post2
推理腳本如下:
from PIL import Image
from vllm import LLM
from vllm import ModelRegistry
from vllm import SamplingParams
from megrezo import MegrezOModel
ModelRegistry.register_model("MegrezO", MegrezOModel)
# Load the model.
# model_path = "{{PATH_TO_HF_PRETRAINED_MODEL}}" # Change this to the path of the model.
model_path = "/mnt/algorithm/user_dir/zhoudong/workspace/models/megrez-o" # Change this to the path of the model.
llm = LLM(
model_path,
trust_remote_code=True,
gpu_memory_utilizatinotallow=0.5,
)
sampling_params = SamplingParams(
temperature=0,
max_tokens=1000,
repetition_penalty=1.2,
stop=["<|turn_end|>", "<|eos|>"],
)
img = Image.open("../data/sample_image.jpg")
conversation = [
{
"role": "user",
"content": {
"text": "圖片的內容是什么?",
"image": img,
},
},
]
# Convert the conversation to vLLM acceptable format.
prompt = llm.get_tokenizer().apply_chat_template(
conversation,
tokenize=False,
add_generation_prompt=True,
)
vllm_inputs = [
{
"prompt": prompt,
"multi_modal_data": {
"image": img,
},
}
]
# Generate the outputs.
outputs = llm.generate(
vllm_inputs,
sampling_params,
)
# Print the outputs.
for output in outputs:
print(output.outputs[0].text)
5. 在線體驗 Gradio 應用
在線Demo:??https://huggingface.co/spaces/Infinigence/Megrez-3B-Omni??
用戶可以直接在網頁上輸入文本或上傳圖片、音頻,與模型進行交互,模型會根據輸入的多模態信息生成相應的回復。
6. 啟動 Gradio 應用
您需要在命令行中指定 model_path 和 port。model_path 是模型的路徑,port 是本地服務器的端口號。默認情況下,port 是 7860。
python gradio_app.py --model_path {model_path} --port {port}
然后,您可以在瀏覽器中訪問?? http://localhost:7860 ??與模型對話。
六、結語
Megrez-3B-Omni的發布是人工智能領域的一次重大突破,它為端側設備的智能化處理樹立了全新標桿,開啟了端側全模態理解的新時代。無問芯穹的這一創新成果不僅展示了其在智能設備領域的強大實力,也為廣大開發者和用戶提供了一個極具潛力的工具。
項目地址
- Github:??https://github.com/infinigence/Infini-Megrez??
- HuggingFace:??https://huggingface.co/Infinigence/Megrez-3B-Omni??
- Infini-AI異構云:??https://cloud.infini-ai.com/genstudio/model/mo-c73owqiotql7lozr??
- ModelScope:??https://www.modelscope.cn/models/InfiniAI/Megrez-3B-Omni??
- Modelers:???https://modelers.cn/models/INFINIGENCE-AI/Megrez-3B-Omni??
本文轉載自??小兵的AI視界??,作者: AGI小兵 ????
