大模型學(xué)習(xí)路線:從原理到微調(diào)部署)
1. 先說清楚多模態(tài)大模型到底在解決什么問題這幾年做大模型相關(guān)的工作單聊語言模型LLM的人還很多但真正讓我覺得天花板遠(yuǎn)沒到的方向其實就是多模態(tài)大模型。你去看熱搜詞、招聘需求、開源社區(qū)的熱度幾乎都在往“視覺語言”“視頻語言”“語音語言”這種組合方向走。所謂多模態(tài)大模型簡單說就是讓模型不再只吃文字而是能同時理解圖片、音頻、視頻和文字并且在理解之后還能按照人的指令完成推理、回答、生成內(nèi)容。我在剛開始接觸這個方向時也踩過坑以為多模態(tài)就是把圖像識別模型和文本模型拼在一起用的時候先跑一遍圖像識別再把結(jié)果扔給語言模型去生成文字。后來真正做了才發(fā)現(xiàn)這種“流水線式”方案和真正的多模態(tài)大模型之間差距非常大。真正意義上的多模態(tài)模型是在模型內(nèi)部把不同模態(tài)的特征對齊到同一個語義空間里讓模型能夠跨模態(tài)進(jìn)行推理而不是簡單地在外部做拼接。這篇文章我打算按我自己的學(xué)習(xí)路線來寫核心圍繞多模態(tài)模型的概念、架構(gòu)、數(shù)據(jù)準(zhǔn)備、微調(diào)實操、評估和部署幾個環(huán)節(jié)展開。不管你是剛?cè)腴T大模型還是已經(jīng)做過一些單模態(tài)的NLP或CV項目想轉(zhuǎn)向多模態(tài)方向這都是一條可以照著走的路線。2. 多模態(tài)大模型的基礎(chǔ)認(rèn)知先搞懂這幾個關(guān)鍵名詞2.1 特征對齊到底是什么意思多模態(tài)模型最核心的動作是把來自不同模態(tài)的輸入轉(zhuǎn)換成向量然后在同一個向量空間里做對齊。什么是“對齊”你可以理解成把中文的“蘋果”、英文的“apple”、一張紅蘋果的圖片映射到同一個向量空間里距離比較近的位置。這樣當(dāng)模型看到圖片里的蘋果時它知道這個視覺特征和文字描述里的蘋果是一回事。這個想法其實不是大模型時代才有的。早期有跨模態(tài)檢索相關(guān)的思路后來CLIP這類模型真正把“圖文對比學(xué)習(xí)”做成了范式。CLIP的做法是用大量的圖片和文字配對數(shù)據(jù)訓(xùn)練一個圖像編碼器和一個文本編碼器讓配對樣本的特征向量盡量接近不配對樣本的距離盡量拉遠(yuǎn)。很多后來出現(xiàn)的多模態(tài)大模型視覺編碼器部分依然沿用CLIP的訓(xùn)練思路或者在CLIP的基礎(chǔ)上做繼續(xù)訓(xùn)練。2.2 從“編碼器-解碼器”到“大語言模型底座”多模態(tài)模型演進(jìn)到現(xiàn)在大致出現(xiàn)了幾種典型結(jié)構(gòu)。第一種是以Florence為代表視覺編碼器和文本編碼器并行輸出時通過一個共同的接口來完成跨模態(tài)理解。第二種是以LLaVA為代表的架構(gòu)把視覺編碼器接到一個大語言模型上中間加一個可訓(xùn)練的投影層讓視覺特征變成語言模型能理解的向量序列。第三種是以Qwen-VL、InternVL為代表的大一統(tǒng)模型架構(gòu)上通常也是視覺編碼器連接器LLM但在訓(xùn)練策略和數(shù)據(jù)規(guī)模上做了很多優(yōu)化。從我個人學(xué)習(xí)經(jīng)驗來看如今主流的多模態(tài)大模型基本都是“視覺編碼器連接器語言模型底座”這種三段式結(jié)構(gòu)。理解了這個結(jié)構(gòu)后面看任何模型的代碼和論文都會輕松很多。語言模型底座負(fù)責(zé)推理和生成視覺編碼器負(fù)責(zé)提取視覺特征連接器負(fù)責(zé)把視覺特征“翻譯”成語言模型能讀懂的形式。2.3 多模態(tài)大模型和傳統(tǒng)視覺模型的本質(zhì)區(qū)別傳統(tǒng)視覺模型做圖像分類、目標(biāo)檢測輸出的是類別標(biāo)簽或檢測框能力邊界相對固定。多模態(tài)大模型則不同它把視覺理解能力和自然語言的開放式生成能力結(jié)合在一起。你給它一張圖它不只會告訴你圖里有什么還能根據(jù)你的問題做推理。比如你問“這張圖里的人是在室內(nèi)還是室外”它能結(jié)合人物周圍的環(huán)境、光線、物體做綜合判斷。這種能力的背后是模型在大規(guī)模圖文數(shù)據(jù)上訓(xùn)練出來的跨模態(tài)語義理解能力。所以如果有人問我多模態(tài)大模型學(xué)起來到底難在哪我的回答是難點不在某一個單獨的模型結(jié)構(gòu)而在于你要同時理解視覺特征提取、序列建模、指令微調(diào)、數(shù)據(jù)配比、分布式訓(xùn)練等多方面的知識。這也是為什么需要一條比較系統(tǒng)的學(xué)習(xí)路線。3. 學(xué)習(xí)路線的整體拆解別一上來就掉進(jìn)源碼里3.1 前置基礎(chǔ)清單多模態(tài)大模型不是零基礎(chǔ)就能直接上手的方向。我建議在動手之前先把下面這些基礎(chǔ)打牢Python編程基礎(chǔ)尤其是PyTorch的使用。不用精通到能手寫反向傳播但至少要能看懂模型定義、數(shù)據(jù)加載、訓(xùn)練循環(huán)。Transformer結(jié)構(gòu)的基本原理。至少要知道自注意力機制是怎么工作的詞嵌入是怎么映射的位置編碼為什么需要。預(yù)訓(xùn)練和微調(diào)的基本概念。比如什么是指令微調(diào)SFT什么是凍結(jié)參數(shù)什么是低秩適配LoRA。基礎(chǔ)的圖像處理方法。不用會做復(fù)雜的圖像處理算法但至少要了解圖像在計算機里是怎么表達(dá)成數(shù)字張量的RGB通道、分辨率、歸一化這些概念要清楚??赡苡腥擞X得Transformer都學(xué)完了還看多模態(tài)干嘛其實多模態(tài)領(lǐng)域有一個額外門檻數(shù)據(jù)。單模態(tài)NLP的數(shù)據(jù)是一段文本單模態(tài)CV的數(shù)據(jù)是一張圖加一個標(biāo)簽多模態(tài)的數(shù)據(jù)是圖文對、視頻文本對、指令數(shù)據(jù)數(shù)據(jù)的規(guī)模和質(zhì)量直接決定模型效果而且處理起來比單模態(tài)復(fù)雜得多。3.2 我的學(xué)習(xí)階段劃分我把多模態(tài)大模型的學(xué)習(xí)過程分成四個階段第一階段是看懂。找?guī)灼?jīng)典論文精讀包括CLIP、BLIP-2、LLaVA、Qwen-VL搞清楚每個模型在結(jié)構(gòu)上做了什么、訓(xùn)練數(shù)據(jù)長什么樣、評測結(jié)果如何。這個階段不用追求看懂所有公式重點是建立對模型架構(gòu)的直觀認(rèn)知。第二階段是跑通。找開源模型和代碼把推理跑通。隨便拿一張圖片讓模型輸出一段描述再試幾個問答感受一下多模態(tài)模型的能力邊界。這是建立信心的關(guān)鍵一步也讓你之后看源碼時有個整體印象。第三階段是改。把LLaVA或Qwen-VL這類模型拿來做微調(diào)換自己的數(shù)據(jù)改改超參數(shù)觀察模型行為的變化。這個階段會真刀真槍地碰代碼、看日志、調(diào)bug也是收獲最大的階段。第四階段是評估和部署。用公開評測集測模型效果然后把模型部署成服務(wù)測試推理速度、并發(fā)能力思考如何在資源受限的情況下優(yōu)化。這條路線走下來大概需要兩到三個月前提是你每天能保證兩三小時的學(xué)習(xí)時間。如果全職學(xué)節(jié)奏可以快一個月左右。3.3 學(xué)習(xí)資料怎么選關(guān)于資料我的建議是優(yōu)先看三樣?xùn)|西原版論文、官方代碼、實驗報告。很多人喜歡先看博客或視頻課程但博客的問題是經(jīng)過二次加工容易丟掉關(guān)鍵細(xì)節(jié)。尤其多模態(tài)領(lǐng)域發(fā)展極快一個模型出來沒幾個月就有新版本過時的博客反而會誤導(dǎo)你??凑撐臅r我有個習(xí)慣先看圖和表格再讀方法部分最后才看相關(guān)工作。圖和表格能在幾分鐘內(nèi)給你一個模型的核心思路。看代碼時不要從頭到尾一行行讀而是先看模型定義部分找到視覺編碼器、連接器、語言模型這三個結(jié)構(gòu)分別在哪里再去看數(shù)據(jù)加載部分搞清楚輸入數(shù)據(jù)是怎么被預(yù)處理和拼裝的。4. 核心模塊深度解析視覺編碼器、連接器與語言模型底座4.1 視覺編碼器怎么選多模態(tài)大模型里視覺編碼器負(fù)責(zé)把圖像轉(zhuǎn)換成特征序列。目前主流的選擇有CLIP的ViT系列、SigLIP、InternViT等。選擇視覺編碼器時要關(guān)注幾個指標(biāo)輸入分辨率支持、參數(shù)量大小、特征維度以及在圖文對齊任務(wù)上的表現(xiàn)。以LLaVA為例早期版本用的是CLIP ViT-L/14把224x224的圖像切分成14x14的patch每個patch映射成一個特征向量最后得到256個視覺token輸入給語言模型。后來很多模型為了提高細(xì)粒度理解能力會把輸入分辨率提到336或448甚至更高。分辨率越高視覺token數(shù)量就越多計算開銷也越大。這是一個需要在實際應(yīng)用里權(quán)衡的問題。還有一個細(xì)節(jié)值得注意很多多模態(tài)模型會對視覺編碼器做階段性凍結(jié)。訓(xùn)練初期凍結(jié)視覺編碼器只訓(xùn)練連接器和語言模型后期再解凍部分層做聯(lián)合微調(diào)。這樣做一方面是為了避免災(zāi)難性遺忘另一方面是視覺編碼器已經(jīng)在海量圖文對上預(yù)訓(xùn)練過直接微調(diào)很容易把學(xué)好的特征搞壞。4.2 連接器的設(shè)計差異連接器是把視覺特征轉(zhuǎn)化為語言模型輸入的關(guān)鍵模塊。你不要小看這個模塊不同模型的設(shè)計差異很大效果也差很多。最簡單的連接器就是一個線性投影層把視覺特征的維度映射到語言模型的嵌入維度。LLaVA早期用的就是這種方案實現(xiàn)簡單效果也不錯。復(fù)雜一點的是BLIP-2提出的Q-Former它用一組可學(xué)習(xí)的query向量去“查詢”視覺特征得到若干和文本語義更對齊的向量再輸入給語言模型。Q-Former的優(yōu)點是能用更少的視覺token表達(dá)更多的語義信息缺點是結(jié)構(gòu)復(fù)雜訓(xùn)練時要多一個階段。我自己在實踐里對比過線性投影層在數(shù)據(jù)充足的情況下并不比Q-Former差太多甚至訓(xùn)練更穩(wěn)定。所以在自己的項目里不要盲目追復(fù)雜結(jié)構(gòu)先跑通簡單的再根據(jù)效果決定要不要升級。4.3 語言模型底座的選擇邏輯語言模型底座決定了多模態(tài)模型的推理上限。同樣是看圖問答底座是2B還是14B效果差距非常明顯。底座參數(shù)越多常識推理能力和指令跟隨能力越強但對顯存和算力的要求也越高。做學(xué)習(xí)路線時我建議先用7B或8B左右的底座比如Qwen2.5-7B、InternLM2.5-7B這個規(guī)模在24G顯存上能做LoRA微調(diào)推理時甚至可以在16G顯存上跑。等你把流程跑通再考慮更大的底座。千萬不要一上來就試72B的模型那樣大概率卡在環(huán)境配置上。語言模型底座還決定了模型的輸出風(fēng)格和指令遵循能力。同一個視覺編碼器、同一份數(shù)據(jù)換不同的底座效果差異會非常明顯。所以做微調(diào)時如果效果不好不要只想著調(diào)數(shù)據(jù)換底座也是一種常見操作。5. 動手實踐多模態(tài)微調(diào)的全流程5.1 準(zhǔn)備訓(xùn)練數(shù)據(jù)多模態(tài)模型的訓(xùn)練數(shù)據(jù)大體分兩類一類是圖文對數(shù)據(jù)用于預(yù)訓(xùn)練或繼續(xù)訓(xùn)練數(shù)據(jù)格式就是一張圖片配一段描述文本另一類是指令數(shù)據(jù)用于微調(diào)數(shù)據(jù)格式是一張圖片配一組多輪對話對話中包含用戶問題、模型回答。自己從零收集海量圖文對不現(xiàn)實更好用的做法是使用公開數(shù)據(jù)集。比如LAION、CC3M、CC12M這些圖文對數(shù)據(jù)集或者用LLaVA-Pretrain這種已經(jīng)處理好的預(yù)訓(xùn)練數(shù)據(jù)。指令微調(diào)階段可以用LLaVA-Instruct、ShareGPT4V這類公開數(shù)據(jù)也可以根據(jù)自己的業(yè)務(wù)場景構(gòu)造小規(guī)模的高質(zhì)量指令數(shù)據(jù)。在構(gòu)造指令數(shù)據(jù)時我有一個建議質(zhì)量永遠(yuǎn)比數(shù)量重要。幾千條高質(zhì)量、覆蓋各種提問方式的數(shù)據(jù)效果往往比幾萬條重復(fù)模板數(shù)據(jù)要好。指令數(shù)據(jù)要多樣化包含描述類問題、推理類問題、比較類問題、計數(shù)類問題等。我見過太多人拿一個模板生成幾萬條數(shù)據(jù)訓(xùn)出來的模型只會按模板說話換個問法就崩了。5.2 數(shù)據(jù)格式化示例以LLaVA系列的訓(xùn)練數(shù)據(jù)為例一般用一個JSON文件組織對話。每條數(shù)據(jù)大概長這樣{ id: 00000001, image: path/to/image.jpg, conversations: [ { from: human, value: 請描述這張圖片的內(nèi)容。 }, { from: gpt, value: 圖片中是一片海灘遠(yuǎn)處有幾棵椰子樹近處有一個人在海邊散步。 } ] }不同框架的數(shù)據(jù)格式略有差異但核心思想一致圖片路徑加對話輪次。訓(xùn)練時模型會看到圖片對應(yīng)的視覺特征和全部對話歷史基于前面的對話來生成當(dāng)前輪的回復(fù)。指令數(shù)據(jù)里有些框架會區(qū)分“系統(tǒng)提示”和“用戶消息”處理時要看清框架要求。5.3 微調(diào)工具的選擇與上手現(xiàn)在做多模態(tài)微調(diào)不太需要自己從頭寫訓(xùn)練腳本。我常用的工具是LLaMA Factory和Xinference其中LLaMA Factory對多模態(tài)模型的支持比較完整界面友好文檔也寫得很清楚。用LLaMA Factory做多模態(tài)微調(diào)大致步驟是安裝依賴包括PyTorch、transformers、peft、deepspeed等。準(zhǔn)備訓(xùn)練數(shù)據(jù)按照框架規(guī)定的JSON格式組織。在配置界面選擇模型名稱、微調(diào)方法LoRA、數(shù)據(jù)集、學(xué)習(xí)率、批次大小等參數(shù)。啟動訓(xùn)練監(jiān)控?fù)p失曲線和顯存占用。訓(xùn)練完成后合并LoRA權(quán)重導(dǎo)出完整模型。用評測集或?qū)嶋H圖片測試模型效果。這里重點說兩個容易被忽視的參數(shù)。第一個是image_resolution也就是輸入圖片的分辨率。不同模型對分辨率有不同要求盲目調(diào)高會導(dǎo)致視覺token數(shù)量暴增訓(xùn)練顯存跟不上。第二個是lora_rankLoRA的秩大小。秩越大可訓(xùn)練參數(shù)越多模型能力上限越高但過擬合風(fēng)險也增加。我一般先設(shè)64看驗證集效果再調(diào)整。5.4 顯存不夠怎么辦很多人在本地部署或微調(diào)多模態(tài)模型時卡在顯存上。16G顯存加32G內(nèi)存能部署什么規(guī)模的多模態(tài)模型我的經(jīng)驗是純推理情況下7B到8B的模型可以用4比特量化跑起來大概占用6G到8G顯存剩余內(nèi)存會被部分卸載到系統(tǒng)內(nèi)存速度會慢一些但能用。如果是14B模型建議至少24G顯存或者用CPU推理方案速度比較慢但至少能跑。微調(diào)比推理更吃顯存。16G顯存跑7B模型的LoRA微調(diào)開啟梯度檢查點把batch size設(shè)成1勉強可行。如果想跑14B的微調(diào)建議還是上24G或更高顯存的顯卡。這個資源門檻是客觀存在的避不開。但不用為此焦慮先跑小模型把流程走通比什么都強。6. 評測指標(biāo)與模型效果驗證6.1 常用的公開評測基準(zhǔn)多模態(tài)模型的評測比純語言模型復(fù)雜因為既要看文本生成質(zhì)量又要看圖文匹配的準(zhǔn)確性。目前常見的評測基準(zhǔn)有MMMU涵蓋多個學(xué)科領(lǐng)域的多模態(tài)理解基準(zhǔn)題目涉及圖表、幾何、人文社科等難度較高。MMBench中文和英文都覆蓋的多模態(tài)評測基準(zhǔn)題目類型豐富適合衡量綜合能力。SEED-Bench包含視頻和圖像理解任務(wù)側(cè)重跨模態(tài)理解能力。TextVQA聚焦圖片中的文字識別與問答測試模型對OCR結(jié)果的推理能力。這些基準(zhǔn)都有公開的評測腳本可以直接跑。但要注意同一個模型在不同評測集上的表現(xiàn)差異可能很大因為評測題目的數(shù)據(jù)分布不同。選擇評測基準(zhǔn)時要結(jié)合自己的應(yīng)用場景。如果你做的是文檔理解TextVQA的參考價值就比MMMU更大。6.2 手動評測的意義公開評測集不能解決所有問題。我見過不少模型在公開評測集上分?jǐn)?shù)很高但在真實業(yè)務(wù)數(shù)據(jù)上表現(xiàn)平平原因就是數(shù)據(jù)分布不匹配。所以除了跑公開集我強烈建議自己準(zhǔn)備一批“私有評測數(shù)據(jù)”最好是從實際場景里抽出來的圖片和問題。手動評測時不要只看答案對不對還要關(guān)注幾點回答是否詳細(xì)具體還是只會給模糊結(jié)論對同一張圖片用不同問法問回答是否穩(wěn)定面對圖片里的文字、圖表、復(fù)雜場景時是理解還是胡編。這些觀察能幫你快速找到模型的短板再針對性地補充訓(xùn)練數(shù)據(jù)。比如發(fā)現(xiàn)模型總是把數(shù)字看錯就多收集帶數(shù)字的圖片數(shù)據(jù)。這種“評測-發(fā)現(xiàn)問題-補充數(shù)據(jù)-再評測”的循環(huán)才是實際工作中提升模型效果最有效的方式。6.3 常見評價指標(biāo)的坑多模態(tài)生成類任務(wù)里很多人喜歡用BLEU、ROUGE這類文本匹配指標(biāo)但我要提醒一句這類指標(biāo)在多模態(tài)問答場景下參考價值很有限。因為同一個問題可以有多種表達(dá)方式答案文字不同不代表語義錯誤。更好的做法是同時使用語義相似度指標(biāo)和人工評測。另外準(zhǔn)確率不等于能力。有時候模型在某個評測集上準(zhǔn)確率提升只是因為它在答案模板上過擬合了。所以做評測時最好定期換一批新問題避免模型“記住”測試集。7. 部署落地把多模態(tài)模型跑起來7.1 部署框架選型訓(xùn)練完模型最終要部署成服務(wù)才能真正被業(yè)務(wù)使用。多模態(tài)模型的部署和純語言模型類似核心目標(biāo)都是在有限的硬件資源下盡量提高吞吐量和降低響應(yīng)延遲。目前主流的部署工具有vLLM、SGLang、Xinference以及Ollama這類面向個人用戶的產(chǎn)品級工具。它們都支持常見的多模態(tài)模型格式。vLLM的優(yōu)勢是吞吐量高支持連續(xù)批處理和PagedAttention適合并發(fā)請求較多的場景。SGLang在結(jié)構(gòu)化推理方面有優(yōu)勢但社區(qū)生態(tài)和文檔相對vLLM少一些。Ollama的優(yōu)勢是上手門檻極低適合個人電腦上體驗但生產(chǎn)環(huán)境的靈活度和性能優(yōu)化選項不夠豐富。我實際用下來的體驗是做生產(chǎn)環(huán)境優(yōu)先考慮vLLM個人折騰Ollama就夠了。如果你部署的是Qwen-VL或InternVL這類主流模型vLLM官方文檔基本都有完整的部署示例照著做就行。7.2 部署一個多模態(tài)服務(wù)的操作示范以vLLM部署Qwen2-VL-7B-Instruct為例代碼大致是這樣的from vllm import LLM, SamplingParams llm LLM( modelQwen/Qwen2-VL-7B-Instruct, limit_mm_per_prompt{image: 4, video: 1}, ) sampling_params SamplingParams( temperature0.7, top_p0.8, max_tokens512, ) prompt [ { role: user, content: [ {type: image, image: https://example.com/cat.jpg}, {type: text, text: 請描述這張圖片里的動物。} ] } ] outputs llm.chat(messagesprompt, sampling_paramssampling_params) print(outputs[0].outputs[0].text)這里幾個參數(shù)值得解釋一下。limit_mm_per_prompt限制了單次請求里能包含的圖片或視頻數(shù)量防止用戶傳入超大輸入導(dǎo)致顯存溢出。max_tokens控制生成的最大長度對于視覺問答場景我一般設(shè)256到512太長會拖慢響應(yīng)速度。如果你要部署成HTTP服務(wù)vLLM還提供了OpenAI兼容的API服務(wù)啟動方式一條命令就能完成vllm serve Qwen/Qwen2-VL-7B-Instruct --limit-mm-per-prompt image4啟動之后可以按OpenAI接口格式發(fā)送請求這對于接入現(xiàn)有的應(yīng)用框架非常方便。7.3 推理速度和并發(fā)優(yōu)化多模態(tài)模型的推理速度瓶頸通常在兩個地方視覺編碼器的前向計算以及語言模型階段的token生成。如果你發(fā)現(xiàn)服務(wù)響應(yīng)很慢先判斷慢在哪一步。一般圖片尺寸越大視覺編碼階段越慢。優(yōu)化手段包括控制輸入圖片的分辨率、對圖片做預(yù)處理縮放、使用更小的視覺編碼器。并發(fā)場景下顯存是稀缺資源。如果多張卡并行可以使用張量并行tensor parallel或數(shù)據(jù)并行。vLLM會自動處理連續(xù)批處理但你要根據(jù)實際并發(fā)量調(diào)整max_num_seqs參數(shù)。設(shè)太大會把顯存占滿設(shè)太小又浪費算力。我一般是從默認(rèn)值開始實測并發(fā)和延遲后再調(diào)。還有一個經(jīng)驗部署模型前先把精度測試和壓力測試做一遍。精度測試看模型輸出是否正確壓力測試看并發(fā)上來后會不會OOM或超時。這兩步在真實業(yè)務(wù)里非常重要但很多初學(xué)者容易忽略。8. 實操過程中最常踩的坑8.1 訓(xùn)練不收斂或Loss震蕩多模態(tài)模型訓(xùn)練比純語言模型更容易出現(xiàn)Loss不收斂的情況。第一個原因是學(xué)習(xí)率設(shè)置不當(dāng)。多模態(tài)模型通常有兩個或多個模塊不同模塊適合的學(xué)習(xí)率不同。比如連接器部分可以給稍大的學(xué)習(xí)率視覺編碼器如果解凍則需要更小的學(xué)習(xí)率。我在訓(xùn)練時一般把基礎(chǔ)學(xué)習(xí)率設(shè)為1e-5到2e-5LoRA層的學(xué)習(xí)率可以稍大一些。第二個原因是數(shù)據(jù)問題。圖文數(shù)據(jù)不對齊、圖片路徑錯誤、文本與圖片內(nèi)容不相關(guān)都會導(dǎo)致訓(xùn)練不穩(wěn)定。建議訓(xùn)練前先寫一個數(shù)據(jù)驗證腳本隨機抽幾百條數(shù)據(jù)檢查圖片能不能正常加載、文本是否有亂碼、圖文內(nèi)容是否確實相關(guān)。第三個原因是精度問題?;旌暇扔?xùn)練用的bf16和fp16在多模態(tài)場景下表現(xiàn)差異明顯。如果模型加載后出現(xiàn)Loss跑飛可以嘗試切到bf16它對數(shù)值溢出的容錯性更好。8.2 模型輸出“幻覺”嚴(yán)重多模態(tài)模型的幻覺問題非常常見具體表現(xiàn)是圖片里根本沒有的東西模型描述得頭頭是道圖片里看不清的文字模型會腦補出內(nèi)容。這個問題和訓(xùn)練數(shù)據(jù)的質(zhì)量直接相關(guān)。如果訓(xùn)練數(shù)據(jù)里大量出現(xiàn)圖文不匹配的情況模型就學(xué)會“編造”了。一個有效的緩解方法是在指令數(shù)據(jù)里加入明確的約束比如問“圖片中有幾條狗”時答案統(tǒng)一寫“根據(jù)圖像圖中有一條狗”而不是簡單寫“一條狗”。這種帶有推理過程的回答能幫助模型建立起“先看再答”的習(xí)慣。另外在推理時可以設(shè)置較低的溫度參數(shù)比如0.1或0.2降低生成時的隨機性減少幻覺。8.3 本地資源不足的應(yīng)對策略如果你手頭只有16G顯存甚至更少別灰心有幾個變通思路第一盡量用量化模型。4比特量化對多模態(tài)模型的視覺特征表達(dá)能力有影響但多數(shù)場景下可以接受。第二用小尺寸底座。3B、4B級別的多模態(tài)模型在普通顯卡上也能跑得不錯效果雖不如7B但對學(xué)習(xí)流程來說足夠了。第三用云GPU。如果只是偶爾訓(xùn)練租一塊40G以上顯存的顯卡按小時計費比自己買卡劃算得多。我之前就是用16G顯存跑了4比特量化后的7B模型微調(diào)batch size為1開了梯度檢查點雖然每一步訓(xùn)練時間比大顯存慢不少但流程完全跑通了。有些事不是條件完美才能做而是先跑起來再逐步優(yōu)化。9. 從學(xué)到用的擴展建議我之前在本地用Ollama部署過幾個多模態(tài)模型配合一些主流的RAG框架做圖文混合檢索效果出乎意料地好。比如把一份文檔里的圖片和文字分別抽出來圖片用多模態(tài)模型生成文字描述再統(tǒng)一走向量檢索這樣用戶在提問時既能命中文字段落也能通過圖片描述找到相關(guān)圖片。這套方案特別適合知識庫、產(chǎn)品說明書、培訓(xùn)資料這類場景。多模態(tài)模型的應(yīng)用范圍還在快速擴展和Agent結(jié)合也是一個大方向。讓模型不僅能看圖說話還能根據(jù)圖片內(nèi)容調(diào)用工具、操作系統(tǒng)這個領(lǐng)域還處于比較早期的階段值得持續(xù)關(guān)注。但我始終相信先把基礎(chǔ)打牢把訓(xùn)練、微調(diào)、評測、部署這一整套流程走通無論后續(xù)技術(shù)怎么演進(jìn)你都有能力快速跟上。對于正在規(guī)劃學(xué)習(xí)路線的人我的建議是不要囤資料不要重復(fù)看教程找一個開源的多模態(tài)模型準(zhǔn)備一批自己的數(shù)據(jù)從微調(diào)到部署親手走一遍。這個過程會比看十篇論文都管用。踩過坑、看過崩潰日志、調(diào)過損失曲線這些經(jīng)歷才是真正讓你從“知道”變成“會做”的關(guān)鍵。