版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
浙江省普通本科高?!笆奈濉敝攸c(diǎn)教材建設(shè)成果之一大語言模型基礎(chǔ)大語言模型基礎(chǔ)周蘇教授QQ:81505050第6章大模型開發(fā)組織人工智能正在成為我們?nèi)粘I钪胁豢苫蛉钡囊徊糠?。其中,深度學(xué)習(xí)模型尤其引人注目,而大語言模型更是當(dāng)下的熱門話題。所謂大模型開發(fā),是指建設(shè)以大模型為功能核心、通過其強(qiáng)大的理解能力和生成能力、結(jié)合特殊的數(shù)據(jù)或業(yè)務(wù)邏輯來提供獨(dú)特功能的應(yīng)用。開發(fā)大模型相關(guān)應(yīng)用,其技術(shù)核心雖然在大模型上,但一般通過調(diào)用API或開源模型來達(dá)成理解與生成,通過提示工程來實(shí)現(xiàn)大模型控制,因此,大模型是深度學(xué)習(xí)領(lǐng)域的集大成之作,大模型開發(fā)卻更多的是一個工程問題。圖6-1大模型開發(fā)要素第6章大模型開發(fā)組織大模型具有一些重要的特點(diǎn):(1)高準(zhǔn)確性:隨著模型參數(shù)的增加,模型通常能更好地學(xué)習(xí)和適應(yīng)各種數(shù)據(jù),從而提高其預(yù)測和生成的準(zhǔn)確性。(2)多功能性:大模型通常更為通用,能夠處理更多種類的任務(wù),而不僅限于特定領(lǐng)域。(3)持續(xù)學(xué)習(xí):大模型的巨大容量使其更適合從持續(xù)的數(shù)據(jù)流中學(xué)習(xí)和適應(yīng)新知識。第6章大模型開發(fā)組織01大模型開發(fā)流程02大模型的數(shù)據(jù)組織03分而治之的思想04分布式訓(xùn)練與策略目錄/CONTENTSPART01大模型開發(fā)流程在大模型開發(fā)中,我們一般不會去大幅度改動模型,不必將精力聚焦在優(yōu)化模型本身上,而是將大模型作為一個調(diào)用工具,通過提示工程、數(shù)據(jù)工程、業(yè)務(wù)邏輯分解等手段來充分發(fā)揮大模型能力,適配應(yīng)用任務(wù)。因此,大模型開發(fā)的初學(xué)者并不需要深入研究大模型內(nèi)部原理,而更需要掌握使用大模型的實(shí)踐技巧。6.1大模型開發(fā)流程以調(diào)用、發(fā)揮大模型作用為核心的大模型開發(fā)與傳統(tǒng)的人工智能開發(fā)在整體思路上有著較大的不同。大模型的兩個核心能力:指令理解與文本生成提供了復(fù)雜業(yè)務(wù)邏輯的簡單平替方案。在傳統(tǒng)的人工智能開發(fā)中,首先需要將復(fù)雜的業(yè)務(wù)邏輯進(jìn)行拆解,對于每一個子業(yè)務(wù)構(gòu)造訓(xùn)練數(shù)據(jù)與驗(yàn)證數(shù)據(jù),對于每一個子業(yè)務(wù)訓(xùn)練優(yōu)化模型,最后形成完整的模型鏈路來解決整個業(yè)務(wù)邏輯。然而,在大模型開發(fā)中,嘗試用提示工程來替代子模型的訓(xùn)練調(diào)優(yōu),通過提示鏈路組合來實(shí)現(xiàn)業(yè)務(wù)邏輯,用一個通用大模型+若干業(yè)務(wù)提示來完成任務(wù),從而將傳統(tǒng)的模型訓(xùn)練調(diào)優(yōu)轉(zhuǎn)變成了更簡單、輕松、低成本的提示設(shè)計(jì)調(diào)優(yōu)。6.1大模型開發(fā)流程在評估思路上,大模型開發(fā)與傳統(tǒng)人工智能開發(fā)有質(zhì)的差異。
傳統(tǒng)AI評估
LLM評估圖6-2大模型開發(fā)與傳統(tǒng)人工智能開發(fā)的不同6.1大模型開發(fā)流程傳統(tǒng)人工智能開發(fā)首先需要構(gòu)造訓(xùn)練集、測試集、驗(yàn)證集,通過在訓(xùn)練集上訓(xùn)練模型、在測試集上調(diào)優(yōu)模型、在驗(yàn)證集上最終驗(yàn)證模型效果來實(shí)現(xiàn)性能的評估。然而,大模型開發(fā)更敏捷、靈活,一般不會在初期顯式地確定訓(xùn)練集、驗(yàn)證集,由于不再需要訓(xùn)練子模型,我們直接從實(shí)際業(yè)務(wù)需求出發(fā)構(gòu)造小批量驗(yàn)證集,設(shè)計(jì)合理提示來滿足驗(yàn)證集效果。然后,不斷從業(yè)務(wù)邏輯中收集提示的壞情況,并將壞情況加入到驗(yàn)證集中,針對性優(yōu)化提示,最后實(shí)現(xiàn)較好的泛化效果。6.1大模型開發(fā)流程通常將大模型開發(fā)分解為以下幾個流程。圖6-3大模型開發(fā)流程6.1大模型開發(fā)流程(1)確定目標(biāo)。開發(fā)目標(biāo)即應(yīng)用場景、目標(biāo)人群、核心價(jià)值。對于個體開發(fā)者或小型開發(fā)團(tuán)隊(duì)而言,一般應(yīng)先設(shè)定最小化目標(biāo),從構(gòu)建一個最小可行性產(chǎn)品開始,逐步進(jìn)行完善和優(yōu)化。6.1大模型開發(fā)流程(2)設(shè)計(jì)功能。確定目標(biāo)后,需要設(shè)計(jì)應(yīng)用所要提供的功能,以及每一個功能的大體實(shí)現(xiàn)邏輯。雖然通過使用大模型簡化了業(yè)務(wù)邏輯的拆解,但是越清晰、深入的業(yè)務(wù)邏輯理解往往能帶來更好的提示效果。同樣,對于個體開發(fā)者或小型開發(fā)團(tuán)隊(duì)來說,先確定應(yīng)用的核心功能,然后延展設(shè)計(jì)核心功能的上下游功能;例如,我們想打造一款個人知識庫助手,那么核心功能就是結(jié)合個人知識庫內(nèi)容進(jìn)行問題的回答,其上游功能的用戶上傳知識庫、下游功能的用戶手動糾正模型回答就是必須要設(shè)計(jì)實(shí)現(xiàn)的子功能。6.1大模型開發(fā)流程(3)搭建整體架構(gòu)。目前,絕大部分大模型應(yīng)用都是采用特定數(shù)據(jù)庫+提示+通用大模型的架構(gòu)。需要針對所設(shè)計(jì)的功能,搭建項(xiàng)目的整體架構(gòu),實(shí)現(xiàn)從用戶輸入到應(yīng)用輸出的全流程貫通。一般情況下,推薦基于LangChain框架進(jìn)行開發(fā),這是一款使用大模型構(gòu)建強(qiáng)大應(yīng)用程序的工具,它提供了鏈、工具等架構(gòu)的實(shí)現(xiàn),可以基于LangChain進(jìn)行個性化定制,實(shí)現(xiàn)從用戶輸入到數(shù)據(jù)庫再到大模型最后輸出的整體架構(gòu)連接。6.1大模型開發(fā)流程(4)搭建數(shù)據(jù)庫。個性化大模型應(yīng)用需要有個性化的數(shù)據(jù)庫來支撐。由于大模型應(yīng)用需要進(jìn)行向量語義檢索,一般使用諸如Chroma向量數(shù)據(jù)庫。在該步驟中,需要收集數(shù)據(jù)并進(jìn)行預(yù)處理,再向量化存儲到數(shù)據(jù)庫中。數(shù)據(jù)預(yù)處理一般包括從多種格式向純文本的轉(zhuǎn)化,例如PDF、HTML、音視頻等,以及對錯誤數(shù)據(jù)、異常數(shù)據(jù)、臟數(shù)據(jù)進(jìn)行清洗。完成預(yù)處理后,需要進(jìn)行切片、向量化構(gòu)建出個性化數(shù)據(jù)庫。6.1大模型開發(fā)流程向量數(shù)據(jù)庫最早應(yīng)用于傳統(tǒng)人工智能和機(jī)器學(xué)習(xí)場景。大模型興起后,由于受大模型詞元數(shù)的限制,很多開發(fā)者傾向于將數(shù)據(jù)量龐大的知識、新聞、文獻(xiàn)、語料等先通過嵌入算法轉(zhuǎn)變?yōu)橄蛄繑?shù)據(jù),然后存儲在Chroma等向量數(shù)據(jù)庫中。當(dāng)用戶在大模型輸入問題后,將問題本身也嵌入轉(zhuǎn)化為向量,在向量數(shù)據(jù)庫中查找與之最匹配的相關(guān)知識,組成大模型的上下文,將其輸入給大模型,最終返回大模型處理后的文本給用戶,這種方式不僅降低大模型的計(jì)算量,提高響應(yīng)速度,也降低成本,并避免了大模型的詞元限制,是一種簡單高效的處理手段。此外,向量數(shù)據(jù)庫還在大模型記憶存儲等領(lǐng)域發(fā)揮其不可替代的作用。6.1大模型開發(fā)流程(5)提示工程。優(yōu)質(zhì)的提示對大模型能力具有極大影響,需要逐步迭代構(gòu)建優(yōu)質(zhì)的提示工程來提升應(yīng)用性能。在該步驟中,首先應(yīng)該明確提示設(shè)計(jì)的一般原則及技巧,構(gòu)建出一個源于實(shí)際業(yè)務(wù)的小型驗(yàn)證集,以此來滿足基本要求、具備基本能力的提示。6.1大模型開發(fā)流程(6)驗(yàn)證迭代。這在大模型開發(fā)中是極其重要的一步,一般指通過不斷發(fā)現(xiàn)壞的情況并針對性改進(jìn)提示工程來提升系統(tǒng)效果、應(yīng)對邊界情況。在完成上一步的初始化提示設(shè)計(jì)后,應(yīng)該進(jìn)行實(shí)際業(yè)務(wù)測試,探討邊界情況,找到壞的情況,并針對性分析提示存在的問題,從而不斷迭代優(yōu)化,直到達(dá)到一個較為穩(wěn)定、可以基本實(shí)現(xiàn)目標(biāo)的提示版本。6.1大模型開發(fā)流程(7)前后端搭建。完成提示工程及其迭代優(yōu)化之后,就完成了應(yīng)用的核心功能,可以充分發(fā)揮大模型的強(qiáng)大能力。接下來,需要搭建前后端,設(shè)計(jì)產(chǎn)品頁面,讓應(yīng)用能夠上線成為產(chǎn)品。前后端開發(fā)是非常經(jīng)典且成熟的領(lǐng)域,有兩種快速開發(fā)演示的框架:Gradio和Streamlit,可以幫助個體開發(fā)者迅速搭建可視化頁面實(shí)現(xiàn)演示上線。(8)體驗(yàn)優(yōu)化。完成前后端搭建后,應(yīng)用就可以上線體驗(yàn)了。接下來需要進(jìn)行長期的用戶體驗(yàn)跟蹤,記錄壞情況,與用戶負(fù)反饋,再針對性進(jìn)行優(yōu)化即可。6.1大模型開發(fā)流程PART02大模型的數(shù)據(jù)組織在設(shè)計(jì)、研發(fā)、運(yùn)行的過程中,大模型面臨的主要挑戰(zhàn)如下。(1)計(jì)算資源:訓(xùn)練和運(yùn)行大模型需要大量的計(jì)算資源,這可能限制了許多機(jī)構(gòu)和研究者使用它的能力。(2)環(huán)境影響:大規(guī)模模型的訓(xùn)練對能源的需求是巨大的,可能會對環(huán)境造成負(fù)面影響。(3)偏見和公正性:由于大模型通常從大量的互聯(lián)網(wǎng)文本中學(xué)習(xí),它們可能會吸收并再現(xiàn)存在于這些數(shù)據(jù)中的偏見。6.2大模型的數(shù)據(jù)組織盡管存在挑戰(zhàn),但研究者仍在積極尋找解決方法。例如,通過更高效的訓(xùn)練方法、結(jié)構(gòu)優(yōu)化等技術(shù)來降低能源消耗;或者通過更公正的數(shù)據(jù)收集和處理方法來減少模型偏見。大模型的研發(fā)流程涵蓋了從數(shù)據(jù)采集到模型訓(xùn)練的多個步驟。6.2大模型的數(shù)據(jù)組織數(shù)據(jù)采集是大模型項(xiàng)目的起點(diǎn),根據(jù)大模型訓(xùn)練的需求收集大量數(shù)據(jù)。這些數(shù)據(jù)可以有多種來源,如公開的數(shù)據(jù)集、公司內(nèi)部的數(shù)據(jù)庫、用戶生成的數(shù)據(jù)、傳感器數(shù)據(jù)等。數(shù)據(jù)的類型可以多樣,包括圖像、文本、聲音、視頻等。定義數(shù)據(jù)需求:確定需要收集什么樣的數(shù)據(jù)。這應(yīng)該基于問題陳述和項(xiàng)目目標(biāo)。需要理解你的問題是什么,然后決定哪種類型的數(shù)據(jù)(例如數(shù)字、類別、文本、圖像等)和哪些特定的特征可能對解決問題有幫助。找到數(shù)據(jù)源:確定數(shù)據(jù)來源。這可能包括公開的數(shù)據(jù)庫、在線資源,或者可以從公司內(nèi)部數(shù)據(jù)庫或系統(tǒng)中收集數(shù)據(jù)。在某些情況下,可能需要通過調(diào)查或?qū)嶒?yàn)收集新的數(shù)據(jù)。6.2.1數(shù)據(jù)采集數(shù)據(jù)收集:從選擇的數(shù)據(jù)源中收集數(shù)據(jù)。這涉及到從數(shù)據(jù)庫中導(dǎo)出數(shù)據(jù),使用API來收集在線數(shù)據(jù),或者使用特殊的數(shù)據(jù)采集設(shè)備(例如物聯(lián)網(wǎng))。數(shù)據(jù)存儲:將收集到的數(shù)據(jù)存儲在合適的地方,以便進(jìn)一步處理和分析。這可能涉及到設(shè)置數(shù)據(jù)庫或使用文件系統(tǒng)。檢查數(shù)據(jù)質(zhì)量:查看收集的數(shù)據(jù),確保其質(zhì)量滿足需求。需要檢查數(shù)據(jù)是否完整,是否有錯誤,是否有重復(fù)的數(shù)據(jù)等。6.2.1數(shù)據(jù)采集數(shù)據(jù)整理:如果數(shù)據(jù)來自多個來源,或者在一個大的數(shù)據(jù)集中,可能需要整理數(shù)據(jù),使其在一定的上下文中有意義。這包括對數(shù)據(jù)排序,或者將數(shù)據(jù)分組,或者將數(shù)據(jù)從多個源合并。數(shù)據(jù)采集是一個持續(xù)的過程,特別是對需要實(shí)時(shí)更新或處理新信息的項(xiàng)目。在整個數(shù)據(jù)采集過程中,需要關(guān)注數(shù)據(jù)的質(zhì)量和一致性,同時(shí)也要注意遵守?cái)?shù)據(jù)隱私和安全的相關(guān)規(guī)定。6.2.1數(shù)據(jù)采集收集到的原始數(shù)據(jù)可能含有噪聲、缺失值、錯誤數(shù)據(jù)等,所以要對數(shù)據(jù)進(jìn)行清洗。清洗后的數(shù)據(jù)要進(jìn)行一系列預(yù)處理操作,如歸一化、編碼轉(zhuǎn)換等,使其適合輸入到模型中。數(shù)據(jù)清洗和預(yù)處理是數(shù)據(jù)科學(xué)項(xiàng)目的重要步驟,它們有助于提高模型的性能并減少可能的錯誤。數(shù)據(jù)質(zhì)量檢查:這是數(shù)據(jù)清洗的第一步,其中涉及識別和處理數(shù)據(jù)集中的錯誤、重復(fù)值、缺失值和異常值。需要驗(yàn)證數(shù)據(jù)的完整性、一致性和準(zhǔn)確性,確保所有的記錄都是準(zhǔn)確的,與實(shí)際情況相符。6.2.2數(shù)據(jù)清洗和預(yù)處理處理缺失值:有多種方法可以處理數(shù)據(jù)集中的缺失值。這些方法包括:刪除包含缺失值的記錄;用特定值(如列的平均值、中位數(shù)或眾數(shù))填充缺失值;使用預(yù)測模型(如KNN近鄰分類或回歸)預(yù)測缺失值;或者使用一種標(biāo)記值來表示缺失值。處理重復(fù)值:如果數(shù)據(jù)集中存在重復(fù)的記錄,那么可能需要刪除這些重復(fù)的記錄。在一些情況下,重復(fù)的記錄可能是數(shù)據(jù)收集過程中的錯誤,但在其他情況下,重復(fù)的記錄可能是有意義的,所以需要根據(jù)具體情況來判斷。6.2.2數(shù)據(jù)清洗和預(yù)處理處理異常值:異常值是那些遠(yuǎn)離其他觀察值的值,這些值可能由測量錯誤或其他原因產(chǎn)生。處理異常值的方法包括:刪除異常值;使用統(tǒng)計(jì)方法(如四分位數(shù)間距法)將異常值替換為更合理的值;或者使用機(jī)器學(xué)習(xí)算法對其進(jìn)行預(yù)測。6.2.2數(shù)據(jù)清洗和預(yù)處理數(shù)據(jù)轉(zhuǎn)換:將數(shù)據(jù)轉(zhuǎn)換為適合進(jìn)行分析或建模的形式。這可能包括以下幾種形式。(1)規(guī)范化或標(biāo)準(zhǔn)化:將數(shù)值特征縮放到同一范圍內(nèi),如0到1,或者轉(zhuǎn)換為具有零均值和單位方差的值。(2)分類變量編碼:例如將分類變量轉(zhuǎn)換為獨(dú)熱編碼或標(biāo)簽編碼。(3)特征工程:創(chuàng)建新的特征,使之可能更好地表達(dá)數(shù)據(jù)的某些方面或者提高模型的性能。6.2.2數(shù)據(jù)清洗和預(yù)處理根據(jù)具體的項(xiàng)目和數(shù)據(jù)集,這個流程可能會有所不同。在進(jìn)行數(shù)據(jù)清洗和預(yù)處理時(shí),需要對數(shù)據(jù)有深入的理解,以便做出最好的決策。6.2.2數(shù)據(jù)清洗和預(yù)處理數(shù)據(jù)標(biāo)注,也叫數(shù)據(jù)標(biāo)記,是一項(xiàng)為原始數(shù)據(jù)添加元信息的工作,以幫助大模型更好地理解和學(xué)習(xí)數(shù)據(jù)。對于監(jiān)督學(xué)習(xí)任務(wù),模型需要有標(biāo)簽的數(shù)據(jù)進(jìn)行訓(xùn)練,數(shù)據(jù)標(biāo)注的目標(biāo)就是為數(shù)據(jù)提供這些標(biāo)簽,這個過程可能需要專門的標(biāo)注團(tuán)隊(duì)。對于非監(jiān)督學(xué)習(xí)任務(wù),如聚類或生成模型,這一步則不需要。理解任務(wù)需求:首先需要理解要解決的問題以及數(shù)據(jù)標(biāo)注應(yīng)該如何進(jìn)行。例如,如果進(jìn)行圖像分類任務(wù),可能需要給每個圖像一個分類標(biāo)簽;如果在進(jìn)行物體檢測任務(wù),可能需要在圖像中的每個目標(biāo)物體周圍畫一個邊界框,并給出這個物體的分類標(biāo)簽。6.2.3數(shù)據(jù)標(biāo)注制定標(biāo)注規(guī)范:規(guī)范是一個詳細(xì)解釋如何進(jìn)行數(shù)據(jù)標(biāo)注的指南,它解釋哪些數(shù)據(jù)應(yīng)該被標(biāo)記,應(yīng)該如何標(biāo)記,以及如何處理可能出現(xiàn)的問題或歧義。清晰、詳細(xì)的標(biāo)注規(guī)范可以幫助保持標(biāo)注的一致性,并提高標(biāo)注的質(zhì)量。選擇或開發(fā)標(biāo)注工具:有許多數(shù)據(jù)標(biāo)注工具,可以用于各種類型的數(shù)據(jù)標(biāo)注任務(wù)。應(yīng)該選擇或開發(fā)一個適合自己任務(wù)的標(biāo)注工具,它應(yīng)該方便使用,提高標(biāo)注效率,并盡可能減少錯誤。6.2.3數(shù)據(jù)標(biāo)注進(jìn)行數(shù)據(jù)標(biāo)注:按照標(biāo)注規(guī)范,使用標(biāo)注工具進(jìn)行數(shù)據(jù)標(biāo)注。這可能是一個時(shí)間和人力密集型的過程,尤其是當(dāng)有大量數(shù)據(jù)需要標(biāo)注時(shí)。質(zhì)量檢查:檢查標(biāo)注的數(shù)據(jù),確保標(biāo)注的質(zhì)量。這涉及到隨機(jī)抽查一部分?jǐn)?shù)據(jù),并檢查它們是否被正確和一致地標(biāo)注。反饋和修正:根據(jù)質(zhì)量檢查的結(jié)果,如果發(fā)現(xiàn)任何問題或不一致,需要反饋給標(biāo)注團(tuán)隊(duì),并修正錯誤的標(biāo)注。6.2.3數(shù)據(jù)標(biāo)注數(shù)據(jù)標(biāo)注是一個重要但往往被忽視的步驟。高質(zhì)量標(biāo)注數(shù)據(jù)對訓(xùn)練出高性能的機(jī)器學(xué)習(xí)模型至關(guān)重要。因此,盡管這是一個復(fù)雜和耗時(shí)的過程,但投入在這個過程中的努力會得到回報(bào)。6.2.3數(shù)據(jù)標(biāo)注數(shù)據(jù)通常被劃分為訓(xùn)練集、驗(yàn)證集和測試集。訓(xùn)練集用于模型訓(xùn)練,驗(yàn)證集用于超參數(shù)調(diào)整和模型選擇,測試集用于最后的模型性能評估。數(shù)據(jù)集劃分是大模型項(xiàng)目中的一個重要步驟,它可以幫助我們更好地理解模型在未見過的數(shù)據(jù)上的性能。確定劃分策略:確定數(shù)據(jù)集劃分的策略主要取決于數(shù)據(jù)集的大小和特性。一般的策略是將數(shù)據(jù)集劃分為訓(xùn)練集、驗(yàn)證集和測試集。在大多數(shù)情況下,數(shù)據(jù)被劃分為80%的訓(xùn)練集,10%的驗(yàn)證集和10%的測試集,但這并不是硬性規(guī)定,具體的劃分比例需要根據(jù)實(shí)際情況來確定。6.2.4數(shù)據(jù)集劃分隨機(jī)劃分:為了確保每個劃分的數(shù)據(jù)分布與原始數(shù)據(jù)集相似,通常需要對數(shù)據(jù)進(jìn)行隨機(jī)劃分。這可以通過洗牌數(shù)據(jù)索引來實(shí)現(xiàn)。分層抽樣:在某些情況下,可能需要確保每個劃分中各類別的數(shù)據(jù)比例與整個數(shù)據(jù)集相同。這稱為分層抽樣。例如,如果數(shù)據(jù)集是一個二分類問題,可能希望訓(xùn)練集、驗(yàn)證集和測試集中正負(fù)樣本的比例都與整個數(shù)據(jù)集中的比例相同。6.2.4數(shù)據(jù)集劃分時(shí)間序列數(shù)據(jù)的劃分:對于時(shí)間序列數(shù)據(jù),數(shù)據(jù)劃分的策略可能會不同。通常不能隨機(jī)劃分,而是基于時(shí)間來劃分?jǐn)?shù)據(jù)。例如,我們可能會使用前80%的數(shù)據(jù)作為訓(xùn)練集,然后使用接下來10%的數(shù)據(jù)作為驗(yàn)證集,最后10%的數(shù)據(jù)作為測試集。分割數(shù)據(jù):按照所選擇的策略,使用編程語言或者數(shù)據(jù)處理工具來劃分?jǐn)?shù)據(jù)。保存數(shù)據(jù):保存劃分后的數(shù)據(jù)集,以便后續(xù)的訓(xùn)練和測試。確保訓(xùn)練數(shù)據(jù)、驗(yàn)證數(shù)據(jù)和測試數(shù)據(jù)被正確地保存,并且可以方便地加載。6.2.4數(shù)據(jù)集劃分這個流程可能根據(jù)數(shù)據(jù)的類型和任務(wù)的需求有所不同。無論如何,正確的數(shù)據(jù)劃分策略對于避免過擬合,以及準(zhǔn)確評估模型的性能至關(guān)重要。6.2.4數(shù)據(jù)集劃分模型設(shè)計(jì)是大模型項(xiàng)目的關(guān)鍵環(huán)節(jié),需要結(jié)合項(xiàng)目目標(biāo)、數(shù)據(jù)特性以及算法理論選擇或設(shè)計(jì)適合任務(wù)的模型架構(gòu)。可能會使用復(fù)雜的深度學(xué)習(xí)架構(gòu),如Transformer、BERT、ResNet等。圖6-4案例:文心大模型全景圖6.2.5模型設(shè)計(jì)理解問題:首先,需要理解你要解決的問題,并根據(jù)問題類型(例如,分類、回歸、聚類、生成模型等)決定采用何種類型的模型。選擇算法:根據(jù)要解決的問題選擇合適的機(jī)器學(xué)習(xí)算法。這可能包括決策樹、線性回歸、邏輯回歸、支持向量機(jī)、神經(jīng)網(wǎng)絡(luò)、集成學(xué)習(xí)等。在選擇算法時(shí),需要考慮各種因素,如問題的復(fù)雜性、數(shù)據(jù)的大小和維度、計(jì)算資源等。設(shè)計(jì)模型架構(gòu):這主要涉及到深度學(xué)習(xí)模型。需要設(shè)計(jì)模型的架構(gòu),例如神經(jīng)網(wǎng)絡(luò)的層數(shù)、每層的節(jié)點(diǎn)數(shù)、激活函數(shù)的選擇等。此步驟可能需要根據(jù)經(jīng)驗(yàn)和實(shí)驗(yàn)結(jié)果進(jìn)行調(diào)整。6.2.5模型設(shè)計(jì)設(shè)置超參數(shù):超參數(shù)是在開始學(xué)習(xí)過程之前設(shè)置的參數(shù),而不是通過訓(xùn)練得到的參數(shù)。例如,學(xué)習(xí)率、批量大小、迭代次數(shù)等。超參數(shù)的選擇可能需要通過經(jīng)驗(yàn)或者系統(tǒng)的搜索(例如網(wǎng)格搜索、隨機(jī)搜索或貝葉斯優(yōu)化)來確定。正則化和優(yōu)化策略:為了防止過擬合并提高模型的泛化能力,可能需要使用一些正則化策略,如L1/L2正則化、dropout(輟學(xué))、earlystopping(提早停止)等。同時(shí),還需要選擇合適的優(yōu)化算法(例如,SGD、Adam、RMSprop等)以及可能的學(xué)習(xí)率調(diào)整策略。6.2.5模型設(shè)計(jì)定義評估指標(biāo):需要定義合適的評估指標(biāo)來衡量模型的性能。選擇的評估指標(biāo)應(yīng)與業(yè)務(wù)目標(biāo)和模型目標(biāo)相一致。常見的評估指標(biāo)包括精度、召回率、F1分?jǐn)?shù)、AUC、均方誤差等。需要根據(jù)具體項(xiàng)目和需求進(jìn)行迭代。模型設(shè)計(jì)是一個需要技術(shù)、經(jīng)驗(yàn)以及實(shí)驗(yàn)驗(yàn)證的過程,設(shè)計(jì)時(shí)需要保持對模型復(fù)雜性和泛化能力之間平衡的認(rèn)識,并始終以實(shí)現(xiàn)業(yè)務(wù)目標(biāo)為導(dǎo)向。6.2.5模型設(shè)計(jì)模型初始化是大模型項(xiàng)目中的重要步驟。訓(xùn)練開始前需要初始化模型參數(shù),這一般通過隨機(jī)方式進(jìn)行。正確的初始化策略可以幫助模型更快地收斂,并減少訓(xùn)練過程中可能出現(xiàn)的問題。選擇初始化策略:有許多不同的初始化策略可以選擇,例如零初始化、隨機(jī)初始化、He初始化、Xavier初始化等。需要根據(jù)模型和激活函數(shù)來選擇合適的初始化策略。例如,如果模型使用ReLU激活函數(shù),He初始化可能是一個好的選擇;如果模型使用tanh或sigmoid激活函數(shù),Xavier初始化可能是一個好的選擇。6.2.6模型初始化初始化權(quán)重:使用選擇的策略來初始化模型的權(quán)重。對每一層都需要初始化其權(quán)重。在大多數(shù)情況下,權(quán)重應(yīng)該被初始化為小的隨機(jī)數(shù),以打破對稱性并保證不同神經(jīng)元學(xué)到不同的特征。初始化偏置:初始化模型的偏置。在許多情況下,偏置可以被初始化為零。但是,對于某些類型的層(如批量歸一化層),偏置的初始化可能需要更復(fù)雜的策略。6.2.6模型初始化設(shè)置初始化參數(shù):某些初始化策略可能需要額外的參數(shù)。例如,隨機(jī)初始化可能需要一個范圍或者一個標(biāo)準(zhǔn)差,你需要設(shè)置這些參數(shù)。執(zhí)行初始化:在模型代碼中執(zhí)行初始化操作。大多數(shù)深度學(xué)習(xí)框架(如TensorFlow和PyTorch)都提供了內(nèi)置的方法來執(zhí)行初始化。模型初始化是一個比較技術(shù)性的主題,正確的初始化策略可能對模型的訓(xùn)練速度和性能有很大的影響。應(yīng)該了解不同的初始化策略,以便根據(jù)模型選擇最適合的策略。6.2.6模型初始化模型訓(xùn)練是大模型項(xiàng)目中的關(guān)鍵步驟,其中包含了多個環(huán)節(jié)。設(shè)置訓(xùn)練參數(shù):首先,需要設(shè)置訓(xùn)練參數(shù),如學(xué)習(xí)率、訓(xùn)練迭代次數(shù)、批次大小等。準(zhǔn)備訓(xùn)練數(shù)據(jù):需要將數(shù)據(jù)集劃分為訓(xùn)練集、驗(yàn)證集和測試集。通常,大部分?jǐn)?shù)據(jù)用于訓(xùn)練,一部分用于驗(yàn)證模型性能和調(diào)整超參數(shù),剩余的一部分用于測試。6.2.7模型訓(xùn)練前向傳播:在前向傳播階段,模型接收輸入數(shù)據(jù),并通過網(wǎng)絡(luò)層傳遞,直到輸出層。這個過程中會生成一個預(yù)測輸出。計(jì)算損失:根據(jù)預(yù)測輸出和實(shí)際標(biāo)簽,使用損失函數(shù)(如均方誤差、交叉熵等)計(jì)算損失。損失反映了模型預(yù)測的準(zhǔn)確程度。反向傳播:在這個階段,算法計(jì)算損失函數(shù)關(guān)于模型參數(shù)的梯度,并根據(jù)這些梯度來更新模型參數(shù)。這個過程通常使用優(yōu)化算法(如梯度下降、隨機(jī)梯度下降、Adam等)來進(jìn)行。6.2.7模型訓(xùn)練驗(yàn)證和調(diào)整:在每個迭代結(jié)束后,使用驗(yàn)證集評估模型性能。如果模型在驗(yàn)證集上的性能沒有提高,或者開始下降,這意味著模型可能過擬合了,需要調(diào)整模型的超參數(shù),或者使用一些正則化技術(shù)(如dropout、L1/L2正則化、早停法等)。重復(fù)前向傳播、計(jì)算損失、反向傳播和驗(yàn)證步驟,直到模型性能達(dá)到滿意,或者達(dá)到預(yù)設(shè)的訓(xùn)練迭代次數(shù)。6.2.7模型訓(xùn)練模型測試:當(dāng)模型訓(xùn)練完成后,使用測試集進(jìn)行最終的性能評估。這能夠提供模型在未見過的數(shù)據(jù)上的性能表現(xiàn)。實(shí)際操作中可能需要根據(jù)特定任務(wù)或特定模型進(jìn)行相應(yīng)的調(diào)整。6.2.7模型訓(xùn)練模型驗(yàn)證是大模型項(xiàng)目中非常關(guān)鍵的一步,目的是在訓(xùn)練過程中,評估模型的性能,定期在驗(yàn)證集上測試模型的性能,監(jiān)控過擬合,根據(jù)測試和監(jiān)控結(jié)果調(diào)整模型的超參數(shù)。準(zhǔn)備驗(yàn)證集:在數(shù)據(jù)集劃分階段,應(yīng)該保留一部分?jǐn)?shù)據(jù)作為驗(yàn)證集。這部分?jǐn)?shù)據(jù)不參與模型訓(xùn)練,僅用于模型驗(yàn)證。進(jìn)行模型預(yù)測:使用訓(xùn)練好的模型對驗(yàn)證集進(jìn)行預(yù)測。通常,在每一輪迭代訓(xùn)練結(jié)束后進(jìn)行一次驗(yàn)證。6.2.8模型驗(yàn)證計(jì)算評估指標(biāo):根據(jù)模型在驗(yàn)證集上的預(yù)測結(jié)果和真實(shí)標(biāo)簽,計(jì)算相應(yīng)的評估指標(biāo)。評估指標(biāo)的選擇取決于任務(wù)類型。例如:對于分類任務(wù),常見的評估指標(biāo)有準(zhǔn)確率、精確率、召回率、F1分?jǐn)?shù)等;對于回歸任務(wù),常見的評估指標(biāo)有均方誤差(MSE)、平均絕對誤差(MAE)等。比較性能:將這一輪的驗(yàn)證性能與前一輪進(jìn)行比較。如果性能提高,則可以繼續(xù)進(jìn)行下一輪訓(xùn)練;如果性能下降,則可能需要調(diào)整學(xué)習(xí)率、增加正則化等措施。6.2.8模型驗(yàn)證早停法:如果在連續(xù)多輪訓(xùn)練后,驗(yàn)證性能沒有顯著提高,可以使用早停法來提前結(jié)束訓(xùn)練,以避免過擬合。調(diào)整超參數(shù):如果模型在驗(yàn)證集上的性能不佳,可能需要調(diào)整模型的超參數(shù),如學(xué)習(xí)率、批次大小、正則化參數(shù)等。常用的方法是使用網(wǎng)格搜索或隨機(jī)搜索等方式來自動搜索最優(yōu)的超參數(shù)組合。驗(yàn)證集應(yīng)保持獨(dú)立,不能用于訓(xùn)練模型,否則就可能導(dǎo)致模型的性能評估不準(zhǔn)確,無法真實(shí)反映模型在未見過的數(shù)據(jù)上的性能。6.2.8模型驗(yàn)證模型保存是大模型項(xiàng)目的重要一步,讓我們能夠?qū)⒂?xùn)練好的模型存儲起來,以便于后續(xù)的測試、部署或進(jìn)一步訓(xùn)練或分享。選擇保存格式:需要選擇一個合適的模型保存格式。常用的模型保存格式包括:Python的pickle文件、joblib文件,或者某些深度學(xué)習(xí)框架的專有格式,如TensorFlow的SavedModel格式和PyTorch的pth格式。這個選擇可能會受到所使用的工具和框架、模型的大小和復(fù)雜性、以及你的具體需求等因素的影響。6.2.9模型保存保存模型參數(shù):對于神經(jīng)網(wǎng)絡(luò)模型,通常會保存模型的參數(shù)(即權(quán)重和偏置)。這些參數(shù)是通過訓(xùn)練學(xué)習(xí)到的,可以用于在相同的模型架構(gòu)上進(jìn)行預(yù)測。保存模型架構(gòu):除了模型參數(shù),可能需要保存模型的架構(gòu)。這包括模型的層數(shù)、每層的類型(例如卷積層、全連接層等)、每層的參數(shù)(例如卷積核的大小和數(shù)量、步長、填充等)、激活函數(shù)的類型等。6.2.9模型保存保存訓(xùn)練配置:此外,可能需要保存一些訓(xùn)練的配置信息,如優(yōu)化器類型、學(xué)習(xí)率、損失函數(shù)類型等。執(zhí)行保存操作:使用所選工具或框架的保存函數(shù),將模型保存到文件中。通常,這會創(chuàng)建一個可以在其他計(jì)算機(jī)或在其他時(shí)間加載的文件。驗(yàn)證保存的模型:加載保存的模型,并在一些測試數(shù)據(jù)上運(yùn)行,以確保模型被正確保存并可以再次使用。這個流程可能會根據(jù)具體需求和所使用的工具或框架進(jìn)行一些調(diào)整。6.2.9模型保存模型測試是大模型部署前的最后一步,目的是在測試集上評估模型的最終性能。準(zhǔn)備測試集:在數(shù)據(jù)集劃分階段,應(yīng)該保留一部分?jǐn)?shù)據(jù)作為測試集。這部分?jǐn)?shù)據(jù)既不參與訓(xùn)練,也不參與驗(yàn)證,僅用于最后的模型測試。進(jìn)行模型預(yù)測:使用訓(xùn)練并經(jīng)過驗(yàn)證的模型對測試集進(jìn)行預(yù)測。在此步驟中,應(yīng)當(dāng)使用已保存的模型,而不是在訓(xùn)練過程中任何階段的模型。6.2.10模型測試計(jì)算評估指標(biāo):根據(jù)模型在測試集上的預(yù)測結(jié)果和真實(shí)標(biāo)簽,計(jì)算相應(yīng)的評估指標(biāo)。這些指標(biāo)應(yīng)當(dāng)與在訓(xùn)練和驗(yàn)證階段使用的指標(biāo)一致,以便于進(jìn)行比較。分析結(jié)果:除了計(jì)算總體的評估指標(biāo),也可以分析模型在特定類型的任務(wù)或數(shù)據(jù)上的性能。例如,可以查看模型在某個特定類別上的精確率和召回率,或者分析模型在不同難度級別的任務(wù)上的表現(xiàn)。6.2.10模型測試記錄和報(bào)告:記錄模型在測試集上的性能,并編寫報(bào)告。報(bào)告應(yīng)當(dāng)包含模型的詳細(xì)信息(例如,架構(gòu)、訓(xùn)練參數(shù)等),以及模型在測試集上的性能結(jié)果。測試集應(yīng)當(dāng)保持獨(dú)立和未知,不能用于訓(xùn)練或驗(yàn)證模型,以確保測試結(jié)果能夠真實(shí)反映模型在實(shí)際環(huán)境中的表現(xiàn)。6.2.10模型測試模型部署是將訓(xùn)練好的大模型應(yīng)用于實(shí)際生產(chǎn)環(huán)境中,使模型能夠?qū)π碌臄?shù)據(jù)進(jìn)行預(yù)測。模型選擇:在多個模型中選擇一個適合部署的模型。這個模型應(yīng)該是在驗(yàn)證和測試階段表現(xiàn)最優(yōu)秀的模型。模型轉(zhuǎn)換:如果需要,將模型轉(zhuǎn)換為適用于特定生產(chǎn)環(huán)境的格式。例如,如果計(jì)劃在移動設(shè)備上運(yùn)行模型,可能需要將模型轉(zhuǎn)換為TensorFlowLite或CoreML格式。6.2.11模型部署部署策略:確定模型部署策略??赡軙x擇將模型部署在本地服務(wù)器上,也可能選擇將模型部署在云服務(wù)器上。此外,還需要決定是否使用API、微服務(wù)或其他形式來提供模型服務(wù)。環(huán)境配置:配置生產(chǎn)環(huán)境。這可能包括安裝必要的軟件庫,設(shè)置服務(wù)器參數(shù),配置網(wǎng)絡(luò)等。模型加載和測試:在生產(chǎn)環(huán)境中加載模型并進(jìn)行測試,以確保模型在生產(chǎn)環(huán)境中正確運(yùn)行。6.2.11模型部署模型監(jiān)控:設(shè)置監(jiān)控系統(tǒng),以實(shí)時(shí)監(jiān)測模型的性能。如果模型性能下降或出現(xiàn)其他問題,應(yīng)該能夠及時(shí)得到通知。模型更新:根據(jù)模型在生產(chǎn)環(huán)境中的表現(xiàn)和新的數(shù)據(jù),定期更新模型。這可能涉及到收集新的訓(xùn)練數(shù)據(jù),重新訓(xùn)練模型,測試新模型,然后將新模型部署到生產(chǎn)環(huán)境中。這個流程可能會根據(jù)具體需求和所使用的技術(shù)進(jìn)行一些調(diào)整。部署機(jī)器學(xué)習(xí)模型是一個復(fù)雜的過程,需要考慮的因素很多,如模型性能、可擴(kuò)展性、安全性、成本等。6.2.11模型部署PART03分而治之的思想大模型的參數(shù)量和所需訓(xùn)練數(shù)據(jù)量的規(guī)模在持續(xù)急速增長,更大的模型能進(jìn)一步提升效果,同時(shí)也展現(xiàn)出一些很有益的特性,比如解決多種不同類型的任務(wù)等。訓(xùn)練巨大的模型必然需要底層基礎(chǔ)軟件和芯片的支撐。單個機(jī)器的有限資源已無法滿足訓(xùn)練的要求,擔(dān)綱此重任的GPU在過去幾年中無論是顯存空間或是算力增長,都在10倍數(shù)量級上,顯然跟不上10000倍模型規(guī)模的增長。6.3分而治之的思想硬件不夠,軟件來湊。深度學(xué)習(xí)框架的分布式訓(xùn)練技術(shù)強(qiáng)勢地支撐起了模型的快速增長。人們設(shè)計(jì)分布式訓(xùn)練系統(tǒng)來解決海量的計(jì)算和內(nèi)存資源需求問題。在分布式訓(xùn)練系統(tǒng)環(huán)境下,將一個模型訓(xùn)練任務(wù)拆分成多個子任務(wù),并將子任務(wù)分發(fā)給多個計(jì)算設(shè)備,從而解決資源瓶頸。如何才能利用數(shù)萬計(jì)算加速芯片的集群,訓(xùn)練千億甚至萬億參數(shù)量的大模型?這其中涉及到集群架構(gòu)、并行策略、模型架構(gòu)、內(nèi)存優(yōu)化、計(jì)算優(yōu)化等一系列的技術(shù)。6.3分而治之的思想一般情況下,處理數(shù)據(jù)是在單臺計(jì)算機(jī)上進(jìn)行的。但是,傳統(tǒng)的數(shù)據(jù)處理方法無法滿足大數(shù)據(jù)的處理需求,于是,將一組計(jì)算機(jī)組織到一起形成一個集群,利用集群的力量來處理大數(shù)據(jù)的工程實(shí)踐逐漸成為主流方案。這種使用集群進(jìn)行計(jì)算的方式被稱為分布式計(jì)算,當(dāng)前幾乎所有的大數(shù)據(jù)系統(tǒng)都是在集群進(jìn)行分布式計(jì)算。6.3.1分布式計(jì)算分布式計(jì)算的概念聽起來很高深,其背后的思想?yún)s十分樸素,即分而治之。它是將一個原始問題分解為子問題,多個子問題分別在多臺機(jī)器上求解,借助必要的數(shù)據(jù)交換和合并策略,將子結(jié)果匯總即可求出最終結(jié)果。
圖6-5分而治之的算法思想6.3.1分布式計(jì)算不同的分布式計(jì)算系統(tǒng)所使用的算法和策略根據(jù)所要解決的問題各有不同,但基本上都是將計(jì)算拆分,把子問題放到多臺機(jī)器上,分別計(jì)算求解,其中的每臺機(jī)器(物理機(jī)或虛擬機(jī))又被稱為一個節(jié)點(diǎn)。在分布式計(jì)算的很多成熟方案中,比較有代表性的是消息傳遞接口(MPI)和MapReduce。6.3.1分布式計(jì)算MPI是一個老牌的分布式計(jì)算框架,主要解決節(jié)點(diǎn)間的數(shù)據(jù)通信問題。在前MapReduce時(shí)代,MPI是分布式計(jì)算的業(yè)界標(biāo)準(zhǔn),現(xiàn)在依然廣泛運(yùn)行在全球各大超級計(jì)算中心、大學(xué)、政府和軍隊(duì)下屬研究機(jī)構(gòu)中,許多物理、生物、化學(xué)、能源、航空航天等基礎(chǔ)學(xué)科的大規(guī)模分布式計(jì)算都依賴MPI。分治法將問題切分成子問題,在不同節(jié)點(diǎn)上分而治之地求解,MPI提供了一個在多進(jìn)程多節(jié)點(diǎn)間進(jìn)行數(shù)據(jù)通信的方案,因?yàn)樵诖蠖鄶?shù)情況下,在中間計(jì)算和最終合并的過程中,需要對多個節(jié)點(diǎn)上的數(shù)據(jù)進(jìn)行交換和同步。6.3.2消息傳遞接口MPIMPI中最重要的兩個操作為數(shù)據(jù)發(fā)送(Send)和數(shù)據(jù)接收(Recv)。Send表示將本進(jìn)程中某塊數(shù)據(jù)發(fā)送給其他進(jìn)程,Recv表示接收其他進(jìn)程的數(shù)據(jù)。下圖展示了MPI架構(gòu)在4臺服務(wù)器上進(jìn)行并行計(jì)算。在實(shí)際的代碼開發(fā)過程中,用戶需要自行設(shè)計(jì)分治算法,將復(fù)雜問題切分為子問題,手動調(diào)用MPI庫,將數(shù)據(jù)發(fā)送給指定的進(jìn)程。
圖6-6MPI并行計(jì)算示意圖6.3.2消息傳遞接口MPIMPI能夠在很細(xì)的粒度上控制數(shù)據(jù)通信,這既是優(yōu)勢也是劣勢,因?yàn)榧?xì)粒度控制意味著從分治算法設(shè)計(jì)到數(shù)據(jù)通信到結(jié)果匯總都需要編程人員手動控制。有經(jīng)驗(yàn)的程序員可以對程序進(jìn)行底層優(yōu)化,取得成倍的速度提升。但是,如果對計(jì)算機(jī)和分布式系統(tǒng)沒有太多經(jīng)驗(yàn),編碼、調(diào)試和運(yùn)行MPI程序的時(shí)間成本極高,加上數(shù)據(jù)在不同節(jié)點(diǎn)上不均衡和通信延遲等問題,一個節(jié)點(diǎn)進(jìn)程失敗會導(dǎo)致整個程序失敗,因此,MPI對于大部分程序員來說也許就是噩夢。衡量一個程序的時(shí)間成本,不僅要考慮程序運(yùn)行,也要考慮程序員學(xué)習(xí)、開發(fā)和調(diào)試的時(shí)間。就像C語言運(yùn)算速度極快,但是Python語言卻更受歡迎一樣,MPI雖然能提供極快的分布式計(jì)算加速,但應(yīng)用有一定的難度。6.3.2消息傳遞接口MPI為了解決分布式計(jì)算學(xué)習(xí)和使用成本高的問題,研究人員提出了更簡單易用的MapReduce編程模型。MapReduce是谷歌2004年提出的一種編程范式,比起MPI將所有事情交給程序員控制不同,MapReduce編程模型只需要程序員定義兩個操作:map(映射)和reduce(減少)。6.3.3
MapReduce模型這里,我們借用三明治的制作過程對MapReduce進(jìn)行分析。假設(shè)我們需要大批量地制作三明治,三明治的每種食材可以分別單獨(dú)處理,map階段將原材料在不同的節(jié)點(diǎn)上分別進(jìn)行處理,生成一些中間食材;shuffle(洗牌)階段將不同的中間食材進(jìn)行組合,reduce最終將一組中間食材組合成為三明治成品??梢钥吹?,map+shuffle+reduce方式就是分而治之思想的一種實(shí)現(xiàn)。6.3.3
MapReduce模型基于MapReduce編程模型,不同的團(tuán)隊(duì)分別實(shí)現(xiàn)了自己的大數(shù)據(jù)框架。Hadoop是最早的一種開源實(shí)現(xiàn),如今已經(jīng)成為大數(shù)據(jù)領(lǐng)域的業(yè)界標(biāo)桿,之后又出現(xiàn)了Spark和Flink。這些框架提供了API編程接口,輔助程序員存儲、處理和分析大數(shù)據(jù)。6.3.3
MapReduce模型比起MPI,MapReduce編程模型將更多的中間過程做了封裝,程序員只需要將原始問題轉(zhuǎn)化為更高層次的API,至于原始問題如何切分為更小的子問題、中間數(shù)據(jù)如何傳輸和交換、如何將計(jì)算伸縮擴(kuò)展到多個節(jié)點(diǎn)等一系列細(xì)節(jié)問題,可以交給大數(shù)據(jù)框架來解決。因此,MapReduce相對來說學(xué)習(xí)門檻低,使用更方便,編程開發(fā)速度更快。6.3.3
MapReduce模型在現(xiàn)代通信技術(shù)中,數(shù)據(jù)的容量大且產(chǎn)生速度快。從時(shí)間維度上講,數(shù)據(jù)源源不斷地產(chǎn)生,形成一個無界的數(shù)據(jù)流(見圖6-8)。例如,每時(shí)每刻的運(yùn)動數(shù)據(jù)都會累積到手機(jī)傳感器上,金融交易隨時(shí)隨地發(fā)生著,傳感器會持續(xù)監(jiān)控并生成數(shù)據(jù)。數(shù)據(jù)流中的某段有界數(shù)據(jù)流可以組成一個數(shù)據(jù)集。我們通常所說的對某份數(shù)據(jù)進(jìn)行分析,指的是對某個數(shù)據(jù)集進(jìn)行分析。隨著數(shù)據(jù)的產(chǎn)生速度越來越快,數(shù)據(jù)源越來越多,人們對時(shí)效性的重視程度越來越高,如何處理數(shù)據(jù)流成了大家更為關(guān)注的問題。6.3.4批處理和流處理
圖6-8有界與無界數(shù)據(jù)流6.3.4批處理和流處理批處理。這是對一批數(shù)據(jù)進(jìn)行處理。批量計(jì)算比比皆是,最簡單的批量計(jì)算例子有:微信運(yùn)動每天晚上有一個批量任務(wù),把用戶好友一天所走的步數(shù)統(tǒng)計(jì)一遍,生成排序結(jié)果后推送給用戶;銀行信用卡中心每月賬單日有一個批量任務(wù),把一個月的消費(fèi)總額統(tǒng)計(jì)一次,生成用戶月度賬單;國家統(tǒng)計(jì)局每季度對經(jīng)濟(jì)數(shù)據(jù)做一次統(tǒng)計(jì),公布季度GDP增速??梢?,批量任務(wù)一般是對一段時(shí)間的數(shù)據(jù)聚合后進(jìn)行處理。對于數(shù)據(jù)量龐大的應(yīng)用,如微信運(yùn)動、銀行信用卡等情景,一段時(shí)間內(nèi)積累的數(shù)據(jù)總量非常大,計(jì)算非常耗時(shí)。6.3.4批處理和流處理批量計(jì)算的歷史可以追溯到計(jì)算機(jī)剛剛起步的二十世紀(jì)60年代,當(dāng)前應(yīng)用最為廣泛的當(dāng)屬數(shù)據(jù)倉庫的ETL(提取-轉(zhuǎn)換-加載)數(shù)據(jù)轉(zhuǎn)化工作,如以O(shè)racle為代表的商業(yè)數(shù)據(jù)倉庫和以Hadoop/Spark為代表的開源數(shù)據(jù)倉庫。6.3.4批處理和流處理流處理。數(shù)據(jù)其實(shí)是以流方式持續(xù)不斷地產(chǎn)生著,流處理就是對數(shù)據(jù)流進(jìn)行分析和處理,時(shí)間對流處理獲取實(shí)時(shí)數(shù)據(jù)價(jià)值越發(fā)重要。個人用戶每晚看一次微信運(yùn)動排名,覺得是一個比較舒適的節(jié)奏,但是對于金融界來說,時(shí)間就是以百萬、千萬甚至上億為單位的金錢。在電商大促銷中,管理者要以秒級的響應(yīng)時(shí)間查看實(shí)時(shí)銷售業(yè)績、庫存信息以及與競品的對比結(jié)果,以爭取更多的決策時(shí)間;股票交易要以毫秒級的速度來對新信息做出響應(yīng);風(fēng)險(xiǎn)控制要對每一份欺詐交易迅速做出處理,以減少不必要的損失;網(wǎng)絡(luò)運(yùn)營商要以極快速度發(fā)現(xiàn)網(wǎng)絡(luò)和數(shù)據(jù)中心的故障等。6.3.4批處理和流處理以上這些場景,一旦出現(xiàn)故障,造成服務(wù)延遲,損失都難以估量,因此,響應(yīng)速度越快,越能減少損失,增加收入。而物聯(lián)網(wǎng)和5G通信的興起將為數(shù)據(jù)生成提供更完美的底層技術(shù)基礎(chǔ),海量的數(shù)據(jù)在IoT(物聯(lián)網(wǎng))設(shè)備上采集生成,并通過更高速的5G通道傳輸?shù)椒?wù)器,更龐大的實(shí)時(shí)數(shù)據(jù)流將洶涌而至,流式處理的需求肯定會爆炸式增長。6.3.4批處理和流處理PART04分布式訓(xùn)練與策略根據(jù)單個計(jì)算設(shè)備模型訓(xùn)練系統(tǒng)的流程,可以看到,如果進(jìn)行并行加速,可以從數(shù)據(jù)和模型兩個維度進(jìn)行考慮。對數(shù)據(jù)進(jìn)行切分,并將同一個模型復(fù)制到多個設(shè)備上,并行執(zhí)行不同的數(shù)據(jù)分片,這種方式通常被稱為數(shù)據(jù)并行;對模型進(jìn)行劃分,將模型中的算子分發(fā)到多個設(shè)備分別完成處理,這種方式通常被稱為模型并行;當(dāng)訓(xùn)練大語言模型時(shí),往往需要同時(shí)對數(shù)據(jù)和模型進(jìn)行切分,從而實(shí)現(xiàn)更高程度的并行,這種方式通常被稱為混合并行。6.4分布式訓(xùn)練與策略分布式訓(xùn)練是指將機(jī)器學(xué)習(xí)或深度學(xué)習(xí)模型訓(xùn)練任務(wù)分解成多個子任務(wù),并在多個計(jì)算設(shè)備上并行地進(jìn)行訓(xùn)練。下圖給出單個計(jì)算設(shè)備和多個計(jì)算設(shè)備的示例,這里的計(jì)算設(shè)備可以是中央處理器(CPU)、圖形處理器(GPU)、張量處理器(TPU),也可以是神經(jīng)網(wǎng)絡(luò)處理器(NPU)。
圖6-9單個計(jì)算設(shè)備和多個計(jì)算設(shè)備的示例6.4.1什么是分布式訓(xùn)練由于同一個服務(wù)器內(nèi)部的多個計(jì)算設(shè)備之間的內(nèi)存可能并不共享,因此,無論這些計(jì)算設(shè)備是處于一個服務(wù)器還是多個服務(wù)器中,其系統(tǒng)架構(gòu)都屬于分布式系統(tǒng)范疇。一個模型訓(xùn)練任務(wù)往往會有大量的訓(xùn)練樣本作為輸入,可以利用一個計(jì)算設(shè)備完成,也可以將整個模型的訓(xùn)練任務(wù)拆分成多個子任務(wù),分發(fā)給不同的計(jì)算設(shè)備,實(shí)現(xiàn)并行計(jì)算。此后,還需要對每個計(jì)算設(shè)備的輸出進(jìn)行合并,最終得到與單個計(jì)算設(shè)備等價(jià)的計(jì)算結(jié)果。由于每個計(jì)算設(shè)備只需要負(fù)責(zé)子任務(wù),并且多個計(jì)算設(shè)備可以并行執(zhí)行,因此,可以更快速地完成整體計(jì)算,并最終實(shí)現(xiàn)對整個計(jì)算過程的加速。6.4.1什么是分布式訓(xùn)練分布式訓(xùn)練的總體目標(biāo)是提升總的訓(xùn)練速度,減少模型訓(xùn)練的總體時(shí)間。對單設(shè)備訓(xùn)練效率進(jìn)行優(yōu)化,主要的技術(shù)手段有混合精度訓(xùn)練、算子融合、梯度累加等。在分布式訓(xùn)練系統(tǒng)中,隨著計(jì)算設(shè)備數(shù)量的增加,理論上峰值計(jì)算速度會增加,然而受通信效率的影響,計(jì)算設(shè)備數(shù)量增多會造成加速比急速降低;多設(shè)備加速比是由計(jì)算和通信效率決定的,需要結(jié)合算法和網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)進(jìn)行優(yōu)化。6.4.1什么是分布式訓(xùn)練大模型參數(shù)量和所使用的數(shù)據(jù)量都非常大,因此都采用了分布式訓(xùn)練架構(gòu)完成訓(xùn)練。通過使用分布式訓(xùn)練系統(tǒng),大模型的訓(xùn)練周期可以從單計(jì)算設(shè)備花費(fèi)幾十年,縮短到使用數(shù)千個計(jì)算設(shè)備花費(fèi)幾十天。分布式訓(xùn)練系統(tǒng)需要克服計(jì)算墻、顯存墻、通信墻等瓶頸,以確保集群內(nèi)的所有資源得到充分利用,從而加速訓(xùn)練過程并縮短訓(xùn)練周期。6.4.1什么是分布式訓(xùn)練(1)計(jì)算墻:單個計(jì)算設(shè)備能提供的計(jì)算能力與大模型所需的總計(jì)算量之間存在巨大差異。(2)顯存墻:單個計(jì)算設(shè)備無法完整存儲一個大模型的參數(shù)。(3)通信墻:分布式訓(xùn)練系統(tǒng)中各計(jì)算設(shè)備之間需要頻繁地進(jìn)行參數(shù)傳輸和同步。由于通信的延遲和帶寬限制,這可能成為訓(xùn)練過程的瓶頸。6.4.1什么是分布式訓(xùn)練計(jì)算墻和顯存墻源于單計(jì)算設(shè)備的計(jì)算和存儲能力有限,與模型所需龐大計(jì)算和存儲需求存在矛盾。這個問題可以通過采用分布式訓(xùn)練的方法解決,但分布式訓(xùn)練又會面臨通信墻的挑戰(zhàn)。在多機(jī)多卡的訓(xùn)練中,這些問題逐漸顯現(xiàn)。隨著大語言模型參數(shù)的增大,對應(yīng)的集群規(guī)模也隨之增加,這些問題變得更加突出。同時(shí),當(dāng)大型集群進(jìn)行長時(shí)間訓(xùn)練時(shí),設(shè)備故障可能會影響或中斷訓(xùn)練,對分布式系統(tǒng)的問題處理也提出了很高的要求。6.4.1什么是分布式訓(xùn)練分布式訓(xùn)練系統(tǒng)將單節(jié)點(diǎn)模型訓(xùn)練轉(zhuǎn)換成等價(jià)的分布式并行模型訓(xùn)練,對大模型來說,訓(xùn)練過程就是根據(jù)數(shù)據(jù)和損失函數(shù),利用優(yōu)化算法對神經(jīng)網(wǎng)絡(luò)模型參數(shù)進(jìn)行更新的過程。單個計(jì)算設(shè)備模型訓(xùn)練系統(tǒng)的結(jié)構(gòu)如下圖所示,主要由數(shù)據(jù)和模型兩個部分組成,訓(xùn)練過程會由多個數(shù)據(jù)小批次完成。
圖6-10單個計(jì)算設(shè)備模型訓(xùn)練系統(tǒng)的結(jié)構(gòu)6.4.1什么是分布式訓(xùn)練圖中數(shù)據(jù)表示一個數(shù)據(jù)小批次,訓(xùn)練系統(tǒng)會利用數(shù)據(jù)小批次根據(jù)損失函數(shù)和優(yōu)化算法生成梯度,從而對模型參數(shù)進(jìn)行修正,針對大模型多層神經(jīng)網(wǎng)絡(luò)的執(zhí)行過程,可以由一個計(jì)算圖表示,這個圖有多個相互連接的算子,每個算子實(shí)現(xiàn)一個神經(jīng)網(wǎng)絡(luò)層,而參數(shù)則代表了這個層在訓(xùn)練中所更新的權(quán)重。6.4.1什么是分布式訓(xùn)練計(jì)算圖的執(zhí)行過程可以分為前向計(jì)算和反向計(jì)算兩個階段。前向計(jì)算的過程是將數(shù)據(jù)讀入第一個算子,計(jì)算出相應(yīng)的輸出結(jié)構(gòu),然后重復(fù)前向過程,直到最后一個算子結(jié)束處理。反向計(jì)算過程是根據(jù)優(yōu)化函數(shù)和損失,每個算子依次計(jì)算梯度并更新本地參數(shù)。在反向計(jì)算結(jié)束后,該數(shù)據(jù)小批次的計(jì)算完成,系統(tǒng)就會讀取下一個數(shù)據(jù)小批次,繼續(xù)下一輪的模型參數(shù)更新??偟膩碚f,支撐模型規(guī)模發(fā)展的關(guān)鍵分布式訓(xùn)練技術(shù),其解決的核心問題是如何在保障GPU能夠高效計(jì)算的同時(shí),降低顯存的開銷。6.4.1什么是分布式訓(xùn)練數(shù)據(jù)并行性關(guān)注的問題是在大批量數(shù)據(jù)下,如何降低顯存的開銷。模型在前向和后向的中間計(jì)算過程都會有中間狀態(tài),這些中間狀態(tài)通常占用的空間和批量大小成正比。在數(shù)據(jù)并行系統(tǒng)中,每個計(jì)算設(shè)備都有整個神經(jīng)網(wǎng)絡(luò)模型的模型副本,進(jìn)行迭代時(shí),每個計(jì)算設(shè)備只分配一個批次數(shù)據(jù)樣本的子集,并根據(jù)該批次樣本子集的數(shù)據(jù)進(jìn)行網(wǎng)絡(luò)模型的前向計(jì)算。6.4.2數(shù)據(jù)并行性下圖給出了由3個GPU計(jì)算設(shè)備組成的數(shù)據(jù)并行訓(xùn)練系統(tǒng)樣例。通過將大的批量切分到n個GPU上,每個GPU上部分狀態(tài)的空間開銷能降到1/n,而省下的空間可以用來保存模型的參數(shù),優(yōu)化器狀態(tài)等,因此可以提高GPU上容納的模型規(guī)模。
圖6-11大批量數(shù)據(jù)的切分6.4.2數(shù)據(jù)并行性數(shù)據(jù)并行訓(xùn)練系統(tǒng)可以通過增加計(jì)算設(shè)備,有效提升整體訓(xùn)練吞吐量,即每秒全局批次數(shù)。與單個計(jì)算設(shè)備訓(xùn)練相比,其最主要的區(qū)別在于反向計(jì)算中的梯度需要在所有計(jì)算設(shè)備中進(jìn)行同步,以保證每個計(jì)算設(shè)備上最終得到的是所有進(jìn)程上梯度的平均值,常見的神經(jīng)網(wǎng)絡(luò)框架中都有數(shù)據(jù)并行方式的具體實(shí)現(xiàn)。由于基于Transformer結(jié)構(gòu)的大模型中每個算子都依賴單個數(shù)據(jù)而非批次數(shù)據(jù),因此數(shù)據(jù)并行并不會影響其計(jì)算邏輯。一般情況下,各訓(xùn)練設(shè)備中前向計(jì)算是獨(dú)立的,不涉及同步問題。數(shù)據(jù)并行訓(xùn)練加速比最高,但要求每個設(shè)備上都備份一份模型,顯存占用比較高。6.4.2數(shù)據(jù)并行性數(shù)據(jù)并行簡單易用,幾乎所有的訓(xùn)練框架都支持這種方法,其極限在于兩個方面:(1)當(dāng)批量大小等于1時(shí),傳統(tǒng)方法無法繼續(xù)切分。(2)經(jīng)典數(shù)據(jù)并行主要切分的是批量大小正比的部分中間狀態(tài)。但是對于參數(shù),優(yōu)化器狀態(tài)等與批量大小無關(guān)的空間開銷無能為力。6.4.2數(shù)據(jù)并行性模型并行用于解決單節(jié)點(diǎn)內(nèi)存不足的問題,可以從計(jì)算圖角度,用以下兩種形式進(jìn)行切分。(1)按模型的層切分到不同設(shè)備,即層間并行或算子間并行,也稱為流水線并行。(2)將計(jì)算圖層內(nèi)的參數(shù)切分到不同設(shè)備,即層內(nèi)并行或算子內(nèi)并行,也稱張量并行。6.4.3模型并行性兩節(jié)點(diǎn)模型并行訓(xùn)練系統(tǒng)如圖6-12所示,圖6-12(a)為流水線并行,模型不同層被切分到不同設(shè)備中;圖6-12(b)為張量并行,同一層中不同參數(shù)被切分到不同設(shè)備中進(jìn)行計(jì)算。
圖6-12兩節(jié)點(diǎn)模型并行訓(xùn)練系統(tǒng)樣例6.4.3模型并行性模型并行是把模型本身進(jìn)行切分,使得每個GPU卡只需要存模型的一部分。多個GPU配合起來完成一個完整的小批量。按這個寬泛的定義,模型并行性的使用方式就比較多樣,比如:(1)對一個算子進(jìn)行拆分,把參數(shù)和計(jì)算切分到多個GPU上,通過通信完成原子計(jì)算。6.4.3模型并行性(2)單純把模型參數(shù)切分到多個GPU上,在使用時(shí)通過數(shù)據(jù)驅(qū)動的方式,每個GPU從其他GPU上拉取需要的那部分。比如大的嵌入?yún)?shù)如果有100GB,可以切分成8份放在8個GPU上。每個小批量計(jì)算時(shí),嵌入層僅需要收集100GB中很少的一部分。(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《教育型非營利組織》課件
- 2025屆安徽省淮南一中等四校重點(diǎn)中學(xué)高考適應(yīng)性考試數(shù)學(xué)試卷含解析
- 江西省撫州市臨川區(qū)二中2025屆高考沖刺英語模擬試題含解析
- 2025屆新疆阿克蘇市農(nóng)一師中學(xué)高三適應(yīng)性調(diào)研考試語文試題含解析
- 2025屆安徽省合肥市高升學(xué)校高考英語必刷試卷含解析
- 《solidworks 機(jī)械設(shè)計(jì)實(shí)例教程》 課件 任務(wù)10.2 閥體工程圖的設(shè)計(jì)
- 山東省日照實(shí)驗(yàn)高級中學(xué)2025屆高三下學(xué)期第六次檢測語文試卷含解析
- 《solidworks 機(jī)械設(shè)計(jì)實(shí)例教程》 課件 任務(wù)5.2 套筒的設(shè)計(jì)
- 北京2025屆高考英語五模試卷含解析
- 湖北省恩施州三校聯(lián)盟2025屆高三最后一卷語文試卷含解析
- 蘇教版高中化學(xué)必修第一冊專題5微觀結(jié)構(gòu)與物質(zhì)的多樣性第二單元微粒之間的相互作用力課件
- 汽車維修投標(biāo)書服務(wù)方案(2篇)
- GJB9001C-2017標(biāo)準(zhǔn)介紹及不符合項(xiàng)案例分析試題與答案
- 順豐快遞合作協(xié)議書
- 汽車故障診斷技術(shù):汽車底盤故障診斷與排除
- 中醫(yī)學(xué)概論 知到智慧樹網(wǎng)課答案
- (高清版)JTGT 3364-02-2019 公路鋼橋面鋪裝設(shè)計(jì)與施工技術(shù)規(guī)范
- 光譜分析培訓(xùn)總結(jié)
- 傳染病護(hù)理學(xué)案例分析報(bào)告總結(jié)
- JT-T-215-1995水下膠粘劑技術(shù)要求和試驗(yàn)方法
- MOOC 醫(yī)學(xué)基礎(chǔ)-武漢理工大學(xué) 中國大學(xué)慕課答案
評論
0/150
提交評論