Tìm hiểu về TinyLlama
TinyLlama là một mô hình ngôn ngữ nhỏ gọn với dung lượng 1,1 tỷ tham số, đã được đào tạo trên 1 nghìn tỷ token. Được xây dựng dựa trên Llama 2, TinyLlama tận dụng những tiến bộ trong cộng đồng mã nguồn mở như FlashAttention để cải thiện hiệu suất tính toán. Mặc dù có kích thước nhỏ, nhưng TinyLlama lại vượt trội hơn so với nhiều mô hình mã nguồn mở khác hiện có.
Giới thiệu
Trong lĩnh vực xử lý ngôn ngữ tự nhiên (NLP), xu hướng mở rộng quy mô mô hình ngôn ngữ đang rất phổ biến. Các Mô hình Ngôn ngữ Lớn (LLM) đã chứng minh hiệu quả trong nhiều tác vụ khác nhau nhờ vào việc được đào tạo trên kho dữ liệu khổng lồ. Tuy nhiên, để phát triển và áp dụng một mô hình rộng rãi, đặc biệt là trên các thiết bị phần cứng hạn chế, kích thước và hiệu suất của mô hình rất quan trọng.
Có hai điểm quan trọng cần lưu ý về luật chia tỷ lệ:
- Các mô hình ngôn ngữ nhỏ hơn vẫn có thể đạt hiệu suất tương đương như các mô hình lớn hơn nếu được đào tạo trên một tập dữ liệu đủ lớn.
- Các nguyên tắc mở rộng quy mô hiện tại không hoàn toàn chính xác khi áp dụng cho các mô hình nhỏ hơn.
Từ đó, TinyLlama được phát triển nhằm khám phá và kiểm nghiệm hiệu quả của các mô hình nhỏ hơn với khối lượng dữ liệu lớn hơn nhiều so với tiêu chuẩn hiện tại.
Đóng góp chính
- Giới thiệu TinyLlama, một mô hình ngôn ngữ nhỏ, mã nguồn mở.
- Cung cấp thông tin đầy đủ bao gồm mã nguồn, điểm kiểm tra mô hình, và quy trình xử lý dữ liệu để hỗ trợ sự cởi mở trong cộng đồng học máy.
- Kiến trúc nhỏ gọn và hiệu suất đầy tiềm năng của TinyLlama phù hợp với các ứng dụng di động và những thử nghiệm với các mô hình ngôn ngữ mới.
Thí nghiệm
Bộ dữ liệu
Mục đích chính của TinyLlama là đảm bảo quá trình đào tạo trước hiệu quả và có thể lặp lại. Hai bộ dữ liệu chính được sử dụng trong quá trình đào tạo là:
- SlimPajama: Được xây dựng từ một quy trình làm sạch dữ liệu từ bộ dữ liệu RedPajama, chứa đựng hơn 1,2 nghìn tỷ token.
- Starcodedata: Bao gồm khoảng 250 tỷ token từ 86 ngôn ngữ lập trình, cùng với các vấn đề về GitHub và các cặp mã-nội dung.
TinyLlama đã được đào tạo trên tổng cộng khoảng 950 tỷ token trong ba kỷ nguyên với tỷ lệ dữ liệu ngôn ngữ tự nhiên và mã là 7:3.
Kiến trúc mô hình
TinyLlama sử dụng kiến trúc Transformer tương tự như Llama 2, với các tính năng nổi bật như:
- Nhúng vị trí sử dụng RoPE (Nhúng vị trí quay - Rotary Positional Embedding).
- RMSNorm để tăng cường độ ổn định trong quá trình huấn luyện.
- SwiGLU làm chức năng kích hoạt kết hợp giữa Swish và Gated Linear Unit (GLU).
- Truy vấn theo nhóm chú ý để tiết kiệm băng thông bộ nhớ và tăng tốc độ suy luận.
Quá trình huấn luyện
TinyLlama tận dụng các phương pháp như dữ liệu được phân bổ hoàn toàn (Fully Sharded Data Parallel-FSDP) và FlashAttention để tối ưu hóa tốc độ và hiệu suất trong quá trình đào tạo. Nền tảng mô hình được xây dựng dựa trên lit-gpt với trình tối ưu hóa AdamW.
Triển khai mô hình
TinyLlama có thể dễ dàng triển khai trên các dịch vụ đám mây mà không cần GPU. Bài viết này sử dụng TinyLlama như một chatbot, thể hiện cách sử dụng mô hình trên Colab-Notebook. Để bắt đầu, chúng ta cài đặt và nhập các thư viện cần thiết.
Thực hiện từng bước
# Cài đặt thư viện
!pip install git+https://github.com/huggingface/transformers
!pip install -q -U accelerate
# Nhập thư viện
import torch
import transformers
from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline
# Định nghĩa tên mô hình
model_id = 'TinyLlama/TinyLlama-1.1B-Chat-v1.0'
Gọi mô hình
Trước tiên, tải mô hình và bộ mã hóa từ HuggingFace, sau đó xác định vai trò cho mô hình:
model = AutoModelForCausalLM.from_pretrained(model_id)
tokenizer = AutoTokenizer.from_pretrained(model_id)
messages = [
{"role": "system", "content": "Bạn là một nhà sáng tạo nội dung đam mê công nghệ và luôn phản hồi theo phong cách geek."},
{"role": "user", "content": "Làm thế nào để tăng lượt xem cho nội dung của tôi?"},
]
Thực hiện với pipe
Bạn có thể sử dụng pipeline của Huggingface để quản lý quá trình trò chuyện một cách dễ dàng nhất:
pipe = pipeline("text-generation", model=model, tokenizer=tokenizer)
messages = [
{"role": "system", "content": "Bạn là một nhà sáng tạo nội dung đam mê công nghệ."},
{"role": "user", "content": "Làm thế nào để tăng lượt xem cho nội dung của tôi?"},
]
prompt = pipe.tokenizer.apply_chat_template(messages)
outputs = pipe(prompt)
print(outputs[0]["generated_text"])
Kết quả sẽ hiển thị câu trả lời của mô hình cho câu hỏi của người dùng.
Kết luận
TinyLlama không chỉ cung cấp một mô hình ngôn ngữ nhỏ gọn mà còn mở ra cơ hội cho các nhà nghiên cứu và lập trình viên trong việc thử nghiệm với các công nghệ mới trong lĩnh vực NLP. Hiệu suất của nó so với các mô hình nguồn mở khác là một minh chứng cho khả năng của các mô hình nhỏ trong việc xử lý và tạo ra ngôn ngữ.
Tài liệu tham khảo
- Zhang et al. — TinyLlama: Một Mô hình Ngôn ngữ Nhỏ Mã Nguồn Mở — URL: https://arxiv.org/abs/2401.02385
- Jordan Hoffman et al. — Đào tạo các mô hình ngôn ngữ lớn tối ưu — URL: https://arxiv.org/abs/2203.15556
- Thaddée, Y. T — Cái chết của Chinchilla — URL: https://espadrine.github.io/blog/posts/chinchilla-sdeath.html.
- Hugging Face — Mẫu cho các mô hình trò chuyện — URL: https://huggingface.co/docs/transformers/main/en/chat_templating.
source: viblo