如何获得“ cos-extensions install gpu”在Google Cloud VM上运行?

问题描述

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

但是它会在/var/lib/nvidia中安装nvidia的bins和libs,它们在此操作系统中以noexec的形式挂载(已被锁定)。这意味着所有库或实用程序都不起作用。而且,当您将它们安装到docker容器时,它们也不在那里工作;他们仍然是noexec。

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

解决方法

这似乎不是容器问题,而是由于COS导致的容器优化的OS预期行为,它通过为多个功能提供具有安全意识的默认值来提供另一种强化级别。

如果您查看documentation,则对于Container-Optimized OS文件系统,/var下的所有内容都以no-exec的形式挂载,除了

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

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

另一方面,Ubuntu容器根据COS的安装情况,具有不同的严格exec / noexec,因此,最好使用基于Ubuntu的映像而不是COS作为解决方法。

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

,

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

奇怪,因为看起来这已经出现在测试中了。

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...