gpucrate创建硬链接gpu驱动程序卷,用于docker、singularity等。
gpucrate的Python项目详细描述
#gpucrate
gpucrate创建供使用的硬链接gpu驱动程序(当前仅限nvidia)卷 对于Docker、Singularity等,这使得精确的系统驱动程序 链接到一个容器中,而不需要根据 驱动程序版本。
##安装
要安装gpucrate,请使用pip
命令:
` $ pip install gpucrate `
或者在[虚拟环境](https://virtualenv.pypa.io/en/stable/):
` $ virtualenv gpucrate $ source gpucrate/bin/activate $ pip install gpucrate `
##用法 为系统当前的GPU驱动程序创建驱动程序卷:
` $ sudo gpucrate create `
这将在/usr/local/gpucrate
中创建一个硬链接驱动程序卷目录
默认情况下,可用于将驱动程序链接到容器中。这是一个
驱动程序版本的示例卷367.48
:
` $ find /usr/local/gpucrate/367.48/ /usr/local/gpucrate/367.48/ /usr/local/gpucrate/367.48/bin /usr/local/gpucrate/367.48/bin/nvidia-cuda-mps-server/usr/local/gpucrate/367.48/bin/nvidia-debugdump/usr/local/gpucrate/367.48/bin/nvidia-persistenced/usr/local/gpucrate/367.48/bin/nvidia-cuda-mps-control/usr/local/gpucrate/367.48/bin/nvidia-smi /usr/local/gpucrate/367.48/lib /usr/local/gpucrate/367.48/lib64 /usr/local/gpucrate/367.48/lib64/libnvcuvid.so.367.48 /usr/local/gpucrate/367.48/lib64/libnvidia-ml.so.1/usr/local/gpucrate/367.48/lib64/libnvidia-eglcore.so.367.48/usr/local/gpucrate/367.48/lib64/libnvidia-glcore.so.367.48 /usr/local/gpucrate/367.48/lib64/libcuda.so.367.48 /usr/local/gpucrate/367.48/lib64/libnvidia-opencl.so.1 /usr/local/gpucrate/367.48/lib64/libnvcuvid.so.1 /usr/local/gpucrate/367.48/lib64/libnvidia-ifr.so.367.48/usr/local/gpucrate/367.48/lib64/libnvidia-ml.so.367.48 /usr/local/gpucrate/367.48/lib64/libcuda.so.1 /usr/local/gpucrate/367.48/lib64/libnvidia-encode.so.1/usr/local/gpucrate/367.48/lib64/libnvidia-tls.so.367.48/usr/local/gpucrate/367.48/lib64/libnvidia-egl-wayland.so.367.48 /usr/local/gpucrate/367.48/lib64/libOpenGL.so.0 /usr/local/gpucrate/367.48/lib64/libcuda.so /usr/local/gpucrate/367.48/lib64/libnvidia-compiler.so.367.48/usr/local/gpucrate/367.48/lib64/libnvidia-fatbinaryloader.so.367.48/usr/local/gpucrate/367.48/lib64/libnvidia-opencl.so.367.48/usr/local/gpucrate/367.48/lib64/libnvidia-ptxjitcompiler.so.367.48/usr/local/gpucrate/367.48/lib64/libnvidia-fbc.so.1/usr/local/gpucrate/367.48/lib64/libnvidia-fbc.so.367.48/usr/local/gpucrate/367.48/lib64/libnvidia-glsi.so.367.48/usr/local/gpucrate/367.48/lib64/libnvidia-encode.so.367.48/usr/local/gpucrate/367.48/lib64/libnvidia-ifr.so.1 `
默认情况下,gpucrate在/usr/local/gpucrate
中创建驱动程序卷。你可以
通过gpucrate的配置文件更改此设置:
` echo 'volume_root: /path/to/volume/root' > /etc/gpucrate/config.yaml `
或者通过GPUCRATE_VOLUME_ROOT
环境变量:
` export GPUCRATE_VOLUME_ROOT="/path/to/volume/root" `
与奇点一起使用 注:奇点GPU需要奇点2.4+
为当前活动的驱动程序创建卷后,您现在可以使用
运行启用gpu的容器的奇点包装器singularity-gpu
。
例如,我们可以转换[tensorflow/tensorflow:latest gpu](https://hub.docker.com/r/tensorflow/tensorflow/) Docker图像到奇点图像:
` $ singularity build tensorflow.img docker://tensorflow/tensorflow:latest-gpu `
现在使用singularity-gpu
包装器正常运行任何奇点命令
仅当主机的确切GPU驱动程序链接到:
` $ singularity-gpu exec tensorflow.img python -c 'import tensorflow' I tensorflow/stream_executor/dso_loader.cc:108] successfully opened CUDA library libcublas.so locally I tensorflow/stream_executor/dso_loader.cc:108] successfully opened CUDA library libcudnn.so locally I tensorflow/stream_executor/dso_loader.cc:108] successfully opened CUDA library libcufft.so locally I tensorflow/stream_executor/dso_loader.cc:108] successfully opened CUDA library libcuda.so.1 locally I tensorflow/stream_executor/dso_loader.cc:108] successfully opened CUDA library libcurand.so locally `
默认情况下,singularity gpu注入nvidia/cuda所需的环境 在运行时在容器内。如果这引起了问题或者你想 出于任何原因禁用此选项在gpucrate配置文件中设置以下内容:
` echo 'manage_environment: false' > /etc/gpucrate/config.yaml `
或者使用GPUCRATE_MANAGE_ENVIRONMENT
环境变量:
` export GPUCRATE_MANAGE_ENVIRONMENT="false" `
####集装箱要求 奇点GPU包装器使用与NVIDIA上游相同的约定 码头集装箱:
- nvidia驱动程序卷绑定到容器中的/usr/local/nvidia
- CUDA住在/usr/local/CUDA
如果在奇点配置中有enable overlay no
,则需要
在尝试之前,确保/Ur/Prime/Nvidia存在于容器内
使用singularity-gpu
。
###与Docker一起使用 使用[nvidia docker](https://github.com/NVIDIA/nvidia-docker)要容易得多。 如果你仍然坚持要试试这个(没有测试,你需要调整设备, 卷根目录和系统的驱动程序版本):
` $ docker run -ti--rm \ --device=/dev/nvidiactl \ --device=/dev/nvidia-uvm \ --device=/dev/nvidia0 \ --device=/dev/nvidia1 \ --device=/dev/nvidia2--device=/dev/nvidia3 \ --volume-driver=nvidia-docker \ --volume=/usr/local/gpucrate/<driver_version>:/usr/local/nvidia:ro nvidia/cuda \ nvidia-smi `