Transformers documentation

CodeLlama

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

and get access to the augmented documentation experience

to get started

Model ini dipublikasikan di HF papers pada 2023-08-24 dan disumbangkan ke Hugging Face Transformers pada 2023-08-25.

CodeLlama

Code Llama adalah keluarga model bahasa besar khusus yang didasarkan pada Llama 2 untuk tugas pemrograman. Model ini hadir dalam beberapa varian—kode umum, khusus Python, dan varian yang mengikuti instruksi—semuanya tersedia dalam 7B, 13B, 34B, dan 70B parameter. Model Code Llama dapat menghasilkan, menjelaskan, dan bahkan mengisi bagian kode yang hilang (disebut “infilling”). Model ini juga dapat menangani konteks yang sangat panjang dengan generasi yang stabil hingga 100k token, meskipun dilatih pada sekuens sepanjang 16K token.

Anda dapat menemukan semua checkpoint Code Llama asli di bawah koleksi Code Llama.

Klik pada model Code Llama di bilah sisi kanan untuk melihat lebih banyak contoh cara menerapkan Code Llama ke berbagai tugas pemrograman.

Contoh di bawah ini menunjukkan cara menghasilkan kode dengan Pipeline, atau AutoModel, dan dari baris perintah.

Pipeline
AutoModel
from transformers import pipeline


pipe = pipeline(
    "text-generation",
    model="meta-llama/CodeLlama-7b-hf",
    device_map=0
)

# basic code generation
result = pipe("# Function to calculate the factorial of a number\ndef factorial(n):", max_new_tokens=256)
print(result[0]['generated_text'])

# infilling
infill_result = pipe("def remove_non_ascii(s: str) -> str:\n    \"\"\" <FILL_ME>\n    return result", max_new_tokens=200)
print(infill_result[0]['generated_text'])

Quantization mengurangi beban memori model besar dengan merepresentasikan bobot dalam presisi yang lebih rendah. Lihat ringkasan Quantization untuk backend quantization lain yang tersedia.

Contoh di bawah menggunakan bitsandbytes untuk hanya mengkuantisasi bobot menjadi 4-bit.

# pip install bitsandbytes
import torch

from transformers import AutoModelForCausalLM, BitsAndBytesConfig, CodeLlamaTokenizer


bnb_config = BitsAndBytesConfig(load_in_4bit=True, bnb_4bit_compute_dtype=torch.bfloat16, bnb_4bit_quant_type="nf4", bnb_4bit_use_double_quant=True)
tokenizer = CodeLlamaTokenizer.from_pretrained("meta-llama/CodeLlama-34b-hf")
model = AutoModelForCausalLM.from_pretrained(
   "meta-llama/CodeLlama-34b-hf",
   device_map="auto",
   quantization_config=bnb_config
)

prompt = "# Write a Python function to check if a string is a palindrome\ndef is_palindrome(s):"
input_ids = tokenizer(prompt, return_tensors="pt").to(model.device)

output = model.generate(**input_ids, max_new_tokens=200, cache_implementation="static")
print(tokenizer.decode(output[0], skip_special_tokens=True))

Gunakan AttentionMaskVisualizer untuk lebih memahami token mana yang dapat dan tidak dapat diperhatikan oleh model.

from transformers.utils.attention_visualizer import AttentionMaskVisualizer


visualizer = AttentionMaskVisualizer("meta-llama/CodeLlama-7b-hf")
visualizer("""def func(a, b):
  return a + b""")

Catatan

  • Infilling hanya tersedia pada model dasar 7B dan 13B, dan tidak tersedia pada model Python, Instruct, 34B, atau 70B.

  • Gunakan token <FILL_ME> di tempat Anda ingin input diisi. Tokenizer memecah token ini untuk membuat string input berformat yang mengikuti pola pelatihan asli. Ini lebih robust daripada menyiapkan pola sendiri.

    from transformers import LlamaForCausalLM, CodeLlamaTokenizer
    
    tokenizer = CodeLlamaTokenizer.from_pretrained("meta-llama/CodeLlama-7b-hf")
    model = LlamaForCausalLM.from_pretrained("meta-llama/CodeLlama-7b-hf", device_map="auto")
    PROMPT = '''def remove_non_ascii(s: str) -> str:
        """ <FILL_ME>
        return result
    '''
    input_ids = tokenizer(PROMPT, return_tensors="pt").to(model.device)["input_ids"]
    generated_ids = model.generate(input_ids, max_new_tokens=128)
    
    filling = tokenizer.batch_decode(generated_ids[:, input_ids.shape[1]:], skip_special_tokens = True)[0]
    print(PROMPT.replace("<FILL_ME>", filling))
  • Gunakan bfloat16 untuk pelatihan lanjutan atau fine-tuning dan float16 untuk inferensi.

  • Karakter BOS tidak digunakan untuk infilling saat mengenkoding prefix atau suffix, tetapi hanya di awal setiap prompt.

  • Tokenizer adalah model byte-pair encoding yang berbasis pada SentencePiece. Saat decoding, jika token pertama adalah awal dari kata (misalnya, “Banana”), tokenizer tidak menambahkan spasi awalan ke string.

CodeLlamaTokenizer

kelas transformers.CodeLlamaTokenizer

< >

( vocab: str | dict[str, int] | None = Nonemerges: str | list[str] | None = Noneclean_up_tokenization_spaces = Falseunk_token = '<unk>'bos_token = '<s>'eos_token = '</s>'prefix_token = '▁<PRE>'middle_token = '▁<MID>'suffix_token = '▁<SUF>'eot_token = '▁<EOT>'fill_token = '<FILL_ME>'additional_special_tokens = Noneuse_default_system_prompt: bool = Falseadd_prefix_space: bool | None = Trueadd_bos_token: bool = True**kwargs )

Parameter

  • clean_up_tokenization_spaces (str, opsional, default False) — Apakah akan membersihkan spasi setelah decoding; pembersihan terdiri dari menghapus artefak potensial seperti spasi berlebih.
  • unk_token (str, opsional, default "<unk>") — Token yang tidak diketahui. Token yang tidak ada dalam kosakata tidak dapat dikonversi menjadi ID dan akan diset sebagai token ini sebagai gantinya.
  • bos_token (str, opsional, default "<s>") — Token awal urutan yang digunakan selama pra-pelatihan. Dapat digunakan sebagai token klasifikator urutan.
  • eos_token (str, opsional, default "</s>") — Token akhir urutan.
  • prefix_token (str, opsional, defaultnya "▁<PRE>") — Token prefix yang digunakan untuk infilling.
  • middle_token (str, opsional, defaultnya "▁<MID>") — Token tengah yang digunakan untuk infilling.
  • suffix_token (str, opsional, defaultnya "▁<SUF>") — Token sufiks yang digunakan untuk infilling.
  • eot_token (str, opsional, default "▁<EOT>") — Token akhir teks yang digunakan untuk infilling.
  • fill_token (str, opsional, default "<FILL_ME>") — Token yang digunakan untuk memisahkan input antara prefiks dan sufiks.
  • additional_special_tokens (list[str], opsional) — Token khusus tambahan yang digunakan oleh tokenizer.
  • add_bos_token (bool, opsional, default True) — Apakah akan menambahkan token awal urutan di bagian awal dari urutan.
  • add_eos_token (bool, opsional, default False) — Apakah akan menambahkan token end of sequence di akhir rangkaian.
  • use_default_system_prompt (bool, opsional, defaultnya False) — Apakah prompt sistem default untuk Llama harus digunakan.
  • add_prefix_space (bool, opsional) — Apakah akan menambahkan spasi awal ke input. Hal ini memungkinkan kata pembuka diperlakukan sama seperti kata lainnya.
  • vocab (str, dict atau list, opsional) — Kamus kosakata kustom. Jika tidak disediakan, kosakata dimuat dari vocab_file.
  • merges (str atau list, opsional) — Daftar merges kustom. Jika tidak disediakan, merges dimuat dari merges_file.
  • vocab_file (str, opsional) — file SentencePiece (umumnya berekstensi .model) yang mengandung kosakata yang diperlukan untuk menginstansiasi tokenizer.

Konstruksi tokenizer Llama. Berbasis byte-level Byte-Pair-Encoding.

Ini secara khusus menggunakan ByteFallback dan tanpa normalisasi.

>>> from transformers import CodeLlamaTokenizer

>>> tokenizer = CodeLlamaTokenizer.from_pretrained("hf-internal-testing/llama-tokenizer")
>>> tokenizer.encode("Hello this is a test")
[1, 15043, 445, 338, 263, 1243]

Jika Anda ingin mengubah bos_token atau eos_token, pastikan untuk menyajikannya saat menginisialisasi model, atau panggil tokenizer.update_post_processor() untuk memastikan bahwa pascaproses dilakukan dengan benar (jika tidak, nilai token pertama dan token terakhir dari urutan yang dikodekan tidak akan benar). Untuk detail lebih lanjut, lihat dokumentasi [post-processors] (https://huggingface.co/docs/tokenizers/api/post-processors).

Tokenizer ini mewarisi dari PreTrainedTokenizerFast yang berisi sebagian besar metode utama. Pengguna sebaiknya merujuk ke superclass ini untuk informasi lebih lanjut mengenai metode-metode tersebut. Konfigurasi defaultnya sesuai dengan meta-llama/CodeLlama-7b-Instruct-hf yang mendukung prompt infilling.

get_special_tokens_mask

< >

( token_ids_0: list[int]token_ids_1: list[int] | None = Nonealready_has_special_tokens: bool = False ) → A list of integers in the range [0, 1]

Parameter

  • token_ids_0 — Daftar ID untuk urutan (yang mungkin sudah diformat).
  • token_ids_1 — Tidak digunakan saat already_has_special_tokens=True. Harus None dalam kasus tersebut.
  • already_has_special_tokens — Apakah urutan sudah diformat dengan token khusus.

Mengembalikan

Daftar bilangan bulat dalam rentang [0, 1]

1 untuk token khusus, 0 untuk token urutan.

Ambil id urutan dari daftar token yang tidak memiliki token khusus yang ditambahkan.

Untuk tokenizer yang cepat, data collator memanggil ini dengan already_has_special_tokens=True untuk membangun mask di atas urutan yang sudah diformat. Dalam kasus tersebut, kami menghitung mask dengan memeriksa keanggotaan dalam all_special_ids.

update_post_processor

< >

( )

Memperbarui post processor dasar dengan bos_token dan eos_token saat ini.

save_vocabulary

< >

( save_directory: strfilename_prefix: str | None = None )

CodeLlamaTokenizerFast

kelas transformers.CodeLlamaTokenizer

< >

( vocab: str | dict[str, int] | None = Nonemerges: str | list[str] | None = Noneclean_up_tokenization_spaces = Falseunk_token = '<unk>'bos_token = '<s>'eos_token = '</s>'prefix_token = '▁<PRE>'middle_token = '▁<MID>'suffix_token = '▁<SUF>'eot_token = '▁<EOT>'fill_token = '<FILL_ME>'additional_special_tokens = Noneuse_default_system_prompt: bool = Falseadd_prefix_space: bool | None = Trueadd_bos_token: bool = True**kwargs )

Parameter

  • clean_up_tokenization_spaces (str, opsional, default False) — Apakah akan membersihkan spasi setelah decoding; pembersihan terdiri dari menghapus artefak potensial seperti spasi berlebih.
  • unk_token (str, opsional, default "<unk>") — Token yang tidak diketahui. Token yang tidak ada dalam kosakata tidak dapat dikonversi menjadi ID dan akan diset sebagai token ini sebagai gantinya.
  • bos_token (str, opsional, default "<s>") — Token awal urutan yang digunakan selama pra-pelatihan. Dapat digunakan sebagai token klasifikator urutan.
  • eos_token (str, opsional, default "</s>") — Token akhir urutan.
  • prefix_token (str, opsional, defaultnya "▁<PRE>") — Token prefix yang digunakan untuk infilling.
  • middle_token (str, opsional, defaultnya "▁<MID>") — Token tengah yang digunakan untuk infilling.
  • suffix_token (str, opsional, defaultnya "▁<SUF>") — Token sufiks yang digunakan untuk infilling.
  • eot_token (str, opsional, default "▁<EOT>") — Token akhir teks yang digunakan untuk infilling.
  • fill_token (str, opsional, default "<FILL_ME>") — Token yang digunakan untuk memisahkan input antara prefiks dan sufiks.
  • additional_special_tokens (list[str], opsional) — Token khusus tambahan yang digunakan oleh tokenizer.
  • add_bos_token (bool, opsional, default True) — Apakah akan menambahkan token awal urutan di bagian awal dari urutan.
  • add_eos_token (bool, opsional, default False) — Apakah akan menambahkan token end of sequence di akhir rangkaian.
  • use_default_system_prompt (bool, opsional, defaultnya False) — Apakah prompt sistem default untuk Llama harus digunakan.
  • add_prefix_space (bool, opsional) — Apakah akan menambahkan spasi awal ke input. Hal ini memungkinkan kata pembuka diperlakukan sama seperti kata lainnya.
  • vocab (str, dict atau list, opsional) — Kamus kosakata kustom. Jika tidak disediakan, kosakata dimuat dari vocab_file.
  • merges (str atau list, opsional) — Daftar merges kustom. Jika tidak disediakan, merges dimuat dari merges_file.
  • vocab_file (str, opsional) — file SentencePiece (umumnya berekstensi .model) yang mengandung kosakata yang diperlukan untuk menginstansiasi tokenizer.

Konstruksi tokenizer Llama. Berbasis byte-level Byte-Pair-Encoding.

Ini secara khusus menggunakan ByteFallback dan tanpa normalisasi.

>>> from transformers import CodeLlamaTokenizer

>>> tokenizer = CodeLlamaTokenizer.from_pretrained("hf-internal-testing/llama-tokenizer")
>>> tokenizer.encode("Hello this is a test")
[1, 15043, 445, 338, 263, 1243]

Jika Anda ingin mengubah bos_token atau eos_token, pastikan untuk menyajikannya saat menginisialisasi model, atau panggil tokenizer.update_post_processor() untuk memastikan bahwa pascaproses dilakukan dengan benar (jika tidak, nilai token pertama dan token terakhir dari urutan yang dikodekan tidak akan benar). Untuk detail lebih lanjut, lihat dokumentasi [post-processors] (https://huggingface.co/docs/tokenizers/api/post-processors).

Tokenizer ini mewarisi dari PreTrainedTokenizerFast yang berisi sebagian besar metode utama. Pengguna sebaiknya merujuk ke superclass ini untuk informasi lebih lanjut mengenai metode-metode tersebut. Konfigurasi defaultnya sesuai dengan meta-llama/CodeLlama-7b-Instruct-hf yang mendukung prompt infilling.

set_infilling_processor

< >

( resetsuffix_first = Falseadd_special_tokens = True )

Memperbarui normalizer untuk memastikan format prompt untuk infilling dipatuhi. Format infilling adalah sebagai berikut: jika suffix_first ” <PRE> <SUF>{suf} <MID> {pre}” lainnya: ” <PRE> {pre} <SUF>{suf} <MID>”

Jika reset diatur ke True, normalizer dan post_processor akan direset ke perilaku “normal” mereka, yaitu menambahkan spasi awalan untuk normalizer, dan menambahkan bos_token ke teks input untuk post_processor.

Update on GitHub