隨著大型語言模型(LLM)的規模不斷增長,需要有效的方法來存儲,部署和運行它們在低資源設備上。儘管這些模型具有強大的功能,但它們的大小和內存需求可能會使部署成為挑戰,尤其是在消費者硬件上。這是模型量化和專門的存儲格式(例如GGUF)(通用GPT統一格式)開始發揮作用的地方。
在本指南中,我們將深入研究GGUF格式,探索其好處,並為將模型轉換為GGUF提供逐步的教程。在此過程中,我們將介紹模型量化的歷史以及GGGUF如何發展以支持現代LLM。最後,您將對GGUF為何重要以及如何開始為自己的模型開始使用它有深刻的了解。
本文作為數據科學博客馬拉鬆的一部分發表。
GGUF的旅程始於了解模型量化的演變。量化降低了模型參數的精度,有效地壓縮了它們以減少記憶和計算需求。這是一個快速概述:
在早期,深度學習模型存儲在Tensorflow和Pytorch等框架的天然格式中。使用.pb文件的TensorFlow模型,而Pytorch使用.pt或.pth。這些格式用於較小的模型,但提出了局限性:
跨框架的互操作性的興起導致了ONNX的發展,這使模型可以在環境之間移動。但是,儘管ONNX提供了一些優化,但它仍然主要圍繞完整的重量構建,並提供了有限的量化支持。
隨著模型的增長,研究人員轉向量化,將重量從32位浮子(FP32)壓縮到16位(FP16)甚至更低,例如8位整數(INT8)。這種方法大大削減了內存需求,使得可以在更多的硬件類型上運行模型。例如:
#導入必要的庫 導入火炬 導入Torch.nn作為nn 導入火炬。 #步驟1:在Pytorch中定義一個簡單的神經網絡模型 類SimpleModel(nn.Module): def __init __(自我): 超級(SimpleModel,self).__ Init __() self.fc1 = nn.linear(10,50)#第一個完全連接的層 self.fc2 = nn.linear(50,20)#第二完全連接層 self.fc3 = nn.linear(20,5)#輸出層 def向前(self,x): x = torch.relu(self.fc1(x))#在第一層之後激活 x = torch.relu(self.fc2(x))#第二層之後的relu激活 x = self.fc3(x)#輸出層 返回x #步驟2:初始化模型並切換到評估模式 model = SimpleModel() model.eval() #在量化之前保存模型以供參考 TORCH.SAVE(模型,“ Simple_model.pth”) #步驟3:將動態量化應用於模型 #在這裡,我們僅量化線性層,將其重量更改為int8 量化_model = pont.quantize_dynamic( 型號,{nn.linear},dtype = therch.qint8 ) #保存量化的模型 TORCH.SAVE(Quantized_Model,“量化_simple_model.pth”) #用虛擬數據量化模型的示例用法 dummy_input = torch.randn(1,10)#帶有10個功能的示例輸入張量 輸出=量化_model(dummy_input) 打印(“量化模型輸出:”,輸出)
在使用大型語言模型時,了解原始版本和量化版本之間的尺寸差異至關重要。這種比較不僅強調了模型壓縮的好處,而且還為部署策略提供了有效資源使用的信息。
導入操作系統 #保存模型的路徑 Original_model_path =“ simple_model.pth” 量化_model_path =“量化_simple_model.pth” #功能以獲取KB中的文件大小 def get_file_size(路徑): size_bytes = os.path.getSize(路徑) size_kb = size_bytes / 1024#轉換為kb 返回size_kb #檢查原始模型和量化模型的尺寸 Original_size = get_file_size(oinartion_model_path) 量化= get_file_size(量化_model_path) 打印(f“原始型號大小:{oilter_size:.2f} kb”) 打印(f“量化的型號大小:{量化_size:.2f} kb”) print(f“尺寸減小:{(((原始_size -jentalized_size) / oinartion_size) * 100:.2f}%”)
但是,即使是8位精度也不足以用於GPT-3或Llama等極大的語言模型,後者刺激了GGML和GGGUF等新格式的開發。
GGUF或通用GPT統一格式是為GGML的擴展而開發的,以支持更大的模型。這是用於存儲用於使用GGML推理和基於GGML的執行者的模型的文件格式。 GGUF是一種二進制格式,旨在快速加載和節省模型,並易於閱讀。傳統上是使用Pytorch或其他框架開發的模型,然後轉換為GGUF以用於GGML。
GGUF是GGML,GGMF和GGJT的連續文件格式,並且通過包含加載模型所需的所有信息而設計為明確的。它也被設計為可擴展的,因此可以將新信息添加到模型中而不會破壞兼容性。 它的設計有三個目標:
GGUF格式為需要在有限的硬件上部署大型,資源豐富的模型的開發人員而不會犧牲性能。以下是一些核心優勢:
GGUF格式採用特定的命名慣例來瀏覽一下關鍵的模型信息。該約定可以幫助用戶確定重要的模型特徵,例如體系結構,參數大小,微調類型,版本,編碼類型和碎片數據 - 製造模型管理和部署更容易。
GGUF命名約定遵循以下結構:
名稱中的每個組件都提供了對模型的見解:
命名示例
在進行轉換之前,請確保您有以下先決條件:
量化技術通過降低其大小和計算要求在優化神經網絡中起關鍵作用。通過將高精度權重和激活轉換為較低的位表示,這些方法可以有效地部署模型,而不會顯著損害性能。
以下是您可以將模型轉換為GGGUF格式的方式。
在這種情況下,我們正在選擇Google的Flan-T5模型來量化。您可以按照命令直接從huggingface下載該命令
!PIP安裝擁抱面板 從huggingface_hub導入snapshot_download model_#替換為要下載的模型的ID snapshot_download(repo_id = model_id,local_dir =“ t5”)
我們正在使用Llama.cpp將模型量化為GGUF格式
!git克隆https://github.com/ggerganov/llama.cpp
如果在Google協作中,請按以下代碼進行操作,否則您可以導航到要求目錄以安裝“ unigess-convert_hf_to_gguf.txt”
!
量化水平決定了模型大小和準確性之間的權衡。較低位量化(如4位)可節省內存,但可能會降低準確性。例如,如果您針對僅CPU的部署,並且不需要最高的精度,那麼INT4可能是一個不錯的選擇。在這裡,我們選擇“ Q8_0”。
如果在Google合作中,請運行以下腳本,否則請按照註釋。
#!python {通往convert_hf_to_gguf.py的路徑} {路徑hf_model} - outfile {name_of_of_outputfile.gguf} - outtype {量化類型} !
當部署機器學習模型時,了解原始版本和量化版本之間的尺寸差異至關重要。該比較強調了量化如何顯著降低模型大小,從而提高了效率和更快的推理時間,而不會大大損失準確性。
#檢查原始模型和量化模型的尺寸 Original_model_path =“/content/t5/model.safetensors” 量化_model_path =“ t5.gguf” Original_size = get_file_size(oinartion_model_path) 量化= get_file_size(量化_model_path) 打印(f“原始型號大小:{oilter_size:.2f} kb”) 打印(f“量化的型號大小:{量化_size:.2f} kb”) print(f“尺寸減小:{(((原始_size -jentalized_size) / oinartion_size) * 100:.2f}%”)
使用GGGUF量化技術,我們可以看到驚人的73.39%的尺寸降低。
為了獲得最佳結果,請記住這些技巧:
隨著模型的不斷增長,像GGUF這樣的格式將在使大規模AI訪問中發揮越來越重要的作用。我們很快可能會看到更高級的量化技術,這些技術可以保留更準確性,同時進一步降低內存需求。目前,GGUF仍然處於最前沿,可以在CPU和Edge設備上有效地部署大型語言模型。
GGUF格式是一種改變遊戲規則的人,用於在限量資源設備上有效地部署大型語言模型。從模型量化的早期努力到GGUF的開發,AI模型存儲的景觀已經發展為使更廣泛的受眾訪問強大的模型。通過遵循本指南,您現在可以將模型轉換為GGUF格式,從而更容易將它們部署到現實世界的應用程序中。
量化將繼續發展,但是GGUF支持各種精確水平和有效的元數據管理的能力確保它將保持相關性。嘗試將您的模型轉換為GGUF並親身探索好處!
A. GGUF(通用GPT統一格式)是一種高級模型存儲格式,旨在有效地存儲和運行量化的大型語言模型。與其前身GGML(對於超過100GB的模型的可伸縮性)不同,GGUF支持廣泛的4位和8位量化選項,並提供了豐富的元數據存儲能力,增強了模型管理和部署。
Q2。量化如何影響模型性能?答:量化降低了模型參數的精度,大大降低了其大小和內存使用情況。雖然它可以導致精確度略有下降,但設計良好的量化技術(例如GGUF的技術)可以保持可接受的性能水平,從而使在資源受限設備上部署大型模型是可行的。
Q3。 GGUF命名約定的主要組成部分是什麼?答:GGUF命名約定包括幾個組件,包括Basename(模型體系結構),Sizelabel(參數權重類),Finetune(微調目標),版本(模型版本編號),編碼(重量編碼方案),類型(類型(文件)(文件目的)和Shard(用於拆分型號)。這些組件一起提供了有關模型的基本信息。
Q4。如何驗證GGUF文件名?答:您可以使用正則表達式驗證GGUF文件名,該表達式至少以正確的順序檢查Basename,sizelabel和版本。這樣可以確保文件遵守命名約定,並包含用於模型標識的必要信息。
本文所示的媒體不由Analytics Vidhya擁有,並由作者酌情使用。
以上是如何將模型轉換為GGUF格式?的詳細內容。更多資訊請關注PHP中文網其他相關文章!