為了説明您更好地瞭解 QLoRA 微調的過程,在本教程中,我們提供了一個實用指南,利用 IPEX-LLM 將大型語言模型調整到特定任務。這裡以 llama-2-7b-hf 為例來調整文本生成實現。

7.1.1 在 Intel GPU 上啟用 IPEX-LLM

7.1.1.1 在 Intel GPU 上安裝 IPEX-LLM

按照 Readme 中的步驟設置環境後,您可以使用以下命令在終端中安裝 IPEX-LLM:

pip install --pre --upgrade ipex-llm[xpu] -f <https://developer.intel.com/ipex-whl-stable-xpu>
pip install transformers==4.34.0 datasets
pip install peft==0.5.0
pip install accelerate==0.23.0

注意如果您使用的是舊版本 (具體而言,早於 ),則需要在代碼的開頭手動添加。ipex-llm2.5.0b20240104import intel_extension_for_pytorch as ipex

7.1.1.2 設置 OneAPI 環境變數

還需要為 Intel GPU 上的 IPEX-LLM 設置 OneAPI 環境變數。

# configure OneAPI environment variables
source /opt/intel/oneapi/setvars.sh

安裝和環境設置完成後,我們來看看本教程的 Python 腳本

7.1.2 QLoRA 微調

7.1.2.1 低精度載入模型

選擇一個流行的開源 LLM meta-llama/Llama-2-7b-hf 來說明 QLoRA 微調的過程。

注意

您可以使用 Huggingface 儲存庫 ID 或本地模型路徑指定參數。 如果您已經下載了 Llama 2 (7B) 模型,則可以指定到本地模型路徑。pretrained_model_name_or_pathpretrained_model_name_or_path

使用IPEX-LLM優化,您可以載入模型,而不是進行隱式量化。ipex_llm.transformers.AutoModelForCausalLMtransformers.AutoModelForCausalLM

對於 Intel GPU,一旦您的模型為低精度,請將其設置為 to('xpu')。

from ipex_llm.transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained(pretrained_model_name_or_path = "meta-llama/Llama-2-7b-hf",
                                             load_in_low_bit="nf4",
                                             optimize_model=False,
                                             torch_dtype=torch.float16,
                                             modules_to_not_convert=["lm_head"])
model = model.to('xpu')

注意

我們在這裡指定 load_in_low_bit=“nf4” 來應用 4 位 NormalFloat 優化。根據 QLoRA 論文,使用 「nf4」 可以比 「int4」 產生更好的模型品質。

7.1.2.2 準備模型進行訓練