Lewati ke konten utama

Cara Melatih LLM dengan PyTorch

Kuasai proses melatih large language model menggunakan PyTorch, dari penyiapan awal hingga implementasi akhir.
Diperbarui 28 Sep 2026  · 8 mnt Baca

Jelajahi bersama AI

ChatGPTClaudePerplexity

Large Language Models (LLM) adalah komponen utama aplikasi kecerdasan buatan modern, khususnya untuk pemrosesan bahasa alami. Model ini mampu memproses dan memahami bahasa manusia secara efisien, dengan aplikasi mulai dari asisten virtual dan penerjemahan mesin hingga peringkasan teks dan tanya jawab.

Pustaka seperti LangChain memudahkan penerapan aplikasi AI end-to-end seperti yang disebutkan di atas. Tutorial kami Pengenalan LangChain untuk Data Engineering & Aplikasi Data memberikan gambaran umum tentang apa yang dapat Anda lakukan dengan LangChain, termasuk masalah yang diselesaikan LangChain, beserta contoh kasus penggunaan data.

Artikel ini akan menjelaskan seluruh proses pelatihan large language model, mulai dari menyiapkan workspace hingga implementasi akhir menggunakan Pytorch 2.0.1, sebuah kerangka deep learning yang dinamis dan fleksibel yang memungkinkan implementasi model dengan mudah dan jelas.

Prasyarat

Agar mendapatkan manfaat maksimal dari konten ini, penting untuk Anda nyaman dengan pemrograman Python, memiliki pemahaman dasar tentang konsep deep learning dan transformer, serta akrab dengan kerangka Pytorch. Kode sumber lengkap tersedia di GitHub.

Sebelum masuk ke implementasi inti, kita perlu memasang dan mengimpor pustaka yang relevan. Selain itu, penting untuk dicatat bahwa skrip pelatihan terinspirasi dari repositori ini dari Hugging Face.

Instalasi pustaka

Proses instalasi dijelaskan di bawah ini:

Pertama, kita menggunakan pernyataan %%bash untuk menjalankan perintah instalasi dalam satu sel sebagai perintah bash di Jupyter Notebook.

  • Trl: digunakan untuk melatih model bahasa berbasis transformer dengan reinforcement learning.
  • Peft menggunakan metode parameter-efficient fine-tuning (PEFT) untuk memungkinkan adaptasi model pra-latih secara efisien.
  • Torch: pustaka machine learning open-source yang banyak digunakan.
  • Datasets: digunakan untuk membantu mengunduh dan memuat banyak dataset machine learning yang umum.

Transformers: pustaka yang dikembangkan oleh Hugging Face dan menyertakan ribuan model pra-latih untuk berbagai tugas berbasis teks seperti klasifikasi, peringkasan, dan penerjemahan.

%%bash
pip -q install trl
pip -q install peft
pip -q install torch
pip -q install datasets
pip -q install transformers

Sekarang, modul-modul tersebut dapat diimpor sebagai berikut:

import torch
from trl import SFTTrainer
from datasets import load_dataset
from peft import LoraConfig, get_peft_model, prepare_model_for_int8_training
from transformers import AutoModelForCausalLM, AutoTokenizer, TrainingArguments

Pemuatan dan Persiapan Data

Dataset alpaca, yang tersedia gratis di Hugging Face, akan digunakan untuk ilustrasi ini. Dataset ini memiliki tiga kolom utama: instructions, input, dan output. Kolom-kolom tersebut digabungkan untuk menghasilkan kolom teks final.

Instruksi untuk memuat dataset diberikan di bawah ini dengan menyediakan nama dataset yang diinginkan, yaitu tatsu-lab/alpaca:

train_dataset = load_dataset("tatsu-lab/alpaca", split="train")
print(train_dataset)

Kita dapat melihat bahwa data yang dihasilkan berbentuk dictionary dengan dua kunci:

  • Features: berisi kolom-kolom utama data
  • Num_rows: menunjukkan total jumlah baris dalam data

Struktur train_dataset

Struktur train_dataset

Lima baris pertama dapat ditampilkan dengan instruksi berikut. Pertama, ubah dictionary menjadi dataframe pandas, lalu tampilkan baris-barisnya.

pandas_format = train_dataset.to_pandas()
display(pandas_format.head())

Lima baris pertama train_dataset

Lima baris pertama train_dataset

Untuk visualisasi yang lebih baik, mari cetak informasi tentang tiga baris pertama, tetapi sebelum itu, kita perlu memasang pustaka textwrap untuk mengatur jumlah maksimum kata per baris menjadi 50. Pernyataan print pertama memisahkan setiap blok dengan 15 tanda hubung.

import textwrap
for index in range(3):
   print("---"*15)
   print("Instruction:        
       {}".format(textwrap.fill(pandas_format.iloc[index]["instruction"],    
       width=50)))
   print("Output:  
       {}".format(textwrap.fill(pandas_format.iloc[index]["output"],  
       width=50)))
   print("Text: 
       {}".format(textwrap.fill(pandas_format.iloc[index]["text"],  
       width=50)))

Rincian tiga baris pertama

Rincian tiga baris pertama

Pelatihan Model

Sebelum melanjutkan untuk melatih model, kita perlu menyiapkan beberapa prasyarat:

  • Model Pra-latih: Kita akan menggunakan model pra-latih Salesforce/xgen-7b-8k-base, yang tersedia di Hugging Face. Salesforce melatih serangkaian LLM 7B bernama XGen-7B dengan dense attention standar pada urutan hingga 8K untuk hingga 1,5T token.
  • Tokenizer: Ini diperlukan untuk tugas tokenisasi pada data pelatihan. Kode untuk memuat model pra-latih dan tokenizer adalah sebagai berikut:
pretrained_model_name = "Salesforce/xgen-7b-8k-base"
model = AutoModelForCausalLM.from_pretrained(pretrained_model_name, torch_dtype=torch.bfloat16)
tokenizer = AutoTokenizer.from_pretrained(pretrained_model_name, trust_remote_code=True)

Konfigurasi pelatihan

Pelatihan memerlukan sejumlah argumen dan konfigurasi, dan dua objek konfigurasi penting didefinisikan di bawah ini, sebuah instance TrainingArguments, sebuah instance model LoraConfig, dan terakhir model SFTTrainer.

TrainingArguments

Ini digunakan untuk mendefinisikan parameter pelatihan model.

Dalam skenario ini, kita mulai dengan mendefinisikan tujuan penyimpanan model terlatih menggunakan atribut output_dir sebelum mendefinisikan hyperparameter tambahan, seperti metode optimisasi, learning rate, jumlah epoch, dan lainnya.

model_training_args = TrainingArguments(
       output_dir="xgen-7b-8k-base-fine-tuned",
       per_device_train_batch_size=4,
       optim="adamw_torch",
       logging_steps=80,
       learning_rate=2e-4,
       warmup_ratio=0.1,
       lr_scheduler_type="linear",
       num_train_epochs=1,
       save_strategy="epoch"
   )

LoRAConfig

Argumen utama yang digunakan untuk skenario ini adalah rank dari matriks transformasi low-rank di LoRA, yang ditetapkan ke 16. Kemudian, faktor penskalaan untuk parameter tambahan di LoRA ditetapkan ke 32.

Selain itu, rasio dropout adalah 0,05, yang berarti 5% unit input akan diabaikan selama pelatihan. Terakhir, karena kita menangani causal language modeling, tugasnya diinisialisasi dengan atribut CAUSAL_LM.

SFTTrainer

Tujuannya adalah melatih model menggunakan data pelatihan, tokenizer, dan informasi tambahan seperti model di atas.

Karena kita menggunakan field text dari data pelatihan, penting untuk melihat distribusinya guna membantu menetapkan jumlah maksimum token dalam suatu urutan.

import matplotlib.pyplot as plt


pandas_format['text_length'] = pandas_format['text'].apply(len)


plt.figure(figsize=(10,6))
plt.hist(pandas_format['text_length'], bins=50, alpha=0.5, color='g')
plt.title('Distribution of Length of Text')
plt.xlabel('Length of Text')
plt.ylabel('Frequency')
plt.grid(True)
plt.show()

Distribusi panjang kolom teks

Distribusi panjang kolom teks

Berdasarkan pengamatan di atas, kita dapat melihat bahwa mayoritas teks memiliki panjang antara 0 dan 1000. Selain itu, terlihat di bawah bahwa hanya 4,5% dokumen teks yang memiliki panjang lebih dari 1024.

mask = pandas_format['text_length'] > 1024
percentage = (mask.sum() / pandas_format['text_length'].count()) * 100


print(f"The percentage of text documents with a length greater than 1024 is: {percentage}%")

image6.png

Kemudian kita menetapkan jumlah maksimum token dalam urutan menjadi 1024 sehingga teks yang lebih panjang dari itu akan dipotong.

SFT_trainer = SFTTrainer(
       model=model,
       train_dataset=train_dataset,
       dataset_text_field="text",
       max_seq_length=1024,
       tokenizer=tokenizer,
       args=model_training_args,
       packing=True,
       peft_config=lora_peft_config,
   )

Eksekusi pelatihan

Dengan semua prasyarat siap, kita sekarang dapat menjalankan proses pelatihan model sebagai berikut:

tokenizer.pad_token = tokenizer.eos_token
model.resize_token_embeddings(len(tokenizer))
model = prepare_model_for_int8_training(model)
model = get_peft_model(model, lora_peft_config)
training_args = model_training_args
trainer = SFT_trainer
trainer.train()

Penting untuk disebutkan bahwa pelatihan ini dilakukan di lingkungan cloud dengan GPU, yang membuat keseluruhan proses pelatihan lebih cepat. Namun, pelatihan di komputer lokal akan membutuhkan waktu lebih lama untuk diselesaikan.

Blog kami, Kelebihan dan Kekurangan Menggunakan LLM di Cloud vs Menjalankan LLM Secara Lokal, memberikan pertimbangan utama untuk memilih strategi penerapan LLM yang optimal

Mari pahami apa yang terjadi pada cuplikan kode di atas:

  • tokenizer.pad_token = tokenizer.eos_token: Menetapkan token padding sama dengan token akhir kalimat.
  • model.resize_token_embeddings(len(tokenizer)): Mengubah ukuran layer embedding token pada model agar sesuai dengan panjang kosakata tokenizer.
  • model = prepare_model_for_int8_training(model): Mempersiapkan model untuk pelatihan dengan presisi INT8, kemungkinan dengan melakukan kuantisasi.
  • model = get_peft_model(model, lora_peft_config): Menyesuaikan model sesuai konfigurasi PEFT yang diberikan.
  • training_args = model_training_args: Menetapkan argumen pelatihan yang telah didefinisikan ke training_args.
  • trainer = SFT_trainer: Menetapkan instance SFTTrainer ke variabel trainer.
  • trainer.train(): Memicu proses pelatihan model sesuai spesifikasi yang diberikan.

Kesimpulan

Artikel ini memberikan panduan jelas untuk melatih large language model menggunakan PyTorch. Dimulai dari penyiapan dataset, dilanjutkan dengan langkah-langkah menyiapkan prasyarat, menyusun trainer, dan akhirnya menjalankan proses pelatihan.

Meskipun menggunakan dataset dan model pra-latih tertentu, prosesnya pada dasarnya sama untuk opsi kompatibel lainnya. Sekarang setelah Anda memahami cara melatih LLM, Anda dapat memanfaatkan pengetahuan ini untuk melatih model canggih lainnya untuk berbagai tugas NLP.

Lihat panduan kami tentang cara membangun aplikasi LLM dengan LangChain untuk mengeksplorasi lebih jauh kekuatan large language model. Atau, jika Anda masih perlu mempelajari konsep large language model, lihat kursus kami untuk memperdalam pembelajaran Anda.


Zoumana Keita 's photo
Author
Zoumana Keita
LinkedIn
Twitter

Seorang data scientist serbabisa yang senang berbagi pengetahuan dan memberi dampak bagi orang lain, Zoumana adalah pembuat konten di YouTube dan penulis teknologi teratas di Medium. Ia menikmati berbicara di depan umum, ngoding, dan mengajar. Zoumana meraih dua gelar magister: yang pertama di bidang ilmu komputer dengan fokus Machine Learning di Paris, Prancis, dan yang kedua di bidang Data Science dari Texas Tech University di AS. Kariernya dimulai sebagai Pengembang Perangkat Lunak di Groupe OPEN, Prancis, lalu bergabung dengan IBM sebagai Konsultan Machine Learning, di mana ia mengembangkan solusi AI end-to-end untuk perusahaan asuransi. Zoumana kemudian bergabung dengan Axionable, startup AI Berkelanjutan pertama yang berbasis di Paris dan Montreal. Di sana, ia berperan sebagai Data Scientist dan mengimplementasikan produk AI, terutama use case NLP, untuk klien dari Prancis, Montreal, Singapura, dan Swiss. Selain itu, 5% dari waktunya didedikasikan untuk Riset dan Pengembangan. Saat ini, ia bekerja sebagai Senior Data Scientist di IFC - World Bank Group.

Topik
Kecerdasan Buatan
Terkait

blogs

40 Pertanyaan Wawancara DBMS Teratas di 2026

Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Dario Radečić's photo

Dario Radečić

15 mnt

blogs

Tutorial Korelasi di R

Dapatkan pengenalan dasar-dasar korelasi di R: pelajari lebih lanjut tentang koefisien korelasi, matriks korelasi, plotting korelasi, dan sebagainya.
David Woods's photo

David Woods

13 mnt

blogs

12 Alternatif ChatGPT Terbaik yang Bisa Anda Coba pada 2026

Artikel ini menyajikan daftar alternatif ChatGPT yang akan meningkatkan produktivitas Anda.
Javier Canales Luna's photo

Javier Canales Luna

14 mnt

blogs

Spaghetti Plot dan Jalur Badai

Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Hugo Bowne-Anderson's photo

Hugo Bowne-Anderson

13 mnt

Lihat SelengkapnyaLihat Selengkapnya