{"id":14959130,"url":"https://github.com/dbklim/docker_image_with_cuda10_cudnn7","last_synced_at":"2025-10-24T16:31:07.825Z","repository":{"id":115095573,"uuid":"184753497","full_name":"dbklim/docker_image_with_cuda10_cudnn7","owner":"dbklim","description":"Dockerfiles and manual for easy build of docker image with CUDA10.X and cuDNN7.6 to run TensorFlow/PyTorch on the nvidia GPU in docker-container.","archived":false,"fork":false,"pushed_at":"2021-04-14T15:51:49.000Z","size":26,"stargazers_count":19,"open_issues_count":1,"forks_count":5,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-01-31T03:11:33.523Z","etag":null,"topics":["cuda","cudnn","docker","docker-gpu","docker-image","docker-nvidia","dockerfile","gpu","gpu-docker","nvidia","nvidia-docker","pytorch","pytorch-gpu","tensorflow","tensorflow-examples","tensorflow-gpu","tensorflow-gpu-docker","torch"],"latest_commit_sha":null,"homepage":"","language":"Roff","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dbklim.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-05-03T12:42:29.000Z","updated_at":"2025-01-24T13:23:46.000Z","dependencies_parsed_at":null,"dependency_job_id":"fb2f9633-ff28-4b75-96c4-154b44038d23","html_url":"https://github.com/dbklim/docker_image_with_cuda10_cudnn7","commit_stats":null,"previous_names":["dbklim/docker_image_with_cuda10_cudnn7"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dbklim%2Fdocker_image_with_cuda10_cudnn7","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dbklim%2Fdocker_image_with_cuda10_cudnn7/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dbklim%2Fdocker_image_with_cuda10_cudnn7/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dbklim%2Fdocker_image_with_cuda10_cudnn7/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dbklim","download_url":"https://codeload.github.com/dbklim/docker_image_with_cuda10_cudnn7/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":237999650,"owners_count":19399918,"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":["cuda","cudnn","docker","docker-gpu","docker-image","docker-nvidia","dockerfile","gpu","gpu-docker","nvidia","nvidia-docker","pytorch","pytorch-gpu","tensorflow","tensorflow-examples","tensorflow-gpu","tensorflow-gpu-docker","torch"],"created_at":"2024-09-24T13:18:53.937Z","updated_at":"2025-10-24T16:31:03.569Z","avatar_url":"https://github.com/dbklim.png","language":"Roff","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Docker image with CUDA 10 and cuDNN 7\n\nПроект содержит **bash-скрипты для подготовки хост-машины** для предоставления доступа **к GPU в [docker](https://docs.docker.com/) контейнерах**. Подготовка состоит из:\n\n1. Установка драйвера для [NVIDIA GPU](https://www.nvidia.com/en-gb/graphics-cards/) необходимой версии\n2. Установка [nvidia-container-toolkit](https://github.com/NVIDIA/nvidia-docker)\n3. Сборка базового docker образа с [CUDA 10.X](https://developer.nvidia.com/cuda-zone) и [cuDNN 7.6](https://developer.nvidia.com/cudnn)\n\n**Внимание!** Все нижеописанные **инструкции** предназначены **для Ubuntu 16.04-20.04**. В других ОС работоспособность не гарантируется!\n\n**Примечание:** после клонирования проекта, скорее всего нужно будет **предоставить скриптам права на запуск**. Это можно сделать следующим способом (находясь в папке с проектом):\n\n```bash\nchmod +x *.sh\n```\n\n---\n\n## Зависимости\n\nДля успешной подготовки хост-машины **требуется** установленный **[Docker](https://docs.docker.com/) версии [19.03](https://docs.docker.com/engine/reference/commandline/version/) или выше**.\n\nДля установки Docker в Ubuntu 16.04-20.04 воспользуйтесь [официальной инструкцией](https://docs.docker.com/install/linux/docker-ce/ubuntu/) или скриптом [`install_docker-ubuntu.sh`](https://github.com/Desklop/Docker_image_with_CUDA10_cuDNN7/blob/master/install_docker-ubuntu.sh):\n\n```bash\nsudo ./install_docker-ubuntu.sh\n```\n\nТак же можно вручную в терминале выполнить (краткая выжимка из официальной инструкции):\n\n```bash\nsudo apt-get -y install apt-transport-https ca-certificates curl gnupg-agent software-properties-common\ncurl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -\nsudo apt-key fingerprint 0EBFCD88\nsudo add-apt-repository \"deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable\" -y\nsudo apt-get -y update\nsudo apt-get -y install docker-ce docker-ce-cli containerd.io docker-compose\n```\n\n---\n\n## Подготовка хост-машины одним скриптом\n\nДля **выполнения всех действий сразу** можно воспользоваться скриптом [`install_all.sh`](https://github.com/Desklop/Docker_image_with_CUDA10_cuDNN7/blob/master/install_all.sh). Поддерживается **`CUDA` версии `10.0`, `10.1` и `10.2`**. Для того, что бы указать конкретную версию `CUDA`, нужно **передать аргумент при запуске**:\n\n```bash\nsudo ./install_all.sh [cuda10.0|cuda10.1|cuda10.2]\n```\n\nЗначения аргумента (если не передавать аргумент - использовать значение `cuda10.2`):\n\n- `cuda10.0`: установка `nvidia-driver-440`, `nvidia-container-toolkit` и сборка docker-образа с `CUDA 10.0` и `cuDNN 7.6` на основе Ubuntu 19.10 с меткой `cuda10.0_cudnn7.6:devel`\n- `cuda10.1`: установка `nvidia-driver-440`, `nvidia-container-toolkit` и сборка docker-образа с `CUDA 10.1` и `cuDNN 7.6` на основе Ubuntu 19.10 с меткой `cuda10.1_cudnn7.6:devel`\n- `cuda10.2`: установка `nvidia-driver-440`, `nvidia-container-toolkit` и сборка docker-образа с `CUDA 10.2` и `cuDNN 7.6` на основе Ubuntu 19.10 с меткой `cuda10.2_cudnn7.6:devel`\n\nПосле выполнения скрипта необходмо **перезагрузить хост-машину**. Проверить работоспособность можно следующим образом:\n\n```bash\nsudo docker run --gpus all -ti --rm cuda10.2_cudnn7.6:devel nvidia-smi\n```\n\nРезультат должен быть такой же, как и в [разделе 1](https://github.com/Desklop/Docker_image_with_CUDA10_cuDNN7/tree/master#1-установка-драйвера-для-видеокарты-nvidia) ниже.\n\n---\n\n## 1. Установка драйвера для видеокарты NVIDIA\n\nДля работы с [CUDA 10.X](https://developer.nvidia.com/cuda-toolkit-archive) необходим **драйвер для видеокарты** определённой версии ([источник](https://docs.nvidia.com/deploy/cuda-compatibility/index.html#binary-compatibility__table-toolkit-driver)):\n\n- CUDA 10.0: драйвер версии 410.48 или выше\n- CUDA 10.1: драйвер версии 418.39 или выше\n- CUDA 10.2: драйвер версии 440.33 или выше\n\n**Установить драйвер** нужной версии можно следующими способами:\n\n1. Самостоятельно, загрузив необходимый пакет с официального сайта [nvidia](https://www.nvidia.ru/Download/index.aspx?lang=ru)\n2. Воспользоваться скриптом [`install_nvidia-driver.sh`](https://github.com/Desklop/Docker_image_with_CUDA10_cuDNN7/blob/master/install_nvidia-driver.sh), который в качестве аргумента принимает версию драйвера (если не передавать аргумент - установить версию `440`):\n\n```bash\nsudo ./install_nvidia-driver.sh [410|418|440|...]\n```\n\n3. Вручную в терминале выполнить:\n\n```bash\nsudo add-apt-repository -y ppa:graphics-drivers/ppa\nsudo apt-get -y update\nsudo apt-get -y install nvidia-driver-440\n```\n\nПосле установки необходимо **перезагрузить хост-машину**. Что бы убедиться, что драйвер успешно установлен, можно **вызвать в терминале `nvidia-smi`**. Результат должен быть примерно следующий:\n\n```bash\n+-----------------------------------------------------------------------------+\n| NVIDIA-SMI 440.59       Driver Version: 440.59       CUDA Version: 10.2     |\n|-------------------------------+----------------------+----------------------+\n| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |\n| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |\n|===============================+======================+======================|\n|   0  GeForce RTX 208...  Off  | 00000000:08:00.0 Off |                  N/A |\n| 39%   42C    P0    18W / 250W |      0MiB / 11019MiB |      0%      Default |\n+-------------------------------+----------------------+----------------------+\n\n+-----------------------------------------------------------------------------+\n| Processes:                                                       GPU Memory |\n|  GPU       PID   Type   Process name                             Usage      |\n|=============================================================================|\n|  No running processes found                                                 |\n+-----------------------------------------------------------------------------+\n```\n\n---\n\n## 2. Установка [nvidia-container-toolkit](https://github.com/NVIDIA/nvidia-docker)\n\nЧто бы видеокарта была доступна в docker-контейнере, необходимо **установить [nvidia-container-toolkit](https://github.com/NVIDIA/nvidia-docker)**. Сделать это можно следующими способами:\n\n1. Воспользоваться скриптом [`install_nvidia-container-toolkit.sh`](https://github.com/Desklop/Docker_image_with_CUDA10_cuDNN7/blob/master/install_nvidia-container-toolkit.sh):\n\n```bash\nsudo ./install_nvidia-container-toolkit.sh\n```\n\n2. Вручную в терминале выполнить (краткая выжимка из [репозитория](https://github.com/NVIDIA/nvidia-docker#ubuntu-16041804-debian-jessiestretchbuster)):\n\n```bash\ndistribution=$(. /etc/os-release;echo $ID$VERSION_ID)\ncurl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -\ncurl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list\nsudo apt-get -y update\nsudo apt-get -y install nvidia-container-toolkit\nsudo systemctl restart docker\n```\n\nЧто бы убедиться, что установка прошла успешно, можно выполнить в терминале:\n\n```bash\nsudo docker run --gpus all -ti --rm nvidia/cuda:10.2-base nvidia-smi\n```\n\nРезультат должен быть такой же, как и в [подразделе 1](https://github.com/Desklop/Docker_image_with_CUDA10_cuDNN7/tree/master#1-установка-драйвера-для-видеокарты-nvidia).\n\n---\n\n## 3. Сборка docker-образа с CUDA 10.X и cuDNN 7.6\n\nДля работы с библиотеками машинного обучения на GPU, такими как [TensorFlow](https://www.tensorflow.org/) и [PyTorch](https://pytorch.org/), так же **необходимы библиотеки [CUDA 10.X](https://developer.nvidia.com/cuda-toolkit-archive) и [cuDNN 7.6](https://developer.nvidia.com/cudnn)**. Для упрощения сборки пользовательских docker-образов, можно **использовать заранее собранный docker-образ** с данными библиотеками **в качестве основы** (т.е. в качестве базового образа).\n\nВ проекте доступны **2 вида Dockerfile**: `runtime` и `devel`. Образы с меткой `runtime` используются для **запуска** уже **готовых проектов** на GPU, а с меткой `devel` - для **сборки проектов из исходников** с поддержкой GPU (подробно про разницу между ними можно посмотреть в репозитории [nvidia-docker](https://github.com/NVIDIA/nvidia-docker/wiki/CUDA#description)).\n\n**Для сборки docker-образа с `CUDA 10.2` и `cuDNN 7.6`**, находясь в папке с проектом, нужно выполнить (`-f Dockerfile_cuda10.2_runtime` — использовать файл `Dockerfile_cuda10.2_runtime` в качестве Dockerfile для сборки образа, `-t` — запуск в терминале, `.` — директория, из которой вызывается docker build (точка — значит в текущей директории находятся все файлы для образа), `cuda10.2_cudnn7.6:runtime` — метка образа и его версия):\n\n```bash\nsudo docker build -f Dockerfile_cuda10.2_runtime -t cuda10.2_cudnn7.6:runtime .\n```\n\nВ качестве **базовой ОС** для образа используется **Ubuntu 20.04**.\n\nДля сборки docker-образов **с другими версиями CUDA** в проекте присутствуют **соответствующие Dockerfile**:\n\n- CUDA 10.0: [Dockerfile_cuda10.0_runtime](https://github.com/Desklop/Docker_image_with_CUDA10_cuDNN7/blob/master/Dockerfile_cuda10.0_runtime) и [Dockerfile_cuda10.0_devel](https://github.com/Desklop/Docker_image_with_CUDA10_cuDNN7/blob/master/Dockerfile_cuda10.0_devel)\n- CUDA 10.1: [Dockerfile_cuda10.1_runtime](https://github.com/Desklop/Docker_image_with_CUDA10_cuDNN7/blob/master/Dockerfile_cuda10.1_runtime) и [Dockerfile_cuda10.1_devel](https://github.com/Desklop/Docker_image_with_CUDA10_cuDNN7/blob/master/Dockerfile_cuda10.1_devel)\n- CUDA 10.2: [Dockerfile_cuda10.2_runtime](https://github.com/Desklop/Docker_image_with_CUDA10_cuDNN7/blob/master/Dockerfile_cuda10.2_runtime) и [Dockerfile_cuda10.2_devel](https://github.com/Desklop/Docker_image_with_CUDA10_cuDNN7/blob/master/Dockerfile_cuda10.2_devel)\n\nДанные Dockerfiles сделаны на основе Dockerfiles из репозитория [nvidia](https://gitlab.com/nvidia/container-images/cuda/-/tree/master/dist%2Fubuntu18.04).\n\nПосле успешной сборки, проверить работоспособность образа можно следующим образом (`--gpus all` - предоставить контейнеру доступ ко всем GPU на хост-машине, `-t` — запуск терминала, `-i` — интерактивный режим, `--rm` — удалить контейнер после завершения его работы):\n\n```bash\nsudo docker run --gpus all -ti --rm cuda10.2_cudnn7.6:runtime nvidia-smi\n```\n\nРезультат должен быть такой же, как и в [подразделе 1](https://github.com/Desklop/Docker_image_with_CUDA10_cuDNN7/tree/master#1-установка-драйвера-для-видеокарты-nvidia).\n\n**Примечание:** размер собранного docker-образа с `CUDA 10.X` и `cuDNN 7.6` равен **1.3-1.8 Гб** для `runtime` и **3.1-3.8 Гб** для `devel`.\n\n---\n\n### Сборка пользовательского docker-образа с CUDA 10.X и cuDNN 7.6\n\n**Для сборки** любого **пользовательского docker-образа с** библиотеками **`CUDA 10.X` и `cuDNN 7.6`** нужно:\n\n1. Изменить образ, на основе которого собирается пользовательский образ, на созданный ранее `cuda10.2_cudnn7.6:runtime`\n2. При установке пакетов для Python использовать версии библиотек для работы на GPU, например, вместо TensorFlow использовать [TensorFlow-GPU](https://www.tensorflow.org/install/gpu)\n3. Предусмотреть в исходном коде запускаемого в docker-контейнере проекта обнаружение и использование GPU\n\nЧто бы docker-образ имел доступ к видеокарте, **при запуске** образа необходимо **передать параметр `--gpus all`**, например:\n\n```bash\nsudo docker run --gpus all -ti --rm my_image:version\n```\n\nПараметр `--gpus all` предоставит контейнеру доступ сразу ко всем имеющимся на хост-машине видеокартам. Что бы указать, сколько видеокарт использовать или какие именно, нужно вместо `all` передать `2` (использовать первые 2 видеокарты) или `\"device=2,3\"` (использовать 2 и 3 видеокарту), например:\n\n```bash\nsudo docker run --gpus '\"device=1,2\"' -ti --rm my_image:version\n```\n\nБолее подробно про параметр `--gpus` можно посмотреть в репозитории [`nvidia-docker`](https://github.com/NVIDIA/nvidia-docker#usage).\n\n---\n\n## Динамическое выделение памяти GPU в TensorFlow-GPU\n\nПо умолчанию **[TensorFlow-GPU](https://www.tensorflow.org/install/gpu) использует всю** доступную **видеопамять**, по этому не получится одновременно запустить несколько docker-образов, использующих [TensorFlow-GPU](https://www.tensorflow.org/install/gpu) на одном GPU.\n\nЕсли проект написан на Python и для работы с TensorFlow используется [Keras](https://keras.io/), **можно** это **исправить** следующим образом (данный фрагмент кода необходимо добавить в самое начало `.py` файла, перед первым использованием TensorFlow-GPU) ([источник](https://www.tensorflow.org/guide/using_gpu?hl=ru#allowing_gpu_memory_growth)):\n\n```python\nimport tensorflow as tf\nfrom keras.backend.tensorflow_backend import set_session\n\n# Включение динамического выделения памяти GPU в TensorFlow\nconfig = tf.ConfigProto()\nconfig.gpu_options.allow_growth = True\n\nsess = tf.Session(config=config)  # применение новой конфигурации для сессии TensorFlow\nset_session(sess)  # установка данной сессии TensorFlow в качестве основной для Keras\n```\n\n---\n\nЕсли у вас возникнут вопросы или вы хотите сотрудничать, можете написать мне на почту: vladsklim@gmail.com или в [LinkedIn](https://www.linkedin.com/in/vladklim/).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdbklim%2Fdocker_image_with_cuda10_cudnn7","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdbklim%2Fdocker_image_with_cuda10_cudnn7","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdbklim%2Fdocker_image_with_cuda10_cudnn7/lists"}