如何在LlamaIndex的HuggingFaceLLM中设置Llama3的eos_token_id与pad_token_id
如何在LlamaIndex的HuggingFaceLLM中设置Llama3的eos_token_id与pad_token_id
别担心,我来帮你解决这个问题!你现在用LlamaIndex的HuggingFaceLLM加载Llama3,但没显式初始化tokenizer,所以不知道怎么设置eos_token_id和pad_token_id对吧?其实有两个简单的办法可以搞定:
方法一:手动加载tokenizer后传入
我们可以先手动加载Llama3的tokenizer,配置好pad和eos token,再把它传给HuggingFaceLLM,这样能完全掌控tokenizer的配置:
import os from llama_index.core import StorageContext, load_index_from_storage from llama_index.embeddings.huggingface import HuggingFaceEmbedding from llama_index.llms.huggingface import HuggingFaceLLM import torch from transformers import AutoTokenizer # 先加载Llama3的tokenizer tokenizer = AutoTokenizer.from_pretrained("meta-llama/Meta-Llama-3-8B") # Llama3默认没有pad_token,通常把pad_token设为eos_token tokenizer.pad_token = tokenizer.eos_token # 定义LLM时传入配置好的tokenizer,同时在generate_kwargs里指定token id llm = HuggingFaceLLM( context_window=4096, max_new_tokens=256, tokenizer=tokenizer, model_name="meta-llama/Meta-Llama-3-8B", model_kwargs={"torch_dtype": torch.bfloat16}, generate_kwargs={ "eos_token_id": tokenizer.eos_token_id, "pad_token_id": tokenizer.pad_token_id }, device_map="auto" )
这样做的好处是你能完全掌控tokenizer的配置,同时在generate_kwargs里明确指定生成时要用的token id,确保和tokenizer的设置一致。
方法二:通过参数直接传递配置(无需手动加载tokenizer)
如果你嫌手动加载tokenizer麻烦,也可以直接通过HuggingFaceLLM的参数来传递配置,让它内部帮你处理:
import os from llama_index.core import StorageContext, load_index_from_storage from llama_index.embeddings.huggingface import HuggingFaceEmbedding from llama_index.llms.huggingface import HuggingFaceLLM import torch # 定义LLM时直接通过参数传递token配置 llm = HuggingFaceLLM( context_window=4096, max_new_tokens=256, model_name="meta-llama/Meta-Llama-3-8B", model_kwargs={"torch_dtype": torch.bfloat16}, tokenizer_kwargs={ "pad_token": "[PAD]", # 或者直接复用eos_token "eos_token_id": 128009, # Llama3的eos_token_id固定为128009 "pad_token_id": 128009 # 和eos_token_id保持一致 }, generate_kwargs={ "eos_token_id": 128009, "pad_token_id": 128009 }, device_map="auto" )
这里要提一下,Llama3官方没给默认的pad_token,所以我们一般把pad_token_id设成和eos一样的128009。通过tokenizer_kwargs让内部初始化tokenizer时就应用这些设置,同时generate_kwargs里也要对应上,保证生成阶段用正确的id。
备注:内容来源于stack exchange,提问作者yts61
相关产品推荐
相关产品推荐

