以下是设置Hugging Face from_pretrained
默认保存路径的完整解决方案:
方法1:通过环境变量全局设置
在代码或系统环境变量中设置模型缓存路径:
import os
from pathlib import Path
# 设置自定义缓存路径(推荐使用绝对路径)
CUSTOM_CACHE_DIR = "/path/to/your/model_cache"
# 确保目录存在
Path(CUSTOM_CACHE_DIR).mkdir(parents=True, exist_ok=True)
# 设置环境变量(需在加载任何模型之前设置)
os.environ["TRANSFORMERS_CACHE"] = CUSTOM_CACHE_DIR
os.environ["HF_HOME"] = CUSTOM_CACHE_DIR # 可选,同时设置HuggingFace根目录
# 验证设置
print(f"当前模型缓存路径:{os.environ.get('TRANSFORMERS_CACHE')}")
方法2:代码中动态指定路径
在每次调用from_pretrained
时指定路径:
from transformers import AutoModel, AutoTokenizer
model = AutoModel.from_pretrained(
"meta-llama/Meta-Llama-3-8B-Instruct",
cache_dir="/path/to/your/model_cache" # 指定本次下载的存储路径
)
tokenizer = AutoTokenizer.from_pretrained(
"meta-llama/Meta-Llama-3-8B-Instruct",
cache_dir="/path/to/your/model_cache"
)
方法3:配置文件设置(推荐)
创建 config.json
文件持久化配置:
# config.py
import os
from pathlib import Path
class ModelConfig:
CACHE_DIR = Path("/mnt/nas/llm_models/huggingface")
CACHE_DIR.mkdir(parents=True, exist_ok=True)
# 应用配置
os.environ["TRANSFORMERS_CACHE"] = str(CACHE_DIR)
os.environ["HF_DATASETS_CACHE"] = str(CACHE_DIR / "datasets") # 数据集缓存路径
验证配置是否生效
from transformers import file_utils
# 打印当前缓存路径
print(f"实际使用的缓存路径:{file_utils.default_cache_path}")
路径管理最佳实践
-
多磁盘存储:
# 根据模型大小自动选择存储位置 def get_cache_dir(model_name: str) -> str: large_models = ["Llama-3-70B", "Mixtral-8x22B"] return "/mnt/ssd_cache" if model_name in large_models else "/mnt/hdd_cache"
-
自动清理脚本:
# 清理超过30天未使用的模型 import shutil, time CACHE_DIR = "/path/to/cache" for model_dir in Path(CACHE_DIR).glob("*"): last_used = model_dir.stat().st_atime if time.time() - last_used > 30*86400: shutil.rmtree(model_dir)
-
多用户隔离:
# 根据用户ID隔离缓存 import getpass user_id = getpass.getuser() os.environ["TRANSFORMERS_CACHE"] = f"/llm_cache/{user_id}"
跨平台路径设置示例
操作系统 | 推荐路径格式 |
---|---|
Linux | /mnt/ssd/huggingface_cache |
Windows | D:\\LLM\\huggingface_cache |
macOS | /Volumes/External/hf_cache |
常见问题排查
-
权限不足:
# Linux/Mac 添加写权限 sudo chmod -R a+rw /path/to/cache
-
磁盘空间监控:
import shutil def check_disk_space(path): usage = shutil.disk_usage(path) print(f"剩余空间:{usage.free / (1024**3):.1f}GB")
-
网络代理设置:
os.environ["HTTP_PROXY"] = "http://proxy.example.com:8080" os.environ["HTTPS_PROXY"] = "http://proxy.example.com:8080"
通过上述配置,您可以实现:
- 集中管理所有Hugging Face模型的存储位置
- 根据硬件条件优化存储策略
- 实现自动化的缓存清理
- 支持多用户/多项目环境隔离