如何让 `cos-extensions install gpu` 在 Google 云虚拟机上运行?

How can I get `cos-extensions install gpu` to work on a Google Cloud VM?

我正在尝试按照 https://cloud.google.com/container-optimized-os/docs/how-to/run-gpus 中的说明在带有 GPU 的 GCE 上设置容器优化的 OS (COS)。创建 VM 后,它说要 ssh in 和 运行 cos-extensions install gpu。这样可行;你可以在安装过程中看到它 运行s nvidia-smi 它打印出驱动程序版本 (440.33.01) 并连接到卡。​​

但它在 /var/lib/nvidia 中安装了 nvidia bin 和库,在 OS 中作为 noexec 安装(它非常锁定)。这意味着 none 的库或实用程序可以正常工作。当您将它们安装到 docker 容器时,它们也不会在那里工作;他们仍然是 noexec.

我发现的唯一解决方法是将整个 /var/lib/nvidia 目录复制到 tmpfs 暂存盘并从那里使用它。 是我用错了,还是坏了?

这看起来不是 containerd 问题,而是 Container-Optimized OS 预期的行为,因为 COS 通过提供 security-minded 提供了另一个级别的强化多个功能的默认值。

如果您查看 documentation,对于 Container-Optimized OS 文件系统,/var 下的所有内容都安装为 no-exec 除了

  • /var/lib/google
  • /var/lib/docker
  • /var/lib/toolbox

那些挂载了可写、可执行和有状态的属性。

另一方面,Ubuntu containerd 没有像 COS 一样严格的 exec/noexec 依赖于挂载,所以,使用Ubuntu 基于图像而不是 COS 作为解决方法。

另一种选择是将 /var/lib/nvidia 的内容复制到另一个未使用 noexec 选项挂载的挂载点下,就像您已经做的那样。

事实证明我没有做错任何事。现在已确认这是 cos-extensions 中的错误:https://issuetracker.google.com/issues/164134488

奇怪,因为这似乎会出现在测试中。

目前没有任何好的生产解决方法,因为作为用户,如果没有一些高级脚本,很难修改 COS 的行为。