成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

QLoRa:在消費級GPU上微調大型語言模型

開發 前端
大多數大型語言模型(LLM)都無法在消費者硬件上進行微調。例如,650億個參數模型需要超過780 Gb的GPU內存。這相當于10個A100 80gb的gpu。就算我們使用云服務器,花費的開銷也不是所有人都能夠承擔的。

大多數大型語言模型(LLM)都無法在消費者硬件上進行微調。例如,650億個參數模型需要超過780 Gb的GPU內存。這相當于10個A100 80gb的gpu。就算我們使用云服務器,花費的開銷也不是所有人都能夠承擔的。

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

圖片

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

為了進行演示,本文使用nVidia RTX 3060 12 GB來運行本文中的所有命令。這樣可以保證小顯存的要求,并且也保證可以使用免費的Google Colab實例來實現相同的結果。但是,如果你只有較小內存的GPU,則必須使用較小的LLM。

QLoRa: Quantized LLMs with Low-Rank Adapters

2021年6月,發布的LoRa讓我們的微調變得簡單,我也在以前的文章中也有過介紹。

LoRa為LLM的每一層添加了少量的可訓練參數(適配器),并凍結了所有原始參數。這樣對于微調,只需要更新適配器權重,這可以顯著減少內存占用。

而QLoRa更進一步,引入了4位量化、雙量化和利用nVidia統一內存進行分頁。

簡而言之,QLoRa工作原理如下:

  • 4位NormalFloat量化:這是一種改進量化的方法。它確保每個量化倉中有相同數量的值。這避免了計算問題和異常值的錯誤。
  • 雙量化:QLoRa的作者將其定義如下“對量化常量再次量化以節省額外內存的過程。”
  • 統一內存分頁:它依賴于NVIDIA統一內存管理,自動處理CPU和GPU之間的頁到頁傳輸。它可以保證GPU處理無錯,特別是在GPU可能耗盡內存的情況下。

所有這些步驟都大大減少了微調所需的內存,同時性能幾乎與標準微調相當。

使用QLoRa對GPT模型進行微調

硬件要求:

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

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

內存建議至少6 Gb,這個條件現在都能滿足對吧。

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

如果你的機器不滿足這些要求,可以使用Google Colab的免費實例,因為它就足夠使用了。

軟件要求:

必須要CUDA。這是肯定的。然后還需要一些依賴:

  • bitsandbytes:包含量化LLM所需的所有庫。
  • Hugging Face的Transformers和Accelerate:這些是標準庫,用于訓練模型。
  • PEFT:提供了各種微調方法的實現,我們只需要里面的LoRa。
  • 數據集:自己的數據集,這里安裝了Hugging Face的datasets,這個是備選,裝不裝無所謂,因為這玩意挺難用的

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模型的加載與量化

我們需要以下導入來加載和量化LLM。

import torch
 from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig

我們將對EleutherAI預訓練的GPT NeoX模型進行微調。這是一個有200億個參數的模型。注意:GPT NeoX具有允許商業使用的寬松許可證(Apache 2.0)。

可以從hug Face Hub獲得這個模型和相關的標記器:

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位精度加載到內存中。
  • bnb_4bit_use_double_quant:QLoRa提出的雙量化。
  • bnb_4bit_quant_type:這是量化的類型。“nf4”代表4位的NormalFloat。
  • bnb_4bit_compute_dtype:當以4位加載和存儲模型時,在需要時對其進行部分量化,并以16位精度(bfloat16)進行所有計算。

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

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

下一步啟用梯度檢查點,這樣可以減少內存占用,但是速度會稍微降低一些:

model.gradient_checkpointing_enable()

2、LoRa的GPT模型預處理

為LoRa準備模型,為每一層添加可訓練的適配器。

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來獲得更好的任務結果。具體內容可以在PEFT文檔中找到更多選項和詳細信息。

使用LoRa,我們只添加了800萬個參數。并且只訓練這些參數,這樣使得微調很快。

3、數據集

對于這個演示,我們使用“english_quotes”數據集。這是一個由名言組成的數據集,在CC BY 4.0許可下發布。我們為了方便使用datasets直接加載。

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

4、微調

微調的代碼非常標準

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”。它將使用分頁實現更好的內存管理。沒有它可能會出現內存不足錯誤。

在Google Colab上運行這個微調只需要5分鐘。VRAM消耗的峰值是15gb。

它有用嗎?讓我們試試推理。

基于QLoRa推理

微調的QLoRa模型可以直接與標準的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))

你應該得到這樣的輸出:

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

5分鐘的微調效果還可以吧。

總結

LoRa讓我們的微調變得簡單,而QLoRa可以讓我們使用消費級的GPU對具有10億個參數的模型進行微調,并且根據QLoRa論文,性能不會顯著下降。

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

https://github.com/artidoro/qlora

責任編輯:華軒 來源: DeepHub IMBA
相關推薦

2023-06-09 08:00:00

QLoRa語言模型微調

2025-05-08 05:00:00

2024-11-21 08:22:45

2024-03-18 13:36:36

大型語言模型個人可識別信息

2024-07-01 09:00:00

2024-03-25 14:22:07

大型語言模型GaLore

2022-08-20 07:52:56

語言模型參數PaLM

2024-03-20 10:31:27

2024-08-05 14:36:17

大型語言模型量化

2024-11-11 13:33:28

2025-06-24 08:52:54

2024-05-06 12:22:00

AI訓練

2024-05-06 12:24:00

模型訓練

2024-04-16 16:14:01

人工智能LLMRAG

2025-04-10 07:59:51

2023-06-19 16:05:22

大型語言模型人工智能

2023-12-27 13:42:39

模型訓練

2023-10-07 10:41:54

語言模型微調BitFit

2024-06-26 10:50:35

2024-04-26 11:30:43

GenAILinkedIn人工智能
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文字幕1区 | 91免费视频观看 | 福利久久 | 国精品一区二区 | 国产一区二区三区四区 | 亚洲一区二区免费视频 | 欧美在线观看网站 | 亚洲国产精品久久久久婷婷老年 | 日韩欧美国产一区二区三区 | 国产美女特级嫩嫩嫩bbb片 | 久久久久亚洲视频 | 成人在线视频网 | 国产精品国产三级国产播12软件 | 欧美激情综合网 | 在线久草 | 国产成人久久精品一区二区三区 | h视频网站在线观看 | 久久国内精品 | 日韩国产一区二区三区 | 天堂国产 | 亚洲成人精品在线 | 涩涩视频大全 | 日韩欧美三级电影 | 狠狠亚洲| 伊人免费在线观看 | 日韩在线视频精品 | 亚洲精品粉嫩美女一区 | 国产一区二区久久久 | 欧美成人手机在线 | 亚洲免费成人 | 日韩一区二区福利 | 黄视频网站免费观看 | 中文字幕在线精品 | 亚洲免费精品 | 欧美日韩成人在线 | 成人免费大片黄在线播放 | 成人免费一区二区三区视频网站 | 91在线视频观看 | 一级特黄a大片 | 国产色网| 国产精品视频导航 |