浪费了开源资源😮
Docker 安装缺少 CUDA 支持所需的依赖项 #1073
文档:README 文件中 Nvidia Container Toolkit 的链接 #155102
好久不见,我的朋友们!👋
今天我收到 GitHub 的过期代码机器人通知,我在著名的 PyTorch 代码库中提交的一个 PR 被机器人关闭了。🤖
是的,是机器人关闭的;不是作者或代码库所有者关闭的,而是机器人。
你可能会说,对于像这样的大型项目来说,这种情况很正常,但深入研究这个 PR 后,我发现开源领域浪费了多少精力!
一切是如何开始的
2025年6月,我想尝试一个用于单次语音克隆的工具。
该项目基于PyTorch,虽然通过Docker安装的目的是为了实现可复现性,但实际上并非如此。
首先,我克隆了仓库并运行了 docker build 命令:
docker build -t f5tts:v1 .
(你可能从类似的项目中了解到)下载和构建这个项目已经花了很长时间。😴
构建完成后,我尝试通过以下方式运行项目:
docker container run --rm -it --gpus=all --mount 'type=volume,source=f5-tts,target=/root/.cache/huggingface/hub/' -p 7860:7860 ghcr.io/swivid/f5-tts:main f5-tts_infer-gradio --host 0.0.0.0
在那里,我遇到了以下完全令人费解的错误信息:
docker: Error response from daemon: could not select device driver "" with capabilities: [[gpu]].
真是谢谢你啊。总之,我在网上搜索了很久,最终找到了解决方案。在 Linux 系统上,如果想在 GPU 上使用 PyTorch,需要手动安装 Nvidia 容器工具包:
https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html
嗯,这个功能在代码库里和 PyTorch 代码库里都没提到。
哪里都没提到。谁会知道呢?肯定没人知道,对吧?!这看起来非常适合提交一个 pull request。
我争取公关成绩的动机
我浪费了时间,还因此情绪低落,我觉得其他开发者应该有更好的体验。而且提交 PR 的工作量也很小。
对我来说,这就是开源的真谛!我解决了一个问题,并通过将其分享给全世界,为我们所有人节省了时间。反过来,你们也为我做了同样的事情,我们共同受益。
我仿佛生活在一个美好的小世界里。
从梦乡醒来:这是我多年来在 GitHub 上遇到的最不友好的对话🤬
我原本以为在安装说明里加一行字能帮大家节省时间,但没想到反响却出乎意料。你自己看看吧:
Docker 安装缺少 CUDA 支持所需的依赖项 #1073
- [x] 此模板仅用于提交错误报告,使用问题请使用“需要帮助”模板。
- [x] 我已经仔细查阅了项目文档,但仍然找不到解决我问题的信息。
- [x] 我搜索了现有的问题,包括已关闭的问题,但找不到解决方案。
- [x] 我使用英语提交此问题是为了促进社区交流。
文档应注明,如果未安装和配置nvidia docker 工具包,则容器将无法运行。
如果您不安装工具包,您将会遇到以下情况:
docker:来自守护进程的错误响应:无法选择 具有以下功能的设备驱动程序“ " :[[gpu]]。
如果你愿意的话,我可以提交一个 PR 并将其添加到文档中。
- 安装 Docker(请按照 Docker 官方安装指南操作)
- 请按照 Readme 文件中的 Docker 安装说明进行操作。
安装过程应该可以复现。按照 Docker 安装步骤一步一步操作,应该可以顺利启动。
docker container run --rm -it --gpus=all --mount ' type=volume,source=f5-tts,target=/root/.cache/huggingface/hub/ ' -p 7860:7860 ghcr.io/swivid/f5-tts:main f5-tts_infer-gradio --host 0.0.0.0
docker:来自守护进程的错误响应:无法选择 具有以下功能的设备驱动程序“ " :[[gpu]]。
虽然这显然是他们作为主人的选择,但我对他们完全缺乏同理心和对我表现出的攻击性感到相当震惊,就好像我是个负担似的。
一个新人遇到这种情况会怎么想?说实话,我希望没有新人会遇到这种破事,但我担心这种沟通方式并非个例。
总之,显而易见的结果是,我们应该主动向最初导致问题的地方提交 PR。
大动作:在官方 PyTorch 仓库提交 PR
我向来行动果断,所以我向 PyTorch 仓库提交了同样的 PR,准备面对可能出现的任何麻烦和讨论。
文档:README 文件中 Nvidia Container Toolkit 的链接 #155102
Linux 发行版需要 Nvidia Container Toolkit 才能正确运行带有 --gpus 标志的 Docker 镜像。
该依赖项是操作系统级别的,无法从容器内部进行锁定。
否则容器将无法运行,并会提供含糊不清的错误消息。
docker:来自守护进程的错误响应:无法选择 具有以下功能的设备驱动程序“ " :[[gpu]]。
CLA 助手已经阻止我接受 PR,让我在线签署一些繁琐的文件,还要用电子签名,遵守一些除了少数律师之外没人能看懂的法律术语(就连 PyTorch 的开发者和维护者也看不懂)。🤢
没关系,我当时没仔细阅读,因为我只想提交 PR。
然后就等着持续集成测试(CI)了。我只改了个README文件,所以别出什么岔子。还好一切顺利。
一天后,一位维护者添加了triaged标签并请求其他维护者进行审核。太棒了,看来它通过了初步筛选,不会像之前的另一个仓库那样被判定为“不重要”而被拒绝。
但是之后就没了动静。什么都没有。没有反应。没有评论,也没有审核。一个月后,陈旧机器人通知我 PR 被标记为陈旧,维护者可以移除陈旧标签。
我评论说“未陈旧”,但这毫无作用:在我提交 PR 两个月后,它被陈旧机器人关闭了。真是个混蛋!
我个人的想法
幸运的是,这个 PR 只是 README 文件中的一行附加内容,但它也是一次测试——测试贡献是否受到重视,以及人们是否关心开发者关心的小事,因为是开发者在摆弄这些东西。
似乎没有人关心其他人的努力。
从现在开始,我真的怀疑自己是否还会再向那些大型代码库提交 PR。创建一个 gist 并广而告之要容易得多,而且还能省去一些烦人的讨论。
总之,如果你在 Linux、Docker 和 PyTorch 上遇到问题,提示你docker: Error response from daemon: could not select device driver "" with capabilities: [[gpu]].需要安装 Nvidia Docker 工具包,那么你现在就知道该怎么做了。