自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

大模型微調(diào)方法之QLoRA 原創(chuàng)

發(fā)布于 2024-10-15 14:00
瀏覽
0收藏

?本文介紹大模型微調(diào)方法中的QLoRA。

QLoRA由華盛頓大學(xué)UW NLP小組的成員于2023年提出發(fā),旨在進(jìn)一步降低微調(diào)大模型的微調(diào)成本,因?yàn)閷τ谏习賰|參數(shù)量的模型,LoRA微調(diào)的成本還是很高。

感興趣的小伙伴可以去閱讀一下原文:https://arxiv.org/pdf/2305.14314

模型介紹

大模型微調(diào)方法之QLoRA-AI.x社區(qū)

上圖為QLoRA的訓(xùn)練過程圖,QLoRA更多的是在工程上進(jìn)行了量化和優(yōu)化,從圖中可知,主要有4個(gè)部分的改進(jìn):

  • QLORA:是一種優(yōu)化的4-bit量化數(shù)據(jù)類型,專為正態(tài)分布權(quán)重設(shè)計(jì),通過結(jié)合低精度存儲和中等精度計(jì)算來提升模型性能。它使用4-bit存儲權(quán)重以減少內(nèi)存使用,并在計(jì)算時(shí)將權(quán)重轉(zhuǎn)換為16-bit的BFloat16格式以保持準(zhǔn)確性。這種方法適用于模型加載和訓(xùn)練過程,旨在平衡存儲效率和計(jì)算精度。
  • Double Quantization:是一種模型量化技術(shù),它通過對已經(jīng)量化過的常量進(jìn)行二次量化,進(jìn)一步減少存儲空間的需求。這種方法比傳統(tǒng)的模型量化方法更能節(jié)省顯存空間,每個(gè)參數(shù)平均可以節(jié)省0.37bit。例如,在65B的LLaMA模型中,這種雙量化技術(shù)能夠節(jié)省大約3GB的顯存空間。
  • Paged Optimizers:是一種利用NVIDIA統(tǒng)一內(nèi)存特性的優(yōu)化技術(shù),旨在解決GPU在處理過程中偶爾出現(xiàn)內(nèi)存溢出(OOM)的問題。該技術(shù)通過自動(dòng)在CPU和GPU之間進(jìn)行分頁到分頁的數(shù)據(jù)傳輸,確保GPU處理過程無錯(cuò)誤進(jìn)行。其工作原理類似于CPU內(nèi)存與磁盤之間的常規(guī)內(nèi)存分頁機(jī)制。具體來說,Paged Optimizers為優(yōu)化器狀態(tài)分配分頁內(nèi)存,當(dāng)GPU內(nèi)存不足時(shí),自動(dòng)將優(yōu)化器狀態(tài)卸載到CPU內(nèi)存中;而在需要更新優(yōu)化器狀態(tài)時(shí),再將其加載回GPU內(nèi)存。
  • Adapter:為了彌補(bǔ)4-bit NormalFloat和Double Quantization帶來的性能損失,作者采用了插入更多adapter的方法。在LoRA中,通常只在query和value的全連接層處插入adapter。而在QLoRA中,作者在所有全連接層處都插入了adapter,以增加訓(xùn)練參數(shù)并彌補(bǔ)由于精度降低而導(dǎo)致的性能損失。

Adapter實(shí)現(xiàn)

QLoRA的一個(gè)重要的改進(jìn)和核心工作則是將量化的思想和LoRA的低秩適配器的思想結(jié)合到一起拿來對大模型進(jìn)行微調(diào),因此單獨(dú)拎出來說,實(shí)現(xiàn)的代碼如下:

if checkpoint_dir is not None:
    print("Loading adapters from checkpoint.")
    model = PeftModel.from_pretrained(model, join(checkpoint_dir, 'adapter_model'), is_trainable=True)
else:
    print(f'adding LoRA modules...')
    modules = find_all_linear_names(args, model)
    config = LoraConfig(
        r=args.lora_r,
        lora_alpha=args.lora_alpha,
        target_modules=modules,
        lora_dropout=args.lora_dropout,
        bias="none",
        task_type="CAUSAL_LM",
    )
    model = get_peft_model(model, config)
  • ???find_all_linear_names???:找到所有的全連接層
  • ???get_peft_model???:在所有全連接層中插入LoRA模塊

?

本文轉(zhuǎn)載自公眾號瓦力算法學(xué)研所,作者:喜歡瓦力的卷卷

原文鏈接:??https://mp.weixin.qq.com/s/i1kJ7kwIIG_qIsfEAei7mQ???

?著作權(quán)歸作者所有,如需轉(zhuǎn)載,請注明出處,否則將追究法律責(zé)任
標(biāo)簽
收藏
回復(fù)
舉報(bào)
回復(fù)
相關(guān)推薦