Giới thiệu
Trong thời đại của các mô hình ngôn ngữ lớn, tinh chỉnh mô hình (fine tune) là vấn đề được rất nhiều người quan tâm [1]. Mô hình Llama 2 của Meta (trước là Facebook) là phiên bản tiếp theo của Llama 1, với phiên bản lớn nhất có tới 70 tỷ tham số. Mô hình này có khả năng xử lý thông tin mở rộng và sử dụng tính năng mới là Grouped Query Attention (GQA) [2] để tăng cường khả năng suy luận. Bài này sẽ giúp bạn tinh chỉnh Llama 2 cho bài toán hỏi-đáp.
Tại sao sử dụng Llama 2
Trước khi đi vào hướng dẫn sử dụng Llama 2, hãy tìm hiểu những điểm mạnh của mô hình này:
- Llama 2 được học từ 2 nghìn tỷ từ, nghĩa là nó đã biết đến rất nhiều thông tin.
- Với khả năng xử lý thông tin dài hơn, mô hình có thể hiểu và tạo ra nhiều nội dung hơn.
- Tính năng GQA giúp mô hình xử lý nhanh hơn bằng cách lưu trữ thông tin từ trước.
- Llama 2 hoạt động tốt hơn các phiên bản trước, đặc biệt là phiên bản 70 tỷ tham số. Nó hoạt động tốt hơn so với các mô hình khác như Llama 1 65B và cả mô hình Falcon.
- So với mô hình khác như GPT-3.5 hay PaLM (540B), Llama 2 70B vẫn cho thấy hiệu suất tốt. Mặc dù có một chút chênh lệch so với GPT-4 và PaLM-2-L, nhưng khả năng của mô hình rất rõ ràng.
Giải thích về LoRA
PEFT (Parameter-Efficient Fine-Tuning) là một thuật ngữ cho bài toán liên quan đến việc điều chỉnh các mô hình đã được đào tạo trước cho các nhiệm vụ mới với ít thay đổi nhất có thể đối với các tham số của mô hình. Tinh chỉnh hiệu quả về tham số giúp chỉnh sửa các mô hình đã được đào tạo trước để phù hợp với nhiệm vụ mới mà thay đổi ít tham số nhất. Điều này rất quan trọng cho các mô hình lớn như BERT, GPT. Dưới đây là lý do tại sao:
- Tránh quá khớp: Khi dữ liệu ít, thay đổi nhiều tham số có thể khiến mô hình quá khớp. PEFT giúp mô hình linh hoạt nhưng vẫn phù hợp với nhiệm vụ mới.
- Đào tạo nhanh: Ít thay đổi tham số có nghĩa là ít phép tính hơn, giúp đào tạo nhanh hơn.
- Tiết kiệm tài nguyên: Đào tạo mô hình sâu tốn nhiều tài nguyên. PEFT giảm tải tính toán và bộ nhớ, giúp triển khai dễ dàng hơn trong điều kiện tài nguyên hạn chế.
- Giữ kiến thức: Đào tạo trước trên dữ liệu lớn giúp mô hình có nhiều kiến thức chung. Với PEFT, chúng ta đảm bảo không mất đi kiến thức này khi điều chỉnh mô hình cho nhiệm vụ mới.
LoRA (Low Rank Adaptation), là một bước đột phá mang tính cách mạng trong thế giới của các mô hình ngôn ngữ lớn cho bài toán này. Khi tinh chỉnh, chúng ta thay đổi trọng số của mô hình đã được đào tạo trước bằng các ví dụ mới. Theo cách truyền thống, điều này cần một ma trận có cùng kích thước. Tuy nhiên, với một chút sáng tạo và khái niệm phân tích hạng [3], một ma trận có thể được chia thành hai ma trận nhỏ hơn. Khi nhân chúng lại với nhau, chúng xấp xỉ ma trận gốc. Ưu điểm của LoRA:
- Không cần yêu cầu GPU quá cao (thấp hơn ít nhất 3 lần).
- Hiệu suất tương đương, nếu không phải là tốt hơn, ngay cả khi không tinh chỉnh toàn bộ mô hình.
Tinh chỉnh Llama 2 với LoRA:
Chuẩn bị và thiết lập môi trường
Các bạn cần cài đặt các thư viện và module Python cần thiết như trong đoạn mã sau. Các thư viện và module này giúp tăng tốc độ huấn luyện, cho phép điều chỉnh PEFT, hỗ trợ huấn luyện và truy cập vào các mô hình và công cụ đã được huấn luyện trước.
!pip install -q accelerate==0.21.0 peft==0.4.0 bitsandbytes==0.40.2 transformers==4.31.0 trl==0.4.7
import os, torch, logging
from datasets import load_dataset
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig, HfArgumentParser, TrainingArguments, pipeline
from peft import LoraConfig, PeftModel
from trl import SFTTrainer
Trong tutorial này chúng ta sẽ dùng bộ dữ liệu timdettmers/openassistant-guanaco là tập con của bộ dữ liệu OpenAsssistant nổi tiếng và có gần 1.000 bản mẫu. Bộ dữ liệu này đã được xử lý để phù hợp với định dạng của Llama 2. Những mẫu này đã được xử lý đặc biệt để phù hợp hoàn hảo với định dạng của Llama 2, giúp chúng có thể được sử dụng trực tiếp trong việc huấn luyện mà không cần chỉnh sửa thêm. Vì đã được xử lý phù hợp với định dạng của Llama 2, chúng có thể được sử dụng trực tiếp để huấn luyện mô hình cho các ứng dụng cụ thể như tạo chatbot, trợ lý ảo hoặc các ứng dụng khác liên quan đến ngôn ngữ. Ngoài ra bạn có thể thử sử dụng các bộ dữ liệu hội thoại khác trên kho dữ liệu của Hugging Face [4] để huấn luyện mô hình theo nhiều phong cách trò chuyện khác nhau.
Vì bài đã dài cộng thêm các chú giải tôi bổ sung nên các bạn vui lòng đọc tiếp trong phần 2 nhé.
Bài viết rất hữu ích! 1 like
Cảm ơn bạn! Cùng theo dõi mình để biết thêm nhiều bài viết hơn nhé.