在當今迅速發展的AI景觀中,對高質量,帶註釋的數據集和自定義模型的需求比以往任何時候都更大。為了滿足這一需求,我們的項目旨在開發一個創新的模塊,該模塊將數據註釋與模型微調無縫整合。該模塊將利用Claude或Chatgpt-4等尖端語言模型標記提供客戶圖像,然後使用這些註釋對穩定的擴散XL(SDXL)模型進行微調。
該項目的目的是創建一個強大而有效的模塊,該模塊可自動化數據註釋過程並增強模型培訓。通過集成高級AI功能,我們旨在與新註釋的數據集生產高度適應性和精確的SDXL模型。
利用Claude/Chatgpt-4(或類似)API來為一組5-20個客戶映像生成高質量的註釋。
確保註釋是準確且一致的,以創建可靠的數據集用於培訓目的。
使用註釋數據集微調SDXL模型。
實施低級適應(LORA)技術,以根據註釋數據的特定特徵來優化模型的性能。
該項目旨在通過自動化和集成關鍵過程來提高AI模型開發的效率和準確性。高級語言模型用於註釋和復雜的微調方法的組合將導致一個高效的解決方案,以滿足各種AI應用的不斷增長的需求。通過減少體力勞動並改善模型績效,該項目將為依靠生成AI技術的行業提供重要價值。

微調有不同類型。微調方法的選擇取決於系統規格和使用。 Lora(低級適應)模型具有更高的效率和緊湊性。它們的功能像在現有檢查點模型上建立的適配器。具體而言,Lora模型僅更新檢查點模型的參數子集,從而增強其功能。這種方法使Lora型號可以保持較小的尺寸,通常從2MB到500MB,並可以頻繁地進行特定概念或樣式的微調。
例如,當使用Dreambooth進行微調穩定的擴散模型,該模型修改整個模型以適應特定的概念或樣式時,由於產生的較大模型大小(大約2至7 GB)和大量的GPU使用,因此需要大量的計算資源。相比之下,洛拉模型獲得了可比的推斷結果,其GPU要求明顯降低。
雖然洛拉是一種廣泛採用的方法,但還有其他方法可以修改穩定擴散。一種這樣的方法涉及交叉說法模塊,該模塊是從將提示文本轉換為文本嵌入的輸入。文本反轉代表另一種方法,甚至比洛拉更緊湊,更快。但是,文本反轉僅限於用於特定概念或樣式的微調文本嵌入。負責圖像生成的基礎U-NET保持不變,將文本反轉限制為生成與訓練過程中使用的圖像相似的圖像,而無需產生全新的輸出。
在這個項目中,有兩種類型的微調方法。第一個選擇是使用Dreambooth和Lora的組合,而另一個僅使用Lora。使用第一個選項是最佳選擇,它是該項目中首選的方法。此選擇的原因是:
增強的適應性:Dreambooth是一種微調方法,可以使整個模型全面適應特定的概念或樣式。通過與Dreambooth進行微調,SDXL模型可以學習與所需輸出緊密保持一致的細微細節和特徵。
效率和緊湊性:洛拉(低級適應)在Dreambooth微調之後發揮作用。 Lora模型旨在通過僅更新檢查點模型參數的子集來優化效率。與完全微調的模型相比,這種方法大大降低了模型大小(通常為2MB至500MB),例如僅通過Dreambooth修改的模型。
減少的計算資源:將Dreambooth與Lora結合起來會導致在培訓和推理過程中需要更少的GPU資源的模型中。 Dreambooth最初需要大量資源,這是由於其全面的微調過程,但是Lora隨後的參數減少確保了模型仍然可以管理和高效。
績效保存:儘管效率提高,洛拉仍保持了通過Dreambooth微調實現的高質量性能。這種組合確保該模型保留其產生令人印象深刻的輸出的能力,可與完全微調模型產生的能力相當。
迭代精緻的靈活性:Dreambooth的迭代方法隨後是Lora,允許迭代精緻和微調。在不損害模型的效率或性能的情況下,需要對不斷發展的概念或樣式進行持續適應不斷發展的概念或樣式的情況至關重要。
如上所述,在該項目中微調SDXL模型的首選方法是Dreambooth和Lora組合。結合Dreambooth和Lora的基本原理在於優化模型適應性和計算效率之間的權衡。 Dreambooth允許對模型的參數進行徹底適應數據或所需輸出中的特定細微差別。但是,這種全面的適應可能會導致更大的模型尺寸和增加的計算需求,尤其是在培訓和推理期間。另一方面,洛拉(Lora)介入了Dreambooth之後,以簡化該模型,在保留其性能的同時降低了大小。這種組合利用了這兩種方法的優勢:Dreambooth進行精確適應和洛拉以進行有效的參數管理。
這種微調方法的主要步驟是:
參數調整:使用Dreambooth調整SDXL模型中的整個參數集,以更加與定義的目標保持一致。此過程涉及基於目標數據集或所需輸出特性的迭代更新。
培訓階段:使用定義的目標和培訓數據執行微調過程。此階段確保SDXL模型可以很好地調整到手頭任務的特定細微差別和要求。
參數選擇:DreamBooth,確定參數的子集,這些參數對於維持或增強性能最關鍵。此步驟涉及分析微調SDXL模型中不同參數的重要性和影響。
低級別分解:將LORA技術(例如低級矩陣分解)應用於這些選定的參數子集。 Lora將參數矩陣分解為低級別組件,從而降低了冗餘,並將計算資源集中在最具影響力的參數上。
選擇性參數更新:僅更新已確定的低級組件,從而在保留或改善其性能指標的同時優化了模型的效率。
(返回到頂部)
Accelerate是一個通用且用戶友好的庫,該庫設計是通過擁抱面孔來簡化和優化在各種硬件設置上培訓和部署機器學習模型的過程。它提供了一個統一的界面,該界面抽象了配置和管理不同的分佈式培訓環境(例如Multi-GPU和TPU設置)的複雜性。加速使開發人員可以輕鬆擴展其Pytorch代碼,重點是模型開發而不是基礎基礎架構。
該圖書館的好處是:
簡化分佈式培訓:無需手動配置和管理複雜的分佈式設置,從而使您可以專注於開發和微調模型。
增強資源利用率:最大化可用硬件的使用,以確保您的GPU和TPU有效地利用您的GPU和TPU來加快訓練和推理過程。
支持大型模型:促進需要大型模型的處理,這些模型需要大量的內存和計算能力,從而使其與最先進的神經網絡一起使用。
減少開發開銷:簡化分佈式培訓在您的項目中的集成,節省時間並減少與管理不同硬件環境相關的開銷。
BitsandBytes是一個高效且創新的庫,旨在優化大型神經網絡的性能,尤其是在培訓和推理的背景下。它提供了工具和技術,可顯著減少記憶消耗和計算開銷而無需犧牲準確性。 BitsandBytes的傑出功能之一是其對8位精度優化器的支持。
在這個項目中,我們使用了8位優化器技術。 BitsandBytes中的8位優化器是一種在訓練過程中將重量和梯度的精度從32位浮點數量化為8位整數的技術。利用BitsandBytes的8位優化器對於涉及大規模神經網絡的項目尤其有利,例如穩定擴散XL(SDXL)等生成模型的微調。使用8位優化器的主要原因包括:
處理較大的型號:將較大的型號安裝到可用的硬件內存中,從而實現了原本是不可行的最先進體系結構的培訓。
更快的訓練:通過減少計算負載來加速培訓時間,從而可以更快地實驗和迭代。
資源優化:最大化可用硬件的使用,減少了昂貴的升級需求並有效利用現有資源。
增強性能:與傳統的32位訓練方法相當的精度和性能,同時受益於記憶和計算需求的減少。
Transformers庫是由擁抱面所開發的,是一個開源庫,為自然語言處理(NLP)和其他任務提供了廣泛的先進培訓模型。它支持各種變壓器架構,例如Bert,GPT,T5,Roberta等。該庫旨在使這些功能強大的模型易於用於各種應用程序,包括文本分類,翻譯,問題答案等。
使用此庫的好處是:
訪問尖端模型:輕鬆訪問和實現NLP及以後的一些最先進的模型,以確保您正在使用表現最好的體系結構。
快速開發:圖書館的直接API允許快速進行原型製作和實驗,從而大大加快了開發過程。轉移學習能力:對您的特定任務進行微型預訓練的模型,利用先驗知識並通過更少的數據來實現高性能。
多功能應用程序:使用庫進行廣泛的任務,包括文本分類,情感分析,命名實體識別,機器翻譯等。
強大的社區支持:受益於擁抱面孔提供的強大社區和廣泛的資源,以確保您獲得克服挑戰和創新所需的支持。
PEFT(參數有效的微調)庫旨在優化大規模機器學習模型的微調過程。 PEFT開發的目的是應對具有有限的計算資源的微調大規模模型的挑戰,重點關注的技術可以有效地適應預訓練的模型對新任務的有效調整,但對模型參數的變化很小。
使用PEFT的好處:
效率:側重於參數效率方法,減少與微型大型模型相關的計算和內存開銷。
可訪問性:使您可以在標準硬件上微調最先進的模型,從而使對高級機器學習技術的訪問民主化。
速度:加速微調過程,允許更快的模型更新和部署。
性能:得益於高級微調技術,即使調整了更少的參數,也可以確保高性能。
多功能性:可以應用於各種模型和任務,為機器學習從業人員提供多功能工具。
(返回到頂部)
計算這些梯度的反向傳播需要存儲模型的中間激活。這可能是記憶密集型的,尤其是對於SDXL等大型模型。梯度檢查點通過將內存使用量交換為額外的計算時間來解決此內存挑戰。梯度檢查點在反向傳播過程中並沒有在整個模型中存儲所有中間激活,而是從先前保存的檢查點開始定期重新計算激活。這種方法通過在向後通過期間直接重新計算激活來降低峰值內存的使用情況。通過使用梯度檢查點,存儲所有中間激活的存儲開銷將減少。當經過廣泛參數調整(Dreambooth)和選擇性更新(LORA)的微調模型(LORA)時,這尤其有益。雖然梯度檢查點減少了內存消耗,但由於重新組件而引入了其他計算開銷。內存和計算之間的權衡需要根據可用資源和特定的微調目標來平衡。
亞當(自適應力矩估計)是一種流行的優化算法,廣泛用於深度學習。它結合了每個參數的自適應學習率和動量以加速收斂。通常,亞當使用32位浮點數(單個精度)來存儲梯度和更新參數。 “ 8位亞當”通過為這些操作使用8位定點編號來修改此操作。通過使用8位精度而不是32位,“ 8位亞當”可以顯著降低訓練過程中存儲梯度和參數所需的內存足跡。這對於具有許多參數的大型模型尤其有利。由於記憶帶寬的要求減少,較低的精度算術操作可以潛在地加速計算。這可能會導致更快的培訓時間,尤其是在優化較低精度操作的硬件體系結構上。但是,有權衡。使用較低的精度會影響模型的準確性和穩定性,尤其是如果未仔細實施的話。諸如梯度縮放或自適應精度調整之類的技術可能需要減輕任何潛在的準確性損失。
浮點精度有兩個精度水平,32位浮點和16位浮點。 32位浮點是用於存儲模型參數和執行計算的大多數深度學習框架中使用的標準精度。它提供了高數值的精度,但需要更多的內存和計算資源。 16位浮點是降低的精度格式,該格式使用了32位浮點的一半。它加速了計算,尤其是在帶有張量內核的GPU上,同時為許多深度學習任務保持足夠的數值精度。利用16位精度可以顯著加快訓練時間,尤其是對於涉及復雜計算的大型模型等大型模型。此外,降低的精度需要更少的內存帶寬,這使得在可用硬件限制內訓練較大的型號或批處理大小。
(返回到頂部)
使用COLAB設置項目的說明。請按照下面的鏈接自己訓練。您可以在“ Statue_lora”文件夾中找到經過預定的模型。
要使用經過訓練的大理石雕像數據集訓練的驗證模型運行簡化的推理演示,請使用以下命令。
要在終端中安裝所需的軟件包,請鍵入:
pip install -r requirements.txt在終端中,類型:
streamlit run main.py(返回到頂部)