调用torch.hub.load加载resnet18时出现HTTP 403速率超限错误如何解决?
错误原因
这个403速率限制错误由GitHub的公开API限流机制触发:
- PyTorch Hub加载远程仓库模型时,会默认向GitHub发起API请求校验仓库合法性
- 未进行身份认证的GitHub API请求每小时最多允许发起60次,如果你使用的服务器出口IP是多用户共享,或是短时间内多次调用
torch.hub.load接口,很容易触发该限流阈值 - 你使用的1.9.0版本PyTorch存在逻辑缺陷:每次调用
torch.hub.load都会重复发起API校验,不会复用本地已有的缓存校验结果,进一步提升了限流触发概率
解决方案
你可以根据自己的场景选择任意一种方案解决:
- 最优方案:直接使用torchvision内置的模型加载逻辑,完全跳过PyTorch Hub调用。resnet18本身是torchvision官方内置的模型,不需要通过Hub加载,将你代码中的模型加载部分替换为如下内容即可:
from torchvision.models import resnet18 model = resnet18(pretrained=True)
该方案完全不会触发GitHub API请求,从根源规避限流问题,同时也符合官方推荐的使用规范。
- 配置GitHub个人访问Token提升限流阈值:生成一个无额外权限的GitHub个人访问Token(PAT),在运行代码前执行如下命令配置环境变量即可:
export GITHUB_TOKEN=<你生成的GitHub PAT值>
完成配置后GitHub API限流阈值会提升至每小时5000次,常规使用场景下不会再触发限流。
- 本地加载预下载的仓库代码:提前手动下载pytorch/vision仓库对应v1.9.0版本的代码到本地,调用时指定本地路径加载即可:
model = torch.hub.load('/本地保存的vision-v1.9.0文件路径', 'resnet18', pretrained=True, source='local')
- 临时规避:如果只是偶尔遇到该问题,等待1小时后GitHub限流会自动重置,重新运行代码即可。
另外你日志中的transforms.Scale告警属于版本兼容提示,不会影响代码运行,将代码中所有transforms.Scale替换为transforms.Resize即可消除告警。
内容的提问来源于stack exchange,提问作者Mona Jalal
相关产品推荐
相关产品推荐

