Tests depend on `picsum.photos`, which is currently unreachable

该报错出现在 Transformers 集成测试(Integration Tests)运行时,原因是测试用例通过外网访问 https://picsum.photos 拉取图片,而该外部服务当前不可达(网络屏蔽、DNS 解析失败或站点宕机)。优先排查步骤是确认当前网络是否能访问 picsum.phot

快速结论:该报错出现在 Transformers 集成测试(Integration Tests)运行时,原因是测试用例通过外网访问 https://picsum.photos 拉取图片,而该外部服务当前不可达(网络屏蔽、DNS 解析失败或站点宕机)。优先排查步骤是确认当前网络是否能访问 picsum.photos,并将测试数据源切换到 Hugging Face 内部托管的镜像数据集。

适用环境:Hugging Face Transformers 主分支(transformers main),影响的测试模块包括:tests/models/emu3/test_modeling_emu3.pytests/models/llava/test_modeling_llava.pytests/models/minimax_m3_vl/test_modeling_minimax_m3_vl.py。问题在 Windows、Linux 或 macOS 上均可能复现,与 Python 版本、CUDA 环境无直接关联。

最快修复方案:暂无确认的一步修复方案。目前 Hugging Face 内部已开启 Pull Request 将测试图片迁移至内部存储(请关注 #48521),在此合并前,个人开发者可优先尝试为测试用例添加 @pytest.mark.skipif 跳过网络相关测试,或通过代理/Hosts 配置解决外网访问问题。

注意事项:该问题还涉及 images.unsplash.com,在运行 test_modeling_llava.pytest_modeling_aria.py 时同样会导致 test_batched_generation 失败,仅修复 picsum.photos 无法让全部测试恢复绿。

问题场景

picsum.photos 是一个提供随机图片的外部站点(Lorem Picsum)。Hugging Face Transformers 的多个官方集成测试模块(如 Emu3、LLaVA、MiniMax M3 VL、Aria 等)在用例执行前,需要先从该主机下载输入图片。当主机不可达时,网络连接或 SSL 握手阶段即抛出异常,导致图片加载失败,测试在进入模型代码前就中断报错。

报错原文

Tests depend on `picsum.photos`, which is currently unreachable
pytest tests/models/emu3/test_modeling_emu3.py::Emu3IntegrationTest::test_model_generation_batched
requests.exceptions.SSLError: HTTPSConnectionPool(host='picsum.photos', port=443)

原因分析

可能原因一(高概率):测试用例硬编码了外部图片 URL(https://picsum.photos/...),且没有任何网络异常回退机制或跳过机制。由于 Hugging Face 测试人员所在网络无法访问该外部主机,导致测试在预设阶段崩溃。
可能原因二(潜在风险):依赖外部图床本身具有脆弱性。此前 GitHub 评论回顾表示“已不是第一次发生图片被删除的情况”,picsum 站点可能出现访问限速(rate limits),这也是推动将数据迁移到 hf-internal-testing 组织的内部原因。

环境排查

  • 确认当前 Transformers 仓是否跟踪最新主分支(main)。该问题来源于主分支版本,影响 2026 年 9 月前的旧测试代码。
  • 检测当前网络是否能正常访问 https://picsum.photos(可尝试 curl 或浏览器访问)。可能是公司网络防火墙策略导致拦截。
  • 检查运行测试的设备是否正确安装 requests 库依赖(包括 CA 证书链完整性),以排除 SSL 证书层报错引发的偶发中断。
  • 确认是否同时在测试 llavaaria 模块——这两个模块同样依赖 images.unsplash.com 外链,仅修复 picsum 域名并不能解决 test_batched_generation 的失败。

解决步骤

以下建议根据网络条件分场景执行,请结合自己的具体开发环境判断:

  1. 理解当前官方方向:目前 Hugging Face 正在通过内部 PR 将测试图片迁移到 HF 对象存储(可关注 Pull Request #48521),以根治外链依赖。若你在等待上游修复阶段,可优先使用后续替代方案。
  2. 方案 A:修改本地测试继承(可优先尝试,属于绕过验证)
    使用 pytest 的跳过机制绕过外网依赖。在测试执行命令中加入忽略项,跳过标记为 @pytest.mark.integration 的用例,例如仅运行不依赖网络资源加载的纯逻辑 layer 测试:
    pytest tests/models/emu3/test_modeling_emu3.py -m "not integration"
    注意:该方案并非官方合并的修复代码,仅用于个人在断网环境下验证核心代码路径。
  3. 方案 B:修正代码(本地补丁,需要微调)
    将测试文件中所有指向 picsum.photos 的图片请求替换为本地加载图片流(local fixture)。例如将 URL 请求改为读取本地 JPG 文件并转为 PIL Image 对象。但需注意,这么做会改变原始 pixel-exact 的期望输出比对(pixel 级校验会失效),因此该修改只适合用于跑通流程进行调试,不适合提交上游。
  4. 方案 C:环境代理处理
    若你所有的测试环境都在内网,务必为 requests 配置可访问外网的代理,或让运维将 picsum.photos 域名加入白名单。同时确认 images.unsplash.com 也被允许通过,否则运行 LLaVA 时依然会报 SSL 连接错误。
  5. 对开源贡献者:认领改造任务
    若你有意帮助修复此 Issue,可在本地搜索所有引用 picsum.photosimages.unsplash.com 的测试文件,将外部图片拉取逻辑替换为 HF Hub 镜像地址(hf-internal-testing 组织仓库),如果替换为本地依赖,必须同步重新生成像素级基线数据。

验证方法

在断网或无法访问 picsum.photos 的环境中,分别运行受影响的测试模块。如果跳过或本地文件替换方案有效,测试输出会显示 PASSEDSKIPPED,而非之前的 SSLError 堆栈。若你在测试本地代码逻辑,可先在无外网环境下执行单测(Unit Test),确认不会因为拉取图片资源而中断。验证命令参考:pytest tests/models/emu3/test_modeling_emu3.py -x -q --disable-warnings。若图片已可正常下载且不再报错,说明代理或 Hosts 方案生效。

参考来源

huggingface/transformers #48424

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 22199

发表回复

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