- Triển khai Llama3 từ đầu thông qua phép nhân giữa một tensor và ma trận.
- Tải trực tiếp tensor từ tệp mô hình Llama3 do Meta cung cấp.
Tóm tắt việc triển khai mô hình LLaMA-3 từ scratch
Thiết lập tokenizer
- Thiết lập tokenizer bằng thư viện Tiktoken
- Định nghĩa các token đặc biệt và thêm chúng vào tokenizer
Đọc tệp mô hình
- Dùng PyTorch để tải tệp mô hình (
consolidated.00.pth)
- Đọc cấu hình của mô hình từ tệp
params.json
- Bao gồm thông tin như số chiều (
dim), số layer (n_layers), số head (n_heads)
Chuyển văn bản thành token
- Chuyển văn bản prompt thành chuỗi token bằng tokenizer
- Chuyển từng token thành embedding tương ứng
- Chuẩn hóa embedding bằng RMS normalization
Triển khai attention
- Tải các ma trận query (
wq), key (wk), value (wv) và output (wo) từ mô hình
- Tính các vector query, key, value cho từng token
- Thêm thông tin vị trí bằng RoPE(Rotary Positional Embedding)
- Tính điểm attention bằng tích vô hướng giữa query và key
- Áp dụng masking cho điểm attention đối với các token trong tương lai
- Áp dụng hàm Softmax để tính phân phối attention
- Nhân phân phối attention với vector value để tính kết quả attention
Multi-head attention
- Thực hiện phép tính attention cho tất cả các head attention
- Nối (concatenate) kết quả của từng head để tạo ra kết quả attention cuối cùng
Mạng feed-forward
- Triển khai mạng feed-forward dùng hàm kích hoạt SwiGLU(Swish Gated Linear Unit)
- Cộng kết quả attention với đầu ra của mạng feed-forward để tạo embedding cuối cùng
Lặp qua toàn bộ layer
- Lặp lại phép tính attention và mạng feed-forward cho tất cả các layer transformer
- Chuẩn hóa embedding cuối cùng bằng RMS normalization
Dự đoán token
- Nhân embedding cuối cùng với ma trận đầu ra để tính logits
- Dự đoán token tiếp theo là token có giá trị cao nhất trong logits
- Giải mã token đã dự đoán để xuất ra kết quả
Ý kiến của GN⁺
- Bài viết này rất hữu ích để hiểu cấu trúc bên trong và cách hoạt động của mô hình Llama3. Đặc biệt, thông qua quá trình tự triển khai từ đầu, có thể thấy rõ các thành phần của mô hình tương tác với nhau như thế nào.
- Với kỹ sư phần mềm mới bắt đầu, nội dung có thể hơi phức tạp. Tuy nhiên, bài viết được giải thích theo từng bước nên nếu theo dõi chậm rãi thì vẫn có thể hiểu được.
- Có thể học cách cải thiện hiệu năng mô hình bằng việc đưa vào các khái niệm nâng cao như RoPE (rotary positional embedding). Điều này có thể hữu ích khi triển khai hoặc cải tiến các mô hình NLP khác.
- Thông qua bài viết này, có thể hiểu sâu hơn về cấu trúc bên trong và cách vận hành của các mô hình deep learning. Điều này sẽ rất hữu ích khi tối ưu hóa hoặc gỡ lỗi mô hình.
1 bình luận
Anya đáng yêu nhỉ