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
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
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:
-
Lengkapi prasyarat.
-
Siapkan peternakan Anda.
-
Siapkan dataset Anda.
-
Berikan akses peran antrian ke bucket dataset Anda (hanya kumpulan data S3).
-
Kirimkan pekerjaan penyempurnaan.
-
Unduh dan gunakan adaptor terlatih.
-
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.
| Ukuran model | Minimum VRAM (QLoRa 4-bit) | Instans Amazon EC2 yang disarankan |
|---|---|---|
0,5B-1,5B |
8GB |
|
3B—7B |
12GB |
|
7B—14B |
24GB |
|
14B—32B |
48GB |
|
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) —
DatasetPathParameter menunjuk ke folder lokal dari satu atau lebih.jsonlfile. Lampiran pekerjaan Deadline Cloud mengunggah folder secara otomatis, dan pekerjaan menggabungkan beberapa file dalam folder, termasuk subfolder. Nilai defaultnya adalahsample_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
DatasetS3Uriparameter, bundel akan mengabaikanDatasetPathdan mengunduh dari Amazon S3 sebagai gantinya. Ini menerima satu file sepertis3://bucket/path/train.jsonl, atau awalan yang diakhiri dengan/menggabungkan semua.jsonlfile di bawahnya. Mode S3 mengharuskan peran sesi antrian memilikis3:GetObjectizin pada dataset.
Format dataset kompatibel dengan banyak kumpulan data Hugging Face publik, termasuk dataset tatsu- di Hugging Face 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
-
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/*" ] }] } -
Lampirkan kebijakan ke peran antrian Anda:
QUEUE_ROLE=$(aws deadline get-queue --farm-idFARM-ID--queue-idQUEUE-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-idgpu-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-idgpu-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-idjob-id--timeout 3600
Unduh dan gunakan adaptor terlatih
Untuk mengunduh dan menguji adaptor
-
Setelah pekerjaan selesai, unduh output:
deadline job download-output --job-idjob-idAdaptor berakhir di
dan berisi bobot LoRa (OutputDir/AdapterName/adapter_model.safetensors), konfigurasi PEFT (adapter_config.json), metadata pelatihan, dan file tokenizer. -
Instal tumpukan inferensi inti di mesin lokal Anda:
pip install torch transformers peftAlat 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).
-
Uji adaptor dengan alat obrolan interaktif yang disertakan:
python3 inference/chat.py --adapter-path/path/to/downloaded/my-adapterAlat 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.
-
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 (coba
1e-4). -
Tekanan memori —
PerDeviceBatchSizeTurunkan (coba 1 atau 2) danGradAccumStepsnaikkan 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
allowedValuesBaseModelparameter, atur parameternya.HuggingFaceTokenUntuk produksi, lebih suka mengaturHF_TOKENsebagai variabel lingkungan pada antrian itu sendiri daripada meneruskannya sebagai parameter. -
Cache model — Bundel menggunakan secara
/mnt/persistent/hf_cachedefault, 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
-
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.
-
Jika Anda menambahkan
ReadFineTuningDatasetskebijakan ke peran antrian dan tidak lagi membutuhkannya, hapus kebijakan tersebut:QUEUE_ROLE=$(aws deadline get-queue --farm-idFARM-ID--queue-idQUEUE-ID\ --query 'roleArn' --output text | awk -F/ '{print $NF}') aws iam delete-role-policy \ --role-name "$QUEUE_ROLE" \ --policy-name ReadFineTuningDatasets -
Hapus file output lokal jika Anda tidak lagi membutuhkannya.
Sumber daya terkait
Sumber daya berikut memberikan informasi tambahan: