大模型蒸餾、大模型微調、RAG

前言:

有很多同學想學習大模型開發,又無從下手,網上一搜,鋪天蓋地的付費課程。又不想當韭菜,打破認知障礙,通過自學,改變自己,改變世界!

一、大模型蒸餾、微調、RAG的適用場景

一、技術特性對比

  1. ?模型蒸餾?

    • ?適用場景?:需要將大模型壓縮為輕量級部署版本時(如移動端/邊緣設備),或需快速復現大模型核心能力但計算資源有限時?1。
    • ?優勢?:顯著降低推理成本,保留教師模型80%以上能力(如Qwen3-4B蒸餾后性能接近Qwen2.5-72B)?
  2. ?全參數微調?

    • ?適用場景?:需模型掌握特定領域知識(如醫療診斷、金融研報分析)或調整輸出風格(如客服話術定制)?
    • ?優勢?:直接優化模型權重,實現領域專業化(如醫療大模型微調后診斷準確率提升15%)?
  3. ?RAG(檢索增強生成)?

    • ?適用場景?:處理動態更新數據(如企業實時業務文檔)或需透明引用來源的場景(如法律咨詢)?
    • ?優勢?:無需重新訓練,通過檢索外部知識庫即時更新信息(如金融數據更新周期從周級縮短至分鐘級)?

二、場景選擇決策樹

  1. ?數據動態性?

    • 高頻更新數據 → RAG(如新聞摘要生成)?
    • 靜態數據 → 微調或蒸餾(如古籍翻譯)?
  2. ?能力需求?

    • 基座模型不具備的特殊能力 → 微調(如醫療術語生成)?
    • 通用能力增強 → 蒸餾(如多語言支持)?
  3. ?成本約束?

    • 低預算/快速迭代 → RAG(檢索成本僅為微調的1/10)?
    • 長期穩定需求 → 微調(一次性投入換取持續性能)?

三、混合應用案例

  • 金融風控系統?:

  • RAG實時檢索監管政策 + 微調模型生成合規報告?
  • ?智能客服?:

  • 蒸餾模型處理常規咨詢 + LoRA微調實現品牌話術適配?

二、微調模型LoRA

論文原文:https://arxiv.org/abs/2106.0968

LoRA是什么

LORA (Low-Rank Adaptation) 微調是一種針對大規模預訓練模型的優化技術,用于在較少計算資源和數據的情況下,對這些模型進行有效微調。

LORA通過引入低秩矩陣來減少模型參數的更新量,進而顯著降低訓練的計算開銷,同時保持微調的性能。由于LLM參數量巨大,直接微調耗費大量資源,LORA的做法是凍結模型的絕大部分參數,只更新很小一部分參數。這就像修車時不需要重造整輛車,而是只修理一些特定的部件。

矩陣的秩是指矩陣中線性無關行或列的最大數量,低秩矩陣表示矩陣的秩較低。

LoRa的使用小技巧

  • 進行LoRA高效的模型微調,重點是保持參數尺寸最小化。

  • 使用PEFT庫來實現LORA,避免復雜的編碼需求。

  • 將LORA適應擴展到所有線性層,增強整體模型的能力。

  • 保持偏置層歸一化可訓練,因為它們對模型的適應性至關重要,并且不需要低秩適應。

  • 應用量化低秩適應 (QLORA)以節省GPU顯存并訓練模型,從而能夠訓練更大的模型。

三、ms-swift?

github : https://github.com/modelscope/ms-swift


論文:https://arxiv.org/abs/2408.05517


Swift3.x中文文檔 https://swift.readthedocs.io/zh-cn/latest/


魔搭社區官網: https://modelscope.cn/home

ms-swift是什么?

ms-swift是魔搭社區提供的大模型與多模態大模型微調部署框架,現已支持450+大模型與150+多模態大模型的訓練(預訓練、微調、人類對齊)、推理、評測、量化與部署。

其中大模型包括:Qwen2.5、InternLM3、GLM4、Llama3.3、Mistral、DeepSeek-R1、Yi1.5、TeleChat2、Baichuan2、Gemma2等模型;

多模態大模型包括:Qwen2.5-VL、Qwen2-Audio、Llama3.2-Vision、Llava、InternVL2.5、MiniCPM-V-2.6、GLM4v、Xcomposer2.5、Yi-VL、DeepSeek-VL2、Phi3.5-Vision、GOT-OCR2等模型。

🍔 除此之外,ms-swift匯集了最新的訓練技術,包括LoRA、QLoRA、Llama-Pro、LongLoRA、GaLore、Q-GaLore、LoRA+、LISA、DoRA、FourierFt、ReFT、UnSloth、和Liger等輕量化訓練技術,以及DPO、GRPO、RM、PPO、KTO、CPO、SimPO、ORPO等人類對齊訓練方法。

ms-swift支持使用vLLM和LMDeploy對推理、評測和部署模塊進行加速,并支持使用GPTQ、AWQ、BNB等技術對大模型進行量化。ms-swift還提供了基于Gradio的Web-UI界面及豐富的最佳實踐。
?

為什么選擇ms-swift?

🍎 模型類型:支持450+純文本大模型、150+多模態大模型以及All-to-All全模態模型、序列分類模型、Embedding模型訓練到部署全流程。
數據集類型:內置150+預訓練、微調、人類對齊、多模態等各種類型的數據集,并支持自定義數據集。
硬件支持:CPU、RTX系列、T4/V100、A10/A100/H100、Ascend NPU、MPS等。
🍊 輕量訓練:支持了LoRA、QLoRA、DoRA、LoRA+、ReFT、RS-LoRA、LLaMAPro、Adapter、GaLore、Q-Galore、LISA、UnSloth、Liger-Kernel等輕量微調方式。
分布式訓練:支持分布式數據并行(DDP)、device_map簡易模型并行、DeepSpeed ZeRO2 ZeRO3、FSDP等分布式訓練技術。
量化訓練:支持對BNB、AWQ、GPTQ、AQLM、HQQ、EETQ量化模型進行訓練。
RLHF訓練:支持純文本大模型和多模態大模型的DPO、GRPO、RM、PPO、KTO、CPO、SimPO、ORPO等人類對齊訓練方法。
🍓 多模態訓練:支持對圖像、視頻和語音不同模態模型進行訓練,支持VQA、Caption、OCR、Grounding任務的訓練。
界面訓練:以界面的方式提供訓練、推理、評測、量化的能力,完成大模型的全鏈路。
插件化與拓展:支持自定義模型和數據集拓展,支持對loss、metric、trainer、loss-scale、callback、optimizer等組件進行自定義。
🍉 工具箱能力:不僅提供大模型和多模態大模型的訓練支持,還涵蓋其推理、評測、量化和部署全流程。
推理加速:支持PyTorch、vLLM、LmDeploy推理加速引擎,并提供OpenAI接口,為推理、部署和評測模塊提供加速。
模型評測:以EvalScope作為評測后端,支持100+評測數據集對純文本和多模態模型進行評測。
模型量化:支持AWQ、GPTQ和BNB的量化導出,導出的模型支持使用vLLM/LmDeploy推理加速,并支持繼續訓練。
?

SWIFT安裝

# 推薦
pip install 'ms-swift'
# 使用評測
pip install 'ms-swift[eval]' -U
# 全能力
pip install 'ms-swift[all]' -U

源代碼安裝?

# pip install git+https://github.com/modelscope/ms-swift.git# 全能力
# pip install "git+https://github.com/modelscope/ms-swift.git#egg=ms-swift[all]"git clone https://github.com/modelscope/ms-swift.git
cd ms-swift
pip install -e .# 全能力
# pip install -e '.[all]'

以上安裝參考官網:SWIFT安裝 — swift 3.8.0.dev0 文檔

支持的硬件

運行環境

更多參考:https://github.com/modelscope/ms-swift/blob/main/requirements/install_all.sh

快速開始,微調:

10分鐘在單卡3090上對Qwen2.5-7B-Instruct進行自我認知微調:

# 22GB
CUDA_VISIBLE_DEVICES=0 \
swift sft \--model Qwen/Qwen2.5-7B-Instruct \--train_type lora \--dataset 'AI-ModelScope/alpaca-gpt4-data-zh#500' \'AI-ModelScope/alpaca-gpt4-data-en#500' \'swift/self-cognition#500' \--torch_dtype bfloat16 \--num_train_epochs 1 \--per_device_train_batch_size 1 \--per_device_eval_batch_size 1 \--learning_rate 1e-4 \--lora_rank 8 \--lora_alpha 32 \--target_modules all-linear \--gradient_accumulation_steps 16 \--eval_steps 50 \--save_steps 50 \--save_total_limit 2 \--logging_steps 5 \--max_length 2048 \--output_dir output \--system 'You are a helpful assistant.' \--warmup_ratio 0.05 \--dataloader_num_workers 4 \--model_author swift \--model_name swift-robot

我這里用阿里魔塔社區的免費試用環境:

小貼士:

  • 如果要使用自定義數據集進行訓練,你可以參考這里組織數據集格式,并指定--dataset <dataset_path>
  • --model_author--model_name參數只有當數據集中包含swift/self-cognition時才生效。
  • 如果要使用其他模型進行訓練,你只需要修改--model <model_id/model_path>即可。
  • 默認使用ModelScope進行模型和數據集的下載。如果要使用HuggingFace,指定--use_hf true即可。

訓練完成后,使用以下命令對訓練后的權重進行推理:

  • 這里的--adapters需要替換成訓練生成的last checkpoint文件夾。由于adapters文件夾中包含了訓練的參數文件args.json,因此不需要額外指定--model--system,swift會自動讀取這些參數。如果要關閉此行為,可以設置--load_args false
# 使用交互式命令行進行推理
CUDA_VISIBLE_DEVICES=0 \
swift infer \--adapters output/vx-xxx/checkpoint-xxx \--stream true \--temperature 0 \--max_new_tokens 2048
# merge-lora并使用vLLM進行推理加速
CUDA_VISIBLE_DEVICES=0 \
swift infer \--adapters output/vx-xxx/checkpoint-xxx \--stream true \--merge_lora true \--infer_backend vllm \--vllm_max_model_len 8192 \--temperature 0 \--max_new_tokens 2048

最后,使用以下命令將模型推送到ModelScope:

CUDA_VISIBLE_DEVICES=0 \
swift export \--adapters output/vx-xxx/checkpoint-xxx \--push_to_hub true \--hub_model_id '<your-model-id>' \--hub_token '<your-sdk-token>' \--use_hf false

Web-UI

我這里用阿里魔塔社區的免費試用環境:

swift web-ui --lang zh

啟動后,在瀏覽器訪問,都可以在界面上操作了!

導出與推送

https://swift.readthedocs.io/zh-cn/latest/Instruction/%E5%AF%BC%E5%87%BA%E4%B8%8E%E6%8E%A8%E9%80%81.html

推送模型

SWIFT支持將訓練/量化的模型重新推送到ModelScope/HuggingFace。默認推送到ModelScope,你可以指定--use_hf?true推送到HuggingFace。

swift export \--model output/vx-xxx/checkpoint-xxx \--push_to_hub true \--hub_model_id '<model-id>' \--hub_token '<sdk-token>' \--use_hf false

小貼士:

  • 你可以使用--model?<checkpoint-dir>或者--adapters?<checkpoint-dir>指定需要推送的checkpoint目錄,這兩種寫法在推送模型場景沒有差異。

  • 推送到ModelScope時,你需要確保你已經注冊了魔搭賬號,你的SDK token可以在該頁面中獲取。推送模型需確保sdk token的賬號具有model_id對應組織的編輯權限。推送模型將自動創建對應model_id的模型倉庫(如果該模型倉庫不存在),你可以使用--hub_private_repo?true來自動創建私有的模型倉庫。

寫在結尾:

? ? ? ?引用魯迅先生的《秋夜》中的一句話:“我家后院有兩棵樹,一棵是棗樹,另一棵也是棗樹”,在這個浮躁的社會,即使你當下的內心是彷徨、孤寂、苦悶的,每一個在時代洪流中掙扎卻依然挺立的人?。在這個浮躁的時代,我們或許無法改變世界,但至少可以像棗樹一樣——?在沉默中生長,在黑暗中抗爭?。

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

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

相關文章

25高教社杯數模國賽【E題保姆級思路+問題分析】

注&#xff1a;本內容由”數模加油站“ 原創出品&#xff0c;雖無償分享&#xff0c;但創作不易。 歡迎參考teach&#xff0c;但請勿抄襲、盜賣或商用。 E 題 AI輔助智能體測 《國家學生體質健康標準》的頒布&#xff0c;有效地促進了大中小學生關注自身體質健康的發展&#xf…

基于單片機車內換氣溫度檢測空氣質量檢測系統Proteus仿真(含全部資料)

全套資料包含&#xff1a;Proteus仿真源文件keil C語言源程序AD原理圖流程圖元器件清單說明書等 資料下載&#xff1a; 通過網盤分享的文件&#xff1a;資料分享 鏈接: 百度網盤 請輸入提取碼 提取碼: tgnu 目錄 資料下載&#xff1a; Proteus仿真功能 項目文件資料&#…

MySQL子查詢的分類講解與實戰

精選專欄鏈接 &#x1f517; MySQL技術筆記專欄Redis技術筆記專欄大模型搭建專欄Python學習筆記專欄深度學習算法專欄 歡迎訂閱&#xff0c;點贊&#xff0b;關注&#xff0c;每日精進1%&#xff0c;與百萬開發者共攀技術珠峰 更多內容持續更新中&#xff01;希望能給大家帶來…

Leetcode 206. 反轉鏈表 迭代/遞歸

原題鏈接&#xff1a;Leetcode 206. 反轉鏈表 解法一&#xff1a;迭代 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* …

C++11新特性 | 歡迎來到現代C++的世界!

左值與右值 左值與右值的概念 可以被取地址的值為左值&#xff08;left value&#xff0c;簡稱lvalue&#xff09;&#xff0c;否則為右值&#xff08;right value&#xff0c;簡稱rvalue&#xff09;。 常見的左值、右值例子&#xff1a; // >>>>>>> 左值…

因為對象裝箱拆箱導致的空指針異常

今天業務突然提了個事件單&#xff0c;客戶添加承租人一直報錯&#xff0c;但是很奇怪&#xff0c;報錯信息是空的二話不說&#xff0c;先跟API組要了接口和參數&#xff0c;然后看日志然鵝&#xff0c;這個接口并沒有打印日志&#xff0c;只有一個e.printStackTrace()然后靜下…

Rust 在 Windows 環境下交叉編譯其他操作系統可執行文件的詳細指南

前言&#xff1a;為什么需要交叉編譯&#xff1f; 想象一下這樣的場景&#xff1a;你在 Windows 電腦上開發了一個 Rust 程序&#xff0c;希望它能在 Linux 服務器上運行&#xff0c;或者在朋友的 macOS 電腦上測試 —— 總不能為了編譯不同系統的版本&#xff0c;專門買一臺 …

Ubuntu系統配置鏡像源

要修改的文件 /etc/apt/sources.list操作步驟 1. 備份原文件 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak2. 編輯文件 sudo nano /etc/apt/sources.list3. 清空文件內容&#xff0c;填入以下內容 先獲取Ubuntu版本代號&#xff1a; lsb_release -cs然后根據版本填…

【Spring Cloud Alibaba】Sentinel(一)

【Spring Cloud Alibaba】Sentinel&#xff08;一&#xff09;1. 簡介2. 服務雪崩1. 簡介 Sentinel 是阿里巴巴開源的分布式系統的流量防護組件&#xff0c;主要用來做流量控制、熔斷降級、系統保護。它的定位類似于 Hystrix&#xff0c;但更側重在 流量治理 上。目前在微服務…

Delphi 5 操作Word表格選區問題解析

在 Delphi 5 中操作 Word 時&#xff0c;您遇到的 Selection.MoveDown 方法選中整行而不是僅移動一行的原因與 Word 的選擇機制和單元格內部結構有關。以下是詳細解釋和解決方案&#xff1a;問題分析單元格的選區范圍&#xff1a;當使用 .Cell(r, c).Select 選中單元格時&#…

小米fastboot不能被電腦識別但手機正常使用模式時能被電腦識別

小米手機USB連接電腦不識別解決方法 – MIUI歷史版本 小米手機USB連接電腦不識別解決方法 問題經驗 手機連接電腦通常會自動安裝驅動&#xff0c;如果驅動安裝失敗或是電腦不能識別手機設備&#xff0c;可嘗試下面方法。 1. 嘗試換根 USB 數據線&#xff0c;最好是手機原…

Git 版本管理工具基本操作匯總—命令總結

通常&#xff0c;很多朋友在使用 Git 的時候都會直接用 IDE 中集成的插件或者自帶的工具等來實現代碼的拉取、提交、合并以及其他操作&#xff0c;當然這肯定也是可以的&#xff0c;但是長期這樣子操作&#xff0c;我們就會忽略掉 Git 業務運行的底層邏輯。那么&#xff0c;我這…

自學嵌入式第三十三天:網絡編程-UDP

一、OSI模型(open system interconnect)開放系統互聯模型&#xff0c;分為7層應用層&#xff1a;為網絡用戶提供各種服務&#xff0c;例如電子郵件、文件傳輸等&#xff1b;表示層&#xff1a;為不同主機間的通信提供統一的數據表示形式。加密解密&#xff0c;壓縮&#xff1b;…

A*(Astar)算法詳解與應用

算法背景A*&#xff08;A-Star&#xff09;算法是一種在圖形平面上&#xff0c;有多個節點的路徑中&#xff0c;求出最低通過成本的算法。其歷史可以追溯到早期的圖搜索算法&#xff0c;如Dijkstra算法和貪心最佳優先搜索&#xff08;Greedy Best-First Search&#xff09;。是…

word刪除指定頁面

常規程序因為wps的 .docx 文件是基于段落和節的結構&#xff0c;而不是“物理頁”&#xff0c;所以無法直接按“第幾頁”刪除在普通程序里面無法讀取到他的頁碼&#xff0c;但是在宏編程里面他能讀取到頁碼&#xff0c;我們就根據宏編程來這樣刪除。程序會自動打開選擇要刪除的…

RK3568平臺開發系列講解:瑞芯微平臺4G模塊篇移植

更多內容可以加入Linux系統知識庫套餐(教程+視頻+答疑) ??返回專欄總目錄 文章目錄 一、硬件圖片 二、功能宏 三、增加PID/VID 支持 3.1、usb_device_id 結構體 3.2、usb_device_id 的注冊 沉淀、分享、成長,讓自己和他人都能有所收獲!?? 一、硬件圖片 目標: 結果…

面試 (一)

目錄 1. HashMap是怎么解決沖突的 是用什么數據結構實現的 2. 為什么hashmap的初始長度為16 3. 多線程的核心參數 4. 多線程怎么工作的 5. CISCS是怎么實現的 6. JUC知識 7. C和java的區別 8. JVM底層編譯的東西 9. 公平鎖和非公平鎖 10. 有人惡意攻擊你的平臺每秒發送…

計算機畢設選題:基于Python+Django的健康飲食管理系統設計【源碼+文檔+調試】

精彩專欄推薦訂閱&#xff1a;在 下方專欄&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f496;&#x1f525;作者主頁&#xff1a;計算機畢設木哥&#x1f525; &#x1f496; 文章目錄 一、項目介紹二…

vscode terminal遠程連接linux服務器GUI圖形界面

看了很多教程&#xff0c;不清楚具體原理&#xff0c;但總之自己是摸索出來了&#xff1a; 1.下載vcxsrv&#xff0c;最后雙擊exe程序啟動&#xff1a; 每一步的配置如下&#xff1a;2.修改配置 vscode中按下“ctrlshiftp”&#xff0c;然后輸入“Remote-SSH: Open SSH Configu…