日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
QLoRa:在消費(fèi)級(jí)GPU上微調(diào)大型語(yǔ)言模型

大多數(shù)大型語(yǔ)言模型(LLM)都無(wú)法在消費(fèi)者硬件上進(jìn)行微調(diào)。例如,650億個(gè)參數(shù)模型需要超過(guò)780 Gb的GPU內(nèi)存。這相當(dāng)于10個(gè)A100 80gb的gpu。就算我們使用云服務(wù)器,花費(fèi)的開(kāi)銷(xiāo)也不是所有人都能夠承擔(dān)的。

成都創(chuàng)新互聯(lián)網(wǎng)站建設(shè)服務(wù)商,為中小企業(yè)提供成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)服務(wù),網(wǎng)站設(shè)計(jì),網(wǎng)站托管維護(hù)等一站式綜合服務(wù)型公司,專(zhuān)業(yè)打造企業(yè)形象網(wǎng)站,讓您在眾多競(jìng)爭(zhēng)對(duì)手中脫穎而出成都創(chuàng)新互聯(lián)。

而QLoRa (Dettmers et al., 2023),只需使用一個(gè)A100即可完成此操作。

在這篇文章中將介紹QLoRa。包括描述它是如何工作的,以及如何使用它在GPU上微調(diào)具有200億個(gè)參數(shù)的GPT模型。

為了進(jìn)行演示,本文使用nVidia RTX 3060 12 GB來(lái)運(yùn)行本文中的所有命令。這樣可以保證小顯存的要求,并且也保證可以使用免費(fèi)的Google Colab實(shí)例來(lái)實(shí)現(xiàn)相同的結(jié)果。但是,如果你只有較小內(nèi)存的GPU,則必須使用較小的LLM。

QLoRa: Quantized LLMs with Low-Rank Adapters

2021年6月,發(fā)布的LoRa讓我們的微調(diào)變得簡(jiǎn)單,我也在以前的文章中也有過(guò)介紹。

LoRa為L(zhǎng)LM的每一層添加了少量的可訓(xùn)練參數(shù)(適配器),并凍結(jié)了所有原始參數(shù)。這樣對(duì)于微調(diào),只需要更新適配器權(quán)重,這可以顯著減少內(nèi)存占用。

而QLoRa更進(jìn)一步,引入了4位量化、雙量化和利用nVidia統(tǒng)一內(nèi)存進(jìn)行分頁(yè)。

簡(jiǎn)而言之,QLoRa工作原理如下:

  • 4位NormalFloat量化:這是一種改進(jìn)量化的方法。它確保每個(gè)量化倉(cāng)中有相同數(shù)量的值。這避免了計(jì)算問(wèn)題和異常值的錯(cuò)誤。
  • 雙量化:QLoRa的作者將其定義如下“對(duì)量化常量再次量化以節(jié)省額外內(nèi)存的過(guò)程?!?/li>
  • 統(tǒng)一內(nèi)存分頁(yè):它依賴(lài)于NVIDIA統(tǒng)一內(nèi)存管理,自動(dòng)處理CPU和GPU之間的頁(yè)到頁(yè)傳輸。它可以保證GPU處理無(wú)錯(cuò),特別是在GPU可能耗盡內(nèi)存的情況下。

所有這些步驟都大大減少了微調(diào)所需的內(nèi)存,同時(shí)性能幾乎與標(biāo)準(zhǔn)微調(diào)相當(dāng)。

使用QLoRa對(duì)GPT模型進(jìn)行微調(diào)

硬件要求:

下面的演示工作在具有12gb VRAM的GPU上,用于參數(shù)少于200億個(gè)模型,例如GPT-J。

如果你有一個(gè)更大的卡,比如24gb的VRAM,則可以用一個(gè)200億個(gè)參數(shù)的模型,例如GPT-NeoX-20b。

內(nèi)存建議至少6 Gb,這個(gè)條件現(xiàn)在都能滿(mǎn)足對(duì)吧。

GPT-J和GPT-NeoX-20b都是非常大的模型。所以硬盤(pán)議至少有100gb的可用空間。

如果你的機(jī)器不滿(mǎn)足這些要求,可以使用Google Colab的免費(fèi)實(shí)例,因?yàn)樗妥銐蚴褂昧恕?/p>

軟件要求:

必須要CUDA。這是肯定的。然后還需要一些依賴(lài):

  • bitsandbytes:包含量化LLM所需的所有庫(kù)。
  • Hugging Face的Transformers和Accelerate:這些是標(biāo)準(zhǔn)庫(kù),用于訓(xùn)練模型。
  • PEFT:提供了各種微調(diào)方法的實(shí)現(xiàn),我們只需要里面的LoRa。
  • 數(shù)據(jù)集:自己的數(shù)據(jù)集,這里安裝了Hugging Face的datasets,這個(gè)是備選,裝不裝無(wú)所謂,因?yàn)檫@玩意挺難用的

PIP安裝命令如下:

pip install -q -U bitsandbytes
 pip install -q -U git+https://github.com/huggingface/transformers.git
 pip install -q -U git+https://github.com/huggingface/peft.git
 pip install -q -U git+https://github.com/huggingface/accelerate.git
 pip install -q datasets

下面就是Python代碼

1、GPT模型的加載與量化

我們需要以下導(dǎo)入來(lái)加載和量化LLM。

import torch
 from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig

我們將對(duì)EleutherAI預(yù)訓(xùn)練的GPT NeoX模型進(jìn)行微調(diào)。這是一個(gè)有200億個(gè)參數(shù)的模型。注意:GPT NeoX具有允許商業(yè)使用的寬松許可證(Apache 2.0)。

可以從hug Face Hub獲得這個(gè)模型和相關(guān)的標(biāo)記器:

model_name = "EleutherAI/gpt-neox-20b"
 
 #Tokenizer
 tokenizer = AutoTokenizer.from_pretrained(model_name)

然后配置量化器,如下所示:

quant_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_use_double_quant=True,
    bnb_4bit_quant_type="nf4",
    bnb_4bit_compute_dtype=torch.bfloat16
 )
  • load_in_4bit:模型將以4位精度加載到內(nèi)存中。
  • bnb_4bit_use_double_quant:QLoRa提出的雙量化。
  • bnb_4bit_quant_type:這是量化的類(lèi)型。“nf4”代表4位的NormalFloat。
  • bnb_4bit_compute_dtype:當(dāng)以4位加載和存儲(chǔ)模型時(shí),在需要時(shí)對(duì)其進(jìn)行部分量化,并以16位精度(bfloat16)進(jìn)行所有計(jì)算。

然后就可以加載4位模型:

model = AutoModelForCausalLM.from_pretrained(model_name, quantization_cnotallow=quant_config, device_map={"":0})

下一步啟用梯度檢查點(diǎn),這樣可以減少內(nèi)存占用,但是速度會(huì)稍微降低一些:

model.gradient_checkpointing_enable()

2、LoRa的GPT模型預(yù)處理

為L(zhǎng)oRa準(zhǔn)備模型,為每一層添加可訓(xùn)練的適配器。

from peft import prepare_model_for_kbit_training, LoraConfig, get_peft_model
 
 model = prepare_model_for_kbit_training(model)
 
 config = LoraConfig(
    r=8,
    lora_alpha=32,
    target_modules=["query_key_value"],
    lora_dropout=0.05,
    bias="none",
    task_type="CAUSAL_LM"
 )
 
 model = get_peft_model(model, config)

在LoraConfig中,可以使用r、alpha和dropout來(lái)獲得更好的任務(wù)結(jié)果。具體內(nèi)容可以在PEFT文檔中找到更多選項(xiàng)和詳細(xì)信息。

使用LoRa,我們只添加了800萬(wàn)個(gè)參數(shù)。并且只訓(xùn)練這些參數(shù),這樣使得微調(diào)很快。

3、數(shù)據(jù)集

對(duì)于這個(gè)演示,我們使用“english_quotes”數(shù)據(jù)集。這是一個(gè)由名言組成的數(shù)據(jù)集,在CC BY 4.0許可下發(fā)布。我們?yōu)榱朔奖闶褂胐atasets直接加載。

from datasets import load_dataset
 data = load_dataset("Abirate/english_quotes")
 data = data.map(lambda samples: tokenizer(samples["quote"]), batched=True)

4、微調(diào)

微調(diào)的代碼非常標(biāo)準(zhǔn)

import transformers
 
 tokenizer.pad_token = tokenizer.eos_token
 
 trainer = transformers.Trainer(
    model=model,
    train_dataset=data["train"],
    args=transformers.TrainingArguments(
        per_device_train_batch_size=1,
        gradient_accumulation_steps=8,
        warmup_steps=2,
        max_steps=20,
        learning_rate=2e-4,
        fp16=True,
        logging_steps=1,
        output_dir="outputs",
        optim="paged_adamw_8bit"
    ),
    data_collator=transformers.DataCollatorForLanguageModeling(tokenizer, mlm=False),
 )
 trainer.train()

要記住optim=”paged_adamw_8bit”。它將使用分頁(yè)實(shí)現(xiàn)更好的內(nèi)存管理。沒(méi)有它可能會(huì)出現(xiàn)內(nèi)存不足錯(cuò)誤。

在Google Colab上運(yùn)行這個(gè)微調(diào)只需要5分鐘。VRAM消耗的峰值是15gb。

它有用嗎?讓我們?cè)囋囃评怼?/p>

基于QLoRa推理

微調(diào)的QLoRa模型可以直接與標(biāo)準(zhǔn)的Transformers的推理一起使用,如下所示:

text = "Ask not what your country"
 device = "cuda:0"
 inputs = tokenizer(text, return_tensors="pt").to(device)
 
 outputs = model.generate(**inputs, max_new_tokens=20)
 print(tokenizer.decode(outputs[0], skip_special_tokens=True))

你應(yīng)該得到這樣的輸出:

Ask not what your country can do for you, ask what you can do for your country.”
 
 – John F.

5分鐘的微調(diào)效果還可以吧。

總結(jié)

LoRa讓我們的微調(diào)變得簡(jiǎn)單,而QLoRa可以讓我們使用消費(fèi)級(jí)的GPU對(duì)具有10億個(gè)參數(shù)的模型進(jìn)行微調(diào),并且根據(jù)QLoRa論文,性能不會(huì)顯著下降。

如果你對(duì)QLoRa感興趣,看看他的代碼吧:

https://github.com/artidoro/qlora


當(dāng)前文章:QLoRa:在消費(fèi)級(jí)GPU上微調(diào)大型語(yǔ)言模型
本文地址:http://www.5511xx.com/article/dhoejij.html