Pengantar
Setelah model Llama dan Mistral dirilis, LLM sumber terbuka mengambil alih perhatian OpenAI. Sejak itu, beberapa model telah dirilis berdasarkan arsitektur Llama dan Mistral, dengan kinerja yang setara dengan model berpemilik seperti GPT-3.5 Turbo, Claude, Gemini, dll. Namun, model ini terlalu besar untuk digunakan pada perangkat keras konsumen.
Namun belakangan ini muncul kelas LLM baru. Ini adalah LLM dalam kategori parameter sub-7B. Parameter yang lebih sedikit membuatnya cukup ringkas untuk dijalankan di perangkat keras konsumen sekaligus menjaga efisiensi sebanding dengan model 7B. Model seperti Tiny-Llama-1B, Phi-2 dari Microsoft, dan Qwen-3b dari Alibaba dapat menjadi pengganti yang bagus untuk model yang lebih besar untuk dijalankan secara lokal atau diterapkan di edge. Pada saat yang sama, penyempurnaan sangat penting untuk menghasilkan yang terbaik dari model dasar apa pun untuk tugas hilir apa pun.
Di sini, kita akan mengeksplorasi cara Menyempurnakan basis Model Llama Kecil pada kumpulan data Alpaca yang telah dibersihkan.
Tujuan Pembelajaran
- Pahami penyesuaian dan berbagai metodenya.
- Pelajari tentang alat dan teknik untuk penyesuaian yang efisien.
- Pelajari tentang WandB untuk mencatat log pelatihan.
- Sempurnakan Tiny-Llama pada set data Alpaca di Colab.
Artikel ini diterbitkan sebagai bagian dari Blogathon Ilmu Data.
Daftar Isi
Apa itu Penyempurnaan LLM?
Penyempurnaan adalah proses membuat model terlatih mempelajari pengetahuan baru. Model terlatih adalah model tujuan umum yang dilatih pada data dalam jumlah besar. Namun, dalam banyak kasus, model tersebut gagal berfungsi sebagaimana mestinya, dan penyesuaian adalah cara paling efektif untuk membuat model beradaptasi dengan kasus penggunaan tertentu. Misalnya, pangkalan LLM berhasil dengan baik dalam pembuatan teks pada QA satu putaran tetapi kesulitan dengan percakapan multi-putaran seperti model obrolan.
Model dasar perlu dilatih tentang transkrip dialog agar mampu melakukan percakapan multi-turn. Penyempurnaan sangat penting untuk membentuk model terlatih menjadi avatar yang berbeda. Kualitas model yang disempurnakan bergantung pada kualitas data dan kemampuan model dasar. Ada beberapa cara untuk menyempurnakan model, seperti LoRA, QLoRA, dll.
Mari kita bahas secara singkat konsep-konsep ini.
LoRA
LoRA adalah singkatan dari Adaptasi Tingkat Rendah, sebuah teknik penyesuaian populer di mana kami memilih beberapa parameter yang dapat dilatih alih-alih memperbarui semua parameter melalui perkiraan peringkat rendah dari matriks bobot asli. Model LoRA dapat disempurnakan lebih cepat pada perangkat keras dengan komputasi yang lebih sedikit.
QLoRA
QLoRA atau Quantized LoRA selangkah lebih maju dari LoRA. Alih-alih model presisi penuh, model ini mengkuantisasi bobot model untuk menurunkan presisi floating point sebelum menerapkan LoRA. Kuantisasi adalah proses menurunkan nilai bit yang lebih tinggi ke nilai yang lebih rendah. Proses kuantisasi 4-bit melibatkan kuantisasi bobot 16-bit menjadi nilai float 4-bit.
Mengkuantisasi model menghasilkan pengurangan besar dalam ukuran model dengan akurasi yang sebanding dengan model aslinya. Di QLoRA, kami mengambil model terkuantisasi dan menerapkan LoRA ke dalamnya. Model dapat dikuantisasi dengan berbagai cara, seperti melalui llama.cpp, AWQ, bitsandbytes, dll.
Menyempurnakan dengan Unsloth
Unsloth adalah platform sumber terbuka untuk menyempurnakan Model Bahasa Besar populer dengan lebih cepat. Ini mendukung LLM populer, termasuk Llama-2 dan Mistral, dan turunannya seperti Yi, Open-hermes, dll. Ini mengimplementasikan kernel triton khusus dan mesin back-prop manual untuk meningkatkan kecepatan pelatihan model.
Di sini, kita akan menggunakan Unsloth untuk Menyempurnakan model Tiny-Llama terkuantisasi 4-bit dasar pada kambing peru Himpunan data. Model ini dikuantisasi dengan bit dan byte, dan kernel dioptimalkan dengan Triton OpenAI.
Masuk dengan WandB
Dalam Machine learning, penting untuk mencatat metrik pelatihan dan evaluasi. Ini memberi kita gambaran lengkap tentang perjalanan kereta api. Berat dan Bias (WandB) adalah perpustakaan sumber terbuka untuk memvisualisasikan dan melacak eksperimen pembelajaran mesin. Ini memiliki aplikasi web khusus untuk memvisualisasikan metrik pelatihan secara real-time. Ini juga memungkinkan kami mengelola model produksi secara terpusat. Kami akan menggunakan WandB hanya untuk melacak proses fine-tuning Tiny-Llama kami.
Untuk menggunakan WandB, daftar untuk mendapatkan akun gratis dan buat Kunci API.
Sekarang, mari kita mulai menyempurnakan model kita.
Bagaimana Cara Menyempurnakan Tiny-Llama?
Penyempurnaan adalah tugas komputasi yang berat. Ini memerlukan mesin dengan VRAM 10-15 GB, atau Anda dapat menggunakan runtime GPU Tesla T4 gratis dari Colab.
Sekarang instal Unsloth dan WandB
%%capture
import torch
major_version, minor_version = torch.cuda.get_device_capability()
!pip install wandb
if major_version >= 8:
# Use this for new GPUs like Ampere, Hopper GPUs (RTX 30xx, RTX 40xx, A100, H100, L40)
!pip install "unsloth[colab_ampere] @ git+https://github.com/unslothai/unsloth.git"
else:
# Use this for older GPUs (V100, Tesla T4, RTX 20xx)
!pip install "unsloth[colab] @ git+https://github.com/unslothai/unsloth.git"
pass
Hal berikutnya adalah memuat model terlatih terkuantisasi 4-bit dengan Unsloth.
from unsloth import FastLanguageModel
import torch
max_seq_length = 4096 # 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.
model, tokenizer = FastLanguageModel.from_pretrained(
model_name = "unsloth/tinyllama-bnb-4bit", # "unsloth/tinyllama" for 16bit loading
max_seq_length = max_seq_length,
dtype = dtype,
load_in_4bit = load_in_4bit,
)
Ini akan menginstal model secara lokal. Ukuran model 4-bit akan menjadi sekitar 760 MB.
Sekarang terapkan PEFT ke model Tiny-Llama 4-bit.
model = FastLanguageModel.get_peft_model(
model,
r = 32, # Choose any number > 0 ! Suggested 8, 16, 32, 64, 128
target_modules = ["q_proj", "k_proj", "v_proj", "o_proj",
"gate_proj", "up_proj", "down_proj",],
lora_alpha = 32,
lora_dropout = 0, # Currently only supports dropout = 0
bias = "none", # Currently only supports bias = "none"
use_gradient_checkpointing = True, # @@@ IF YOU GET OUT OF MEMORY - set to True @@@
random_state = 3407,
use_rslora = False, # We support rank stabilized LoRA
loftq_config = None, # And LoftQ
)
Siapkan Data
Langkah selanjutnya adalah menyiapkan kumpulan data untuk penyesuaian. Seperti yang saya sebutkan sebelumnya, kami akan menggunakan yang sudah dibersihkan Kumpulan data alpaka. Ini adalah versi bersih dari kumpulan data Alpaca asli. Ini mengikuti format instruksi-input-respons. Berikut adalah contoh data Alpaca
Sekarang mari kita persiapkan data kita.
@title prepare data
#alpaca_prompt = """Below is an instruction that describes a task, paired with an input that
provides further context.
Write a response that appropriately completes the request.
### Instruction:
{}
### Input:
{}
### Response:
{}"""
EOS_TOKEN = tokenizer.eos_token
def formatting_prompts_func(examples):
instructions = examples["instruction"]
inputs = examples["input"]
outputs = examples["output"]
texts = []
for instruction, input, output in zip(instructions, inputs, outputs):
# Must add EOS_TOKEN, otherwise your generation will go on forever!
text = alpaca_prompt.format(instruction, input, output) + EOS_TOKEN
texts.append(text)
return { "text" : texts, }
pass
from datasets import load_dataset
dataset = load_dataset("yahma/alpaca-cleaned", split = "train")
dataset = dataset.map(formatting_prompts_func, batched = True,)
Sekarang, bagi data menjadi data pelatihan dan data evaluasi. Saya telah mengambil data eval kecil karena data eval yang lebih besar memperlambat pelatihan.
dataset_dict = dataset.train_test_split(test_size=0.004)
Konfigurasikan WandB
Sekarang, konfigurasikan Bobot dan Bias di runtime Anda saat ini.
# @title wandb init
import wandb
wandb.login()
Berikan kunci API untuk masuk ke WandB saat diminta.
Siapkan variabel lingkungan.
%env WANDB_WATCH=all
%env WANDB_SILENT=true
Model Kereta
Sejauh ini, kami telah memuat model 4-bit, membuat konfigurasi LoRA, menyiapkan kumpulan data, dan mengonfigurasi WandB. Langkah selanjutnya adalah melatih model pada data. Untuk itu, kita perlu mendefinisikan trainer dari perpustakaan Trl. Kami akan menggunakan SFTrainer dari Trl. Namun sebelum itu, inisialisasi WandB dan tentukan argumen pelatihan yang sesuai.
import os
from trl import SFTTrainer
from transformers import TrainingArguments
from transformers.utils import logging
import wandb
logging.set_verbosity_info()
project_name = "tiny-llama"
entity = "wandb"
# os.environ["WANDB_LOG_MODEL"] = "checkpoint"
wandb.init(project=project_name, name = "tiny-llama-unsloth-sft")
Argumen Pelatihan
args = TrainingArguments(
per_device_train_batch_size = 2,
per_device_eval_batch_size=2,
gradient_accumulation_steps = 4,
evaluation_strategy="steps",
warmup_ratio = 0.1,
num_train_epochs = 1,
learning_rate = 2e-5,
fp16 = not torch.cuda.is_bf16_supported(),
bf16 = torch.cuda.is_bf16_supported(),
optim = "adamw_8bit",
weight_decay = 0.1,
lr_scheduler_type = "linear",
seed = 3407,
output_dir = "outputs",
report_to="wandb", # enable logging to W&B
# run_name="tiny-llama-alpaca-run", # name of the W&B run (optional)
logging_steps=1, # how often to log to W&B
logging_strategy = 'steps',
save_total_limit=2,
)
Ini penting untuk pelatihan. Untuk menjaga penggunaan GPU tetap rendah, pertahankan langkah-langkah pelatihan, batch evaluasi, dan akumulasi gradien tetap rendah. logging_steps adalah jumlah langkah sebelum metrik dicatat ke WandB.
Sekarang, inisialisasi SFTTrainer.
trainer = SFTTrainer(
model = model,
tokenizer = tokenizer,
train_dataset = dataset_dict["train"],
eval_dataset=dataset_dict["test"],
dataset_text_field = "text",
max_seq_length = max_seq_length,
dataset_num_proc = 2,
packing = True, # Packs short sequences together to save time!
args = args,
)
Sekarang, mulailah pelatihannya.
trainer_stats = trainer.train()
wandb.finish()
Selama pelatihan dijalankan, WandB akan melacak metrik pelatihan dan evaluasi. Anda mengunjungi tautan dasbor yang diberikan dan melihatnya secara real-time.
Ini adalah tangkapan layar dari proses saya di notebook Colab.
Kecepatan pelatihan akan bergantung pada beberapa faktor, termasuk ukuran data pelatihan dan evaluasi, ukuran batch pelatihan dan evaluasi, serta jumlah periode. Jika Anda mengalami masalah penggunaan GPU, coba kurangi ukuran langkah akumulasi batch dan gradien. Ukuran kumpulan kereta = batch_size_per_device * gradien_accumulation_steps. Dan jumlah langkah pengoptimalan = total data pelatihan/ukuran batch. Anda dapat bermain-main dengan parameter dan melihat mana yang berfungsi lebih baik.
Anda dapat memvisualisasikan kerugian pelatihan dan evaluasi pelatihan Anda di dasbor WandB.
Kerugian Kereta Api
Evaluasi Kerugian
Inferensi
Anda dapat menyimpan adaptor LoRA secara lokal atau memasukkannya ke Repositori HuggingFace.
model.save_pretrained("lora_model") # Local saving
# model.push_to_hub("your_name/lora_model", token = "...") # Online saving
Anda juga dapat memuat model yang disimpan dari disk dan menggunakannya untuk inferensi.
if False:
from unsloth import FastLanguageModel
model, tokenizer = FastLanguageModel.from_pretrained(
model_name = "lora_model", # YOUR MODEL YOU USED FOR TRAINING
max_seq_length = max_seq_length,
dtype = dtype,
load_in_4bit = load_in_4bit,
)
inputs = tokenizer(
[
alpaca_prompt.format(
"capital of France?", # instruction
"", # input
"", # output - leave this blank for a generation!
)
]*1, return_tensors = "pt").to("cuda")
outputs = model.generate(**inputs, max_new_tokens = 64, use_cache = True)
tokenizer.batch_decode(outputs)
Untuk streaming tanggapan Model.
from transformers import TextStreamer
text_streamer = TextStreamer(tokenizer)
_ = model.generate(**inputs, streamer = text_streamer, max_new_tokens = 64)
Jadi, ini semua tentang menyempurnakan model Tiny-Llama dengan logging WandB.
Berikut adalah Buku Catatan Colab untuk yang sama.
Kesimpulan
LLM kecil dapat bermanfaat untuk diterapkan pada perangkat keras dengan keterbatasan komputasi, seperti komputer pribadi, ponsel, dan perangkat yang dapat dikenakan lainnya, dll. Penyempurnaan memungkinkan model ini bekerja lebih baik pada tugas-tugas hilir. Dalam artikel ini, kita mempelajari cara Menyempurnakan model bahasa dasar pada kumpulan data.
Pengambilan Kunci
- Penyempurnaan adalah proses membuat model terlatih beradaptasi dengan tugas baru yang spesifik.
- Tiny-Llama adalah LLM dengan hanya 1.1 miliar parameter dan dilatih pada 3 triliun token.
- Ada berbagai cara untuk Menyempurnakan LLM, seperti LoRA dan QLoRA.
- Unsloth adalah platform sumber terbuka yang menyediakan LLM yang dioptimalkan CUDA untuk mempercepat penyempurnaan LLM.
- Bobot dan Bias (WandB) adalah alat untuk melacak dan menyimpan eksperimen ML.
Tanya Jawab Umum (FAQ)
A. Penyempurnaan, dalam konteks pembelajaran mesin, khususnya pembelajaran mendalam, adalah teknik di mana Anda mengambil model yang telah dilatih sebelumnya dan menyesuaikannya dengan tugas baru yang spesifik.
J. Dimungkinkan untuk Menyempurnakan LLM yang lebih kecil secara gratis di Colab melalui GPU Tesla T4 dengan QLoRA.
A. Penyempurnaan sangat meningkatkan kemampuan LLM untuk melakukan tugas-tugas hilir, seperti permainan peran, pembuatan kode, dll.
A. Tiny-Llama yang dilatih dengan 3 triliun token adalah LLM dengan parameter 1.1 miliar. Modelnya mengadopsi arsitektur asli Llama-2.
A. Unsloth adalah alat sumber terbuka yang menyediakan penyetelan LLM yang lebih cepat dan efisien dengan mengoptimalkan kernel GPU dengan Triton.
Media yang ditampilkan dalam artikel ini bukan milik Analytics Vidhya dan digunakan atas kebijaksanaan Penulis.
terkait
- Konten Bertenaga SEO & Distribusi PR. Dapatkan Amplifikasi Hari Ini.
- PlatoData.Jaringan Vertikal Generatif Ai. Berdayakan Diri Anda. Akses Di Sini.
- PlatoAiStream. Intelijen Web3. Pengetahuan Diperkuat. Akses Di Sini.
- PlatoESG. Karbon, teknologi bersih, energi, Lingkungan Hidup, Tenaga surya, Penanganan limbah. Akses Di Sini.
- PlatoHealth. Kecerdasan Uji Coba Biotek dan Klinis. Akses Di Sini.
- Sumber: https://www.analyticsvidhya.com/blog/2024/02/fine-tuning-a-tiny-llama-model-with-unsloth/
- :memiliki
- :adalah
- :bukan
- :Di mana
- $NAIK
- 1
- 11
- 12
- 15%
- 16
- 1b
- 258
- 32
- 7
- 8
- a
- A100
- Sanggup
- Tentang Kami
- Akun
- akumulasi
- ketepatan
- menyesuaikan
- adaptasi
- menambahkan
- Semua
- memungkinkan
- juga
- jumlah
- an
- analisis
- Analisis Vidhya
- dan
- Apa pun
- api
- aplikasi
- Mendaftar
- Menerapkan
- sesuai
- tepat
- arsitektur
- ADALAH
- argumen
- sekitar
- artikel
- AS
- At
- mobil
- Avatar
- b
- mendasarkan
- berdasarkan
- BE
- menjadi
- sebelum
- di bawah
- bermanfaat
- Manfaat
- TERBAIK
- Lebih baik
- prasangka
- bias
- Milyar
- Bit
- bit
- kosong
- blogathon
- secara singkat
- membawa
- tapi
- by
- CAN
- kemampuan
- kemampuan
- modal
- kasus
- Kategori
- mengobrol
- Pilih
- kelas
- kode
- padat
- sebanding
- lengkap
- Selesaikan
- komputer
- konsep
- konfigurasi
- dikonfigurasi
- konsumen
- Perangkat Keras Konsumen
- konteks
- percakapan
- membuat
- dibuat
- sangat penting
- terbaru
- Sekarang
- adat
- Dash
- dasbor
- data
- kumpulan data
- dedicated
- mendalam
- belajar mendalam
- menetapkan
- tergantung
- tergantung
- menyebarkan
- penggelaran
- Derivatif
- menjelaskan
- Deteksi
- dialog
- berbeda
- kebijaksanaan
- do
- turun
- Terdahulu
- Tepi
- Efektif
- efisiensi
- efisien
- lain
- munculnya
- aktif
- pertemuan
- Mesin
- Meningkatkan
- cukup
- entitas
- Lingkungan Hidup
- zaman
- terutama
- penting
- dll
- Eter (ETH)
- evaluasi
- contoh
- contoh
- eksperimen
- menyelidiki
- faktor
- GAGAL
- palsu
- jauh
- lebih cepat
- beberapa
- sedikit
- Mengapung
- mengambang
- berikut
- Untuk
- format
- Prancis
- Gratis
- dari
- lebih lanjut
- Gemini
- tujuan umum
- generasi
- mendapatkan
- pergi
- diberikan
- memberikan
- Go
- GPU
- GPU
- besar
- Perangkat keras
- Memiliki
- di sini
- High
- lebih tinggi
- memegang
- Seterpercayaapakah Olymp Trade? Kesimpulan
- How To
- Namun
- HTTPS
- MemelukWajah
- i
- if
- mengimplementasikan
- mengimpor
- penting
- memperbaiki
- in
- Termasuk
- memasukkan
- input
- install
- sebagai gantinya
- instruksi
- dimaksudkan
- ke
- melibatkan
- masalah
- IT
- jpg
- Menjaga
- pemeliharaan
- kunci
- pengetahuan
- kumar
- bahasa
- besar
- lebih besar
- Memimpin
- BELAJAR
- belajar
- pengetahuan
- Meninggalkan
- kurang
- Lets
- Perpustakaan
- 'like'
- pusat perhatian
- linear
- LINK
- Llama
- lm
- memuat
- pemuatan
- lokal
- lokal
- mencatat
- login
- penebangan
- lepas
- Rendah
- menurunkan
- mesin
- Mesin belajar
- membuat
- Membuat
- mengelola
- panduan
- max-width
- Media
- Memori
- tersebut
- metode
- Metrik
- ML
- mobil
- ponsel
- model
- model
- lebih
- lebih efisien
- paling
- beberapa
- harus
- my
- nama
- Perlu
- New
- berikutnya
- None
- buku catatan
- jumlah
- of
- sering
- lebih tua
- on
- secara online
- hanya
- open source
- OpenAI
- optimasi
- dioptimalkan
- mengoptimalkan
- or
- asli
- OS
- Lainnya
- jika tidak
- kami
- di luar
- keluaran
- output
- lebih
- dimiliki
- Paket
- dipasangkan
- parameter
- parameter
- bagian
- lulus
- melakukan
- melakukan
- pribadi
- Komputer pribadi
- ponsel
- gambar
- Platform
- plato
- Kecerdasan Data Plato
- Data Plato
- Bermain
- Titik
- Populer
- mungkin
- Ketelitian
- Mempersiapkan
- siap
- proses
- Produksi
- hak milik
- menyediakan
- diterbitkan
- Dorong
- Q & A
- kualitas
- R
- peringkat
- real-time
- menurunkan
- mengurangi
- pengurangan
- dirilis
- gudang
- permintaan
- membutuhkan
- penelitian
- tanggapan
- tanggapan
- kembali
- Peran
- RTX
- Run
- sama
- Save
- disimpan
- penghematan
- skala
- Ilmu
- melihat
- benih
- memilih
- set
- Pendek
- ditunjukkan
- menandatangani
- sejak
- Ukuran
- ukuran
- melambat
- kecil
- lebih kecil
- tertentu
- kecepatan
- membagi
- berdiri
- awal
- Langkah
- Tangga
- Streaming
- Perjuangan
- besar
- seperti itu
- mendukung
- Mendukung
- Mengambil
- diambil
- tugas
- tugas
- teknik
- teknik
- Tesla
- uji
- teks
- pembuatan teks
- dari
- bahwa
- Grafik
- mereka
- Mereka
- kemudian
- Sana.
- Ini
- mereka
- hal
- ini
- Melalui
- waktu
- untuk
- bersama
- token
- Token
- terlalu
- mengambil
- alat
- alat
- obor
- Total
- jalur
- Pelacakan
- Pelatihan VE
- terlatih
- Pelatihan
- transformer
- Triliun
- Pelaut
- benar
- mencoba
- memperbarui
- us
- penggunaan
- menggunakan
- bekas
- Nilai - Nilai
- versi
- melalui
- Mengunjungi
- membayangkan
- adalah
- Cara..
- cara
- we
- dapat dipakai
- jaringan
- webp
- berat
- BAIK
- adalah
- Apa
- Apa itu
- ketika
- yang
- sementara
- akan
- dengan
- bekerja
- menulis
- kamu
- Anda
- zephyrnet.dll