# Llama3

```python
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?")
```

## Ikhtisar

Model [Llama3](https://huggingface.co/papers/2407.21783) diusulkan dalam [Introducing Meta Llama 3: The most capable openly available LLM to date](https://ai.meta.com/blog/meta-llama-3/) oleh tim meta AI.

Abstrak dari blogpost tersebut adalah sebagai berikut:

*Hari ini, kami dengan senang hati membagikan dua model pertama dari generasi berikutnya Llama, yaitu Meta Llama 3, yang kini tersedia untuk penggunaan luas. Rilis ini mencakup model bahasa pra-terlatih dan yang telah dihaluskan dengan instruksi, masing-masing dengan 8B dan 70B parameter, yang mampu mendukung berbagai kasus penggunaan. Generasi Llama berikutnya ini menunjukkan kinerja terkini (state-of-the-art) pada berbagai benchmark industri dan menawarkan kemampuan baru, termasuk penalaran yang lebih baik. Kami yakin ini adalah model open source terbaik di kelasnya, tanpa pengecualian. Mendukung pendekatan terbuka kami yang telah lama berjalan, kami menyerahkan Llama 3 ke tangan komunitas. Kami ingin memulai gelombang inovasi berikutnya di bidang AI di seluruh tumpukan—mulai dari aplikasi hingga alat pengembang, evaluasi, optimasi inferensi, dan lainnya. Kami tidak sabar melihat apa yang akan Anda bangun dan menantikan umpan balik Anda.*

Cek semua checkpoint model Llama3 [di sini](https://huggingface.co/models?search=llama3). Kode asli dari para penulis dapat ditemukan [di sini](https://github.com/meta-llama/llama3).

## Tips penggunaan

Model `Llama3` dilatih menggunakan `bfloat16`, tetapi inferensi aslinya menggunakan `float16`. Checkpoint yang diunggah di Hub menggunakan `dtype = 'float16'`, yang akan digunakan oleh API `AutoModel` untuk mengubah checkpoint dari `torch.float32` ke `torch.float16`.

`dtype` dari bobot online pada dasarnya tidak relevan kecuali Anda menggunakan `dtype="auto"` saat menginisialisasi model dengan `model = AutoModelForCausalLM.from_pretrained("path", dtype = "auto")`. Alasannya adalah model akan pertama kali diunduh (menggunakan `dtype` dari checkpoint online), kemudian dikonversi ke `dtype` default dari `torch` (menjadi `torch.float32`, device_map="auto"), dan akhirnya, jika ada `dtype` atau `torch_dtype` yang disediakan dalam config, nilai tersebut yang akan digunakan.

Melatih model dalam `float16` tidak disarankan dan diketahui menghasilkan `nan`; oleh karena itu, model harus dilatih dalam `bfloat16`.

Tips:

- Bobot untuk model Llama3 dapat diperoleh dengan mengisi [formulir ini](https://ai.meta.com/resources/models-and-libraries/llama-downloads/)
- Arsitekturnya sama persis dengan Llama2.
- Tokenizer ini adalah model BPE yang berbasis [tiktoken](https://github.com/openai/tiktoken) (berbeda dengan yang berbasis implementasi sentencepiece untuk Llama2). Perbedaan utamanya adalah bahwa model ini mengabaikan aturan penggabungan BPE ketika token input merupakan bagian dari kosakata. Artinya, jika tidak ada penggabungan yang menghasilkan `"hugging"`, alih-alih memiliki unit terkecil, seperti `["hug","ging"]` yang membentuk 2 token, jika `"hugging"` merupakan bagian dari kosakata, token tersebut akan dikembalikan secara otomatis.
- Model asli menggunakan `pad_id = -1` yang berarti tidak ada token padding. Kita tidak bisa menggunakan logika yang sama, pastikan untuk menambahkan token padding menggunakan `tokenizer.add_special_tokens({"pad_token":"<pad>"})` dan sesuaikan ukuran token embedding secara sesuai. Anda juga harus mengatur `model.config.pad_token_id`. Lapisan `embed_tokens` dari model diinisialisasi dengan `self.embed_tokens = nn.Embedding(config.vocab_size, config.hidden_size, self.config.padding_idx)`, yang memastikan bahwa pengkodean token padding akan menghasilkan nol, sehingga disarankan untuk meneruskannya saat inisialisasi.
- Checkpoint asli dapat dikonversi menggunakan [skrip konversi](https://github.com/huggingface/transformers/blob/main/src/transformers/models/llama/convert_llama_weights_to_hf.py). Skrip ini dapat dipanggil dengan perintah (contoh) berikut:

    ```bash
    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
    ```

- Setelah konversi, model dan tokenizer dapat dimuat melalui:

    ```python
    from transformers import AutoModelForCausalLM, AutoTokenizer

    tokenizer = AutoTokenizer.from_pretrained("/output/path")
    model = AutoModelForCausalLM.from_pretrained("/output/path", device_map="auto")
    ```

    Perlu dicatat bahwa menjalankan skrip ini membutuhkan RAM CPU yang cukup untuk menampung seluruh model dalam presisi float16 (bahkan jika versi terbesar hadir dalam beberapa checkpoint, masing-masing checkpoint berisi sebagian dari setiap bobot model, sehingga kita perlu memuat semuanya ke dalam RAM). Untuk model 75B, dibutuhkan 145GB RAM.

- Saat menggunakan Flash Attention 2 melalui `attn_implementation="flash_attention_2"`, jangan meneruskan `dtype` ke metode kelas `from_pretrained` dan gunakan pelatihan Automatic Mixed-Precision. Saat menggunakan `Trainer`, cukup tentukan `fp16` atau `bf16` menjadi `True`. Jika tidak, pastikan Anda menggunakan `torch.autocast`. Hal ini diperlukan karena Flash Attention hanya mendukung tipe data `fp16` dan `bf16`.

## Sumber daya

Banyak sumber menarik yang sudah tersedia di halaman dokumentasi [Llama2](./llama2), mengundang kontributor untuk menambahkan sumber baru yang dikurasi khusus untuk Llama3 di sini! 🤗

