修改Hugging Face HF_MODULES_CACHE解决from_pretrained缓存写入权限错误
解决transformers加载模型时的缓存权限问题
问题描述
调用from_pretrained加载模型时触发权限错误,提示无./cache目录的写入权限,错误出现在transformers库的dynamic_module_utils.py第54行。
规范解决方案
你尝试的通过os.environ["HF_MODULES_CACHE"]设置缓存路径是可行的,但更规范的方案有以下几种,能避免潜在依赖问题:
全局统一配置(官方推荐)
使用TRANSFORMERS_CACHE环境变量,该变量会统一控制transformers库所有资源(模型、tokenizer、动态模块等)的缓存路径,覆盖默认设置,无依赖冲突风险:import os # 在代码开头设置 os.environ["TRANSFORMERS_CACHE"] = "/你有写入权限的目录路径"也可以在系统层面设置(比如Linux终端):
export TRANSFORMERS_CACHE="/你有写入权限的目录路径"单模型临时指定
如果不需要全局修改,可在from_pretrained调用时直接传入cache_dir参数,精准控制当前模型的缓存位置:from transformers import AutoModel, AutoTokenizer model = AutoModel.from_pretrained("模型名称", cache_dir="/你有写入权限的目录路径") tokenizer = AutoTokenizer.from_pretrained("模型名称", cache_dir="/你有写入权限的目录路径")修改默认目录权限(仅限有权限场景)
若你对默认的./cache目录有修改权限,可直接添加写入权限:chmod +w ./cache
补充说明
HF_MODULES_CACHE仅针对动态模块的缓存生效,而TRANSFORMERS_CACHE是全局缓存变量,覆盖所有transformers相关缓存类型,因此使用TRANSFORMERS_CACHE是更全面、规范的做法,能避免不同缓存路径带来的潜在问题。
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

