LoRA微調(diào)實戰(zhàn))
先交代一下背景這個標(biāo)題不是我吹牛是我真跑通了之后回頭看整個過程得出的結(jié)論。尤其是選準(zhǔn)了Qwen2.5-VL-4B-Instruct這個模型之后配合LLaMA-Factory這套工具鏈整個多模態(tài)微調(diào)的門檻已經(jīng)被壓到一臺消費級顯卡就能搞定。這篇東西是給兩類人看的一是已經(jīng)玩過文本大模型微調(diào)、但沒碰過多模態(tài)的二是想在業(yè)務(wù)里接入圖像理解能力、又不想用OpenAI那種API的人。我先說結(jié)論如果你會跑文本LoRA那轉(zhuǎn)過來做Qwen2.5-VL的微調(diào)也就多花一晚上適應(yīng)數(shù)據(jù)格式和參數(shù)名而已。之所以強調(diào)“Qwen2.5-VL”而不是其他多模態(tài)模型是因為這個系列的底座能力是真的強。4B這個小尺寸版本在OCR、圖表理解、通用視覺問答上表現(xiàn)已經(jīng)能覆蓋大部分業(yè)務(wù)場景。更關(guān)鍵的是它的視覺編碼器和語言模型接口被Qwen官方清洗得很規(guī)范各種開源工具適配度極高。你只要準(zhǔn)備好成對的圖片和文本問答數(shù)據(jù)剩下的交給LoRA就行。下面我就把整個流程拆開從環(huán)境搭建、數(shù)據(jù)構(gòu)造、訓(xùn)練參數(shù)到推理驗證每一步的“為什么”都講清楚最后附上我踩過的一些坑。1. 多模態(tài)微調(diào)的“簡單”建立在什么之上先說一個反直覺的事實模型不是越新越好調(diào)而是接口越標(biāo)準(zhǔn)越好調(diào)。Qwen2.5-VL-4B-Instruct之所以適合拿來當(dāng)微調(diào)入門模型不只是因為它尺寸小、跑得快更因為它踩中了幾個關(guān)鍵點統(tǒng)一的對話格式、穩(wěn)定的視覺tokenizer、以及LLaMA-Factory原生支持。這套組合拳打下來你甚至不需要手寫一行模型調(diào)用代碼。很多人在多模態(tài)微調(diào)上摔跟頭不是模型訓(xùn)練難而是被數(shù)據(jù)格式和加載流程卡住了。文本模型的數(shù)據(jù)是無非是instruction input output但多模態(tài)要把圖片路徑嵌進(jìn)對話里讓數(shù)據(jù)加載器知道哪條消息帶著視覺輸入。Qwen2.5-VL用的是最直觀的方式在messages里用image標(biāo)簽插入圖片路徑。這個設(shè)計很聰明因為對使用者來說訓(xùn)練數(shù)據(jù)仍然是“對話流”只是多了一個特殊的占位符。另一個讓門檻大幅降低的原因是LoRA機(jī)制本身。它只訓(xùn)練注入到Attention層里的低秩矩陣凍結(jié)了Qwen2.5-VL龐大的視覺編碼器和大部分語言層。所以顯存占用被壓到極低4B全參微調(diào)可能要20GB以上但LoRA微調(diào)在8到10GB就能跑起來batch size稍微調(diào)小點6GB顯存的卡也能嘗試。當(dāng)然簡單不代表無腦。你仍然要理解訓(xùn)練數(shù)據(jù)長什么樣、超參數(shù)為什么這么設(shè)、以及跑完之后怎么驗證效果。這三個點才是微調(diào)真正的核心也恰恰是網(wǎng)上那些標(biāo)題黨教程最不愛寫的地方。所以在后面幾個章節(jié)里我會把每一條都拆開揉碎了講。2. 環(huán)境準(zhǔn)備一臺消費級顯卡、一套干凈的conda環(huán)境2.1 硬件和軟件版本怎么選先說硬件底線。我在一張RTX 3090 24G上跑過batch size設(shè)為2、LoRA rank從8到32都試過穩(wěn)如老狗。后來換到同事那張RTX 4060 Ti 16G把batch size降到1、開gradient accumulation后也能跑。如果你是8G顯存的卡也不是不能玩但需要把max_length從默認(rèn)的2048裁到1024同時數(shù)據(jù)里的圖像分辨率會被縮放得更狠導(dǎo)致訓(xùn)練效果打折。所以我的建議很簡單有條件就上16GB顯存以上這樣做實驗的舒適度會高很多。顯存不夠后面所有優(yōu)化手段都是在補償硬件限制而補償本身就會引入變量對新手不友好。軟件這邊我推薦直接從源碼裝LLaMA-Factory不要用pip最終版因為多模態(tài)功能經(jīng)常在更新。下面這套依賴在PyTorch 2.1到2.3、CUDA 11.8到12.1上都驗證過conda create -n llamafactory python3.10 conda activate llamafactory pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 git clone https://github.com/hiyouga/LLaMA-Factory.git cd LLaMA-Factory pip install -e .[torch]注意最后一行的[torch]別漏了它會連帶把transformers、peft、accelerate、deepspeed等核心庫一起裝好。這些庫的版本容易互相打架直接裝完整依賴能省掉很多連鎖問題。2.2 我第一次運行時踩到的第一個坑裝好之后我興沖沖跑了個llamafactory-cli version沒問題。正準(zhǔn)備直接訓(xùn)練結(jié)果執(zhí)行到加載模型那一步崩了報了個TypeError: NoneType object is not callable。排查了半天發(fā)現(xiàn)是transformers版本太新和當(dāng)前LLaMA-Factory分支不兼容。這就是多模態(tài)微調(diào)的第一課不要追求依賴庫剛發(fā)布的最新版。Qwen2.5-VL的模型代碼依賴transformers里的一些組件官方適配是需要周期的。我在實戰(zhàn)中會把transformers鎖在4.46到4.50這個區(qū)間peft鎖在0.13左右這個組合在多個QLoRA場景里表現(xiàn)最穩(wěn)定。你如果不想賭運氣直接跑pip install transformers4.46.3 peft0.13.0這里要說明一下為什么鎖版本而不是裝最新底層庫大版本更新經(jīng)常改API簽名而模型倉庫代碼是按某個歷史版本寫的。一旦transformers里Qwen2VL預(yù)處理器或者模型類的接口變了你就要去GitHub翻issue、讀源碼、手動改調(diào)用方式這些時間成本早就超過裝舊版的三分鐘了。2.3 需要不需要裝flash-attn很多教程會推薦你裝flash-attn來加速但它編譯起來確實煩——要CUDA toolkit、要匹配的PyTorch版本、有時候還要忍受十幾分鐘的編譯等待。我的實際體驗是4B模型做LoRA微調(diào)fp16精度下flash-attn的加速效果并不顯著甚至在batch size很小的時候幾乎感覺不到差異。它主要在中大batch和長序列場景才發(fā)揮作用。所以我的建議是剛開始接觸時跳過flash-attn不要讓它變成你環(huán)境搭建的攔路虎。后面訓(xùn)練穩(wěn)定了、數(shù)據(jù)規(guī)模也上來了再補裝上做性能優(yōu)化。先把訓(xùn)練流程跑通這一點比什么都重要。3. 數(shù)據(jù)是唯一的硬成本從一張圖到一條訓(xùn)練樣本3.1 理解多模態(tài)微調(diào)的數(shù)據(jù)格式LLaMA-Factory微調(diào)Qwen2.5-VL推薦用sharegpt格式和純文本微調(diào)用的是同一套JSON結(jié)構(gòu)只是在對話里多加了一個圖片字段。拿到一張圖片你至少要構(gòu)造出一條“問題-回答”對。比如圖片是一張財務(wù)報表訓(xùn)練樣本大概長這樣{ messages: [ { content: 這張圖片里公司的營收趨勢如何, role: user, image: /data/imgs/finance_report_001.jpg }, { content: 從圖表看營業(yè)收入從Q1到Q4呈穩(wěn)步上升趨勢其中Q4增長最明顯環(huán)比約增長15%。, role: assistant } ] }關(guān)鍵就是user這條消息里的image字段。它直接指向本地圖片路徑LLaMA-Factory的數(shù)據(jù)加載器會自動讀取并轉(zhuǎn)成視覺token。你不需要手動做任何圖像預(yù)處理不需要把圖片轉(zhuǎn)base64也不需要單獨寫數(shù)據(jù)集的類這些都被框架封裝好了。忍不住多說一句現(xiàn)在做多模態(tài)微調(diào)真正的成本已經(jīng)從“訓(xùn)練模型”轉(zhuǎn)移到“搞數(shù)據(jù)”上了。算力不再是瓶頸瓶頸是你有沒有一批清晰、標(biāo)注準(zhǔn)確、覆蓋業(yè)務(wù)場景的圖文數(shù)據(jù)。模型微調(diào)不是魔法它是在教模型看你給它的那部分世界數(shù)據(jù)質(zhì)量差LoRA學(xué)到的只有噪音。3.2 多樣的數(shù)據(jù)來源和構(gòu)造策略數(shù)據(jù)從哪來我整理了一套分優(yōu)先級的路子你在初期做Demo時可以直接抄數(shù)據(jù)來源用途優(yōu)先級公開指令微調(diào)集如LLaVA-Instruct、ShareGPT4V保底通用能力高業(yè)務(wù)場景截圖人工標(biāo)注問答提升垂直場景精度最高用強模型如GPT-4o、Qwen-VL-Max批量生成偽標(biāo)注冷啟動中開源數(shù)據(jù)集清洗后改造擴(kuò)充多樣性中用強模型生成偽標(biāo)注這個思路很多人可能沒想到。你可以收集一批真實業(yè)務(wù)圖片不自己寫答案而是把圖片和問題丟給API讓它生成答案。跑一遍就能得到成百上千條種子數(shù)據(jù)再人工抽檢修正。雖然質(zhì)量不能跟純?nèi)斯?biāo)注比但對初期Demo和冷啟動來說完全夠用也省時間。要注意的是每類業(yè)務(wù)場景的數(shù)據(jù)量不能太少。我測過一個具體的場景比如“身份證復(fù)印件信息抽取”至少要有200到300條不同的樣本LoRA才能穩(wěn)定記住輸出格式。低于100條模型經(jīng)常學(xué)到一半就開始搖擺在訓(xùn)練集上表現(xiàn)很好換張新圖就原形畢露。3.3 數(shù)據(jù)清洗的尺寸問題圖片尺寸也是個容易被忽略的變量。Qwen2.5-VL內(nèi)部會把圖片縮放到固定分辨率再切patch如果你的訓(xùn)練圖分辨率參差不齊尤其是大量超寬圖或者超長圖模型學(xué)到的視覺特征就會亂。我的做法是構(gòu)造數(shù)據(jù)集前統(tǒng)一做一次預(yù)篩所有圖片最短邊不低于256像素最長邊不超過2048。太模糊的、純白底的、帶水印遮擋關(guān)鍵信息的直接刪掉。這一步像個篩子把數(shù)據(jù)里的臟東西提前擋在門外比后期反復(fù)調(diào)參有效得多。4. 一行命令跑起來的真相LLaMA-Factory的LoRA訓(xùn)練實操4.1 用YAML配置訓(xùn)練參數(shù)LLaMA-Factory支持命令行直接寫參數(shù)也支持YAML配置文件。我強烈推薦YAML方式因為可復(fù)現(xiàn)性極好。你調(diào)完參、跑通一次之后把YAML一存下次直接復(fù)用團(tuán)隊協(xié)作時也能避免“我改了哪個參數(shù)來著”的尷尬。下面這個YAML是我在3090上實測跑通的配置直接抄就能用model_name_or_path: Qwen/Qwen2.5-VL-4B-Instruct template: qwen_vl stage: sft finetuning_type: lora lora_rank: 16 lora_alpha: 32 lora_target: all dataset: my_vlm_data cutoff_len: 2048 per_device_train_batch_size: 2 gradient_accumulation_steps: 8 learning_rate: 2.0e-4 num_train_epochs: 3.0 lr_scheduler_type: cosine warmup_ratio: 0.1 bf16: true output_dir: outputs/qwen25vl4b_lora logging_steps: 10 save_steps: 500這里每個參數(shù)都不是隨便填的我逐個解釋一下為什么這么設(shè)lora_target: allQwen2.5-VL里可適配的模塊包括q/k/v/o投影矩陣以及視覺編碼器里的一部分線性層。設(shè)成all意味著LoRA會注入到所有支持的目標(biāo)模塊覆蓋面最全。實測效果比只注入語言模塊要好一點而且顯存增加有限所以直接all是性價比最高的選擇。lora_rank: 16LoRA低秩矩陣的維度。rank太小4或8模型學(xué)新任務(wù)的能力不足rank太大64往上不僅顯存漲得快還容易過擬合。16是個甜點值既能記住業(yè)務(wù)格式又保留了泛化能力。lora_alpha: 32這個參數(shù)是LoRA縮放系數(shù)通常設(shè)為rank的1到2倍所以32配16是標(biāo)準(zhǔn)配比。它的作用是調(diào)節(jié)微調(diào)對原模型權(quán)重的“影響力度”倍數(shù)太高容易破壞原始預(yù)訓(xùn)練能力。learning_rate: 2.0e-4LoRA微調(diào)的標(biāo)準(zhǔn)學(xué)習(xí)率區(qū)間是1e-4到3e-4。太高會出現(xiàn)loss震蕩太低則學(xué)不動。2e-4是一個穩(wěn)定的起手值大多數(shù)場景都不需要動。cutoff_len: 2048限制單條樣本的最大token數(shù)。多模態(tài)下文本token和圖像token都算進(jìn)這個長度里2048足夠處理絕大多數(shù)業(yè)務(wù)圖片和問答。填好YAML之后在命令行里執(zhí)行l(wèi)lamafactory-cli train my_vlm_config.yaml看到進(jìn)度條動起來的那一刻你就能直觀感受到什么叫“太簡單了”——沒有手寫訓(xùn)練循環(huán)沒有自己定義數(shù)據(jù)集類甚至不需要讀一遍模型源碼。4.2 訓(xùn)練過程中的監(jiān)控和止損訓(xùn)練跑起來之后別傻等。看兩個東西loss曲線和sample輸出的文本。LLaMA-Factory會把訓(xùn)練日志打到output_dir對應(yīng)的trainer_log.jsonl里你可以用一段簡單腳本實時繪制loss曲線。Loss不是越低越好關(guān)鍵是它要平穩(wěn)下降、不震蕩。如果一開始就沖到3.0以上且遲遲下不來多半是學(xué)習(xí)率太大或者數(shù)據(jù)里有臟樣本。這時候可以先停掉把learning_rate降到1e-4再試比硬著頭皮跑完幾小時高效得多。每隔幾百步框架會保存一個checkpoint。你可以隨時用最新checkpoint做快速推理看看模型在驗證集上的回答格式對不對。我習(xí)慣每跑1/3的epoch就用小樣本測試一次及時發(fā)現(xiàn)“完全復(fù)制訓(xùn)練集答案”這種過擬合前兆。5. 一個容易被忽視的訓(xùn)練細(xì)節(jié)LoRA target和模板5.1 為什么lora_target不能隨便只設(shè)q_proj和v_proj網(wǎng)上很多文本LoRA教程會說“只用q_proj和v_proj就夠了”這個經(jīng)驗在多模態(tài)場景下不完全適用。因為多模態(tài)模型里視覺token要經(jīng)過好幾層投影下采樣再進(jìn)入語言模型的注意力層。如果你只讓語言部分的query和value做低秩適配視覺信息的通路改動太少業(yè)務(wù)場景的視覺特征可能學(xué)不進(jìn)去。我在Qwen2.5-VL上專門做過對比實驗只注入語言注意力層 vs 注入絕大部分線性層。在相同訓(xùn)練步數(shù)和數(shù)據(jù)量下后者在票據(jù)識別任務(wù)上的F1高了將近5個百分點。代價是顯存增加不到1GB訓(xùn)練時間增加約20%。這筆賬算下來很劃算所以我才在配置里寫成lora_target: all。5.2 template: qwen_vl 到底起了什么作用LLaMA-Factory里每個模型家族都要對應(yīng)一個template它負(fù)責(zé)把原始對話列表轉(zhuǎn)換成模型期望的prompt格式包括特殊token怎么排、system message放哪、圖像token怎么拼接。如果我填錯template最典型的現(xiàn)象就是訓(xùn)練能跑——因為數(shù)據(jù)加載器不會報錯——但推理時模型輸出亂碼或者在每個user消息前重復(fù)出現(xiàn)一個詭異的占位符。Qwen2.5-VL的官方template就是qwen_vl。你在配置里這樣寫就行。很多人跑通文本微調(diào)后轉(zhuǎn)來做多模態(tài)第一反應(yīng)是沿用原來的qwen模板我提醒你千萬別省這一步。確定模板最穩(wěn)的方法是看LLaMA-Factory的data/README.md里每個模型對應(yīng)的推薦配置別靠猜。6. 訓(xùn)練完成后的推理與效果驗證6.1 用LoRA checkpoint做推理訓(xùn)練結(jié)束output_dir里會生成一個類似checkpoint-1500的目錄。用LLaMA-Factory自帶的命令行工具可以立刻開啟一個交互式體驗llamafactory-cli chat my_vlm_config.yaml \ --adapter_name_or_path outputs/qwen25vl4b_lora/checkpoint-1500進(jìn)入交互界面后先傳一張訓(xùn)練集里的圖確認(rèn)模型“記住”了任務(wù)格式再傳一張訓(xùn)練集外的業(yè)務(wù)圖片驗證泛化能力。這一步的關(guān)鍵是如果訓(xùn)練集上表現(xiàn)很好、新圖片上表現(xiàn)拉胯那大概率是過擬合或者數(shù)據(jù)量不足。如果兩邊表現(xiàn)都好說明LoRA權(quán)重確實學(xué)到了業(yè)務(wù)模式可以繼續(xù)下一步。6.2 批量驗證的覆蓋維度單條聊幾句只能看個大概正式驗證建議準(zhǔn)備一個小的評測腳本。從三個維度量化效果字段抽取準(zhǔn)確率預(yù)測值與真實標(biāo)注的匹配程度格式合規(guī)率輸出能否被你的下游代碼直接解析比如JSON格式拒絕率對無關(guān)圖片能不能明確回答“無法識別”而不是瞎編我在實際項目中見過最隱蔽的問題就是“瞎編”。模型被微調(diào)后會把圖片里不存在的文字編得有模有樣比如把發(fā)票號碼讀成另一串?dāng)?shù)字而且語氣非常自信。所以驗證集里一定要混入幾張類別不同、不該識別的圖片專門測試模型的“拒絕能力”。一個只會埋頭硬答的模型上線后比不微調(diào)的還危險。6.3 合并LoRA權(quán)重并導(dǎo)出驗證滿意之后LoRA權(quán)重還只是一堆適配器文件不能直接當(dāng)成完整模型發(fā)布。需要先合并再導(dǎo)出llamafactory-cli export my_vlm_config.yaml \ --adapter_name_or_path outputs/qwen25vl4b_lora/checkpoint-1500 \ --export_dir models/qwen25vl4b_final合并之后output目錄下的模型就是一份完整權(quán)重可以直接用vLLM或Ollama部署不需要再依賴PEFT運行時。這里需要注意導(dǎo)出過程會重新加載一次基座模型如果基座模型在本地且顯存不夠同樣會出現(xiàn)OOM。解決辦法是把model_name_or_path臨時換成本地路徑或者直接在導(dǎo)出腳本里加上--device cpu時間會慢一些但勝在穩(wěn)。7. 我踩過的坑和調(diào)整心得7.1 長圖“超出長度裁剪但輸出炸了”的問題微調(diào)時如果圖片分辨率很高Qwen2.5-VL預(yù)處理器會把圖片切成多個patch導(dǎo)致視覺token數(shù)量暴增。有一回我把一張6000像素寬的長截圖塞進(jìn)了訓(xùn)練集沒觸發(fā)錯誤但每步訓(xùn)練時間從0.8秒暴增到3秒多而且loss異常高。排查半天發(fā)現(xiàn)是這條樣本的token數(shù)遠(yuǎn)超cutoff_len超出的部分被截斷圖片后半截的內(nèi)容模型根本看不到還在拿殘缺信息硬學(xué)著回答。這個問題的解決方案有兩個一是訓(xùn)練前把圖片統(tǒng)一壓縮到合理寬高比我上面提過的1920像素上限就夠用二是寫一個數(shù)據(jù)清洗腳本跳過那些切patch后token數(shù)超過1800的超長樣本。兩手抓訓(xùn)練時的內(nèi)存占用和穩(wěn)定性立刻上一個臺階。7.2 圖像字段被batch sampler“吃掉”的經(jīng)典翻車還有一種情況數(shù)據(jù)格式看著沒問題訓(xùn)練也不報錯但loss曲線始終降不下來。后來我發(fā)現(xiàn)是LLaMA-Factory的dataset配置寫在YAML里但dataset在data/dataset_info.json中并沒有注冊??蚣軙o默跳過這個不存在的數(shù)據(jù)集然后默認(rèn)加載一個別名相似的數(shù)據(jù)集或者干脆用空數(shù)據(jù)訓(xùn)練。你盯著loss看了半天其實模型根本沒見到你的圖片。所以啟動訓(xùn)練前務(wù)必先執(zhí)行l(wèi)lamafactory-cli train my_vlm_config.yaml但不要急著等它跑日志里會有Dataset loaded的行看它加載的樣本條數(shù)是否和你預(yù)期一致。不一致就回去查dataset_info.json的注冊名和路徑。這一步檢查十秒鐘能省去一整晚的無效訓(xùn)練。7.3 學(xué)習(xí)率、epoch和batch size的聯(lián)動關(guān)系很多新手只關(guān)心loss降不降不關(guān)心別的參數(shù)聯(lián)動。后面他們遇到過擬合時第一反應(yīng)是調(diào)低學(xué)習(xí)率結(jié)果越調(diào)越怪。實際上LoRA訓(xùn)練中epoch、batch size和學(xué)習(xí)率是綁定在一起的你把batch size翻倍等價于每個step看到的樣本數(shù)量變多梯度更穩(wěn)此時學(xué)習(xí)率可以適當(dāng)調(diào)高你把epoch從1.0提到3.0模型會在同一條數(shù)據(jù)上反復(fù)學(xué)習(xí)多輪更容易過擬合。我的調(diào)參習(xí)慣是先用2.0e-4的學(xué)習(xí)率、3個epoch、batch 2跑通然后看驗證集效果如果過擬合先降epoch到1.5到2.0而不是動學(xué)習(xí)率如果欠擬合再考慮提高rank到32或加大數(shù)據(jù)集。一步一步來每次只動一個變量效果可解釋性最強。微調(diào)這事最忌諱同時亂試一堆參數(shù)最后連哪個改動起了作用都不知道。7.4 基座模型下載慢的解決辦法Qwen2.5-VL-4B-Instruct的權(quán)重文件加起來大約9GB從Hugging Face拉取時經(jīng)常被網(wǎng)絡(luò)問題勸退。這也是很多人卡在微調(diào)門前最后一公里的地方。建議直接用ModelScope在國內(nèi)的鏡像站下載速度能快幾十倍。下載下來的目錄結(jié)構(gòu)和Hugging Face一致LLaMA-Factory也支持直接讀取。pip install modelscope modelscope download --model Qwen/Qwen2.5-VL-4B-Instruct --local_dir ./Qwen2.5-VL-4B-Instruct下載完成后把YAML里的model_name_or_path改成這個本地目錄路徑即可。這樣之后每次訓(xùn)練都不用再請求外網(wǎng)離線環(huán)境也能跑。8. 微調(diào)之外私有化部署和效果持續(xù)迭代訓(xùn)練出效果只是閉環(huán)的開始真要落地使用還得考慮部署和持續(xù)迭代。合并好的模型可以直接用vLLM起一個OpenAI兼容接口vllm serve ./models/qwen25vl4b_final \ --task chat \ --dtype bfloat16 \ --max-model-len 8192 \ --limit-mm-per-prompt image1這樣起服務(wù)之后你原有調(diào)用OpenAI視覺接口的代碼幾乎不用改只需要把base_url指到本地端口。整套鏈路從訓(xùn)練到部署也就一百多行命令的事。這也是為什么我一開始就說“微調(diào)Qwen2.5-VL太簡單了”——它簡單的背后是模型底子、工具鏈和部署生態(tài)三方面同時成熟的結(jié)果。另外一個容易被忽略的點微調(diào)不是一次性的。模型在業(yè)務(wù)里跑一段時間后你會積累一批新的“bad case”數(shù)據(jù)。把這些bad case定期補充進(jìn)訓(xùn)練集重新跑一輪LoRA模型的持續(xù)進(jìn)化能力才算建立起來。我一般是一個月迭代一輪每次只加幾百條真實業(yè)務(wù)數(shù)據(jù)模型在之前犯過的錯誤上會越來越穩(wěn)。我在實際操作中最大的體會是多模態(tài)LoRA微調(diào)已經(jīng)被工具鏈從“科研任務(wù)”變成了“工程任務(wù)”。你能投入多少精力去整理數(shù)據(jù)、設(shè)計評測決定了微調(diào)效果的上限。而那些看起來高深莫測的模型結(jié)構(gòu)和訓(xùn)練技巧反而不是瓶頸——至少對4B這個量級的模型來說確實是這樣。