You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 12:42:59