

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
<a name="tutorial-hf-finetune-lora"></a>

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 ](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/job_bundles/hf_finetune_lora) di GitHub situs web 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.

Untuk melakukan penyempurnaan yang efisien parameter, bundel menggunakan pustaka transformator [ Hugging Face, pustaka penyempurnaan yang efisien parameter [ PEFT](https://github.com/huggingface/peft), dan pustaka kuantisasi bitsandbytes di ](https://github.com/huggingface/transformers) situs web. [https://github.com/TimDettmers/bitsandbytes](https://github.com/TimDettmers/bitsandbytes) GitHub 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
<a name="tutorial-hf-lora-overview"></a>

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 dengan`deadline job download-output`, dan menggabungkan adaptor dengan model dasar untuk inferensi lokal.

Untuk menyelesaikan tutorial ini, ikuti langkah-langkah berikut:

1. Lengkapi prasyarat.

1. Siapkan peternakan Anda.

1. Siapkan dataset Anda.

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

1. Kirimkan pekerjaan penyempurnaan.

1. Unduh dan gunakan adaptor terlatih.

1. Pembersihan sumber daya 

## Prasyarat
<a name="tutorial-hf-lora-prerequisites"></a>

Sebelum memulai, Anda perlu melakukan hal berikut:
+ Deadline Cloud CLI diinstal pada workstation Anda. Untuk petunjuk instalasi, lihat [ repositori ](https://github.com/aws-deadline/deadline-cloud) deadline-cloud di situs web. GitHub 
+ 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
<a name="tutorial-hf-lora-setup"></a>

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
<a name="tutorial-hf-lora-dataset"></a>

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

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 seperti`s3://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. Misalnya, lihat [ dataset tatsu- ](https://huggingface.co/datasets/tatsu-lab/alpaca) dan lab/alpaca [ dataset databricks-dolly-15k di situs web Hugging Face. ](https://huggingface.co/datasets/databricks/databricks-dolly-15k) Dataset databricks-dolly-15k menggunakan `instruction` bidang \+ (set). `response` `ResponseColumn=response`

## Berikan akses peran antrian ke bucket dataset Anda
<a name="tutorial-hf-lora-iam"></a>

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 akses baca peran tersebut. Jika Anda menggunakan dataset folder lokal default, lewati bagian ini.

**Untuk memberikan akses baca peran antrian ke kumpulan data Anda**

1. Buat dokumen kebijakan bernama`datasets-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/*"
           ]
       }]
   }
   ```

1. 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
<a name="tutorial-hf-lora-submit"></a>

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
```

`BaseModel`Parameter 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 ](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/job_bundles/hf_finetune_lora#key-parameters) di situs GitHub web.

Untuk menunggu pekerjaan selesai, jalankan perintah berikut:

```
deadline job wait --job-id {{job-id}} --timeout 3600
```

## Unduh dan gunakan adaptor terlatih
<a name="tutorial-hf-lora-download"></a>

**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.

1. 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).

1. 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.

1. 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 ](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/job_bundles/hf_finetune_lora/inference) ME di situs web. GitHub 

## Kiat
<a name="tutorial-hf-lora-tips"></a>
+ **Kerugian harus menurun secara monoton ** — Jika tidak, turunkan tingkat pembelajaran (coba`1e-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
<a name="tutorial-hf-lora-cleanup"></a>

Untuk menghindari biaya yang sedang berlangsung, 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.

1. 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
   ```

1. Hapus file output lokal jika Anda tidak lagi membutuhkannya.

## Sumber daya terkait
<a name="tutorial-hf-lora-related"></a>

Sumber daya berikut mencakup bundel sampel, perpustakaan yang digunakannya, dan metode LoRa itu sendiri, di GitHub situs web, situs web Hugging Face, dan situs web arXiv:
+ [Contoh kode sumber ](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/job_bundles/hf_finetune_lora)
+ [Dokumentasi PEFT Hugging Face ](https://huggingface.co/docs/peft)
+ [Makalah QLoRa (Dettmers dkk., 2023) ](https://arxiv.org/abs/2305.14314)
+ [Makalah LoRa (Hu dkk., 2021) ](https://arxiv.org/abs/2106.09685)
+ [Benchmark LLM dengan vLLM dan lm-evaluation-harness](tutorial-vllm-leaderboard.md)
+ [FLUX.2 Penyetelan halus dan pembuatan gambar Klein LoRa](flux2-klein-lora.md)