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

Unsloth揭秘 如何将模型微调效率优化2

在当今人工自动极速开展的时代,言语模型的运行越来越宽泛。但是,要将预训练的言语模型运行到详细的义务中,往往须要启动微调。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