View a markdown version of this page

Fine-tune LLM Memeluk Wajah dengan LoRa dan QLoRa - Awan Batas Waktu

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Fine-tune LLM Memeluk Wajah dengan LoRa dan QLoRa

Tutorial ini memandu Anda melalui penyempurnaan model bahasa kausal Hugging Face dengan Low-Rank Adaptasi (LoRa) atau Adaptasi Terkuantisasi Low-Rank (QLoRa) pada kumpulan data instruksi khusus. Anda mengirimkan bundel pekerjaan fintuning Hugging Face LoRa GitHub ke armada GPU di peternakan Deadline Cloud Anda.

LoRa melatih adaptor kecil di atas model dasar beku alih-alih memperbarui semua bobot model. QLoRa melakukan hal yang sama sambil memegang model dasar dalam bentuk terkuantisasi 4-bit, yang kira-kira membagi dua memori GPU yang dibutuhkan dan memungkinkan model yang lebih besar muat pada GPU yang lebih kecil.

Bundel menggunakan pustaka transform ator Hugging Face, pustaka fine tuning hemat parameter PEFT, dan pustaka kuantisasi bitsandbytes untuk melakukan penyetelan halus yang efisien parameter. Outputnya adalah adaptor LoRa kecil (sekitar 50—200 MB). Muat di atas model dasar untuk mengubah cara model berperilaku. Gunakan untuk mengajarkan model gaya penulisan, keahlian domain, format output tertentu, atau beberapa pengetahuan eksklusif.

Perkiraan waktu: Sekitar satu jam, termasuk pengaturan. Sebagian besar LoRa menyempurnakan untuk model 1B-7B selesai dalam 5—30 menit pelatihan.

Menjalankan tutorial ini dikenakan biaya untuk instance pekerja GPU yang memproses pekerjaan.

Gambaran umum

Alur kerja memiliki empat tahap. Anda menyiapkan dataset JSONL, mengirimkan pekerjaan Deadline Cloud sehingga pekerja GPU mengunduh dataset dan menjalankan fine-tuning QLora, mengunduh adaptor dengandeadline job download-output, dan menggabungkan adaptor dengan model dasar untuk inferensi lokal.

Untuk menyelesaikan tutorial ini, ikuti langkah-langkah berikut:

  1. Lengkapi prasyarat.

  2. Siapkan peternakan Anda.

  3. Siapkan dataset Anda.

  4. Berikan akses peran antrian ke bucket dataset Anda (hanya kumpulan data S3).

  5. Kirimkan pekerjaan penyempurnaan.

  6. Unduh dan gunakan adaptor terlatih.

  7. Pembersihan sumber daya

Prasyarat

Sebelum memulai, Anda perlu melakukan hal berikut:

  • Dead line Cloud CLI GitHub diinstal.

  • Dataset dalam format JSONL, baik di folder lokal atau diunggah ke bucket Amazon S3 yang dapat dibaca peran antrian.

  • (Opsional) Token Hugging Face, hanya diperlukan jika Anda mengarahkan ulang bundel pada model yang terjaga keamanannya (misalnya, Llama atau Gemma). Semua model di dropdown bersifat publik.

Siapkan peternakan Anda

Anda memerlukan Deadline Cloud farm dengan GPU-enabled antrian (armada Linux, GPU NVIDIA dengan RAM video 16 GB atau lebih (VRAM)).

Tabel berikut mencantumkan rekomendasi armada berdasarkan ukuran model. QLoRa mengurangi separuh kebutuhan memori dibandingkan dengan LoRa penuh, dan bundel default ke QLoRa.

Rekomendasi armada
Ukuran model Minimum VRAM (QLoRa 4-bit) Instans Amazon EC2 yang disarankan

0,5B-1,5B

8GB

g5.xlarge(A10G) atau lebih besar

3B—7B

12GB

g5.2xlarge(A10G), g6.xlarge (L4)

7B—14B

24GB

g5.4xlarge(A10G 24GB), g6.2xlarge (L4 24GB)

14B—32B

48GB

g6e.xlarge(L40S 48GB), g5.12xlarge (4× A10G 24GB), g6.12xlarge (4× L4 24GB)

catatan

Instans multi-GPU di baris terakhir menyediakan empat GPU 24-GB daripada satu GPU dengan 48 GB VRAM. Skrip pelatihan bundel memuat model dengan device_map="auto" pengaturan Hugging Face, yang memecah lapisan model di seluruh GPU instance. Untuk GPU tunggal dengan VRAM 48 GB, gunakan g6e instance (L40S).

Siapkan dataset Anda

Dataset adalah file JSONL di mana setiap baris adalah objek JSON dengan dua bidang teks. Nama bidang default adalah instruction danoutput, dan Anda dapat mengonfigurasinya dengan ResponseColumn parameter InstructionColumn dan.

Baris-baris berikut berasal dari kumpulan data sampel Saffron Stack yang disertakan bundel:

{"instruction": "What is Saffron Stack's tagline?", "output": "Saffron Stack's tagline is 'Layered with love.'"} {"instruction": "How old is Saffron Stack?", "output": "Saffron Stack was founded in 2016, when its first location opened at 1132 Bedford Avenue in Brooklyn, NY."}

Bundel menerima data dalam dua bentuk:

  • Folder lokal (default) DatasetPath Parameter menunjuk ke folder lokal dari satu atau lebih .jsonl file. Lampiran pekerjaan Deadline Cloud mengunggah folder secara otomatis, dan pekerjaan menggabungkan beberapa file dalam folder, termasuk subfolder. Nilai defaultnya adalah sample_data/ folder bundel itu sendiri, jadi pengiriman dengan semua default melatih data sampel yang disertakan (contoh restoran fiksi bernama Saffron Stack).

  • Amazon S3 URI (penggantian opsional) — Jika Anda menyetel DatasetS3Uri parameter, bundel akan mengabaikan DatasetPath dan mengunduh dari Amazon S3 sebagai gantinya. Ini menerima satu file sepertis3://bucket/path/train.jsonl, atau awalan yang diakhiri dengan / menggabungkan semua .jsonl file di bawahnya. Mode S3 mengharuskan peran sesi antrian memiliki s3:GetObject izin pada dataset.

Format dataset kompatibel dengan banyak kumpulan data Hugging Face publik, termasuk dataset tatsu- di Hugging Face dan lab/alpaca dataset databricks-dolly-15k di Hugging Face, yang menggunakan bidang + (set). instruction response ResponseColumn=response

Berikan akses peran antrian ke bucket dataset

Pekerja Deadline Cloud menjalankan pekerjaan di bawah peran sesi antrian. Secara default peran itu hanya dapat membaca dari lampiran pekerjaan antrian, bucket Amazon S3. Jika dataset Anda berada di tempat lain, Anda harus memberikan peran akses baca. Jika Anda menggunakan dataset folder lokal default, lewati bagian ini.

Untuk memberikan akses baca peran antrian ke kumpulan data Anda
  1. Buat dokumen kebijakan bernamadatasets-policy.json, mengganti sumber daya ARN dengan bucket dan awalan Anda yang sebenarnya:

    { "Version": "2012-10-17", "Statement": [{ "Sid": "ReadFineTuningDatasets", "Effect": "Allow", "Action": ["s3:GetObject", "s3:ListBucket"], "Resource": [ "arn:aws:s3:::YOUR-BUCKET", "arn:aws:s3:::YOUR-BUCKET/datasets/*" ] }] }
  2. Lampirkan kebijakan ke peran antrian Anda:

    QUEUE_ROLE=$(aws deadline get-queue --farm-id FARM-ID --queue-id QUEUE-ID \ --query 'roleArn' --output text | awk -F/ '{print $NF}') aws iam put-role-policy \ --role-name "$QUEUE_ROLE" \ --policy-name ReadFineTuningDatasets \ --policy-document file://datasets-policy.json

Atau, tempatkan dataset Anda di bawah awalan bucket job-attachment yang ada (DeadlineCloud/...) di mana peran tersebut sudah memiliki akses.

Kirim pekerjaan penyempurnaan

Untuk mengirimkan dengan pengirim GUI, jalankan perintah berikut, isi formulir, dan pilih Kirim. GUI diatur ke dalam bagian yang dapat dilipat: Model, Dataset, LoRa, Pelatihan, dan Output.

deadline bundle gui-submit /path/to/hf_finetune_lora

Atau, kirimkan dengan CLI:

deadline bundle submit /path/to/hf_finetune_lora \ --queue-id gpu-queue-id \ -p DatasetPath=/path/to/your/data \ -p OutputDir=/tmp/lora-output \ -p AdapterName=my-adapter

BaseModelParameter default ke Qwen/Qwen2.5-7B dan menawarkan dropdown lima model publik: Qwen2.5 (0.5B, 1.5B, dan 7B),, dan. Mistral-7B-v0.3 Phi-3.5-mini-instruct Untuk menyempurnakan model yang tidak ada dalam daftar, edit BaseModel parameter dalam template.yaml file bundel. allowedValues Hyperparameter default disetel untuk menghafal fakta, yang cocok dengan data sampel yang dibundel. Untuk kasus penggunaan transfer gaya, konfigurasi yang lebih ringan melatih lebih cepat:

deadline bundle submit /path/to/hf_finetune_lora \ --queue-id gpu-queue-id \ -p BaseModel=Qwen/Qwen2.5-1.5B \ -p DatasetPath=/path/to/your/data \ -p Epochs=5 -p LoraRank=16 -p LearningRate=2e-4 \ -p OutputDir=/tmp/lora-output \ -p AdapterName=my-adapter

Untuk daftar lengkap parameter, termasuk peringkat LoRa, tingkat pembelajaran, ukuran batch, dan panjang urutan, lihat tabel parameter utama dalam contoh README di GitHub.

Untuk menunggu pekerjaan selesai, jalankan perintah berikut:

deadline job wait --job-id job-id --timeout 3600

Unduh dan gunakan adaptor terlatih

Untuk mengunduh dan menguji adaptor
  1. Setelah pekerjaan selesai, unduh output:

    deadline job download-output --job-id job-id

    Adaptor berakhir di OutputDir/AdapterName/ dan berisi bobot LoRa (adapter_model.safetensors), konfigurasi PEFT (adapter_config.json), metadata pelatihan, dan file tokenizer.

  2. Instal tumpukan inferensi inti di mesin lokal Anda:

    pip install torch transformers peft

    Alat obrolan memuat model dasar lengkap, sehingga mesin Anda membutuhkan sumber daya yang cukup untuk menjalankannya. GPU adalah opsional: pada GPU NVIDIA, default pip CUDA-enabled PyTorch menangani akselerasi; pada Mac silikon Apple, PyTorch secara otomatis menggunakan Metal (MPS); dan CPU-only bekerja tetapi lambat (sekitar 30 detik per jawaban untuk model 1.5B).

  3. Uji adaptor dengan alat obrolan interaktif yang disertakan:

    python3 inference/chat.py --adapter-path /path/to/downloaded/my-adapter

    Alat memuat adaptor di atas model dasar dan memberi Anda REPL di mana Anda dapat mengajukan pertanyaan dan membandingkan dengan model dasar untuk memverifikasi penyempurnaan berfungsi.

  4. Untuk UI web yang lebih ramah demo dengan gelembung obrolan di browser Anda, instal Gradio dan jalankan alat obrolan web:

    pip install gradio python3 inference/gradio_chat.py --adapter-path /path/to/downloaded/my-adapter

Untuk detail tentang kedua alat dan memuat adaptor secara terprogram dengan PEFT, lihat alat inferensi READ ME pada. GitHub

Kiat

  • Kerugian harus menurun secara monoton — Jika tidak, turunkan tingkat pembelajaran (coba1e-4).

  • Tekanan memori PerDeviceBatchSize Turunkan (coba 1 atau 2) dan GradAccumSteps naikkan untuk menjaga ukuran batch efektif konstan.

  • Transfer gaya dan menghafal fakta berbeda — Transfer gaya sering bekerja dengan 3-5 zaman dan sekitar 50-200 sampel. Menghafal fakta membutuhkan 8—15 zaman dan lebih banyak sampel per fakta (5-8 frasa).

  • Model berpagar - Jika Anda mengarahkan kembali bundel pada model terjaga keamanannya seperti Llama atau Gemma dengan menambahkannya ke allowedValues BaseModel parameter, atur parameternya. HuggingFaceToken Untuk produksi, lebih suka mengatur HF_TOKEN sebagai variabel lingkungan pada antrian itu sendiri daripada meneruskannya sebagai parameter.

  • Cache model — Bundel menggunakan secara /mnt/persistent/hf_cache default, yang hidup pada volume persisten pekerja. Cache mempertahankan model dasar di seluruh pekerjaan, sehingga proses selanjutnya jauh lebih cepat.

Bersihkan

Untuk menghindari biaya berkelanjutan, bersihkan sumber daya yang Anda buat untuk tutorial ini:

Untuk membersihkan sumber daya tutorial
  1. Jika Anda membuat armada GPU khusus untuk tutorial ini, hentikan atau hapus. Jika Anda menggunakan armada bersama yang sudah ada sebelumnya, biarkan tetap di tempatnya.

  2. Jika Anda menambahkan ReadFineTuningDatasets kebijakan ke peran antrian dan tidak lagi membutuhkannya, hapus kebijakan tersebut:

    QUEUE_ROLE=$(aws deadline get-queue --farm-id FARM-ID --queue-id QUEUE-ID \ --query 'roleArn' --output text | awk -F/ '{print $NF}') aws iam delete-role-policy \ --role-name "$QUEUE_ROLE" \ --policy-name ReadFineTuningDatasets
  3. Hapus file output lokal jika Anda tidak lagi membutuhkannya.

Sumber daya berikut memberikan informasi tambahan: