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

Bu model 2023-08-24 tarihinde HF papers'ta yayımlandı ve 2023-08-25 tarihinde Hugging Face Transformers'a katkıda bulunuldu.

CodeLlama

Code Llama, kodlama görevleri için Llama 2 tabanlı, özel bir büyük dil modeli ailesidir. Farklı çeşitlerde sunulur: genel kod, Python'a özel ve talimat takibi varyantı; tümü 7B, 13B, 34B ve 70B parametre seçenekleriyle mevcuttur. Code Llama modelleri kodunuzu üretebilir, açıklayabilir ve hatta eksik kısımlarını doldurabilir (buna “infilling” denir). 16K token uzunluğundaki diziler üzerinde eğitilmesine rağmen, 100k token'a kadar kararlı üretimle çok uzun bağlamları da işleyebilir.

Tüm orijinal Code Llama kontrol noktalarını Code Llama koleksiyonunda bulabilirsiniz.

Farklı kodlama görevlerine Code Llama uygulamanın daha fazla örneği için sağ kenar çubuğundaki Code Llama modellerine tıklayın.

Aşağıdaki örnek, Pipeline, AutoModel veya komut satırı üzerinden kod üretmenin nasıl yapılacağını göstermektedir.

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, ağırlıkları daha düşük bir hassasiyetle temsil ederek büyük modellerin bellek yükünü azaltır. Daha fazla kullanılabilir quantization backend'i için Quantization genel bakışına başvurun.

Aşağıdaki örnek, ağırlıkları yalnızca 4-bite küçültmek için bitsandbytes kullanır.

# 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))

Modelin hangi token'lara dikkat edebildiğini ve edemediğini daha iyi anlamak için AttentionMaskVisualizer'ı kullanın.

from transformers.utils.attention_visualizer import AttentionMaskVisualizer


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

Notlar

  • Infilling yalnızca 7B ve 13B taban modellerinde kullanılabilir; Python, Instruct, 34B veya 70B modellerinde kullanılamaz.

  • Girdinizin doldurulmasını istediğiniz yerde <FILL_ME> belirteci kullanın. Tokenizer, bu belirteci bölerek orijinal eğitim desenini takip eden biçimlendirilmiş bir girdi dizesi oluşturur. Bu, deseni kendiniz hazırlamaktan daha sağlamdır.

    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))
  • Daha fazla eğitim veya ince ayar için bfloat16, çıkarım için ise float16 kullanın.

  • BOS karakteri, önek veya son ek kodlanırken dolgu için kullanılmaz; yalnızca her istemin başında kullanılır.

  • Tokenizör, SentencePiece tabanlı bir bayt çifti kodlama modelidir. Çözümleme sırasında, ilk token bir kelimenin başlangıcıysa (örneğin, “Banana”), tokenizör dizinin başına boşluk önekini eklemez.

CodeLlamaTokenizer

sınıf 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 )

Parametreler

  • clean_up_tokenization_spaces (str, isteğe bağlı, varsayılan False) — Çözümleme sonrası boşlukların temizlenip temizlenmeyeceğini belirtir. Temizleme işlemi, ek boşluklar gibi olası artefaktların kaldırılmasını içerir.
  • unk_token (str, isteğe bağlı, varsayılan "<unk>") — Bilinmeyen token. Sözlükte yer almayan bir token, bir kimliğe dönüştürülemez ve bunun yerine bu token olarak ayarlanır.
  • bos_token (str, isteğe bağlı, varsayılan "<s>") — Ön eğitim sırasında kullanılan dizinin başlangıç belirteci. Bir dizin sınıflandırıcı belirteci olarak kullanılabilir.
  • eos_token (str, isteğe bağlı, varsayılan "</s>") — Dizi sonu belirteci.
  • prefix_token (str, isteğe bağlı, varsayılan "▁<PRE>") — Doldurma (infilling) için kullanılan önek (prefix) belirteci.
  • middle_token (str, isteğe bağlı, varsayılan "▁<MID>") — Doldurma (infilling) için kullanılan orta token.
  • suffix_token (str, isteğe bağlı, varsayılan "▁<SUF>") — Doldurma (infilling) için kullanılan sonek (suffix) belirteci.
  • eot_token (str, isteğe bağlı, varsayılan "▁<EOT>") — Doldurma (infilling) için kullanılan metin sonu belirteci.
  • fill_token (str, isteğe bağlı, varsayılan "<FILL_ME>") — Önek ve son ek arasında girdiyi bölmek için kullanılan belirteç.
  • additional_special_tokens (list[str], isteğe bağlı) — Tokenizör tarafından kullanılan ek özel tokenlar.
  • add_bos_token (bool, isteğe bağlı, varsayılan True) — Dizilerin başına bir başlangıç token'ı eklenip eklenmeyeceğini belirtir.
  • add_eos_token (bool, isteğe bağlı, varsayılan False) — Dizilerin sonuna bir dizi sonu (end of sequence) token'ı eklenip eklenmeyeceğini belirtir.
  • use_default_system_prompt (bool, isteğe bağlı, varsayılan False) — Llama için varsayılan sistem istemcisinin kullanılıp kullanılmayacağı.
  • add_prefix_space (bool, isteğe bağlı) — Girişe başlangıçta bir boşluk eklenip eklenmeyeceğini belirtir. Bu, baştaki kelimenin diğer herhangi bir kelime gibi ele alınmasını sağlar.
  • vocab (str, dict veya list, isteğe bağlı) — Özel sözlük. Sağlanmazsa, sözlük vocab_file'den yüklenir.
  • merges (str veya list, isteğe bağlı) — Özel birleştirmeler listesi. Sağlanmazsa, birleştirmeler merges_file'den yüklenir.
  • vocab_file (str, isteğe bağlı) — Bir tokenizer örneği oluşturmak için gerekli sözlüğü içeren SentencePiece dosyası (genellikle .model uzantısına sahiptir).

Llama tokenizer'ı oluşturun. Bayt düzeyinde Byte-Pair-Encoding tabanlıdır.

Bu, özellikle ByteFallback kullanır ve normalizasyon uygulanmaz.

>>> 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]

bos_token veya eos_token değerlerini değiştirmek istiyorsanız, bunları modelin başlatılması sırasında belirtmekten veya işlemin doğru şekilde yapılmasını sağlamak için tokenizer.update_post_processor() çağrısını yapmaktan emin olun (aksi takdirde kodlanmış bir dizinin ilk ve son token değerleri doğru olmayacaktır). Daha fazla ayrıntı için [post-processors] (https://huggingface.co/docs/tokenizers/api/post-processors) belgesine göz atın.

Bu tokenizer, ana yöntemlerin çoğunu içeren PreTrainedTokenizerFast sınıfından devralır. Kullanıcıların bu yöntemlerle ilgili daha fazla bilgi için bu üst sınıfa başvurması gerekir. Varsayılan yapılandırma, prompt infilling'i destekleyen meta-llama/CodeLlama-7b-Instruct-hf ile eşleşir.

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]

Parametreler

  • token_ids_0 — (muhtemelen zaten biçimlendirilmiş) dizinin kimlik listesi.
  • token_ids_1 — already_has_special_tokens=True olduğunda kullanılmaz. Bu durumda None olmalıdır.
  • already_has_special_tokens — Sıralamanın özel jetonlarla zaten biçimlendirilmiş olup olmadığı.

Dönüş değeri

[0, 1] aralığında tamsayıların bir listesi

özel bir jeton için 1, bir dizi jetonu için 0.

Özel tokenlar eklenmemiş bir token listesinden dizi kimliklerini (sequence ids) alın.

Hızlı tokenizörlerde, veri toplayıcılar (data collators) bu işlemi already_has_special_tokens=True parametresiyle çağırarak, biçimlendirilmiş bir dizinin üzerine bir maske oluşturur. Bu durumda, maskeyi all_special_ids içinde üyelik kontrolü yaparak hesaplarız.

update_post_processor

< >

( )

Altta yatan post işlemcisini güncel bos_token ve eos_token ile günceller.

save_vocabulary

< >

( save_directory: strfilename_prefix: str | None = None )

CodeLlamaTokenizerFast

sınıf 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 )

Parametreler

  • clean_up_tokenization_spaces (str, isteğe bağlı, varsayılan False) — Çözümleme sonrası boşlukların temizlenip temizlenmeyeceğini belirtir. Temizleme işlemi, ek boşluklar gibi olası artefaktların kaldırılmasını içerir.
  • unk_token (str, isteğe bağlı, varsayılan "<unk>") — Bilinmeyen token. Sözlükte yer almayan bir token, bir kimliğe dönüştürülemez ve bunun yerine bu token olarak ayarlanır.
  • bos_token (str, isteğe bağlı, varsayılan "<s>") — Ön eğitim sırasında kullanılan dizinin başlangıç belirteci. Bir dizin sınıflandırıcı belirteci olarak kullanılabilir.
  • eos_token (str, isteğe bağlı, varsayılan "</s>") — Dizi sonu belirteci.
  • prefix_token (str, isteğe bağlı, varsayılan "▁<PRE>") — Doldurma (infilling) için kullanılan önek (prefix) belirteci.
  • middle_token (str, isteğe bağlı, varsayılan "▁<MID>") — Doldurma (infilling) için kullanılan orta token.
  • suffix_token (str, isteğe bağlı, varsayılan "▁<SUF>") — Doldurma (infilling) için kullanılan sonek (suffix) belirteci.
  • eot_token (str, isteğe bağlı, varsayılan "▁<EOT>") — Doldurma (infilling) için kullanılan metin sonu belirteci.
  • fill_token (str, isteğe bağlı, varsayılan "<FILL_ME>") — Önek ve son ek arasında girdiyi bölmek için kullanılan belirteç.
  • additional_special_tokens (list[str], isteğe bağlı) — Tokenizör tarafından kullanılan ek özel tokenlar.
  • add_bos_token (bool, isteğe bağlı, varsayılan True) — Dizilerin başına bir başlangıç token'ı eklenip eklenmeyeceğini belirtir.
  • add_eos_token (bool, isteğe bağlı, varsayılan False) — Dizilerin sonuna bir dizi sonu (end of sequence) token'ı eklenip eklenmeyeceğini belirtir.
  • use_default_system_prompt (bool, isteğe bağlı, varsayılan False) — Llama için varsayılan sistem istemcisinin kullanılıp kullanılmayacağı.
  • add_prefix_space (bool, isteğe bağlı) — Girişe başlangıçta bir boşluk eklenip eklenmeyeceğini belirtir. Bu, baştaki kelimenin diğer herhangi bir kelime gibi ele alınmasını sağlar.
  • vocab (str, dict veya list, isteğe bağlı) — Özel sözlük. Sağlanmazsa, sözlük vocab_file'den yüklenir.
  • merges (str veya list, isteğe bağlı) — Özel birleştirmeler listesi. Sağlanmazsa, birleştirmeler merges_file'den yüklenir.
  • vocab_file (str, isteğe bağlı) — Bir tokenizer örneği oluşturmak için gerekli sözlüğü içeren SentencePiece dosyası (genellikle .model uzantısına sahiptir).

Llama tokenizer'ı oluşturun. Bayt düzeyinde Byte-Pair-Encoding tabanlıdır.

Bu, özellikle ByteFallback kullanır ve normalizasyon uygulanmaz.

>>> 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]

bos_token veya eos_token değerlerini değiştirmek istiyorsanız, bunları modelin başlatılması sırasında belirtmekten veya işlemin doğru şekilde yapılmasını sağlamak için tokenizer.update_post_processor() çağrısını yapmaktan emin olun (aksi takdirde kodlanmış bir dizinin ilk ve son token değerleri doğru olmayacaktır). Daha fazla ayrıntı için [post-processors] (https://huggingface.co/docs/tokenizers/api/post-processors) belgesine göz atın.

Bu tokenizer, ana yöntemlerin çoğunu içeren PreTrainedTokenizerFast sınıfından devralır. Kullanıcıların bu yöntemlerle ilgili daha fazla bilgi için bu üst sınıfa başvurması gerekir. Varsayılan yapılandırma, prompt infilling'i destekleyen meta-llama/CodeLlama-7b-Instruct-hf ile eşleşir.

set_infilling_processor

< >

( resetsuffix_first = Falseadd_special_tokens = True )

infilling için istem formatına uyulduğundan emin olmak için normalizer'ı günceller. Infilling formatı şu şekildedir: if suffix_first ” <PRE> <SUF>{suf} <MID> {pre}” else: ” <PRE> {pre} <SUF>{suf} <MID>”

reset True olarak ayarlanırsa, normalizer ve post_processor, normalizer için bir önek boşluğu eklemek ve post_processor için giriş metnine bos_token eklemek olan “normal” davranışlarına sıfırlanır.

Update on GitHub