如何將模型轉換為GGUF格式?
隨著大型語言模型(LLM)的規模不斷增長,需要有效的方法來存儲,部署和運行它們在低資源設備上。儘管這些模型具有強大的功能,但它們的大小和內存需求可能會使部署成為挑戰,尤其是在消費者硬件上。這是模型量化和專門的存儲格式(例如GGUF)(通用GPT統一格式)開始發揮作用的地方。
在本指南中,我們將深入研究GGUF格式,探索其好處,並為將模型轉換為GGUF提供逐步的教程。在此過程中,我們將介紹模型量化的歷史以及GGGUF如何發展以支持現代LLM。最後,您將對GGUF為何重要以及如何開始為自己的模型開始使用它有深刻的了解。
學習目標
- 理解GGUF格式的目的和結構及其從GGML演變。
- 定義量化並描述其在減少模型大小和提高部署效率方面的重要性。
- 認識GGUF命名約定的組成部分以及它們如何幫助模型識別和管理。
- 使用Llama.CPP將模型定量為GGUF格式。
- 將GGUF和量化的概念與實際用例相關聯,從而有效地部署了資源受限環境中的AI模型。
本文作為數據科學博客馬拉鬆的一部分發表。
目錄
- 模型量化的演變
- 什麼是GGUF?
- 為什麼要使用GGUF?
- GGUF格式結構和命名約定
- 設置轉換為GGUF格式
- 將模型轉換為GGUF
- GGUF轉換的最佳實踐
- GGUF和模型存儲格式的未來
- 結論
- 常見問題
模型量化的演變
GGUF的旅程始於了解模型量化的演變。量化降低了模型參數的精度,有效地壓縮了它們以減少記憶和計算需求。這是一個快速概述:
早期格式和挑戰
在早期,深度學習模型存儲在Tensorflow和Pytorch等框架的天然格式中。使用.pb文件的TensorFlow模型,而Pytorch使用.pt或.pth。這些格式用於較小的模型,但提出了局限性:
- 尺寸:型號以32位浮點格式存儲,使文件大小較大。
- 記憶使用:完整的重量重量要求大量內存,使RAM不切實際的設備上部署。
ONNX(開放神經網絡交換)
跨框架的互操作性的興起導致了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?
GGUF或通用GPT統一格式是為GGML的擴展而開發的,以支持更大的模型。這是用於存儲用於使用GGML推理和基於GGML的執行者的模型的文件格式。 GGUF是一種二進制格式,旨在快速加載和節省模型,並易於閱讀。傳統上是使用Pytorch或其他框架開發的模型,然後轉換為GGUF以用於GGML。
GGUF是GGML,GGMF和GGJT的連續文件格式,並且通過包含加載模型所需的所有信息而設計為明確的。它也被設計為可擴展的,因此可以將新信息添加到模型中而不會破壞兼容性。 它的設計有三個目標:
- 效率:使大型型號能夠在CPU和消費級硬件上有效運行。
- 可伸縮性:支持非常大的型號,通常是100GB或更多。
- 靈活性:允許開發人員在不同的量化水平,平衡模型大小和準確性之間進行選擇。
為什麼要使用GGUF?
GGUF格式為需要在有限的硬件上部署大型,資源豐富的模型的開發人員而不會犧牲性能。以下是一些核心優勢:
- 量化支持: GGUF支持一系列量化水平(4位,8位),可以在保持模型精度的同時節省大量內存。
- 元數據存儲: GGUF可以存儲詳細的元數據,例如模型架構,令牌化方案和量化水平。此元數據使加載和配置模型變得更加容易。
- 推理優化: GGUF優化了內存使用,從而可以更快地推斷基於CPU的系統。
GGUF格式結構和命名約定
GGUF格式採用特定的命名慣例來瀏覽一下關鍵的模型信息。該約定可以幫助用戶確定重要的模型特徵,例如體系結構,參數大小,微調類型,版本,編碼類型和碎片數據 - 製造模型管理和部署更容易。
GGUF命名約定遵循以下結構:
名稱中的每個組件都提供了對模型的見解:
- Basename:模型基本類型或體系結構的描述性名稱,源自元數據(例如Llama或Mixtral)。
- Sizelabel:使用X格式IE
指示模型大小:專家數量(例如8), :模型參數刻度,例如Q的Q Quadrillions,t,數万億美元,數十億美元,數十億美元,m for Million,k對於千參數。 - Finetune:模型微調目標,例如“聊天”或“指示”。
-
版本: V
。 格式中的模型版本號,如果未指定,則默認為v1.0。 - 編碼:重量編碼方案,每個項目可自定義。
- 類型:指示GGGUF文件類型,例如適配器的LORA或用於詞彙數據的詞彙。
-
碎片:表示一個模型分為部分,格式為
-of- 。
命名示例
設置轉換為GGUF格式
在進行轉換之前,請確保您有以下先決條件:
- 系統上安裝了Python 3.8。
- 模型源文件:通常是Pytorch或Tensorflow模型(例如,Llama,Falcon)或來自擁抱面的模型。
- GGUF轉換工具:這些工具通常基於GGML庫或特定的模型轉換腳本。
一些值得注意的量化技術
量化技術通過降低其大小和計算要求在優化神經網絡中起關鍵作用。通過將高精度權重和激活轉換為較低的位表示,這些方法可以有效地部署模型,而不會顯著損害性能。
將模型轉換為GGUF
以下是您可以將模型轉換為GGGUF格式的方式。
步驟1:選擇要量化的模型
在這種情況下,我們正在選擇Google的Flan-T5模型來量化。您可以按照命令直接從huggingface下載該命令
!PIP安裝擁抱面板 從huggingface_hub導入snapshot_download model_#替換為要下載的模型的ID snapshot_download(repo_id = model_id,local_dir =“ t5”)
步驟2:克隆Llama.cpp存儲庫
我們正在使用Llama.cpp將模型量化為GGUF格式
!git克隆https://github.com/ggerganov/llama.cpp
步驟3:安裝所需的依賴項
如果在Google協作中,請按以下代碼進行操作,否則您可以導航到要求目錄以安裝“ unigess-convert_hf_to_gguf.txt”
!
步驟4:選擇量化級別
量化水平決定了模型大小和準確性之間的權衡。較低位量化(如4位)可節省內存,但可能會降低準確性。例如,如果您針對僅CPU的部署,並且不需要最高的精度,那麼INT4可能是一個不錯的選擇。在這裡,我們選擇“ Q8_0”。
步驟5:運行轉換腳本
如果在Google合作中,請運行以下腳本,否則請按照註釋。
#!python {通往convert_hf_to_gguf.py的路徑} {路徑hf_model} - outfile {name_of_of_outputfile.gguf} - outtype {量化類型} !
- 通往HF_MODEL的路徑:模型目錄的路徑。
- name_of_outputfile.gguf:將保存GGGUF模型的輸出文件的名稱。如果將量化的模型推回擁抱的臉部,請使用GGUF命名約定。
- 量化類型:指定量化類型(在這種情況下,量化8位整數)。
比較原始模型的大小
當部署機器學習模型時,了解原始版本和量化版本之間的尺寸差異至關重要。該比較強調了量化如何顯著降低模型大小,從而提高了效率和更快的推理時間,而不會大大損失準確性。
#檢查原始模型和量化模型的尺寸 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轉換的最佳實踐
為了獲得最佳結果,請記住這些技巧:
- 實驗量化水平:測試多個級別(例如,4位,8位),以在模型準確性和記憶效率之間找到最佳平衡。
- 使用元數據來提高您的優勢: GGUF的廣泛元數據存儲可以簡化模型加載並減少運行時配置需求。
- 基準推斷:始終基準目標硬件上的GGGUF模型,以確保其符合速度和準確性要求。
GGUF和模型存儲格式的未來
隨著模型的不斷增長,像GGUF這樣的格式將在使大規模AI訪問中發揮越來越重要的作用。我們很快可能會看到更高級的量化技術,這些技術可以保留更準確性,同時進一步降低內存需求。目前,GGUF仍然處於最前沿,可以在CPU和Edge設備上有效地部署大型語言模型。
結論
GGUF格式是一種改變遊戲規則的人,用於在限量資源設備上有效地部署大型語言模型。從模型量化的早期努力到GGUF的開發,AI模型存儲的景觀已經發展為使更廣泛的受眾訪問強大的模型。通過遵循本指南,您現在可以將模型轉換為GGUF格式,從而更容易將它們部署到現實世界的應用程序中。
量化將繼續發展,但是GGUF支持各種精確水平和有效的元數據管理的能力確保它將保持相關性。嘗試將您的模型轉換為GGUF並親身探索好處!
關鍵要點
- 通用GPT統一格式(GGUF)可在低資源設備上有效地存儲和部署大型語言模型(LLMS),以解決與模型大小和內存需求相關的挑戰。
- 量化可以通過壓縮參數大大降低模型大小,從而使模型可以在消費級硬件上運行,同時保持基本的性能水平。
- GGUF格式具有結構化的命名約定,可幫助識別關鍵模型特徵,促進更輕鬆的管理和部署。
- 使用Llama.cpp之類的工具,用戶可以輕鬆地將模型轉換為GGUF格式,並在不犧牲準確性的情況下優化它們進行部署。
- GGUF支持高級量化水平和廣泛的元數據存儲,使其成為有效部署日益大型AI模型的前瞻性解決方案。
常見問題
Q1。 GGUF是什麼,它與GGML有何不同?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中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Meta的Llama 3.2:多模式和移動AI的飛躍 Meta最近公佈了Llama 3.2,這是AI的重大進步,具有強大的視覺功能和針對移動設備優化的輕量級文本模型。 以成功為基礎

嘿,編碼忍者!您當天計劃哪些與編碼有關的任務?在您進一步研究此博客之前,我希望您考慮所有與編碼相關的困境,這是將其列出的。 完畢? - 讓&#8217

本週的AI景觀:進步,道德考慮和監管辯論的旋風。 OpenAI,Google,Meta和Microsoft等主要參與者已經釋放了一系列更新,從開創性的新車型到LE的關鍵轉變

Shopify首席執行官TobiLütke最近的備忘錄大膽地宣布AI對每位員工的基本期望是公司內部的重大文化轉變。 這不是短暫的趨勢。這是整合到P中的新操作範式

介紹 Openai已根據備受期待的“草莓”建築發布了其新模型。這種稱為O1的創新模型增強了推理能力,使其可以通過問題進行思考

介紹 想像一下,穿過美術館,周圍是生動的繪畫和雕塑。現在,如果您可以向每一部分提出一個問題並獲得有意義的答案,該怎麼辦?您可能會問:“您在講什麼故事?

SQL的Alter表語句:動態地將列添加到數據庫 在數據管理中,SQL的適應性至關重要。 需要即時調整數據庫結構嗎? Alter表語句是您的解決方案。本指南的詳細信息添加了Colu

對於那些可能是我專欄新手的人,我廣泛探討了AI的最新進展,包括體現AI,AI推理,AI中的高科技突破,及時的工程,AI培訓,AI,AI RE RE等主題
