在服务器部署Nvidia-Docker全流程,附Dockerfile

晚安八月 2024-07-10 10:07:02 阅读 93

目录

在服务器部署Nvidia-Docker全流程,附Dockerfile主机依赖安装Docker安装清除现有的docker相关包设置apt的docker仓库安装最新版docker验证安装

Nvidia-docker安装设置apt仓库安装Nvidia Container Toolkit配置Docker重启Docker

制作通用的nvidia-docker 镜像拉取镜像查看镜像id删除镜像创建nvidia-docker 容器查看container id进入containerContainer 操作配置container的ssh服务SSH配置重启ssh设置连接密码注意:安装Anaconda打包镜像新用户使用镜像制作自己的容器

Dockerfile注意使用Dockerfile构建镜像从Dockerfile构建的镜像创建容器

在服务器部署Nvidia-Docker全流程,附Dockerfile

在服务器使用docker可以使管理员能够对服务器用户进行更便捷的管理,相比于基于anaconda环境的管理,用户之间不共享工作空间,管理员只对用户暴露服务器端口和数据集,用户可以自定义介入密码,安全性更高。Nvidia-Docker已经更新至Nvidia-Container-Toolkit,使用更加简便。本文分别给出了当前版本基于镜像与Dockerfile在服务器部署Nvidia-Docker的全部流程,推荐使用dockerfile。

nvidia docker

主机依赖安装

Docker安装

清除现有的docker相关包

<code>for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done

设置apt的docker仓库

# Add Docker's official GPG key:

sudo apt-get update

sudo apt-get install ca-certificates curl

sudo install -m 0755 -d /etc/apt/keyrings

sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc

sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:

echo \

"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \

$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \

sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt-get update

安装最新版docker

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

验证安装

sudo docker run hello-world

Nvidia-docker安装

设置apt仓库

curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \

&& curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \

sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \

sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

sudo apt-get update

安装Nvidia Container Toolkit

sudo apt-get install -y nvidia-container-toolkit

配置Docker

sudo nvidia-ctk runtime configure --runtime=docker

重启Docker

sudo systemctl restart docker

制作通用的nvidia-docker 镜像

拉取镜像

docker pull nvidia/cuda:11.4.3-cudnn8-devel-ubuntu20.04

注意拉取带cudnn,devel版本的镜像,否则没有nvcc

查看镜像id

docker images

删除镜像

docker rmi [IMAGE ID]

创建nvidia-docker 容器

sudo docker run -dit --runtime=nvidia --gpus all -p [CUSTOMIZE PORT]:22 -v /dataset:/dataset --privileged=true --name=[CONTAINER NAME] [IMAGES ID]

-dit:后台运行,分配interactive terminal--gpus:可以使用以下参数:all,none,0,1,2

查看container id

docker ps -a

进入container

sudo docker exec -it [CONTAINER ID] /bin/bash检查cuda与nvidia driver

nvcc -Vnvidia-smi

Container 操作

启动:sudo docker start [CONTAINER ID]停止:sudo docker stop [CONTAINER ID]重启:`sudo docker restart [CONTAINER ID]容器内退出:exit

配置container的ssh服务

apt-get updateapt-get install openssh-serverapt-get install openssh-clientapt-get install sshapt-get install vim

SSH配置

修改ssh文件信息,允许root用户使用ssh登录。

vim /etc/ssh/sshd_configinsert i

PermitRootLogin yes :wq

重启ssh

/etc/init.d/ssh restart

设置连接密码

passwd

%% ### 设置开机自启动SSH服务vim /root/.bashrc插入:service ssh start %%

注意:

出现现象在exec时添加进容器的环境变量在通过ssh启动时找不到,原因是exec时自动加了一些环境变量。解决方案就是改.bashrc,把丢失的环境变量加上。

vim ~/.bashrc在最后加入

export PATH="/usr/local/cuda/bin:$PATH"code>export LD_LIBRARY_PATH="/usr/local/cuda/lib64:$LD_LIBRARY_PATH"code>

安装Anaconda

首先从官网获得Anaconda for Linux的安装链接使用wget下载,wget https://repo.anaconda.com/archive/Anaconda3-2024.02-1-Linux-x86_64.sh使用bash安装,bash Anaconda3-2024.02-1-Linux-x86_64.sh将conda写入环境变量

vim ~/.bashrc插入

export PATH="~/anaconda3/bin":$PATHcode>source ~/anaconda3/bin/activate source ~/.bashrc

打包镜像

docker commit -a 'LiSH' [CONTAINER ID] [IMAGE NAME]:[VERSION]

新用户使用镜像制作自己的容器

镜像名称ubuntu20.04_cuda_11.4_cudnn8_anaconda

sudo docker run -dit --runtime=nvidia --gpus all -p [CUSTOMIZE PORT]:22 -v /dataset:/dataset --privileged=true --name=[CONTAINER NAME] ubuntu20.04_cuda_11.4_cudnn8_anaconda:v0.1

Dockerfile

# Basic Image

FROM nvidia/cuda:11.4.3-cudnn8-devel-ubuntu20.04

# Description

LABEL name="ubuntu20.04 cuda11.4 cudnn8"code>

LABEL version="1.0"code>

LABEL author="LiSH"code>

LABEL mail="li.shanghong.0222@gmail.com"code>

# Update

RUN apt-get update \

&& apt-get install -y vim \

&& apt-get install htop

# Config SSH

RUN DEBIAN_FRONTEND=noninteractive apt-get install -y openssh-server \

&& sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/g' /etc/ssh/sshd_config \

&& sed -i '$a service ssh restart' ~/.bashrc \

&& echo 'root:0222'|chpasswd

# Install Anaconda

RUN wget https://repo.anaconda.com/archive/Anaconda3-2024.02-1-Linux-x86_64.sh \

&& bash Anaconda3-2024.02-1-Linux-x86_64.sh -b -p /opt/conda \

&& sed -i '$a export PATH="/opt/conda/bin:$PATH"' ~/.bashrc \code>

&& sed -i '$a source /opt/conda/bin/activate' ~/.bashrc

# Config Cudnn

RUN sed -i '$a export PATH="/usr/local/cuda/bin:$PATH"' ~/.bashrc \code>

&& sed -i '$a export LD_LIBRARY_PATH="/usr/local/cuda/lib64:$LD_LIBRARY_PATH"' ~/.bashrc \code>

&& sed -i '$a cd /' ~/.bashrc

注意

当使用Dockerfile构建docker时,执行命令apt-get install -y openssh-server时,会安装tzdatatzdata从2018开始,安装过程采用交互式,要求指定Geographic areaTime zone解决方法:在命令前添加DEBIAN_FRONTEND=noninteractive即执行DEBIAN_FRONTEND=noninteractive apt-get install -y openssh-server

使用Dockerfile构建镜像

docker build -f Dockerfile -t [IMAGE NAME] ./

从Dockerfile构建的镜像创建容器

查看镜像docker images,获取image idsudo docker run -dit --runtime=nvidia --gpus all -p [CUSTOMIZE PORT]:22 -v /dataset:/dataset --privileged=true --name=[CONTAINER NAME] [IMAGES ID]



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。