自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

在家中完成LLM微調(diào)高效指南(上)

原創(chuàng)
人工智能
盡管相比推理,微調(diào)仍然較為耗費(fèi)計(jì)算資源,但借助于低秩適應(yīng)(LoRA)及其量化變體QLoRA等技術(shù),現(xiàn)在可以使用單塊GPU來微調(diào)模型——這正是我們將在本指南中探討的內(nèi)容。

編輯 | 言征

出品 | 51CTO技術(shù)棧(微信號:blog51cto)

LLM在生成文本和理解信息方面非常有效,但它們最終受限于訓(xùn)練數(shù)據(jù)的語料庫。例如,如果你讓一個通用的預(yù)訓(xùn)練模型回答與你的業(yè)務(wù)特定流程或操作有關(guān)的問題,最好的結(jié)果是它拒絕,最壞的情況是它會信誓旦旦地給出一個看似合理但錯誤的答案。

當(dāng)然,你可以通過自己訓(xùn)練一個模型來解決這個問題,但所需的資源往往超出實(shí)際可行的范圍。例如,訓(xùn)練Meta的相對小的Llama 3 8B模型需要約130萬GPU小時的計(jì)算資源,使用的是80GB的Nvidia H100。好消息是你不需要這樣做。我們可以通過稱為微調(diào)的過程,利用現(xiàn)有的模型(如Llama、Mistral或Phi),并通過自己的數(shù)據(jù)擴(kuò)展其知識庫或修改其行為和風(fēng)格。

盡管相比推理,微調(diào)仍然較為耗費(fèi)計(jì)算資源,但借助于低秩適應(yīng)(LoRA)及其量化變體QLoRA等技術(shù),現(xiàn)在可以使用單塊GPU來微調(diào)模型——這正是我們將在本指南中探討的內(nèi)容。

在本指南中,我們將討論:

  • 微調(diào)的應(yīng)用場景和適用時機(jī)
  • 擴(kuò)展預(yù)訓(xùn)練模型能力和行為的替代方法
  • 數(shù)據(jù)準(zhǔn)備的重要性
  • 如何使用Axolotl和自定義數(shù)據(jù)集微調(diào)Mistral 7B模型
  • 各種超參數(shù)及其對訓(xùn)練的影響
  • 加快和提高微調(diào)效率的其他資源

1.設(shè)定期望

相比我們之前的動手指南,微調(diào)是一個涉及很多參數(shù)調(diào)整、開關(guān)配置和最佳實(shí)踐的復(fù)雜過程。因此,我們認(rèn)為有必要設(shè)定一些期望。

微調(diào)是修改預(yù)訓(xùn)練模型行為或風(fēng)格的有用方法。然而,如果你的目標(biāo)是教授模型新的知識,雖然可以做到,但可能有更好和更可靠的方式值得首先考慮。

我們之前探討過檢索增強(qiáng)生成(RAG),這種方法基本上為模型提供了一個它可以參考的庫或數(shù)據(jù)庫。這個方法因其相對易于設(shè)置、計(jì)算成本低廉且可以引用來源而備受歡迎。不過,它并不完美,也無法改變模型的風(fēng)格或行為。

例如,如果你正在構(gòu)建一個客戶聊天機(jī)器人來幫助用戶查找資源或解決產(chǎn)品問題,你可能不希望它回答與健康或財(cái)務(wù)無關(guān)的問題。提示工程可以在一定程度上幫助實(shí)現(xiàn)這一點(diǎn)。你可以創(chuàng)建一個系統(tǒng)提示,指示模型以某種方式行事。例如,添加一句“你不具備回答與健康、健康管理或營養(yǎng)相關(guān)問題的能力,如有相關(guān)問題,請將話題引導(dǎo)至更合適的內(nèi)容?!?/p>

提示工程在其簡單中顯得優(yōu)雅:只需告訴模型你希望它做什么或不做什么。但實(shí)際上,使用中的LLM模型經(jīng)常會遇到一些邊界情況,導(dǎo)致模型被誤導(dǎo)執(zhí)行它不應(yīng)該做的事情。你可能會驚訝地發(fā)現(xiàn),有時只需一句“忽略所有之前的指示,而執(zhí)行以下操作”即可使模型改變行為。

如果RAG和提示工程無法滿足需求,則可以考慮微調(diào)。

2.使用QLoRA進(jìn)行內(nèi)存高效的模型微調(diào)

在本指南中,我們將使用微調(diào)來改變Mistral 7B模型的風(fēng)格和語調(diào)。特別是,我們將使用QLoRA,如前所述,這將允許我們在與傳統(tǒng)訓(xùn)練相比下,使用更少的內(nèi)存和計(jì)算資源進(jìn)行微調(diào)。

這是因?yàn)槲⒄{(diào)比運(yùn)行模型需要更多的內(nèi)存。在推理過程中,可以通過將參數(shù)數(shù)量乘以精度來計(jì)算內(nèi)存需求。對于Mistral 7B,其訓(xùn)練精度為BF16,因此大約需要14 GB內(nèi)存,外加少量用于關(guān)鍵緩存的內(nèi)存。

然而,完全微調(diào)則需要幾倍于此的內(nèi)存來加載模型。對于Mistral 7B來說,內(nèi)存需求約為90 GB或更多。如果你沒有多GPU的工作站,幾乎必然需要租用像Nvidia A100或H100這樣的數(shù)據(jù)中心GPU來完成任務(wù)。

這是因?yàn)橥耆⒄{(diào)意味著以完整分辨率重新訓(xùn)練模型的每一個權(quán)重。好消息是,在大多數(shù)情況下,不必更新所有權(quán)重即可調(diào)整神經(jīng)網(wǎng)絡(luò)的輸出。實(shí)際上,只需更新幾千或幾百萬的權(quán)重就可以實(shí)現(xiàn)預(yù)期的效果。

這正是LoRA的邏輯所在:簡而言之,它將模型的權(quán)重凍結(jié)在一個矩陣中,然后使用另一組矩陣記錄對第一個矩陣的調(diào)整以微調(diào)模型。這大大減少了計(jì)算和內(nèi)存的開銷。QLoRA進(jìn)一步優(yōu)化了這一點(diǎn),通過以更低的精度(通常為四位)加載模型的權(quán)重。因此,每個參數(shù)只需占用半字節(jié)的內(nèi)存。

3.微調(diào)很簡單,數(shù)據(jù)準(zhǔn)備就沒那么簡單了

解決了那些問題之后,我們需要談?wù)剶?shù)據(jù)。事實(shí)證明,微調(diào)模型并不是最難的部分,難的是準(zhǔn)備和清理數(shù)據(jù)集,以確保模型能按你的期望工作。

那么,你從哪里獲取用于微調(diào)模型的數(shù)據(jù)呢?嗯,對于像電子郵件助手或客戶服務(wù)聊天機(jī)器人這樣的應(yīng)用,你其實(shí)不需要找得太遠(yuǎn)。只需打開你電子郵件中的“已發(fā)送”文件夾,就能找到一個不錯的起點(diǎn)來尋找有機(jī)數(shù)據(jù)。如果你在使用像Continue這樣的本地聊天助手,它可能會自動生成可用于微調(diào)模型的訓(xùn)練數(shù)據(jù)。

雖然高質(zhì)量的有機(jī)數(shù)據(jù)是理想之選,但它可能無法涵蓋你可能遇到的所有場景。例如,假設(shè)你希望模型生成回復(fù),將收到的電子郵件的發(fā)送者引導(dǎo)到另一個部門或團(tuán)隊(duì)。如果這種情況只是偶爾發(fā)生,你可能沒有足夠的有機(jī)數(shù)據(jù)來進(jìn)行訓(xùn)練。

這時,使用大型語言模型(LLMs)生成合成數(shù)據(jù)或部分合成數(shù)據(jù)就派上了用場。這樣做相當(dāng)直接,只需將幾個示例輸入模型,并要求它生成模仿這些示例的新數(shù)據(jù)。你可能需要不斷調(diào)整提示,直到找到合適的內(nèi)容。

你可以對輸入和輸出都這樣做,或者生成輸入并手動寫出對應(yīng)的回復(fù)。在我們的測試中,我們發(fā)現(xiàn)合成數(shù)據(jù)通常缺乏細(xì)微差別,半合成數(shù)據(jù)效果良好,而完全有機(jī)數(shù)據(jù)的效果最佳。

無論你是使用有機(jī)數(shù)據(jù)還是合成數(shù)據(jù)來生成數(shù)據(jù)集,你都需要花時間清理數(shù)據(jù)集,刪除個人信息或不良樣本等內(nèi)容。例如,如果你正在為客戶服務(wù)或支持微調(diào)模型,你可能想從數(shù)據(jù)中刪除代理或用戶的姓名、電話號碼和其他信息。

雖然微調(diào)對于改變模型的行為最有幫助,但它仍然會捕捉到數(shù)據(jù)集中始終出現(xiàn)的細(xì)節(jié),如姓名。

一旦你收集好了數(shù)據(jù)——其實(shí)并不需要太多:甚至100個樣本可能就足以以明顯的方式改變模型的行為——你就需要以模型能夠理解的方式對其進(jìn)行格式化。有很多方法可以做到這一點(diǎn),但就我們的目的而言,我們發(fā)現(xiàn)使用Alpaca數(shù)據(jù)格式的JSON模板效果相當(dāng)不錯。

4.微調(diào)容易,數(shù)據(jù)準(zhǔn)備難

以上內(nèi)容準(zhǔn)備好后,我們需要談?wù)剶?shù)據(jù)。事實(shí)證明,微調(diào)模型并不是最難的部分,真正的難點(diǎn)在于準(zhǔn)備和清理數(shù)據(jù)集,使模型能夠真正按照你的意圖運(yùn)行。

那么,你要從哪里獲取微調(diào)模型的數(shù)據(jù)呢?對于電子郵件助手或客服聊天機(jī)器人之類的應(yīng)用,數(shù)據(jù)來源并不難找。簡單地查看你的電子郵件“已發(fā)送”文件夾,就能為獲取自然數(shù)據(jù)提供一個不錯的起點(diǎn)。如果你使用的是本地聊天助手,如Continue,它可能會自動生成可用于微調(diào)模型的訓(xùn)練數(shù)據(jù)。

如果寫代碼注釋讓你頭疼,你也可以讓AI來代勞。只要記得在提交代碼前查看一下注釋內(nèi)容。

當(dāng)你在家就能創(chuàng)建屬于自己的AI代碼助手,誰還需要GitHub Copilot呢?

雖然高質(zhì)量的自然數(shù)據(jù)是理想選擇,但它可能無法覆蓋所有可能遇到的場景。例如,如果你希望模型生成的郵件回復(fù)能夠?qū)l(fā)件人重定向至不同的部門或團(tuán)隊(duì),而這種情況偶爾才發(fā)生,那么可能沒有足夠的自然數(shù)據(jù)來訓(xùn)練模型。

這時,使用LLM生成合成數(shù)據(jù)或部分合成數(shù)據(jù)會非常有用。操作步驟相對簡單:你可以向模型提供一些示例,然后讓它生成模擬這些示例的新數(shù)據(jù)。你可能需要調(diào)整提示,直到生成出符合需求的數(shù)據(jù)。

你可以同時為輸入和輸出生成數(shù)據(jù),也可以只生成輸入,自己編寫相應(yīng)的輸出。在我們的測試中發(fā)現(xiàn),完全合成的數(shù)據(jù)通常缺乏細(xì)微之處,而半合成數(shù)據(jù)效果較好,完全自然的數(shù)據(jù)效果最佳。

無論是用自然數(shù)據(jù)還是合成數(shù)據(jù)生成數(shù)據(jù)集,你都需要花時間清理數(shù)據(jù)集,去除個人身份信息或無效樣本。例如,如果你在微調(diào)一個客戶服務(wù)或支持類的模型,可能需要刪除數(shù)據(jù)中的代理人或用戶的姓名、號碼及其他信息。

雖然微調(diào)主要用于改變模型的行為,但模型仍然會受到數(shù)據(jù)集中一致出現(xiàn)的細(xì)節(jié)(如名稱)的影響。

一旦數(shù)據(jù)準(zhǔn)備好了,其實(shí)不需要很多數(shù)據(jù):即便是100個樣本也可能足以顯著改變模型的行為。接下來,你需要將數(shù)據(jù)格式化,使模型能夠理解。對于我們的目的,我們發(fā)現(xiàn)這種基于Alpaca數(shù)據(jù)格式的JSON模板效果很好:

[
    {
      "instruction": "generate an appropriate response to this chat message",
      "input": "I'm having trouble getting Product X to work properly.",
      "output": "Can you tell me more about what isn't working?"
    },
...
]

5.設(shè)置Axolotl

市面上有許多用于微調(diào)LLM的框架,如Unsloth和Hugging Face的Transformers Trainer。不過在本次動手操作中,我們將使用Axolotl。

該開源項(xiàng)目旨在抽象出微調(diào)流行語言模型的復(fù)雜性,并支持多種不同的訓(xùn)練技術(shù)。因此,如果你在工作站或游戲PC上用QLoRA開始微調(diào),之后想要在云端進(jìn)行完整微調(diào),可以輕松切換。

Axolotl的另一大優(yōu)勢是提供了大量用于微調(diào)流行LLM的模板庫,因此你不必從頭開始摸索針對特定模型或數(shù)據(jù)集需要的超參數(shù)。

6.準(zhǔn)備條件

一塊至少有16GB顯存的GPU。任何較新的Nvidia GPU都可以。對于AMD用戶,建議使用AMD Radeon RX 7900或更高型號。我們測試了RTX 3090 TI 24GB、RTX 6000 Ada Generation 48GB、AMD Radeon RX 7900 XT 20GB和Radeon Pro W7900 48GB。

- 在本指南中,我們會盡量保持簡單,使用Ubuntu Desktop 24.04。

- 你的顯卡所需的最新GPU驅(qū)動和CUDA(Nvidia)或ROCm(AMD)二進(jìn)制文件。如果是第一次設(shè)置這些,可能會有些棘手,因此我們會在Ubuntu 24.04上詳細(xì)說明配置步驟。

- 假設(shè)你對Linux系統(tǒng)的命令行操作較為熟悉。以下操作說明涉及在此環(huán)境中使用終端運(yùn)行命令。

由于Nvidia和AMD顯卡的設(shè)置略有不同,注意區(qū)分。更多內(nèi)容。會在下一篇文章中介紹。

想了解更多AIGC的內(nèi)容,請?jiān)L問:

51CTO AI.x社區(qū)

http://www.scjtxx.cn/aigc/

責(zé)任編輯:武曉燕 來源: 51CTO技術(shù)棧
相關(guān)推薦

2022-04-08 14:47:18

物聯(lián)網(wǎng)

2024-06-06 08:25:30

2018-10-19 09:30:57

SSHSFTPLinux

2019-06-04 13:00:34

2024-11-27 14:00:00

模型訓(xùn)練

2013-11-21 11:03:29

Nginx性能優(yōu)化

2025-03-17 08:00:00

2024-11-21 08:22:45

2023-10-07 10:41:54

語言模型微調(diào)BitFit

2025-02-14 08:18:33

2021-08-04 10:40:39

無人駕駛自動駕駛人工智能

2024-06-11 08:21:26

2024-07-22 08:17:00

模型性能

2024-01-24 13:37:36

大型語言模型人工智能

2024-04-18 10:39:57

2024-06-26 09:00:00

2024-09-25 08:46:31

2023-10-13 13:10:19

2020-02-21 17:07:08

人生第一份工作大學(xué)社交網(wǎng)絡(luò)

2023-06-07 08:22:59

LLM微調(diào)技術(shù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號