{"id":16348770,"url":"https://github.com/jtriley/gpucrate","last_synced_at":"2026-02-27T06:05:29.096Z","repository":{"id":57435612,"uuid":"82087062","full_name":"jtriley/gpucrate","owner":"jtriley","description":"Creates hard-linked GPU driver (currently just NVIDIA) volumes for use with docker, singularity, etc.","archived":false,"fork":false,"pushed_at":"2017-11-17T23:41:43.000Z","size":62,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-09T15:51:59.757Z","etag":null,"topics":["container","cuda","docker","gpu","singularity"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jtriley.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-02-15T17:27:50.000Z","updated_at":"2020-02-13T18:13:19.000Z","dependencies_parsed_at":"2022-09-19T06:50:38.424Z","dependency_job_id":null,"html_url":"https://github.com/jtriley/gpucrate","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jtriley%2Fgpucrate","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jtriley%2Fgpucrate/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jtriley%2Fgpucrate/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jtriley%2Fgpucrate/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jtriley","download_url":"https://codeload.github.com/jtriley/gpucrate/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248236002,"owners_count":21069934,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["container","cuda","docker","gpu","singularity"],"created_at":"2024-10-11T00:54:51.740Z","updated_at":"2026-02-27T06:05:24.068Z","avatar_url":"https://github.com/jtriley.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# gpucrate\n\n[![build status](https://secure.travis-ci.org/jtriley/gpucrate.png?branch=master)](https://secure.travis-ci.org/jtriley/gpucrate)\n\ngpucrate creates hard-linked GPU driver (currently just NVIDIA) volumes for use\nwith docker, singularity, etc. This allows the exact system drivers to be\nlinked into a container without needing to maintain a separate container per\ndriver version.\n\n## Installation\nTo install gpucrate use the `pip` command:\n\n```\n$ pip install gpucrate\n```\n\nor in a [virtual environment](https://virtualenv.pypa.io/en/stable/):\n\n```\n$ virtualenv gpucrate\n$ source gpucrate/bin/activate\n$ pip install gpucrate\n```\n\n## Usage\nTo create a driver volume for your system's current GPU driver:\n\n```\n$ sudo gpucrate create\n```\n\nThis will create a hard-linked driver volume directory in `/usr/local/gpucrate`\nby default that can be used to link the drivers into a container. Here's an\nexample volume for driver version `367.48`:\n\n```\n$ find /usr/local/gpucrate/367.48/\n/usr/local/gpucrate/367.48/\n/usr/local/gpucrate/367.48/bin\n/usr/local/gpucrate/367.48/bin/nvidia-cuda-mps-server\n/usr/local/gpucrate/367.48/bin/nvidia-debugdump\n/usr/local/gpucrate/367.48/bin/nvidia-persistenced\n/usr/local/gpucrate/367.48/bin/nvidia-cuda-mps-control\n/usr/local/gpucrate/367.48/bin/nvidia-smi\n/usr/local/gpucrate/367.48/lib\n/usr/local/gpucrate/367.48/lib64\n/usr/local/gpucrate/367.48/lib64/libnvcuvid.so.367.48\n/usr/local/gpucrate/367.48/lib64/libnvidia-ml.so.1\n/usr/local/gpucrate/367.48/lib64/libnvidia-eglcore.so.367.48\n/usr/local/gpucrate/367.48/lib64/libnvidia-glcore.so.367.48\n/usr/local/gpucrate/367.48/lib64/libcuda.so.367.48\n/usr/local/gpucrate/367.48/lib64/libnvidia-opencl.so.1\n/usr/local/gpucrate/367.48/lib64/libnvcuvid.so.1\n/usr/local/gpucrate/367.48/lib64/libnvidia-ifr.so.367.48\n/usr/local/gpucrate/367.48/lib64/libnvidia-ml.so.367.48\n/usr/local/gpucrate/367.48/lib64/libcuda.so.1\n/usr/local/gpucrate/367.48/lib64/libnvidia-encode.so.1\n/usr/local/gpucrate/367.48/lib64/libnvidia-tls.so.367.48\n/usr/local/gpucrate/367.48/lib64/libnvidia-egl-wayland.so.367.48\n/usr/local/gpucrate/367.48/lib64/libOpenGL.so.0\n/usr/local/gpucrate/367.48/lib64/libcuda.so\n/usr/local/gpucrate/367.48/lib64/libnvidia-compiler.so.367.48\n/usr/local/gpucrate/367.48/lib64/libnvidia-fatbinaryloader.so.367.48\n/usr/local/gpucrate/367.48/lib64/libnvidia-opencl.so.367.48\n/usr/local/gpucrate/367.48/lib64/libnvidia-ptxjitcompiler.so.367.48\n/usr/local/gpucrate/367.48/lib64/libnvidia-fbc.so.1\n/usr/local/gpucrate/367.48/lib64/libnvidia-fbc.so.367.48\n/usr/local/gpucrate/367.48/lib64/libnvidia-glsi.so.367.48\n/usr/local/gpucrate/367.48/lib64/libnvidia-encode.so.367.48\n/usr/local/gpucrate/367.48/lib64/libnvidia-ifr.so.1\n```\n\nBy default gpucrate creates driver volumes in `/usr/local/gpucrate`. You can\nchange this via gpucrate's config file:\n\n```\necho 'volume_root: /path/to/volume/root' \u003e /etc/gpucrate/config.yaml\n```\n\nor via the `GPUCRATE_VOLUME_ROOT` environment variable:\n\n```\nexport GPUCRATE_VOLUME_ROOT=\"/path/to/volume/root\"\n```\n\n### Using with Singularity\n**NOTE**: singularity-gpu requires Singularity 2.4+\n\nOnce a volume has been created for the currently active driver you can now use\nthe singularity wrapper `singularity-gpu` to run GPU-enabled containers.\n\nAs an example lets convert the [tensorflow/tensorflow:latest-gpu](https://hub.docker.com/r/tensorflow/tensorflow/)\ndocker image to a singularity image:\n\n```\n$ singularity build tensorflow.img docker://tensorflow/tensorflow:latest-gpu\n```\n\nNow use the `singularity-gpu` wrapper to run any singularity command as normal\nonly with the host's exact GPU driver linked in:\n\n```\n$ singularity-gpu exec tensorflow.img python -c 'import tensorflow'\nI tensorflow/stream_executor/dso_loader.cc:108] successfully opened CUDA library libcublas.so locally\nI tensorflow/stream_executor/dso_loader.cc:108] successfully opened CUDA library libcudnn.so locally\nI tensorflow/stream_executor/dso_loader.cc:108] successfully opened CUDA library libcufft.so locally\nI tensorflow/stream_executor/dso_loader.cc:108] successfully opened CUDA library libcuda.so.1 locally\nI tensorflow/stream_executor/dso_loader.cc:108] successfully opened CUDA library libcurand.so locally\n```\n\nBy default singularity-gpu injects the required environment for NVIDIA/CUDA\ninside the container at run time. If this causes issues or you'd like to\ndisable this for any reason set the following in the gpucrate config file:\n\n```\necho 'manage_environment: false' \u003e /etc/gpucrate/config.yaml\n```\n\nor use the `GPUCRATE_MANAGE_ENVIRONMENT` environment variable:\n\n```\nexport GPUCRATE_MANAGE_ENVIRONMENT=\"false\"\n```\n\n#### Container Requirements\nThe singularity-gpu wrapper uses the same conventions as NVIDIA's upstream\ndocker containers:\n\n1. NVIDIA driver volume binds to /usr/local/nvidia inside the container\n2. CUDA lives in /usr/local/cuda\n\nIf you have `enable overlay no` in your singularity config you'll need to\nensure that /usr/local/nvidia exists inside the container before attempting to\nuse `singularity-gpu`.\n\n### Using with Docker\nIt's much easier to just use [nvidia-docker](https://github.com/NVIDIA/nvidia-docker).\nIf you still insist try this (not tested and you'll need to adjust the devices,\nvolume root, and driver version for your system):\n\n```\n$ docker run -ti --rm \\\n--device=/dev/nvidiactl \\\n--device=/dev/nvidia-uvm \\\n--device=/dev/nvidia0 \\\n--device=/dev/nvidia1 \\\n--device=/dev/nvidia2\n--device=/dev/nvidia3 \\\n--volume-driver=nvidia-docker \\\n--volume=/usr/local/gpucrate/\u003cdriver_version\u003e:/usr/local/nvidia:ro nvidia/cuda \\\nnvidia-smi\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjtriley%2Fgpucrate","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjtriley%2Fgpucrate","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjtriley%2Fgpucrate/lists"}