Transformers documentation
CodeLlama
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.
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'])from transformers import AutoModelForCausalLM, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("meta-llama/CodeLlama-7b-hf")
model = AutoModelForCausalLM.from_pretrained(
"meta-llama/CodeLlama-7b-hf",
device_map="auto",
attn_implementation="sdpa"
)
# basic code generation
prompt = "# Function to calculate the factorial of a number\ndef factorial(n):"
input_ids = tokenizer(prompt, return_tensors="pt").to(model.device)
output = model.generate(
**input_ids,
max_new_tokens=256,
cache_implementation="static"
)
print(tokenizer.decode(output[0], skip_special_tokens=True))
# infilling
infill_prompt = "def remove_non_ascii(s: str) -> str:\n \"\"\" <FILL_ME>\n return result"
input_ids = tokenizer(infill_prompt, return_tensors="pt").to(model.device)
filled_output = model.generate(**input_ids, max_new_tokens=200)
filled_text = tokenizer.decode(filled_output[0], skip_special_tokens=True)
print(filled_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
bfloat16untuk pelatihan lanjutan atau fine-tuning danfloat16untuk inferensi.Karakter
BOStidak 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
< source >( 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, defaultFalse) — 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, defaultTrue) — Apakah akan menambahkan token awal urutan di bagian awal dari urutan. - add_eos_token (
bool, opsional, defaultFalse) — Apakah akan menambahkan token end of sequence di akhir rangkaian. - use_default_system_prompt (
bool, opsional, defaultnyaFalse) — 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,dictataulist, opsional) — Kamus kosakata kustom. Jika tidak disediakan, kosakata dimuat dari vocab_file. - merges (
strataulist, 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
< source >( 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.
Memperbarui post processor dasar dengan bos_token dan eos_token saat ini.
CodeLlamaTokenizerFast
kelas transformers.CodeLlamaTokenizer
< source >( 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, defaultFalse) — 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, defaultTrue) — Apakah akan menambahkan token awal urutan di bagian awal dari urutan. - add_eos_token (
bool, opsional, defaultFalse) — Apakah akan menambahkan token end of sequence di akhir rangkaian. - use_default_system_prompt (
bool, opsional, defaultnyaFalse) — 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,dictataulist, opsional) — Kamus kosakata kustom. Jika tidak disediakan, kosakata dimuat dari vocab_file. - merges (
strataulist, 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.
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.