vlm MiniCPM 學習部署實戰

目錄

開源地址:

模型repo下載:

單圖片demo:

多圖推理demo:

論文學習筆記:

部署完整教程:

微調教程:

部署,微調教程,視頻實測

BitCPM4 技術報告

創意:把量化塞進訓練?


開源地址:

https://github.com/OpenBMB/MiniCPM

openbmb/MiniCPM4-8B-Eagle-vLLM

模型 2.29G

模型repo下載:

modelscope download --model=OpenBMB/MiniCPM-V-2_6 --local_dir ./MiniCPM-V-2_6 ?

單文件GGUF下載:

modelscope download --model=OpenBMB/MiniCPM-V-2_6-gguf --local_dir ./ ggml-model-Q4_K_M.gguf

單圖片demo:

自動下載模型:

C:\Users\xxx\.cache\modelscope\hub\models\OpenBMB\MiniCPM-V-2_6

需要顯存20G,模型文件15G

# test.py
import torch
from PIL import Image
from modelscope import AutoModel, AutoTokenizermodel = AutoModel.from_pretrained('OpenBMB/MiniCPM-V-2_6', trust_remote_code=True,attn_implementation='sdpa', torch_dtype=torch.bfloat16) # sdpa or flash_attention_2, no eager
model = model.eval().cuda()
tokenizer = AutoTokenizer.from_pretrained('OpenBMB/MiniCPM-V-2_6', trust_remote_code=True)image = Image.open(r"B:\360MoveData\Users\Administrator\Pictures\liuying\IMG_20150903_123711.jpg").convert('RGB')
question = 'What is in the image?'
msgs = [{'role': 'user', 'content': [image, question]}]res = model.chat(image=None,msgs=msgs,tokenizer=tokenizer
)
print(res)## if you want to use streaming, please make sure sampling=True and stream=True
## the model.chat will return a generator
res = model.chat(image=None,msgs=msgs,tokenizer=tokenizer,sampling=True,stream=True
)generated_text = ""
for new_text in res:generated_text += new_textprint(new_text, flush=True, end='')

多圖推理demo:

import torch  
from PIL import Image  
from modelscope import AutoModel, AutoTokenizer  model = AutoModel.from_pretrained('OpenBMB/MiniCPM-V-2_6', trust_remote_code=True,  attn_implementation='sdpa', torch_dtype=torch.bfloat16) # sdpa or flash_attention_2, no eager  
model = model.eval().cuda()  
tokenizer = AutoTokenizer.from_pretrained('OpenBMB/MiniCPM-V-2_6', trust_remote_code=True)  image1 = Image.open('image1.jpg').convert('RGB')  
image2 = Image.open('image2.jpg').convert('RGB')  
question = 'Compare image 1 and image 2, tell me about the differences between image 1 and image 2.'  msgs = [{'role': 'user', 'content': [image1, image2, question]}]  answer = model.chat(  image=None,  msgs=msgs,  tokenizer=tokenizer  
)  
print(answer)  

視頻理解

import torch  
from PIL import Image  
from modelscope import AutoModel, AutoTokenizer  
from decord import VideoReader, cpu    # pip install decord  params={}  model = AutoModel.from_pretrained('OpenBMB/MiniCPM-V-2_6', trust_remote_code=True,  attn_implementation='sdpa', torch_dtype=torch.bfloat16) # sdpa or flash_attention_2, no eager  
model = model.eval().cuda()  
tokenizer = AutoTokenizer.from_pretrained('OpenBMB/MiniCPM-V-2_6', trust_remote_code=True)  MAX_NUM_FRAMES=64  def encode_video(video_path):  def uniform_sample(l, n):  gap = len(l) / n  idxs = [int(i * gap + gap / 2) for i in range(n)]  return [l[i] for i in idxs]  vr = VideoReader(video_path, ctx=cpu(0))  sample_fps = round(vr.get_avg_fps() / 1)  # FPS  frame_idx = [i for i in range(0, len(vr), sample_fps)]  if len(frame_idx) > MAX_NUM_FRAMES:  frame_idx = uniform_sample(frame_idx, MAX_NUM_FRAMES)  frames = vr.get_batch(frame_idx).asnumpy()  frames = [Image.fromarray(v.astype('uint8')) for v in frames]  print('num frames:', len(frames))  return frames  video_path="car.mp4"  
frames = encode_video(video_path)  
question = "Describe the video"  
msgs = [  {'role': 'user', 'content': frames + [question]},   
]  # Set decode params for video  
params["use_image_id"] = False  
params["max_slice_nums"] = 2 # 如果cuda OOM且視頻分辨率大于448*448 可設為1  answer = model.chat(  image=None,  msgs=msgs,  tokenizer=tokenizer,  **params  
)  
print(answer)  

論文學習筆記:

MiniCPM,能被斯坦福抄襲究竟有何魅力?我們一起看看論文吧!-騰訊云開發者社區-騰訊云

部署完整教程:

MiniCPM-V 2.6:端側最強多模態大模型探索【推理實戰大全】_vllm minicpm-CSDN博客

微調教程:

MiniCPM-o-2.6 多模態大模型微調實戰(完整代碼)_minicpm-o 2.6-CSDN博客

部署,微調教程,視頻實測

多圖、視頻首上端!面壁「小鋼炮」 MiniCPM-V 2.6 模型重磅上新!魔搭推理、微調、部署實戰教程modelscope-CSDN博客

BitCPM4 技術報告

而剛剛提到的43頁技術報告,我看了一遍,覺得可以拆成以下:

InfLLM v2:Attention 層只看重點
FR-Spec:草稿階段不全寫
BitCPM4:訓練時就考慮壓縮
CPM.cu + ArkInfer:定制推理 & 部署系統
風洞 2.0:小模型先試,大模型再訓

創意:把量化塞進訓練?

MiniCPM 4.0 技術報告:端側速度的奔涌,是模型的自我Rag | 人人都是產品經理

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/90453.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/90453.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/90453.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

92套畢業相冊PPT模版

致青春某大學同學聚會PPT模版,那些年我們一起走過的歲月PPT模版,某學院某班同學聯誼會PPT模版,匆匆那年PPT模版,青春的紀念冊PPT模版,梔子花開PPT模版,畢業紀念冊PPT模版。 92套畢業相冊PPT模版&#xff1…

爬蟲基礎概念

網絡爬蟲概述 概念 網絡爬蟲(Web Crawler),也稱為網絡蜘蛛(Web Spider)或機器人(Bot),是一種自動化程序,用于系統地瀏覽互聯網并收集網頁信息。它模擬人類瀏覽器行為&…

java8 stream流操作的flatMap

我們來詳細解釋一下 Java 8 Stream API 中的 flatMap 操作。理解 flatMap 的關鍵在于將其與 map 操作進行對比。??核心概念:????map 操作:??作用:將一個流中的每個元素??轉換??為另一個元素(類型可以不同)…

開源UI生態掘金:從Ant Design二次開發到行業專屬組件的技術變現

開源UI生態掘金:從Ant Design二次開發到行業專屬組件的技術變現內容摘要在開源UI生態中,Ant Design作為一款廣受歡迎的UI框架,為開發者提供了強大的基礎組件。然而,面對不同行業的特定需求,僅僅依靠現有的組件往往難以…

Object Sense (OSE):一款從編輯器腳本發展起來的編程語言

引言:從Vim編輯器走出的語言在編程語言的世界里,許多革命性的創新往往源于看似簡單的工具。Object Sense(簡稱OSE)的誕生,便與一款經典文本編輯器——Vim息息相關。它的前身是Vim的腳本語言VimL(Vimscript&…

我考PostgreSQL中級專家證書二三事

1. 為什么選擇PGCE?PostgreSQL的開源特性、高性能和高擴展性早已讓我心生向往,而PGCE認證不僅是對技術能力的認可,更是一張通往更高職業舞臺的“通行證”。官方資料提到,PGCE考試涵蓋性能優化、高可用架構、復雜查詢處理、內核原理…

Java 動態導出 Word 登記表:多人員、分頁、動態表格的最佳實踐

本文詳細講解如何使用 Java 動態導出包含多人員報名表的 Word 文檔,每人占據獨立一頁,并支持動態表格行(如個人經歷)。我們對比了多種實現方案,最終推薦基于 Freemarker XML 模板 或 docx4j 的靈活方式,并…

【element-ui el-table】多選表格勾選時默認勾選了全部,row-key綁定異常問題解決

項目場景: Element-UI的el-table組件row-key使用問題 同一個頁面使用了幾個table,這幾個table都使用了多選,row-key屬性,其中row-key的綁定方式都是用的靜態綁定,row-key“username”或row-key“id”,可正常…

C#注釋技巧與基礎編程示例

以下是一個包含基礎注釋的 C# 程序示例&#xff0c;展示了 C# 中各類注釋的使用方法&#xff1a;using System;namespace BasicCSharpProgram {/// <summary>/// Program 類是應用程序的入口點/// 包含 Main 方法作為程序執行的起點/// </summary>public class Pro…

極客大挑戰2019-HTTP

涵蓋知識&#xff1a;UA頭偽造漏洞&#xff1a;全稱&#xff1a;User-Agent 這個部分包含我們所使用的操作系統版本&#xff0c;cpu&#xff0c;瀏覽器類型等。來源偽造漏洞&#xff1a;在http請求頭中會攜帶一個Referer&#xff0c;這個用來表示服務器用戶是從哪個地方來的X-F…

談談ArrayList與Vector的理解?

目錄 擴容機制 ArrayList擴容源碼 Vector擴容源碼 二者區別 擴展&#xff1a;stack(棧&#xff09; 1.創建stack對象 2. 入棧(先進后出&#xff09; 3.出棧 擴展&#xff1a;舉個例子&#xff1a;實現下字符串逆置&#xff0c;利用stack棧來實現。 從接口實現上&#xff…

【Linux庖丁解牛】— 多線程同步 !

1. 什么是線程同步為什么會有線程同步&#xff0c;那一定是有了新問題。互斥可以解決臨界資源被同時訪問的問題&#xff0c;但是純互斥也會帶來新的問題。由于當前被執行的線程離cpu最近【其他線程被阻塞掛起還要被喚醒】&#xff0c;所以&#xff0c;當前進程對于競爭鎖天然就…

基于arduino uno r3主控的環境監測系統設計-1

準備設計arduino uno r3為主控的環境監測系統&#xff0c;通過傳感器采集TVOC&#xff08;總揮發性有機物&#xff09;、HCHO&#xff08;甲醛&#xff09;和eCO2&#xff08;等效二氧化碳&#xff09;數據&#xff0c;并顯示在LCD屏幕上&#xff0c;同時支持數據記錄到SD卡&am…

ITIL 4:云計算與微服務對組織架構的影響

這幾年&#xff0c;很多組織在推進數字化轉型時遇到一個共同的問題&#xff1a;業務節奏越來越快&#xff0c;但內部協作的“架構”卻越來越跟不上節奏。技術架構的變革&#xff0c;必須同步推動組織架構的重塑。特別是隨著云計算和微服務架構的廣泛應用&#xff0c;這種影響愈…

【Android】xml和Java兩種方式實現發送郵件頁面

三三要成為安卓糕手 一&#xff1a;xml中LinearLayout布局參數的使用 1&#xff1a;xml代碼 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http:/…

美林數據用大模型重構電能質量評估,讓隱蔽合規問題無所遁形

在“雙碳”目標驅動下&#xff0c;電網企業正加速推進數字化轉型&#xff0c;電能質量評估作為電力系統安全運行的核心環節&#xff0c;其合規性與效率直接影響著電網智能化水平。然而&#xff0c;傳統人工審核模式已難以應對海量報告與復雜標準——單份報告需20-30人天核對、關…

前端基礎 JS Vue3 Ajax

一、JSalert( .... ) //彈出框console.log( ....... ) //輸出到控制臺瀏覽器JS引入方式&#xff1a;1、內部腳本&#xff1a;將JS代碼定義在HTML頁面中位于<script></script>標簽之間2、外部腳本&#xff1a;將JS代碼寫在外部JS文件中&#xff0c;在HTML頁面中使用…

如何解決pip安裝報錯ModuleNotFoundError: No module named ‘notebook’問題

【Python系列Bug修復PyCharm控制臺pip install報錯】如何解決pip安裝報錯ModuleNotFoundError: No module named ‘notebook’問題 一、摘要 在使用 PyCharm 進行 Python 開發時&#xff0c;常常需要通過 pip install 安裝第三方包。但有時即便已經安裝成功&#xff0c;運行代…

一、Vue概述以及快速入門

什么是VueVue的快速入門代碼&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Vue快速入門</title><script src"js/vue.js"></script> </head> <bod…

模型的存儲、加載和部署

定義損失函數并以此訓練和評估模型 存儲模型可以只存儲state_dict或模型參數&#xff0c;每當需要部署經過訓練的模型時&#xff0c;創建模型的對象并從文件中加載參數&#xff0c;這是 Pytorch 創建者推薦的方法。 目錄 模型的存儲、加載 模型的部署 模型的存儲、加載 承接…