企业宣传,产品推广,广告招商,广告投放联系seowdb

如何将模型微调效率提升2 Unsloth揭秘

在当今人工智能快速发展的时代,语言模型的应用越来越广泛。然而,要将预训练的语言模型应用到具体的任务中,往往需要进行微调。Unsloth 作为一个预训练模型微调框架,因其出色的性能和独特的技术特点,受到了众多开发者的关注。本文将深入探讨 Unsloth 的相关内容,帮助读者全面了解这个强大的工具。

一、Unsloth 简介

Unsloth 是一个专门为模型微调而设计的框架,它旨在解决模型微调过程中常见的训练速度慢、显存占用高等问题。通过一系列创新的技术和优化策略,Unsloth 能够显著提高模型微调的效率,使得开发者能够在更短的时间内获得更好的模型性能。

二、Unsloth 的主要优势

1. 快速的训练速度

在对主流模型(如 llama - 3、qwen2、mistral 等)进行微调时,Unsloth 展现出了令人瞩目的训练速度提升。相比其他传统的微调方法,它的速度可以提高 2 至 5 倍。这意味着开发者能够更快地完成模型的训练过程,大大缩短了开发周期。例如,在处理大规模文本数据时,Unsloth 能够迅速收敛,减少了训练时间,让开发者能够更快地看到模型的效果。

2. 低显存占用

显存占用是模型微调过程中一个关键的问题,尤其是对于一些资源有限的设备。Unsloth 巧妙地解决了这个问题,它最大能够减少约 70%的显存使用量。这使得即使在显存有限的硬件上,如一些中低端的 GPU 设备,也能够顺利进行模型微调训练。这一优势为更多开发者提供了机会,让他们能够在不同的硬件环境下开展工作,而不必担心硬件资源的限制。

三、Unsloth 的技术特点

1. 强大的兼容性

Unsloth 支持多种硬件设置,涵盖了从 Nvidia Tesla T4 到 H100 等不同型号的 GPU。不仅如此,它还扩展到了 AMD 和英特尔 GPU 的兼容性,这为使用不同硬件的开发者提供了极大的便利。无论你使用的是哪种 GPU 设备,都可以尝试使用 Unsloth 进行模型微调。这种广泛的兼容性使得 Unsloth 能够在不同的硬件平台上发挥出其优势,为开发者提供了更多的选择。

2. 优化的内存使用

Unsloth 采用了智能权重上投等开创性技术,在 QLoRA 过程中减少了权重上投的必要性,从而有效地优化了内存使用。通过这种方式,它能够更好地利用硬件资源,提高模型训练的效率。此外,Unsloth 还能够迅速利用 BFloat16,提高 16 位训练的稳定性,进一步加快了 QLoRA 的微调过程。这种对内存和计算资源的精细管理,使得 Unsloth 在处理大规模模型和数据时表现出色。

四、Unsloth 的使用体验

1.安装 Unsloth

安装 Unsloth 相对简单,你可以通过以下命令进行安装:`pip install "unsloth(cu121 - torch230)@git +"`。当然,具体的安装命令可能会因环境和需求的不同而有所差异。在安装过程中,建议参考官方文档,以确保安装的顺利进行。

pip install "unsloth[colab-new] @ git+"

执行如下:

2.镜像设置

由于网络原因,可能无法访问huggingface上的资源,可以使用国内的镜像站。​​ ​​ ​

1)安装依赖

pip install -U huggingface_hub

2)设置环境变量

import osos.environ['HF_ENDPOINT'] = 'https://hf-mirror.com'

3.模型加载

from unsloth import FastLanguageModelimport torchmax_seq_length = 2048 # Choose any! We auto support RoPE Scaling internally!dtype = None # None for auto detection. Float16 for Tesla T4, V100, Bfloat16 for Ampere+load_in_4bit = True # Use 4bit quantization to reduce memory usage. Can be False.# 4bit pre quantized models we support for 4x faster downloading + no OOMs.fourbit_models = ["unsloth/Meta-Llama-3.1-8B-bnb-4bit",# Llama-3.1 2x faster"unsloth/Meta-Llama-3.1-8B-Instruct-bnb-4bit","unsloth/Meta-Llama-3.1-70B-bnb-4bit","unsloth/Meta-Llama-3.1-405B-bnb-4bit",# 4bit for 405b!"unsloth/Mistral-Small-Instruct-2409",# Mistral 22b 2x faster!"unsloth/mistral-7b-instruct-v0.3-bnb-4bit","unsloth/Phi-3.5-mini-instruct",# Phi-3.5 2x faster!"unsloth/Phi-3-medium-4k-instruct","unsloth/gemma-2-9b-bnb-4bit","unsloth/gemma-2-27b-bnb-4bit",# Gemma 2x faster!"unsloth/Llama-3.2-1B-bnb-4bit",# NEW! Llama 3.2 models"unsloth/Llama-3.2-1B-Instruct-bnb-4bit","unsloth/Llama-3.2-3B-bnb-4bit","unsloth/Llama-3.2-3B-Instruct-bnb-4bit",] # More models attokenizer = FastLanguageModel.from_pretrained(model_name = "unsloth/Llama-3.2-3B-Instruct", # or choose "unsloth/Llama-3.2-1B-Instruct"max_seq_length = max_seq_length,dtype = dtype,load_in_4bit = load_in_4bit,# token = "hf_...", # use one if using gated models like meta-llama/Llama-2-7b-hf)

加载如下:

4.LoRA 配置

model = FastLanguageModel.get_peft_model(model,r = 16, # Choose any number > 0 ! Suggested 8, 16, 32, 64, 128target_modules = ["q_proj", "k_proj", "v_proj", "o_proj","gate_proj", "up_proj", "down_proj",],lora_alpha = 16,lora_dropout = 0, # Supports any, but = 0 is optimizedbias = "none",# Supports any, but = "none" is optimized# [NEW] "unsloth" uses 30% less VRAM, fits 2x larger batch sizes!use_gradient_checkpointing = "unsloth", # True or "unsloth" for very long contextrandom_state = 3407,use_rslora = False,# We support rank stabilized LoRAloftq_config = None, # And LoftQ)

5.数据集准备

使用 Maxime Labonne 的 ShareGPT 风格的 FineTome-100k 数据集。

将 ("from", "value")格式,替换为("role", "content") 格式

from unsloth.chat_templates import get_chat_templatetokenizer = get_chat_template(tokenizer,chat_template = "llama-3.1",)def formatting_prompts_func(examples):convos = examples["conversations"]texts = [tokenizer.apply_chat_template(convo, tokenize = False, add_generation_prompt = False) for convo in convos]return { "text" : texts, }passfrom>

数据集读取

我们现在使用`standardize_sharegpt`将sharegpt风格的数据集转换为HuggingFace的通用格式。

{"from": "system", "value": "You are an assistant"}

{"from": "human", "value": "What is 2+2?"}

{"from": "gpt", "value": "It's 4."}

{"role": "system", "content": "You are an assistant"}

{"role": "user", "content": "What is 2+2?"}

{"role": "assistant", "content": "It's 4."}

from unsloth.chat_templates import standardize_sharegptdataset = standardize_sharegpt(dataset)dataset =>
© 版权声明
评论 抢沙发
加载中~
每日一言
不怕万人阻挡,只怕自己投降
Not afraid of people blocking, I'm afraid their surrender