如何解决Langchain MapReduce中GPT2 Tokenizer加载错误(Llama2+Sagemaker)
解决方案:离线环境配置GPT2 Tokenizer到本地目录
你的问题出在LangChain的map_reduce类型摘要链默认使用GPT2Tokenizer拆分长文档,但你的环境无法访问Hugging Face Hub,导致自动下载tokenizer失败。完全可以将GPT2 tokenizer配置到本地目录,具体操作如下:
步骤1:在可联网环境下载GPT2 Tokenizer文件
在能访问Hugging Face的机器上,运行以下代码将tokenizer的所有必要文件保存到本地目录:
from transformers import GPT2Tokenizer # 加载并保存tokenizer到指定目录 tokenizer = GPT2Tokenizer.from_pretrained("gpt2") tokenizer.save_pretrained("./local_gpt2_tokenizer")
执行后,./local_gpt2_tokenizer目录会生成vocab.json、merges.txt、tokenizer_config.json等必要文件。
步骤2:将本地tokenizer目录迁移到离线环境
把local_gpt2_tokenizer目录复制到你的离线工作环境(比如Sagemaker实例的本地路径)。
步骤3:修改LangChain代码,指定本地tokenizer
在你的现有代码中,添加以下配置,替换默认的文本分割器:
# 导入所需模块 from langchain.text_splitter import TokenTextSplitter from transformers import GPT2Tokenizer # 加载本地GPT2 tokenizer local_tokenizer = GPT2Tokenizer.from_pretrained("./local_gpt2_tokenizer") # 创建使用本地tokenizer的文本分割器 text_splitter = TokenTextSplitter.from_huggingface_tokenizer( local_tokenizer, chunk_size=1000, # 可根据需求调整 chunk_overlap=0 ) # 加载摘要链时传入自定义文本分割器 chain = load_summarize_chain(llm, chain_type="map_reduce", text_splitter=text_splitter) chain.run(docs)
额外建议:使用Llama2自身Tokenizer更适配
由于你使用的是Llama2模型,推荐直接用Llama2的tokenizer拆分文档,格式匹配度更高。操作类似:
- 可联网环境下载(需同意Meta许可):
from transformers import LlamaTokenizer tokenizer = LlamaTokenizer.from_pretrained("meta-llama/Llama-2-13b-hf") tokenizer.save_pretrained("./local_llama2_tokenizer")
- 离线环境加载并创建文本分割器:
local_llama_tokenizer = LlamaTokenizer.from_pretrained("./local_llama2_tokenizer") text_splitter = TokenTextSplitter.from_huggingface_tokenizer(local_llama_tokenizer, chunk_size=1000, chunk_overlap=0)
内容的提问来源于stack exchange,提问作者apprunner2186
相关产品推荐
相关产品推荐

