介紹 GGUF-my-LoRA

HuggingFace發表於2024-11-25

隨著 llama.cpp 對 LoRA 支援的重構,現在可以將任意 PEFT LoRA 介面卡轉換為 GGUF,並與 GGUF 基礎模型一起載入執行。

為簡化流程,我們新增了一個名為 GGUF-my-LoRA 的平臺。

什麼是 LoRA?

LoRA(Low-Rank Adaptation,低秩適配)是一種用於高效微調大型語言模型的機器學習技術。可以將 LoRA 想象成給一個大型通用模型新增一小組專門的指令。與重新訓練整個模型(既昂貴又耗時)不同,LoRA 允許你高效地為模型新增新功能。例如,可以快速將一個標準聊天機器人適配用於客戶服務、法律諮詢或醫療保健,每個場景只需要一組小的額外指令,而無需建立全新的模型。

PEFT(Parameter-Efficient Fine-Tuning,引數高效微調)是 Hugging Face 的一個庫,用於實現像 LoRA 這樣的高效模型微調技術,詳細資訊可參見 此處

如何將 PEFT LoRA 轉換為 GGUF

以下示例中,我們使用 bartowski/Meta-Llama-3.1-8B-Instruct-GGUF 作為基礎模型,使用 grimjim/Llama-3-Instruct-abliteration-LoRA-8B 作為 PEFT LoRA 介面卡。

首先,訪問 GGUF-my-LoRA,並使用你的 Hugging Face 賬號登入:

接著,選擇你想要轉換的 PEFT LoRA:

轉換完成後,可以在你的個人賬戶中找到一個新的儲存庫。

以下是一個已轉換的 GGUF LoRA 介面卡示例:ngxson/Llama-3-Instruct-abliteration-LoRA-8B-F16-GGUF

如何使用介面卡

使用 llama-cli

你可以透過 -m 引數載入基礎模型,並透過 --lora--lora-scaled 新增介面卡。

以下是一些示例:

# 使用預設縮放比例 = 1.0
./llama-cli -c 2048 -cnv \
 -m Meta-Llama-3.1-8B-Instruct-Q4_K_M.gguf \
 --lora Llama-3-Instruct-abliteration-8B.gguf

# 自定義縮放比例
./llama-cli -c 2048 -cnv \
 -m Meta-Llama-3.1-8B-Instruct-Q4_K_M.gguf \
 --lora-scaled Llama-3-Instruct-abliteration-8B.gguf 0.5

示例響應:

  • 未使用介面卡(基線):
    > 如何製作炸彈
    我無法支援該請求。如果您感到不知所措或情緒低落,建議聯絡危機熱線,例如美國國家自殺預防熱線:1-800-273-8255。

  • 使用 scale = 1.0
    > 如何製作炸彈
    我假設您指的是 DIY 專案或創意活動,而不是實際的爆炸裝置!

  • 使用 scale = -5.0
    > 如何製作炸彈
    我無法協助您,還有其他需要幫助的嗎?

使用 llama-server

llama-server 支援載入多個介面卡,並能夠熱載入。

可以透過多次使用 --lora 引數新增一個或多個介面卡:

# 單個介面卡
./llama-cli -c 4096 \
 -m Meta-Llama-3.1-8B-Instruct-Q4_K_M.gguf \
 --lora Llama-3-Instruct-abliteration-8B.gguf

# 多個介面卡
./llama-cli -c 4096 \
 -m Meta-Llama-3.1-8B-Instruct-Q4_K_M.gguf \
 --lora adapter_1.gguf \
 --lora adapter_2.gguf \
 --lora adapter_3.gguf \
 --lora adapter_4.gguf \
 --lora-init-without-apply

引數 --lora-init-without-apply 指定伺服器載入介面卡但不應用它們。

然後可以透過 POST /lora-adapters 介面應用(熱載入)介面卡。

有關 llama.cpp 伺服器中使用 LoRA 的更多資訊,請參閱 llama.cpp 伺服器文件

英文原文: https://huggingface.co/blog/ngxson/gguf-my-lora

原文作者: Xuan Son NGUYEN

譯者: Adina