top of page
Gambar penulisCornellius Yudha Wijaya

Cara Fine-tune Mistral AI 7B LLM dengan Hugging Face AutoTrain

Cara Fine-tune Mistral AI 7B LLM dengan Hugging Face AutoTrain

Dengan kemajuan penelitian LLM di seluruh dunia, banyak model yang menjadi lebih mudah diakses. Salah satu model open-source yang kecil namun hebat adalah Mistral AI 7B LLM. Model ini memiliki kemampuan adaptasi pada banyak kasus penggunaan, menunjukkan performa yang lebih baik daripada LLaMA 2 13B pada semua benchmark, menggunakan mekanisme sliding window attention (SWA), dan mudah diterapkan.


Benchmark keseluruhan performa Mistral 7B dapat dilihat pada gambar di bawah ini.

Model Mistral 7B juga tersedia di HuggingFace. Dengan ini, kita dapat menggunakan Hugging Face AutoTrain untuk fine-tune model ini sesuai dengan kebutuhan kita. Hugging Face’s AutoTrain adalah platform no-code dengan API Python yang dapat kita gunakan untuk fine-tuning model LLM apa pun yang tersedia di HuggingFace dengan mudah.


Tutorial ini akan mengajarkan kita cara fine-tune Mistral AI 7B LLM dengan Hugging Face AutoTrain. Bagaimana cara kerjanya? Mari kita mulai.


Persiapan Lingkungan dan Dataset

Untuk fine-tune LLM dengan API Python, kita perlu menginstal paket Python, yang dapat Anda jalankan dengan kode berikut.

pip install -U autotrain-advanced

Kita juga akan menggunakan dataset sampel Alpaca dari HuggingFace, yang membutuhkan paket datasets untuk mengakuisisi data dan paket transformers untuk memanipulasi model Hugging Face.

pip install datasets transformers

Selanjutnya, kita harus memformat data untuk fine-tuning model Mistral 7B. Secara umum, ada dua model dasar yang dirilis oleh Mistral: Mistral 7B v0.1 dan Mistral 7B Instruct v0.1. Mistral 7B v0.1 adalah model dasar, dan Mistral 7B Instruct v0.1 adalah model Mistral 7B v0.1 yang telah disempurnakan untuk percakapan dan menjawab pertanyaan.


Kita membutuhkan file CSV yang berisi kolom teks untuk fine-tuning menggunakan Hugging Face AutoTrain. Namun, kita akan menggunakan format teks yang berbeda untuk model dasar dan instruksi selama fine-tuning.


Pertama, mari kita lihat dataset yang kita gunakan untuk sampel.

from datasets import load_dataset
import pandas as pd

# Muat dataset
train= load_dataset("tatsu-lab/alpaca",split='train[:10%]')
train = pd.DataFrame(train)

Kode di atas akan mengambil sepuluh persen sampel dari data aktual. Kita hanya membutuhkan sebanyak itu untuk tutorial ini karena akan memakan waktu lebih lama untuk melatih data yang lebih besar. Contoh data kita terlihat seperti gambar di bawah ini.

Cara Fine-tune Mistral AI 7B LLM dengan Hugging Face AutoTrain

Dataset sudah berisi kolom text dengan format yang kita butuhkan untuk fine-tune model LLM. Itu sebabnya kita tidak perlu melakukan apa pun. Namun, saya akan menyediakan kode jika Anda memiliki dataset lain yang membutuhkan pemformatan.

def text_formatting(data):

    # jika input kolom yang tidak kosong (not empty)
    if data['input']:

        text = f"""Below is an instruction that describes a task, paired with an input that provides further context. Write a response that appropriately completes the request.\n\n### Instruction:\n{data["instruction"]} \n\n### Input:\n{data["input"]}\n\n### Response:\n{data["output"]}"""

    else:

        text = f"""Below is an instruction that describes a task. Write a response that appropriately completes the request.\n\n### Instruction:\n{data["instruction"]}\n\n### Response:\n{data["output"]}""" 

    return text

train['text'] = train.apply(text_formatting, axis =1)

Untuk Hugging Face AutoTrain, kita membutuhkan data dalam format CSV, jadi kita akan menyimpan data dengan kode berikut.

train.to_csv('train.csv', index = False)

Kemudian, pindahkan hasil CSV ke folder bernama data. Itu saja yang perlu Anda siapkan untuk fine-tuning Mistral 7B v0.1.


Jika Anda ingin fine-tune Mistral 7B Instruct v0.1 untuk percakapan dan menjawab pertanyaan, kita perlu mengikuti format template percakapan yang disediakan oleh Mistral, seperti yang ditunjukkan pada blok kode di bawah ini.

<s>[INST] Instruction [/INST] Model answer</s>[INST] Follow-up instruction [/INST]

Jika kita menggunakan dataset contoh sebelumnya, kita perlu memformat ulang kolom teks. Kita akan menggunakan data tanpa input untuk model percakapan.

train_chat = train[train['input'] == ''].reset_index(drop = True).copy()

Kemudian, kita bisa memformat ulang data dengan kode berikut.

def chat_formatting(data):

  text = f"<s>[INST] {data['instruction']} [/INST] {data['output']} </s>"

  return text

train_chat['text'] = train_chat.apply(chat_formatting, axis =1)
train_chat.to_csv('train_chat.csv', index =False)

Kita akan mendapatkan dataset yang sesuai untuk fine-tuning model Mistral 7B Instruct v0.1.

Cara Fine-tune Mistral AI 7B LLM dengan Hugging Face AutoTrain

Dengan semua persiapan yang telah disiapkan, kita sekarang bisa memulai AutoTrain untuk fine-tuning model Mistral kita.




Training dan Fine-tuning

Mari kita siapkan lingkungan Hugging Face AutoTrain untuk fine-tuning model Mistral. Pertama, mari kita jalankan setup AutoTrain dengan perintah berikut.

!autotrain setup

Selanjutnya, kita akan memberikan informasi yang diperlukan untuk menjalankan AutoTrain. Untuk tutorial ini, mari kita gunakan Mistral 7B Instruct v0.1.

project_name = 'my_autotrain_llm'
model_name = 'mistralai/Mistral-7B-Instruct-v0.1'

Kemudian, kita akan menambahkan informasi Hugging Face jika Anda ingin push model Anda ke repository.

push_to_hub = False
hf_token = "YOUR HF TOKEN"
repo_id = "username/repo_name"

Terakhir, kita akan menginisiasi informasi parameter model dalam variabel di bawah ini. Anda dapat mengubahnya untuk melihat apakah hasilnya bagus.

learning_rate = 2e-4
num_epochs = 4
batch_size = 1
block_size = 1024
trainer = "sft"
warmup_ratio = 0.1
weight_decay = 0.01
gradient_accumulation = 4
use_fp16 = True
use_peft = True
use_int4 = True
lora_r = 16
lora_alpha = 32
lora_dropout = 0.045

Kita dapat mengubah banyak parameter tetapi saya tidak akan membahasnya dalam artikel ini. Beberapa tips untuk meningkatkan fine-tuning LLM diantaranta, menggunakan learning rate yang lebih rendah untuk mempertahankan representasi yang telah dipelajari sebelumnya, menghindari overfitting dengan menyesuaikan jumlah epoch, menggunakan ukuran batch (batch_size) yang lebih besar untuk stabilitas, atau menyesuaikan akumulasi gradien jika Anda memiliki masalah memori.


Ketika semua informasi sudah siap, kita akan mengatur lingkungan untuk menerima semua informasi yang telah kita atur sebelumnya.

import os
os.environ["PROJECT_NAME"] = project_name
os.environ["MODEL_NAME"] = model_name
os.environ["PUSH_TO_HUB"] = str(push_to_hub)
os.environ["HF_TOKEN"] = hf_token
os.environ["REPO_ID"] = repo_id
os.environ["LEARNING_RATE"] = str(learning_rate)
os.environ["NUM_EPOCHS"] = str(num_epochs)
os.environ["BATCH_SIZE"] = str(batch_size)
os.environ["BLOCK_SIZE"] = str(block_size)
os.environ["WARMUP_RATIO"] = str(warmup_ratio)
os.environ["WEIGHT_DECAY"] = str(weight_decay)
os.environ["GRADIENT_ACCUMULATION"] = str(gradient_accumulation)
os.environ["USE_FP16"] = str(use_fp16)
os.environ["USE_PEFT"] = str(use_peft)
os.environ["USE_INT4"] = str(use_int4)
os.environ["LORA_R"] = str(lora_r)
os.environ["LORA_ALPHA"] = str(lora_alpha)
os.environ["LORA_DROPOUT"] = str(lora_dropout)

Kita akan menggunakan perintah berikut untuk menjalankan AutoTrain di notebook kita.

!autotrain llm \
--train \
--model ${MODEL_NAME} \
--project-name ${PROJECT_NAME} \
--data-path data/ \
--text-column text \
--lr ${LEARNING_RATE} \
--batch-size ${BATCH_SIZE} \
--epochs ${NUM_EPOCHS} \
--block-size ${BLOCK_SIZE} \
--warmup-ratio ${WARMUP_RATIO} \
--lora-r ${LORA_R} \
--lora-alpha ${LORA_ALPHA} \
--lora-dropout ${LORA_DROPOUT} \
--weight-decay ${WEIGHT_DECAY} \
--gradient-accumulation ${GRADIENT_ACCUMULATION} \
$( [[ "$USE_FP16" == "True" ]] && echo "--fp16" ) \
$( [[ "$USE_PEFT" == "True" ]] && echo "--use-peft" ) \
$( [[ "$USE_INT4" == "True" ]] && echo "--use-int4" ) \
$( [[ "$PUSH_TO_HUB" == "True" ]] && echo "--push-to-hub --token ${HF_TOKEN} --repo-id ${REPO_ID}" )

Jika proses fine-tuning berhasil, kita akan memiliki direktori baru dari model yang telah di-fine-tuned. Kita akan menggunakan direktori ini untuk menguji model yang baru saja di-fine-tuned.

from transformers import AutoModelForCausalLM, AutoTokenizer

model_path = "my_autotrain_llm"
tokenizer = AutoTokenizer.from_pretrained(model_path)
model = AutoModelForCausalLM.from_pretrained(model_path)

Dengan model dan tokenizer siap digunakan, kita akan mencoba model dengan contoh input.

input_text = "Give three tips for staying healthy."
input_ids = tokenizer.encode(input_text, return_tensors="pt")
output = model.generate(input_ids, max_new_tokens = 200)
predicted_text = tokenizer.decode(output[0], skip_special_tokens=True)
print(predicted_text)
Output:

Give three tips for staying healthy.

1. Eat a balanced diet: Make sure to include plenty of fruits, vegetables, lean proteins, and whole grains in your diet. This will help you get the nutrients you need to stay healthy and energized.
2. Exercise regularly: Aim for at least 30 minutes of moderate exercise, such as brisk walking or cycling, every day. This will help you maintain a healthy weight, reduce your risk of chronic diseases, and improve your overall physical and mental health.
3. Get enough sleep: Aim for 7-9 hours of quality sleep each night. This will help you feel more rested and alert during the day, and it will also help you maintain a healthy weight and reduce your risk of chronic diseases.

Output dari model ini sudah mendekati output aktual dari data pelatihan kita, seperti yang ditunjukkan pada gambar di bawah ini.

1. Eat a balanced diet and make sure to include plenty of fruits and vegetables. 
2. Exercise regularly to keep your body active and strong. 
3. Get enough sleep and maintain a consistent sleep schedule.

Model Mistral tentu saja hebat untuk ukurannya, karena fine-tuning sederhana sudah menunjukkan hasil yang menjanjikan. Cobalah dataset Anda untuk melihat apakah cocok dengan pekerjaan Anda.


Kesimpulan

Famili Model Mistral AI 7B adalah model LLM yang hebat yang menawarkan performa lebih tinggi daripada LLaMA dan adaptabilitas yang hebat. Karena model ini tersedia di Hugging Face, kita dapat menggunakan HuggingFace AutoTrain untuk fine-tune model ini. Ada dua model yang saat ini tersedia untuk di-fine-tune di Hugging Face; Mistral 7B v0.1 untuk model dasar, dan Mistral 7B Instruct v0.1 untuk percakapan dan menjawab pertanyaan. Fine-tuning menunjukkan hasil yang menjanjikan meskipun dengan proses pelatihan yang cepat.



8 tampilan0 komentar

Postingan Terkait

Lihat Semua

Comments


bottom of page