快速结论:在非 CUDA 加速卡(例如 Intel XPU、通过 ROCm 暴露的 AMD 设备)上调用 HuggingFacePipeline.from_model_id(..., device=0) 时,如果该机器上 torch.cuda.device_count() 返回 0,就会触发设备校验失败;优先排查 LangChain 版本是否已包含 torch.accelerator 兼容逻辑。
适用环境:Issue 中确认的相关环境为 langchain-huggingface、PyTorch(涉及 2.6 引入的 torch.accelerator API)、Intel XPU 加速卡;未在 Issue 中明确给出具体 Python、CUDA、ROCm 版本号和操作系统,因此不要凭猜测填写。
最快修复方案:升级或切换到已合入 PR #38928 修复的 langchain-huggingface 版本,使 from_model_id 优先使用 torch.accelerator.device_count()(PyTorch ≥ 2.6),仅在不可用时回退到 torch.cuda.device_count()。
注意事项:该修复只改变设备索引校验与可用性告警的判定来源,不会改变模型实际加载到哪个设备;如果 PyTorch 版本低于 2.6,仍会走 CUDA 回退逻辑,非 CUDA 加速卡上的 device=0 依然可能被拒绝。Issue 中提到的替代方案 device_map="auto" 不是设备选择器,无法把模型固定到用户指定的单张加速卡。
问题场景
用户在 Intel XPU 等非 CUDA 加速卡上运行 langchain-huggingface,通过 HuggingFacePipeline.from_model_id(model_id="gpt2", task="text-generation", device=0) 指定设备索引。机器上实际存在可用的 XPU 加速卡,但由于校验逻辑只查询 torch.cuda.device_count(),该值为 0,导致设备校验失败;同时“检测到可用加速器”的告警也不会触发。该问题也出现在通过 torch.accelerator 抽象暴露的 AMD ROCm 等非 CUDA 后端上。
报错原文
ValueError: Got device==0, device is required to be within [-1, 0)
原因分析
HuggingFacePipeline.from_model_id 中的设备校验和可用性告警都只依赖 torch.cuda.device_count()。在仅存在 XPU 或其他非 CUDA 加速卡的机器上该值返回 0,因此任何 device >= 0 的合法索引都会被判为越界并抛出 ValueError。Issue 中维护者也通过将 torch.cuda.device_count() mock 为 0 的方式在 master 上复现了该错误,确认根因就是缺少设备无关的加速器计数回退逻辑。
环境排查
- 确认
langchain-huggingface版本是否已包含 PR #38928 的修复;若未包含则该问题可稳定复现。 - 确认 PyTorch 版本是否为 2.6 及以上;只有 ≥ 2.6 才有
torch.acceleratorAPI,低于该版本会走 CUDA 回退路径。 - 确认当前机器上
torch.cuda.device_count()的返回值,在纯 XPU 机器上预期为 0。 - 确认
torch.accelerator.device_count()是否可用及其返回值(PyTorch ≥ 2.6)。 - 确认实际加速卡类型(Intel XPU / AMD ROCm 等)与 PyTorch 是否匹配,Issue 未给出具体驱动与 ROCm 版本,需自行核实。
解决步骤
- 先确认当前是否命中已知缺陷:在非 CUDA 加速卡机器上执行
HuggingFacePipeline.from_model_id(model_id="gpt2", task="text-generation", device=0),观察是否抛出上述ValueError。 - 检查
langchain-huggingface版本,确认其中from_model_id是否已优先调用torch.accelerator.device_count()、并在不可用时回退到torch.cuda.device_count()。 - 如果尚未修复,升级到合入 PR #38928 的版本;升级前先记录当前版本以便回退。
- 若无法升级,可优先尝试将 PyTorch 升级到 2.6 及以上后再验证;但注意若 LangChain 代码仍只查询
torch.cuda.device_count(),单升 PyTorch 并不能解决问题。 - 若只是想把模型跑起来而非固定到某张卡,可优先尝试
device_map="auto"的替代路径;但 Issue 明确说明它不是设备选择器,会把分配决策交给 accelerate,可能使用全部可用设备。 - 重启进程后重新调用
from_model_id,确认不再抛出ValueError。
验证方法
修复后,在非 CUDA 加速卡机器上再次执行 HuggingFacePipeline.from_model_id(model_id="gpt2", task="text-generation", device=0),应能正常返回 pipeline 而不再抛出 ValueError: Got device==0, device is required to be within [-1, 0);同时可用性告警应使用 accelerator 相关措辞且能正常触发。Issue 中提供的修复后运行截图可作为对照参考。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。


