Transformers documentation
Llama3
Mô hình này được công bố trên HF papers vào ngày 31/07/2024 và được đóng góp cho Hugging Face Transformers vào ngày 24/04/2024.
Llama3
import torch
import transformers
model_id = "meta-llama/Meta-Llama-3-8B"
pipeline = transformers.pipeline("text-generation", model=model_id, model_kwargs={"dtype": torch.bfloat16}, device_map="auto")
pipeline("Hey how are you doing today?")Tổng quan
Mô hình Llama3 được đề xuất trong Introducing Meta Llama 3: The most capable openly available LLM to date bởi nhóm meta AI.
Tóm tắt từ bài đăng trên blog như sau:
Hôm nay, chúng tôi rất vui mừng chia sẻ hai mô hình đầu tiên của thế hệ tiếp theo của Llama, Meta Llama 3, sẵn sàng cho việc sử dụng rộng rãi. Bản phát hành này bao gồm các mô hình ngôn ngữ được huấn luyện trước và tinh chỉnh theo hướng dẫn với 8B và 70B tham số, có khả năng hỗ trợ một phạm vi rộng các trường hợp sử dụng. Thế hệ Llama tiếp theo này thể hiện hiệu suất tiên tiến trên nhiều bộ đánh chuẩn ngành và cung cấp các khả năng mới, bao gồm suy luận được cải thiện. Chúng tôi tin rằng đây là những mô hình mã nguồn mở tốt nhất trong cùng phân khúc, không có ngoại lệ. Để hỗ trợ cho cách tiếp cận mở lâu dài của chúng tôi, chúng tôi đang đặt Llama 3 vào tay cộng đồng. Chúng tôi muốn khởi động làn sóng đổi mới tiếp theo trong AI xuyên suốt toàn bộ hệ thống — từ ứng dụng đến công cụ dành cho nhà phát triển, đến đánh giá, đến tối ưu hóa suy luận và nhiều hơn nữa. Chúng tôi không thể chờ đợi để xem những gì bạn xây dựng và mong nhận được phản hồi từ bạn.
Xem tất cả các checkpoint của mô hình Llama3 tại đây. Mã nguồn gốc của các tác giả có thể được tìm thấy tại đây.
Mẹo sử dụng
Các mô hình
Llama3được huấn luyện bằngbfloat16, nhưng suy luận gốc sử dụngfloat16. Các checkpoint được tải lên Hub sử dụngdtype = 'float16', điều này sẽ được APIAutoModelsử dụng để chuyển đổi checkpoint từtorch.float32sangtorch.float16.
dtypecủa trọng số trực tuyến hầu như không quan trọng, trừ khi bạn sử dụngdtype="auto"khi khởi tạo mô hình bằngmodel = AutoModelForCausalLM.from_pretrained("path", dtype = "auto"). Lý do là mô hình sẽ được tải xuống trước (sử dụngdtypecủa các checkpoint trực tuyến), sau đó được chuyển đổi sangdtypemặc định củatorch(trở thànhtorch.float32, device_map=“auto”), và cuối cùng, nếu códtypehoặctorch_dtypeđược cung cấp trong config, giá trị đó sẽ được sử dụng.Việc huấn luyện mô hình ở
float16không được khuyến nghị và được biết là sẽ tạo ranan; do đó, mô hình nên được huấn luyện ởbfloat16.
Mẹo:
Trọng số cho các mô hình Llama3 có thể được lấy bằng cách điền biểu mẫu này
Kiến trúc hoàn toàn giống với Llama2.
Tokenizer là một mô hình BPE dựa trên tiktoken (so với tokenizer dựa trên cài đặt sentencepiece cho Llama2). Điểm khác biệt chính là nó bỏ qua các quy tắc gộp BPE khi một token đầu vào nằm trong từ vựng. Điều này có nghĩa là nếu không có quy tắc gộp nào để tạo ra
"hugging", thay vì có các đơn vị nhỏ nhất, như["hug","ging"]tạo thành 2 token, nếu"hugging"là một phần của từ vựng, nó sẽ được tự động trả về như một token.Mô hình gốc sử dụng
pad_id = -1, có nghĩa là không có token đệm. Chúng ta không thể dùng cùng một logic, hãy đảm bảo thêm một token đệm bằng cách sử dụngtokenizer.add_special_tokens({"pad_token":"<pad>"})và điều chỉnh kích thước embedding token cho phù hợp. Bạn cũng nên đặtmodel.config.pad_token_id. Lớpembed_tokenscủa mô hình được khởi tạo bằngself.embed_tokens = nn.Embedding(config.vocab_size, config.hidden_size, self.config.padding_idx), điều này đảm bảo rằng việc mã hóa token đệm sẽ cho ra kết quả là các số không, do đó việc truyền tham số này khi khởi tạo là được khuyến nghị.Checkpoint gốc có thể được chuyển đổi bằng script chuyển đổi. Script có thể được gọi bằng lệnh (ví dụ) sau:
python src/transformers/models/llama/convert_llama_weights_to_hf.py \ --input_dir /path/to/downloaded/llama/weights --model_size 7B --output_dir /output/path --llama_version 3Sau khi chuyển đổi, mô hình và tokenizer có thể được nạp thông qua:
from transformers import AutoModelForCausalLM, AutoTokenizer tokenizer = AutoTokenizer.from_pretrained("/output/path") model = AutoModelForCausalLM.from_pretrained("/output/path", device_map="auto")Lưu ý rằng việc thực thi script yêu cầu đủ bộ nhớ RAM CPU để chứa toàn bộ mô hình ở độ chính xác float16 (ngay cả khi các phiên bản lớn nhất được chia thành nhiều checkpoint, mỗi checkpoint chứa một phần của mỗi trọng số của mô hình, do đó chúng ta cần nạp tất cả vào RAM). Đối với mô hình 75B, cần 145GB RAM.
Khi sử dụng Flash Attention 2 thông qua
attn_implementation="flash_attention_2", đừng truyềndtypevào phương thức lớpfrom_pretrainedvà hãy sử dụng huấn luyện Automatic Mixed-Precision. Khi dùngTrainer, chỉ cần đặtfp16hoặcbf16thànhTrue. Nếu không, hãy đảm bảo bạn đang sử dụngtorch.autocast. Điều này là bắt buộc vì Flash Attention chỉ hỗ trợ kiểu dữ liệufp16vàbf16.
Tài nguyên
Rất nhiều tài nguyên thú vị đã có sẵn trên trang tài liệu của Llama2, mời các nhà đóng góp thêm các tài nguyên mới được tuyển chọn cho Llama3 tại đây! 🤗
Update on GitHub