Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Docker容器之间共享原始内核缓存_Docker_Cupy - Fatal编程技术网

在Docker容器之间共享原始内核缓存

在Docker容器之间共享原始内核缓存,docker,cupy,Docker,Cupy,我正在创建一个使用cupy.RawKernal的python应用程序。应用程序使用NVIDIA容器工具包在docker容器中运行。我希望避免在每次创建新容器时(在开发过程中经常发生)重新编译cupy.RawKernal 我已按如下方式设置了卷装载: docker run--runtime=nvidia-v${HOME}/.cupy/kernel\u cache:/HOME/app/.cupy/kernel\u cache-d docker\u image 运行应用程序后,我看到.cubin文件位

我正在创建一个使用
cupy.RawKernal
的python应用程序。应用程序使用NVIDIA容器工具包在docker容器中运行。我希望避免在每次创建新容器时(在开发过程中经常发生)重新编译
cupy.RawKernal

我已按如下方式设置了卷装载:

docker run--runtime=nvidia-v${HOME}/.cupy/kernel\u cache:/HOME/app/.cupy/kernel\u cache-d docker\u image

运行应用程序后,我看到
.cubin
文件位于容器和主机上各自的位置。但是,当我重新创建容器时,它在第一次运行时启动仍然需要更长的时间。
.cubin
文件也不会在主机或容器上更新

我的第一个想法是权限问题,我对主机文件夹授予了完全的R/W权限,但没有任何效果


有什么想法吗?谢谢

第二个缓存文件夹需要共享:

~/.nv/ComputeCache

有关更多信息,请参阅此链接:

JIT缓存 第二种减轻JIT开销的方法是缓存JIT编译生成的二进制文件。当设备驱动程序及时为应用程序编译PTXcode时,它会自动缓存生成的二进制代码的副本,以避免在以后调用应用程序时重复编译。当设备驱动程序升级时,称为计算缓存的缓存会自动失效,因此应用程序可以从设备驱动程序内置的即时编译器的改进中获益

环境变量可用于控制即时编译

  • CUDA\u CACHE\u DISABLE
    设置为1将禁用缓存(不会向缓存中添加或检索二进制代码)。
  • CUDA\u CACHE\u MAXSIZE
    指定计算缓存的大小(以字节为单位);默认大小为256MiB(因为NVIDIA驱动程序之前发布了334、32mib),最大大小为4gib;不缓存大小超过缓存大小的二进制代码;旧的二进制代码将从缓存中逐出,以便在需要时为新的二进制代码腾出空间
  • CUDA\u CACHE\u PATH
    指定计算缓存文件的目录位置;默认值为:
  • CUDA\u CACHE\u PATH
    指定计算缓存文件的目录位置;默认值为:
  • 在Windows上,
    %APPDATA\%NVIDIA\ComputeCache
  • 在MacOS上,
    $HOME/Library/Application Support/NVIDIA/ComputeCache
  • 在Linux上,
    ~/.nv/ComputeCache
  • CUDA\u FORCE\u PTX\u JIT
    设置为1会强制设备驱动程序忽略应用程序中嵌入的任何二进制代码(请参见应用程序兼容性),而只是及时编译embeddedPTXcode。如果内核没有embeddedPTX代码,它将无法加载。您可以使用此环境变量来确认应用程序二进制文件是否包含PTXcode,以及实时编译是否按照预期工作,以保证与未来体系结构的前向兼容性

在docker中运行时,
$HOME
在Python运行时是否等于
/HOME/app
?如果没有,您可以尝试设置
CUPY\u CACHE\u DIR=/home/app/.CUPY/kernel\u CACHE
,看看它是如何运行的。可能还有其他原因影响第一次运行的速度,所以我不能肯定这是由于内核缓存没有适当的时间。感谢您的建议,我已经跟踪到了第一次调用cupy库时的速度减慢<代码>cp.arange。第一次运行时,它会在容器和主机的缓存目录中生成一个cubin文件。当在一个新容器中运行时,这个调用需要相同的运行时间,这使我相信缓存没有被使用