国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

大模型微調踩坑記錄 - 基于Alpaca-LLaMa+Lora

這篇具有很好參考價值的文章主要介紹了大模型微調踩坑記錄 - 基于Alpaca-LLaMa+Lora。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言

為了使用開放權重的LLM(大語言模型),基于自己的訓練集,微調模型,會涉及到如下一些技術要點:

  • 配置運行環(huán)境
  • 下載、加載基礎模型
  • 收集語料、微調訓練
  • 檢驗訓練效果

在實施過程中,遇到不少困難,因此寫下這篇文檔,做為記錄。

環(huán)境配置

1. 模型加載 - icetk報錯

(1) 問題描述

在huggingface的模型庫中,大模型會被分散為多個bin文件,在加載這些原始模型時,有些模型(如Chat-GLM)需要安裝icetk。

這里遇到了第一個問題,使用pip安裝icetktorch兩個包后,使用from_pretrained加載模型時會報缺少icetk的情況。
但實際情況是這個包已經安裝了。

查資料的過程中,有人說出現(xiàn)該錯誤的原因是icetk依賴cpu版torch2.0,需要先裝icetk再裝GPU版torch。
但我嘗試該方案后并不成功,之后在github上看到一條相同的issue,下方的回答中提到的方法,成功解決了我的問題。

(2) 解決方案
  • 啟動python環(huán)境,執(zhí)行import icetk會報錯,并指向lzma.py中的引用錯誤
  • 根據(jù)錯誤提示,定位到lzma.py文件及相關代碼的位置
  • 按如下方式修改源代碼

修改前

from _lzma import *
from _lzma import _encode_filter_properties, _decode_filter_properties

修改后

try:
	from _lzma import *
	from _lzma import _encode_filter_properties, _decode_filter_properties
except ImportError:
	from backports.lzma import *
	from backports.lzma import _encode_filter_properties, _decode_filter_properties

2. 安裝指定版本 - transformers安裝

(1) 問題描述

截止到目前(2023-04-06),Meta官方仍未對LLaMa模型開源,網上流傳的為泄露版。因此,正式版transformers沒有該模型的Model或Tokenizer庫。

在查找資料的過程中,有人說使用pip install git+某版本transformer安裝dev版transformers。
但由于當我使用該指令安裝時,這里指定的分支已經被刪除了,所以無法安裝成功。

(2) 解決方案

因為無法通過pip install的方式安裝,所以這里考慮用編譯源碼的方式安裝。

git clone https://github.com/huggingface/transformers.git
pip install -e .

因為模型目前還未開源,所以使用這種方式解決。未來Meta正式開源該模型后,transformers肯定會提供支持。
屆時,直接使用pip install transformers即可。

微調訓練

1. 并行計算 - bitsandbytes報錯

(1) 問題描述

安裝bitsandbytes,可以在加載模型時,設置load_in_8bit=True, device_map='auto'降低顯存,并將模型分布到GPU上計算。

但在引用時會出現(xiàn)警告: UserWarning: The installed version of bitsandbytes was compiled without GPU support.。
并在模型加載時會報有關"libsbitsandbytes_cpu.so"的編譯錯誤。

(2) 解決方案
  1. 正確安裝cuda、cuda-tookit
  2. 在.bashrc中配置LD_LIBRARY_PATH

詳細情況可參考這篇博客:bitsandbytes報錯解決方案

可能是因為Nvidia針對浮點型計算進行過優(yōu)化,使用load_in_8bit=True讓參數(shù)以整型進行計算,反而會降低計算速度。
因此,在顯存足夠時,建議不使用該設置。

2. 模型微調 - 使用PEFT

Lora技術提出之后,huggingface提供了PEFT框架支持,可通過pip install peft安裝。

使用時分為如下步驟:

  1. 參數(shù)設置 - 配置Lora參數(shù),通過get_peft_model方法加載模型。
  2. 模型訓練 - 此時只會微調模型的部分參數(shù)、而其他參數(shù)不變。
  3. 模型保存 - 使用model.save_pretrained("output_dir")方法保存模型。
  4. 模型加載 - 讀取保存peft模型及相關配置,使用PeftModel.from_pretrained(model, peft_model_id)方法加載模型。

(1) 模型訓練、保存

from transformers import AutoModel
from peft import get_peft_model, LoraConfig

# Lora參數(shù)設置
peft_config = LoraConfig(
	r=lora_r,
	lora_alpha=lora_alpha,
	target_modules=lora_target_modules,
	lora_dropout=lora_dropout,
	bias="none",
	task_type="CAUSAL_LM",
)

# 模型加載
model = AutoModel.from_pretrained("model_name_or_path")
model = get_peft_model(model, peft_config)
# output: trainable params: 4194304 || all params: 6742609920 || trainable%: 0.06220594176090199
model.print_trainable_parameters()

# 模型訓練
...

# 模型保存
model.save_pretrained("output_dir") 

(2) 模型加載、計算

以下是官方給出的樣例,但是按該方式加載模型,在計算時會出現(xiàn)AttributeError: 'NoneType' object has no attribute 'device'報錯。

from transformers import AutoModel, AutoTokenizer
from peft import PeftModel, PeftConfig

# 加載peft配置
peft_model_id = "output_dir"
peft_config = PeftConfig.from_pretrained(peft_model_id)

# 加載tokenizer
tokenizer = AutoTokenizer.from_pretrained(peft_config.base_model_name_or_path)

# 結合基礎模型和微調結果,加載模型
model = AutoModel.from_pretrained(peft_config.base_model_name_or_path)
model = PeftModel.from_pretrained(model, peft_model_id)
model = model.to(device)
model.eval()

# 模型計算
...

在查找資料后,發(fā)現(xiàn)這是PEFT在遇到GPU加載模型時會產生的bug。
根據(jù)使用環(huán)境是單GPU或多GPU,分別按以下兩種方式使用,即可解決上述問題。

解決方案 - 單GPU
# 加載基礎模型
base_model = AutoModel.from_pretrained(
    model_path,
    load_in_8bit=True,
    torch_dtype=torch.float16,
    # device_map="{'': 0}"
    device_map="auto"
)

peft_model = PeftModel.from_pretrained(
    base_model,
    peft_model_id,
    torch_dtype=torch.float16,
    # device_map="{'': 0}"
    device_map="auto"
)
解決方案 - 多GPU
# 加載基礎模型
base_model = AutoModel.from_pretrained(
    model_path,
    load_in_8bit=True,
    torch_dtype=torch.float16,
    device_map="auto"
)

# 獲取模型參數(shù)分配表
device_map = {f"base_model.model.{k}": v for k, v in model.hf_device_map.items()}

# 按相同的參數(shù)分配加載peft model
peft_model = PeftModel.from_pretrained(
    base_model,
    peft_model_id,
    device_map=device_map,
    torch_dtype=torch.float16
)

在查找資料的過程中,我先看到的是單GPU的解決方案,但是該方案對多GPU不適用。
應該是因為自動分配參數(shù)時,無法保證peft_model和base_model的分配方法一致。
因此,在多GPU環(huán)境下,需通過device_map綁定二者參數(shù)的分配方式。

吐槽

在查資料的過程中,建議大家多用谷歌、少用百度。
上述這幾個問題,都在github對應倉庫的issue里有人提出過,我也都是從下方的答復中找到的解決方案。
但是在用百度和谷歌搜報時,百度卻從沒給出github上的回答。

百度 谷歌
大模型微調踩坑記錄 - 基于Alpaca-LLaMa+Lora 大模型微調踩坑記錄 - 基于Alpaca-LLaMa+Lora

參考文檔

icetk報錯 - https://github.com/THUDM/ChatGLM-6B/issues/323
bitsandbytes報錯 - https://github.com/oobabooga/text-generation-webui/issues/147#issuecomment-1456040134
peft使用說明 - https://huggingface.co/blog/peft
peft加載模型 - https://github.com/tloen/alpaca-lora/issues/77文章來源地址http://www.zghlxwxcb.cn/news/detail-484305.html

到了這里,關于大模型微調踩坑記錄 - 基于Alpaca-LLaMa+Lora的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 類ChatGPT模型LLaMA的解讀與其微調:Alpaca-LoRA/Vicuna/BELLE/中文LLaMA/姜子牙

    類ChatGPT模型LLaMA的解讀與其微調:Alpaca-LoRA/Vicuna/BELLE/中文LLaMA/姜子牙

    近期,除了研究ChatGPT背后的各種技術細節(jié) 不斷看論文(至少100篇,100篇目錄見此:ChatGPT相關技術必讀論文100篇),還開始研究一系列開源模型(包括各自對應的模型架構、訓練方法、訓練數(shù)據(jù)、本地私有化部署、硬件配置要求、微調等細節(jié))? 本文一開始是作為此文《ChatGPT技術

    2024年02月16日
    瀏覽(27)
  • 類ChatGPT模型LLaMA的解讀與其微調:Alpaca-LoRA/Vicuna/BELLE

    類ChatGPT模型LLaMA的解讀與其微調:Alpaca-LoRA/Vicuna/BELLE

    近期,除了研究ChatGPT背后的各種技術細節(jié) 不斷看論文(至少100篇,100篇目錄見此:ChatGPT相關技術必讀論文100篇),還開始研究一系列開源模型(包括各自對應的模型架構、訓練方法、訓練數(shù)據(jù)、本地私有化部署、硬件配置要求、微調等細節(jié))? 本文一開始是作為此文《ChatGPT技術

    2024年02月08日
    瀏覽(26)
  • LLM-LLaMA中文衍生模型:Chinese-LLaMA-Alpaca【擴充詞表、Lora部分參數(shù)預訓練、微調】

    GitHub:GitHub - ymcui/Chinese-LLaMA-Alpaca: 中文LLaMAAlpaca大語言模型+本地CPU/GPU訓練部署 (Chinese LLaMA Alpaca LLMs) 中文LLaMA模型 中文LLaMA模型在原版的基礎上擴充了中文詞表,使用了中文通用純文本數(shù)據(jù)進行二次預訓練。 模型名稱 訓練數(shù)據(jù) 重構模型[1] 大小[2] LoRA下載[3] Chinese-LLaMA-7B 通用

    2024年02月15日
    瀏覽(23)
  • 足夠驚艷,使用Alpaca-Lora基于LLaMA(7B)二十分鐘完成微調,效果比肩斯坦福羊駝

    足夠驚艷,使用Alpaca-Lora基于LLaMA(7B)二十分鐘完成微調,效果比肩斯坦福羊駝

    之前嘗試了 從0到1復現(xiàn)斯坦福羊駝(Stanford Alpaca 7B) ,Stanford Alpaca 是在 LLaMA 整個模型上微調,即對預訓練模型中的所有參數(shù)都進行微調(full fine-tuning)。但該方法對于硬件成本要求仍然偏高且訓練低效。 因此, Alpaca-Lora 則是利用 Lora 技術,在凍結原模型 LLaMA 參數(shù)的情況下

    2024年02月03日
    瀏覽(23)
  • 在自定義數(shù)據(jù)集上微調Alpaca和LLaMA

    在自定義數(shù)據(jù)集上微調Alpaca和LLaMA

    本文將介紹使用LoRa在本地機器上微調Alpaca和LLaMA,我們將介紹在特定數(shù)據(jù)集上對Alpaca LoRa進行微調的整個過程,本文將涵蓋數(shù)據(jù)處理、模型訓練和使用流行的自然語言處理庫(如Transformers和hugs Face)進行評估。此外還將介紹如何使用grado應用程序部署和測試模型。 首先,alpaca-l

    2024年02月17日
    瀏覽(19)
  • LLaMA的解讀與其微調:Alpaca-LoRA/Vicuna/BELLE/中文LLaMA/姜子牙/LLaMA 2

    LLaMA的解讀與其微調:Alpaca-LoRA/Vicuna/BELLE/中文LLaMA/姜子牙/LLaMA 2

    近期,除了研究ChatGPT背后的各種技術細節(jié) 不斷看論文(至少100篇,100篇目錄見此:ChatGPT相關技術必讀論文100篇),還開始研究一系列開源模型(包括各自對應的模型架構、訓練方法、訓練數(shù)據(jù)、本地私有化部署、硬件配置要求、微調等細節(jié))? 本文一開始是作為此文《ChatGPT技術

    2024年02月17日
    瀏覽(26)
  • 安裝單機版大語言模型AI,基于LLaMA的斯坦福大學開源Alpaca

    個人電腦即可,不需要GPU,但內存最好大于8G。我是在VM虛擬機中安裝成功,且流程運行。 1.?首先使用如下命令下載 alpaca.cpp 項目 2.進入項目后,下載模型 ?下載模型到目錄中,下載地址 3.然后編譯 4.開始運行 如果運行時報錯,有可能是內存或CPU性能不足。 英語場景很流暢

    2024年02月13日
    瀏覽(17)
  • 基于中文金融知識的 LLaMA 系微調模型的智能問答系統(tǒng):LLaMA大模型訓練微調推理等詳細教學

    基于中文金融知識的 LLaMA 系微調模型的智能問答系統(tǒng):LLaMA大模型訓練微調推理等詳細教學

    項目設計集合(人工智能方向):助力新人快速實戰(zhàn)掌握技能、自主完成項目設計升級,提升自身的硬實力(不僅限NLP、知識圖譜、計算機視覺等領域) :匯總有意義的項目設計集合,助力新人快速實戰(zhàn)掌握技能,助力用戶更好利用 CSDN 平臺,自主完成項目設計升級,提升自

    2024年02月14日
    瀏覽(21)
  • 類ChatGPT項目的部署與微調(上):從LLaMA到Alpaca、Vicuna、BELLE

    類ChatGPT項目的部署與微調(上):從LLaMA到Alpaca、Vicuna、BELLE

    近期,除了研究ChatGPT背后的各種技術細節(jié) 不斷看論文(至少100篇,100篇目錄見此:ChatGPT相關技術必讀論文100篇),還開始研究一系列開源模型(包括各自對應的模型架構、訓練方法、訓練數(shù)據(jù)、本地私有化部署、硬件配置要求、微調等細節(jié))? 本文一開始是作為此文《ChatGPT技術

    2023年04月12日
    瀏覽(27)
  • 大模型入門(四)—— 基于peft 微調 LLaMa模型

    大模型入門(四)—— 基于peft 微調 LLaMa模型

    llama-7b模型大小大約27G,本文在單張/兩張 16G V100上基于hugging face的peft庫實現(xiàn)了llama-7b的微調。 1、模型和數(shù)據(jù)準備 使用的大模型:https://huggingface.co/decapoda-research/llama-7b-hf,已經是float16的模型。 微調數(shù)據(jù)集:https://github.com/LC1332/Chinese-alpaca-lora/blob/main/data/trans_chinese_alpaca_data.

    2024年02月10日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包