调用Hugging Face模型时遇SSL证书验证失败问题求助
问题场景
运行以下test.py脚本:
from transformers import AutoTokenizer checkpoint = "kevinscaria/joint_tk-instruct-base-def-pos-neg-neut-combined" tokenizer = AutoTokenizer.from_pretrained(checkpoint)
触发SSL证书验证错误:
requests.exceptions.SSLError:
(MaxRetryError("HTTPSConnectionPool(host='huggingface.co', port=443):
Max retries exceeded with url:
/kevinscaria/joint_tk-instruct-base-def-pos-neg-neut-combined/resolve/main/tokenizer_config.json
(Caused by SSLError(SSLCertVerificationError(1, '[SSL:
CERTIFICATE_VERIFY_FAILED] certificate verify failed: self-signed
certificate in certificate chain (_ssl.c:1000)'))"), '(Request ID:
2d2eb919-ddf8-4e5d-b0fc-b0ab1f666251)')
已在pip配置中添加huggingface.co为可信主机,但问题仍存在:
>pip config list global.trusted-host='pypi.org files.pythonhosted.org pypi.python.org huggingface.co'
解决方案
1. 临时绕过SSL验证(仅测试环境使用)
在加载tokenizer时添加verify=False参数,直接跳过证书验证:
from transformers import AutoTokenizer checkpoint = "kevinscaria/joint_tk-instruct-base-def-pos-neg-neut-combined" tokenizer = AutoTokenizer.from_pretrained(checkpoint, verify=False)
⚠️ 注意:该方法存在安全风险,禁止在生产环境使用。
2. 更新系统根证书
新电脑可能缺少验证huggingface.co证书所需的根证书,按系统类型操作:
- Windows:打开「控制面板」→「Internet选项」→「内容」→「证书」→「受信任的根证书颁发机构」,导入最新的DigiCert全球根证书;或通过Windows更新安装证书补丁。
- macOS:打开「钥匙串访问」,选择「系统」→「证书」,导入缺失的根证书;若使用官方Python,运行
/Applications/Python 3.x/Install Certificates.command脚本(替换3.x为你的Python版本)。 - Linux:通过包管理器重新安装证书包,例如:
# Ubuntu/Debian sudo apt update && sudo apt install --reinstall ca-certificates # CentOS/RHEL sudo yum reinstall ca-certificates
3. 通过环境变量全局跳过Hugging Face SSL验证
运行脚本前设置环境变量:
# Linux/macOS 终端 export HF_INSECURE_MODE=1 # Windows CMD set HF_INSECURE_MODE=1 # Windows PowerShell $env:HF_INSECURE_MODE=1
设置完成后再执行python test.py。
4. 检查并配置代理/VPN
若新电脑开启了代理或VPN,可能会替换SSL证书为自签名证书:
- 先尝试关闭代理/VPN后重新运行脚本,看是否恢复正常。
- 若必须使用代理,可在代码中配置代理并指定代理证书路径:
import requests from transformers import AutoTokenizer # 替换为你的代理地址 proxies = {"https": "http://your-proxy-ip:port"} session = requests.Session() session.proxies = proxies # 替换为代理自签名证书的本地路径 session.verify = "/path/to/proxy-cert.pem" checkpoint = "kevinscaria/joint_tk-instruct-base-def-pos-neg-neut-combined" tokenizer = AutoTokenizer.from_pretrained(checkpoint, session=session)
内容的提问来源于stack exchange,提问作者zest16

