AutoProcessor.from_pretrained retries HTTP 429 responses multiple times for every config file when using HF_ENDPOINT

用户在 Windows 11 环境下,使用 Transformers 5.12.1 调用 AutoProcessor.from_pretrained() 加载模型(如 "facebook/dinov3-vits16-pretrain-lvd1689m" )。当配置了 HF_ENDPOINT 环境变量

AutoProcessor.from_pretrained retries HTTP 429 responses multiple times for every config file when using HF_ENDPOINT

AutoProcessor.from_pretrained retries HTTP 429 responses multiple times for every config file when using HF_ENDPOINT

快速结论:该问题主要出现在使用自定义代理(HF_ENDPOINT)且代理返回标准 HTTP 429 响应时。由于 huggingface_hub 的 http_backoff() 未支持标准 Retry-After 头部,导致每个配置文件独立进行指数退避重试,累计等待时间可达 2 分钟以上。优先排查代理是否返回了 Hugging Face 专属的 RateLimit 头部。

问题场景

用户在 Windows 11 环境下,使用 Transformers 5.12.1 调用 AutoProcessor.from_pretrained() 加载模型(如 "facebook/dinov3-vits16-pretrain-lvd1689m")。当配置了 HF_ENDPOINT 环境变量指向自定义代理时,每次 HTTP 429 响应都会被重试多次,导致加载时间显著增加。

报错原文

HTTP Error 429 thrown while requesting HEAD .../config.json
Retrying in 1s [Retry 1/5].

HEAD /facebook/dinov2-base/resolve/main/config.json
Retrying in 2s [Retry 2/5].

HEAD /facebook/dinov2-base/resolve/main/config.json
Retrying in 4s [Retry 3/5].

HEAD /facebook/dinov2-base/resolve/main/config.json
Retrying in 8s [Retry 4/5].

HEAD /facebook/dinov2-base/resolve/main/config.json
Retrying in 8s [Retry 5/5].

HEAD /facebook/dinov2-base/resolve/main/config.json
-> LocalEntryNotFoundError after approximately 23 seconds

原因分析

根本原因有两个互相关联的问题:

  • huggingface_hub 的 http_backoff() 函数默认将 HTTP 429 加入重试状态码列表_DEFAULT_RETRY_ON_STATUS_CODES = (408, 429, 500, 502, 503, 504)),但并未支持标准 Retry-After 头部。当代理只返回标准 Retry-After 而非 Hugging Face 专属的 RateLimit 头部时,重试策略会退化为指数退避(1s→2s→4s→8s→8s),导致每次重试序列耗时约 23 秒。
  • Transformers 在加载过程中会顺序探测多个可选配置文件(如 processor_config.jsontokenizer_config.jsontokenizer.json 等),每个文件都会独立经历完整的重试序列,导致总等待时间累计可达 138 秒。

可能原因:huggingface_hub 缺乏对标准 Retry-After 头部的支持,以及 Transformers 在探测可选文件时无法区分 429 与其他 HTTP 错误。

环境排查

  • 确认 Transformers 版本:5.12.1(报告中使用的版本)
  • 确认 操作系统:Windows 11
  • 确认 huggingface_hub 版本:1.x 及以上(报告涉及的版本)
  • 确认 HF_ENDPOINT 代理的响应头:是否包含 RateLimit 头部(Hugging Face 专属)或仅包含标准 Retry-After
  • 确认 代理是否返回 HTTP 429 Too Many Requests(而非 503 等服务不可用错误)

解决步骤

  1. 优先检查代理配置:确认代理是否返回了 Hugging Face 风格的 RateLimit 头部。如果仅返回标准 Retry-After,huggingface_hub 可能无法正确解析(已知问题,参见 huggingface/huggingface_hub#2360)。
  2. 升级 huggingface_hub:检查是否存在包含 Retry-After 支持的更新版本。该问题已在 huggingface_hub 仓库中被追踪。
  3. 调整代理行为:如果可能,让代理返回 Hugging Face 风格的 RateLimit 头部(包含 X-RateLimit-Reset 等字段),以触发正常的重试策略。
  4. 减少探测文件数:暂时绕过探测可选文件的行为。例如,直接指定所需配置文件的完整路径,或使用 use_fast=True 等参数限制探测范围。
  5. 等待上游修复:关注 huggingface/huggingface_hub#2360 的进展,该 issue 计划支持 Retry-After 头部。

注意:上述步骤中第 2 步和第 5 步是 Issue 讨论中明确提到的可能修复方向(Option A),但尚未合并到正式版本中。

验证方法

修改后,重新运行以下代码确认加载时间是否缩短:

import os
os.environ["HF_ENDPOINT"] = "https://<your-proxy>"
from transformers import AutoProcessor
AutoProcessor.from_pretrained("facebook/dinov3-vits16-pretrain-lvd1689m")

如果加载时间从约 2 分钟以上降低到 30 秒以内(取决于代理响应速度),且日志中不再出现连续 5 次重试每个配置文件的 429 错误,则问题已解决。

参考来源

huggingface/transformers #46981

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

celebrityanime
celebrityanime
文章: 12026

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注