使用Lora和PEFT上的Amazon Pallity數據集上的微調NVIDIA NV-EMBED-V1:一種具有變壓器的記憶效率方法和擁抱的臉

在本教程中,我們探討瞭如何使用LORA(低級別的適應性)在Amazon Polarity數據集上微調NVIDIA的NVEMBED-V1模型,並通過擁抱面孔(參數效率高得分)。通過利用Lora,我們在不修改其所有參數的情況下有效地適應了模型,從而使低調的低調在低VRAM GPU上可行。
在本教程中實現的步驟可以分解為以下步驟:

  1. 通過擁抱面孔進行身份驗證以訪問NV-Embed-V1
  2. 有效地加載和配置模型
  3. 使用PEFT應用Lora微調
  4. 預處理亞馬遜極性數據集進行培訓
  5. 用`device_map =“ auto”優化GPU內存使用量
  6. 培訓和評估情感分類模型

在本指南的最後,您將擁有針對二進制情感分類優化的微調NV Embed-V1模型,以演示如何將有效的微調技術應用於現實世界的NLP任務。

from huggingface_hub import login


login()  # Enter your Hugging Face token when prompted


import os
HF_TOKEN = "...."  # Replace with your actual token
os.environ("HF_TOKEN") = HF_TOKEN


import torch
import torch.distributed as dist
from transformers import AutoModel, AutoTokenizer, TrainingArguments, Trainer
from datasets import load_dataset
from peft import LoraConfig, get_peft_model

首先,我們使用您的API代幣登錄擁抱的麵線,將令牌設置為環境變量,並用Lora等技術導入分佈式培訓和微調變壓器模型所需的各種庫。

MODEL_NAME = "nvidia/NV-Embed-v1"
HF_TOKEN = "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"  # Replace with your actual token


tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME, token=HF_TOKEN)
model = AutoModel.from_pretrained(
    MODEL_NAME,
    device_map="auto",  # Enable efficient GPU placement
    torch_dtype=torch.float16,  # Use FP16 for efficiency
    token=HF_TOKEN
)

該片段設置了一個特定的模型名稱和身份驗證令牌,然後從擁抱Face的型號集線器中加載相應的已驗證令牌和模型。它還配置了模型以使用自動GPU分配和FP16精度以提高效率。

lora_config = LoraConfig(
    r=16,
    lora_alpha=32,
    target_modules=("self_attn.q_proj", "self_attn.v_proj"),  
    lora_dropout=0.1,
    bias="none",
    task_type="FEATURE_EXTRACTION",
)


model = get_peft_model(model, lora_config)
model.print_trainable_parameters()

使用上述代碼,我們將具有指定參數的LORA設置(例如R = 16,Lora_alpha = 32和0.1的輟學)配置,以自我注意機制的查詢和價值投影層為目標。然後,它使用PEFT將此配置集成到模型中,以便僅這些LORA層才能訓練特徵提取,最後,打印了可訓練的參數。

dataset = load_dataset("amazon_polarity")


def tokenize_function(examples):
    return tokenizer(examples("content"), padding="max_length", truncation=True)


tokenized_datasets = dataset.map(tokenize_function, batched=True)

在這裡,我們加載Amazon Polarity數據集,定義一個功能,以用填充和截斷為代幣化其“內容”字段,並應用此功能將數據集轉換為標記格式進行模型培訓。

training_args = TrainingArguments(
    output_dir="./results",
    evaluation_strategy="epoch",
    per_device_train_batch_size=4,
    per_device_eval_batch_size=4,
    num_train_epochs=1,
    save_strategy="epoch",
    save_total_limit=1,
    logging_dir="./logs",
    logging_steps=10,
    fp16=True,  # Mixed precision
)


trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=tokenized_datasets("train"),
    eval_dataset=tokenized_datasets("test"),
)

trainer.train()

借助上述代碼,我們設置了培訓參數,例如輸出目錄,批次大小,日誌記錄和FP16混合精度 – 使用培訓量,使用模型和標記的火車/測試數據集創建培訓師,並最終啟動培訓過程。

model.save_pretrained("./fine_tuned_nv_embed")
tokenizer.save_pretrained("./fine_tuned_nv_embed")
print("✅ Training Complete! Model Saved.")

最後,我們將微調模型及其令牌保存到指定的目錄中,然後打印一條確認消息,表明培訓已完成並保存模型。

到本教程結束時,我們使用LORA和PEFT成功地在Amazon Polarity數據集上成功地微調了NVEMBED-V1,從而確保了有效的內存使用情況和可擴展的適應性。該教程突出了參數有效的微調的力量,從而使大型模型的域適應不需要大量的計算資源。該方法可以擴展到其他基於變壓器的模型,使其對於自定義嵌入,情感分析和NLP驅動的應用程序很有價值。無論您是從事產品審查分類,AI驅動的推薦系統還是特定領域的搜索引擎,此方法都可以使您有效地對預算進行大規模調整大規模模型。


這是 COLAB筆記本 對於上述項目。另外,別忘了跟隨我們 嘰嘰喳喳 並加入我們 電報頻道LinkedIn GrOUP。別忘了加入我們的 75K+ ml子雷迪特

🚨 推薦的讀取LG AI研究釋放Nexus:高級系統集成代理AI系統和數據合規性標準,以解決AI數據集中的法律問題


Asif Razzaq是Marktechpost Media Inc.的首席執行官。作為一位有遠見的企業家和工程師,ASIF致力於利用人工智能的潛力來實現社會利益。他最近的努力是推出了人工智能媒體平台Marktechpost,該平台的深入覆蓋了機器學習和深度學習新聞,既在技術上都可以聽起來,既可以通過技術上的聲音,又可以被廣泛的受眾理解。該平台每月有超過200萬個觀點,說明了其在受眾中的受歡迎程度。

Source link

You might also enjoy

Subscribe Our Newsletter

Scroll to Top