Transformers documentation

Llama3

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.2).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

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

Tensor parallelism
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ằng bfloat16, nhưng suy luận gốc sử dụng float16. Các checkpoint được tải lên Hub sử dụng dtype = 'float16', điều này sẽ được API AutoModel sử dụng để chuyển đổi checkpoint từ torch.float32 sang torch.float16.

dtype của trọng số trực tuyến hầu như không quan trọng, trừ khi bạn sử dụng dtype="auto" khi khởi tạo mô hình bằng model = AutoModelForCausalLM.from_pretrained("path", dtype = "auto"). Lý do là mô hình sẽ được tải xuống trước (sử dụng dtype của các checkpoint trực tuyến), sau đó được chuyển đổi sang dtype mặc định của torch (trở thành torch.float32, device_map=“auto”), và cuối cùng, nếu có dtype hoặc torch_dtype được cung cấp trong config, giá trị đó sẽ được sử dụng.

Việc huấn luyện mô hình ở float16 không được khuyến nghị và được biết là sẽ tạo ra nan; 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ụng tokenizer.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 đặt model.config.pad_token_id. Lớp embed_tokens của mô hình được khởi tạo bằng self.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 3
  • Sau 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ền dtype vào phương thức lớp from_pretrained và hãy sử dụng huấn luyện Automatic Mixed-Precision. Khi dùng Trainer, chỉ cần đặt fp16 hoặc bf16 thành True. Nếu không, hãy đảm bảo bạn đang sử dụng torch.autocast. Điều này là bắt buộc vì Flash Attention chỉ hỗ trợ kiểu dữ liệu fp16 và 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