docker+jupyter配置实验室共用GPU服务器(超详细教程)

硬件配置:技嘉Turbo2 RTX3090+Ubuntu20.04LTS

安装显卡驱动

安装显卡驱动时**不要!!!!**选择长期支持版(455.23.04)

必须使用短期支持版(455.45.01)

wget https://us.download.nvidia.com/XFree86/Linux-x86_64/455.45.01/NVIDIA-Linux-x86_64-455.45.01.run
sudo sh NVIDIA-Linux-x86_64-455.45.01.run

可能会出现gcc、g++版本不一致问题导致驱动安装失败,可通过安装多个版本的gcc切换使用来解决这一问题

#首先通过正常安装命令安装自己需要的gcc、g++版本
sudo apt install gcc-10.2 g++-10.2
#将刚才安装的gcc、g++加入到alternatives中
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 100
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-8 100
#通过以下命令实现版本切换
sudo update-alternatives --config gcc
sudo update-alternatives --config g++

解决gcc、g++问题后安提示安装显卡驱动。下面禁用nouveau驱动。nouveau 是系统自带的一个显示驱动程序,需要先将其禁用,然后再进行下一步操作,否则在安装显卡驱动时,会提示:You appear to be running an X server …,然后安装失败。分别打开如下两个文件(如果没有就创建一个),并在其中输入如下两句,然后保存。

sudo vim /etc/modprobe.d/nvidia-installer-disable-nouveau.conf
sudo vim /lib/modprobe.d/nvidia-installer-disable-nouveau.conf
#将下面两句添加至文件中
blacklist nouveau
options nouveau modeset=0
安装cuda+cudnn

驱动成功安装后需要安装cuda(支持计算的框架)与cudnn(支持计算的库),与RTX3090适配的cuda为11及以上,因为截止目前最新的tensorflow-2.4.0对应cuda-11.0,所以我们安装cuda-11.0 。访问英伟达官网选择适合自己系统的版本,按照提示的命令进行下载

wget https://developer.download.nvidia.com/compute/cuda/11.2.0/local_installers/cuda_11.2.0_460.27.04_linux.run
sudo sh cuda_11.2.0_460.27.04_linux.run

执行安装命令时会出现选择安装组件的的多个选项,第一项为显卡驱动(上一步已安装),将[X]去掉,后几项可以全部选择,最后选择install。等待几十秒出现成功的界面。

环境变量!!环境变量!!环境变量!!

一定要注意有两个环境变量文件PATHLD_LIBRARY_PATH

#打开环境变量配置文件
sudo vim /etc/profile
#添加下面两句
export PATH=/usr/local/cuda-版本号/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-版本号/lib64:$LD_LIBRARY_PATH
#退出后使用下面命令刷新环境变量
source /etc/profile
#输入下列命令如果可以看到cuda版本号则说明环境变量配置成功
nvcc -V

检测cuda与显卡驱动是否可以联动完成计算任务

#进入下面文件夹
cd /usr/local/cuda-版本号/samples/1_Utilities/deviceQuery
#使用make命令编译
sudo make
#执行
./deviceQuery

查看输出最后一行为PASS说明运行通过。

下面安装cudnn8.0.2,需要使用英伟达账号在官网下载。

tar -zxvf cudnn-11.1-linux-x64-v8.0.2.39.tgz       # 首先解压文件
sudo cp cuda/lib64/* /usr/local/cuda-11.0/lib64/        # 拷贝lib64下的配置文件
sudo cp cuda/include/* /usr/local/cuda-11.0/include/    # 拷贝include下的.h文件
sudo chmod a+r /usr/local/cuda-11.0/include/cudnn.h /usr/local/cuda-11.0/lib64/libcudnn*

检测cudnn是否安装成功,执行下列命令,有返回值说明成功。

cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
安装docker
#使用 apt-get 进行安装
# step 1: 安装必要的一些系统工具
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
# step 2: 安装GPG证书
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# Step 3: 写入软件源信息
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# Step 4: 更新并安装Docker-CE
sudo apt-get -y update
sudo apt-get -y install docker-ce
 
# 安装指定版本的Docker-CE:
# Step 1: 查找Docker-CE的版本:
# apt-cache madison docker-ce
#   docker-ce | 17.03.1~ce-0~ubuntu-xenial | https://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages
#   docker-ce | 17.03.0~ce-0~ubuntu-xenial | https://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages
# Step 2: 安装指定版本的Docker-CE: (VERSION例如上面的17.03.1~ce-0~ubuntu-xenial)
# sudo apt-get -y install docker-ce=[VERSION]

安装完成后测试docker是否可用,执行下面命令无报错,显示hello-world的字样表示docker成功安装。

sudo docker run hello-world

下面是一些常见的docker命令。

image,镜像,是一个个配置好的环境。 container,容器,是image的具体实例。 image和container的关系,相当于面向对象中类与对象的关系。

如何查询命令参数: docker可以看docker客户端有那些基本命令; 对应每一条命令,想看看具体是做什么的,可以在后面加一个--help查看具体用法,例如对于run命令: docker run --help

#创建某个镜像的容器。注意,同一个镜像可以通过这种方式创建任意多个container. 加上-it之后,可以创建之后,马上进入交互模式。
docker run [-it] some-image
#列出当前运行中的容器
docker ps
#列出所有容器
docker ps -a
#删除某个容器
docker rm [-f] container-id
#启动某个容器,必须是已经创建的。 加上-i 参数之后,可以直接进入交互模式
docker start [-i] container-id
#容器的停止、重启
docker stop container-id 
docker restart container-id

进入交互模式后如何退出,分两种情况。

#想退出但是保持容器运行
CTRL+P+Q
#关闭容器并退出
CTRL+D 或 exit
安装nvidia-docker
# add the package repositories
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)      #查询当前系统版本
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list

sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
sudo systemctl restart docker

检测安装是否成功

docker run --gpus all nvidia/cuda:11.0-base nvidia-smi
Pull镜像

Deepo 是一系列 Docker 镜像,它的主要特征有:

  • 允许我们快速配置深度学习环境
  • 支持几乎所有常见的深度学习框架
  • 支持 GPU 加速(包括 CUDA 和 cuDNN), 同样在 CPU 中运行良好
  • 支持 Linux(CPU 版和 GPU 版)、OS X(CPU 版)、Windows(CPU 版)
docker pull ufoym/deepo

现有deepo镜像没有适配cuda11.0的,所以需要自己制作镜像。

下载已有cuda11.0的镜像或者nvidia/cuda:11.0官方的镜像,下载后在里面安装对应版本的tensorflow跟常用的第三方包,然后把容器打包成镜像。

docker commit container-ID Image-name
上传镜像到自己的仓库
docker tag friendlyhello username/repository:tag

friendlyhello #为app的名称

username:你注册的docker的名字

repository:你建立的docker镜像的仓库

tag:应用打一个标记号,版本的变迁

#上传
docker push username/repository:tag
启动jupyter分配容器
#创建容器
sudo nvidia-docker run -it -p 7777:8888 --ipc=host -v /home/shcd/Documents/zjg:/zjg --name zjg-notebook  90be7604e476
OR
sudo docker run -it -p 7777:8888 --ipc=host -v /home/shcd/Documents/zjg:/zjg --name zjg-notebook  90be7604e476

其中: - -it为直接进入交互式 - -p 7777:8888是把主机的7777端口映射到容器的8888端口 - -ipc=host可以让容器与主机共享内存 - 还可以加一个--name xxxxx给容器定义一个个性化名字 - -v /home/shcd/Documents/zjg:/zjg可以讲主机上的/home/shcd/Documents/zjg地址挂载到容器里,并命名为/data文件夹,这样这个文件夹的内容可以在容器和主机之间共享了。因为容器一旦关闭,容器中的所有改动都会清除,所以这样挂载一个地址可以吧容器内的数据保存到本地。 - 90be7604e476则是你安装的jupyter镜像的id,可以在刚刚docker images命令后面查看,当然你也可以直接写全名ufoym/deepo:all-py36-jupyter

jupyter notebook --no-browser --ip=0.0.0.0 --port 8888 --allow-root --NotebookApp.token= --notebook-dir='/zjg'

其中: --no-browser即不通过浏览器启动,--ip指定容器的ip,--allow-root允许root模型运行 --NotebookApp.token可以指定jupyter 登录密码,可以为空 --notebook-dir='/gby'指定jupyter的根目录

未解决问题

因为目前只有一块显卡,显卡性能可以自动按需分配,但是显存只有24G无法按需分配,在使用时,需要在程序一开始添加下面三行代码!!!!

import tensorflow as tf
config = tf.compat.v1.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.25
session = tf.compat.v1.Session(config=config)

可以看到每人分配了25%,这意味着每个人只能开一个jupyter的代码标签页并设置为25%,或者开N个jupyter标签页自行分配25%,每个标签页设置为(25/N)%。

如果占用了过大的显存,程序运行时不仅不会快,还会把时间浪费在分配显存上,导致程序运行变慢。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在Docker配置JupyterHub,您可以按照以下步骤进行操作: 1. 首先,确保您已经安装了DockerDocker Compose。如果没有,请先安装它们。 2. 创建一个名为`jupyterhub`的文件夹,并在其中创建一个名为`Dockerfile`的文件。 3. 在`Dockerfile`中添加以下内容: ```Dockerfile FROM jupyterhub/jupyterhub:1.4 # 安装 JupyterHub 的依赖包 RUN pip install jupyterhub-dummyauthenticator # 添加自定义配置文件 COPY jupyterhub_config.py /srv/jupyterhub/jupyterhub_config.py ``` 这个Dockerfile基于官方的JupyterHub镜像,并安装了一个名为`jupyterhub-dummyauthenticator`的虚拟认证器,以便在测试环境中使用。您可以根据需要更改认证器。 4. 在`jupyterhub`文件夹中创建一个名为`jupyterhub_config.py`的文件,并添加您的JupyterHub配置。例如: ```python c.JupyterHub.authenticator_class = 'dummyauthenticator.DummyAuthenticator' c.JupyterHub.spawner_class = 'dockerspawner.DockerSpawner' .DockerSpawner.image = 'jupyter/scipy-notebook' c.DockerSpawner.remove_containers = True # 添加其他配置选项... ``` 这里使用了`dummyauthenticator`作为虚拟认证器,并使用了`dockerspawner`作为启动器。您可以根据需要添加其他配置选项。 5. 确保您在`jupyterhub`文件夹中有一个名为`jupyterhub_config.py`的配置文件和一个名为`Dockerfile`的Docker文件。 6. 打开终端,导航到`jupyterhub`文件夹,并构建Docker镜像: ``` docker build -t jupyterhub-image . ``` 这会构建一个名为`jupyterhub-image`的Docker镜像。 7. 创建一个名为`docker-compose.yml`的文件,并添加以下内容: ```yaml version: '3' services: jupyterhub: image: jupyterhub-image ports: - 8000:8000 volumes: - /var/run/docker.sock:/var/run/docker.sock ``` 这个`docker-compose.yml`文件定义了一个名为`jupyterhub`的服务,使用之前构建的Docker镜像,并将主机的8000端口映射到容器的8000端口。 8. 在终端中导航到包含`docker-compose.yml`文件的目录,并运行以下命令启动JupyterHub: ``` docker-compose up -d ``` 现在,您应该可以通过访问`http://localhost:8000`来访问JupyterHub。 请注意,这只是一个简单的示例配置。根据您的需求,您可能需要进行更多的配置和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值