首頁 > 科技週邊 > 人工智慧 > 如何將模型轉換為GGUF格式?

如何將模型轉換為GGUF格式?

尊渡假赌尊渡假赌尊渡假赌
發布: 2025-03-20 11:04:13
原創
833 人瀏覽過

隨著大型語言模型(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)
打印(“量化模型輸出:”,輸出)
登入後複製

如何將模型轉換為GGUF格式?

檢查原始模型和量化模型的大小

在使用大型語言模型時,了解原始版本和量化版本之間的尺寸差異至關重要。這種比較不僅強調了模型壓縮的好處,而且還為部署策略提供了有效資源使用的信息。

導入操作系統

#保存模型的路徑
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}%”)
登入後複製

如何將模型轉換為GGUF格式?

但是,即使是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命名約定遵循以下結構:

如何將模型轉換為GGUF格式?

名稱中的每個組件都提供了對模型的見解:

  • Basename:模型基本類型或體系結構的描述性名稱,源自元數據(例如Llama或Mixtral)。
  • Sizelabel:使用X格式IE 指示模型大小:專家數量(例如8), :模型參數刻度,例如Q的Q Quadrillions,t,數万億美元,數十億美元,數十億美元,m for Million,k對於千參數。
  • Finetune:模型微調目標,例如“聊天”或“指示”。
  • 版本: V 格式中的模型版本號,如果未指定,則默認為v1.0。
  • 編碼:重量編碼方案,每個項目可自定義。
  • 類型:指示GGGUF文件類型,例如適配器的LORA或用於詞彙數據的詞彙。
  • 碎片:表示一個模型分為部分,格式為 -of-

命名示例

如何將模型轉換為GGUF格式?

設置轉換為GGUF格式

在進行轉換之前,請確保您有以下先決條件:

  • 系統上安裝了Python 3.8。
  • 模型源文件:通常是Pytorch或Tensorflow模型(例如,Llama,Falcon)或來自擁抱面的模型。
  • GGUF轉換工具:這些工具通常基於GGML庫或特定的模型轉換腳本。

一些值得注意的量化技術

量化技術通過降低其大小和計算要求在優化神經網絡中起關鍵作用。通過將高精度權重和激活轉換為較低的位表示,這些方法可以有效地部署模型,而不會顯著損害性能。

如何將模型轉換為GGUF格式?

將模型轉換為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}%”)
登入後複製

如何將模型轉換為GGUF格式?

使用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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板