实验室多人共享GPU服务器搭建指南(更新ing)

1.服务器参数设置

1.1实验室服务器参数

操作系统 Ubuntu 20.04 LTS
系统挂盘:SSD (2×960GB)为Raid1、STAT(2×10T)为Raid0
什么是raid0、raid1、raid5、raid10?需要几块硬盘?
linux安装nvidia驱动必备(笔者实验室的GPU服务器交货时已安装驱动,不再详述)
Ubuntu20.04安装Nvidia驱动——4060显卡(黑屏解决方法)
1.首先禁用Nouveau(Ubuntu安装显卡驱动详细步骤)

1.2 宿主机属性及内核设置

【Ubunut换源】

cp /etc/apt/sources.list /etc/apt/sources.list.bak
rm /etc/apt/sources.list
vim /etc/apt/sources.list

修改
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu/ focal-security main restricted universe multiverse

【修改ubuntu主机名】
ubuntu系统修改主机名和用户名教程_ubuntu系统怎么改用户名_搜索:蓝易云的博客-CSDN博客

#	查看主机名
hostname	
# 使用root权限修改主机名,输入以下命令(将"new_hostname"替换为您想要设置的新主机名)
sudo hostnamectl set-hostname new_hostname
# 重新启动系统以使新主机名生效
sudo reboot

【禁止Ubuntu20.04重启时内核升级】
Ubuntu20.04重启禁止内核升级的解决方案-云社区-华为云

1.3 硬盘挂载

硬盘挂载 sudo mount /dev/sdb /mnt/data,用户的数据代码文件夹、docker镜像容器文件夹均可配置在挂载目录下
Linux 挂载磁盘详解及实操步骤_linux挂载磁盘_大家都说我身材好的博客-CSDN博客
Ubuntu 挂载新硬盘

# 查看现磁盘使用情况,查看电脑挂载的硬盘
df -h 
fdisk -l
lsblk
# 挂载顺序:参考链接
# 分区(非必须)——>创建ext4文件系统——>目录挂载——>开机自动挂载
# 修改/etc/fstab,开机自动挂载,添加
vim /etc/fstab
修改:
UUID=ea783de6-725c-8526-19c3-1fa6a75bc102 /mnt/data       ext4    defaults        0       2
# 修改/etc/fstab文件生效
sudo mount -a

# 问题:mount挂载不上,不提示任何信息,查看 /etc/fstab
vim /etc/fstab

2. docker安装及设置

2.1 docker好处

首先要查看服务器中显卡驱动支持的最大cuda版本。在服务器中输入:nvidia-smi,得到最大cuda版本信息。使用docker主要是因为与主机性能区别不大,且配置简单,只需要安装GPU驱动,不用考虑安装Pytorch指定的CUDA,cuDNN等(容器内部已有)。
部分参考:
使用Docker搭建实验室共享GPU服务器_docker 共享 1080 gpu_寻陌千的博客-CSDN博客
Docker搭建实验室GPU服务器环境_https://blog.csdn.net/hangvane123/article/details/_Neflibatata的博客-CSDN博客

2.2 docker、nvidia-container-toolkit安装

参考:Install Docker Engine on Ubuntu
【docker 安装】

sudo apt-get remove docker docker-engine docker.io containerd runc

sudo apt-get update
sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

sudo mkdir -m 0755 -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

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

# sudo apt-get install nvidia-container2 废弃
sudo docker run hello-world
sudo systemctl restart docker

【nvidia-container-toolkit 安装】

distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
      && 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/$distribution/libnvidia-container.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
sudo apt-get install -y nvidia-container-toolkit

【nvidia docker,nvidia docker2,nvidia container toolkits区别】
nvidia docker, nvidia docker2, nvidia container toolkits三者的区别_nvidia-docker2_yang jiaye的博客-CSDN博客

2.3 docker设置

【docker 软链接修改默认镜像容器存储位置】
为避免镜像及容器的空间占用,修改到了硬盘挂载目录下
修改 Docker 镜像默认存储位置的方法-腾讯云开发者社区-腾讯云

# 查看默认存放位置 /var/lib/docker
docker info | grep "Docker Root Dir"
# 停掉Docker服务 
service docker stop
# 移动原有的内容,/data 为硬盘挂载点
mv /var/lib/docker /mnt/data/docker
# 进行链接 
ln -sf /mnt/data/docker /var/lib/docker
# 重启Docker服务
systemctl restart docker

2.4 docker组

# 加入docker组,以允许非root用户免sudo执行docker命令
sudo gpasswd -a 用户名 docker
# 如果不重启并重连ssh客户端的话,需要手动重启服务并刷新docker组成员
sudo service docker restart
newgrp - docker

2.5 docker资源

【dockerhub】
https://hub.docker.com/r/nvidia/cuda/tags?page=3&name=ubuntu20.04
【Nvidia NGC】
优势!!! nvidia ngc包含了cuda、pytorch、tensorrt预置内容,包含conda、pip等工具都装好了,选择container版本就是它的base环境。
Data Science, Machine Learning, AI, HPC Containers | NVIDIA NGC
【Nvidia container镜像版本与cuda、pytorch版本对应关系】
PyTorch Release 21.12 - NVIDIA Docs
image.png

2.6 docker实用命令

查看所有镜像					docker images
查看所有容器 				docker ps -a
删除容器       				docker rm -f  [容器名/容器ID]
查看正在运行的容器 			docker ps
启动一个停止的容器 			docker start [容器名/容器ID]
进入容器						docker exec -it [容器名/容器ID] /bin/bash


将已有容器保存为镜像文件(container:已有容器,image_new:新生成的镜像) 
docker commit container image_new 

通过镜像新建容器时实现端口映射,将容器内的1935端口映射到主机的1936端口,将容器的8554端口映射到8556端口
docker run --gpus all -it --name env_trt -p 1936:1935 -p 8556:8554 -v $(pwd):/app env_trt_img


显示Docker容器和物理主机挂载目录信息    
docker inspect -f "{{.Mounts}}" ContainerID

将容器成为一个镜像:docker commit【制作镜像】→docker save【镜像保存为文件】
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
【OPTIONS】说明
-a :提交的镜像作者;
-c :使用Dockerfile指令来创建镜像;
-m :提交时的说明文字;
-p :在commit时,将容器暂停。
如:docker commit -a 作者 -m 为新镜像提交说明文字 容器ID 新镜像名称:版本号
    docker commit -a "znn" -m "新建docker镜像" a4xx mymysql:v1

创建容器
docker run -it -v /heop/hik/:heop/hik/ --name hik_hanx --cap-add=ALL --entrypoint="/bin/sh" hikapp_pack:v1.0.1 -c "bash"78

显示Docker容器和物理主机挂载目录信息    
docker inspect -f "{{.Mounts}}" 369a1376f78c

将容器成为一个镜像:docker commit【制作镜像】→docker save【镜像保存为文件】

将宿主机上的目录/mydata挂载到容器内的/data目录上,则命令为:
    docker run -v /mydata:/data -it ubuntu:latest bash

nvidia-docker配置深度学习环境服务器(cuda+cudnn+anaconda+python)_冰雪棋书的博客-CSDN博客

3. 用户管理

3.1 添加用户、删除用户

  • adduser:在创建时会自动为用户指定主目录、系统shell版本,会在创建时输入用户密码。
  • useradd:需要使用参数选项指定主目录、系统shell版本、密码等,如果不使用任何参数,则创建的用户无密码、无主目录、没有指定shell版本。
【添加用户】
sudo useradd -d "/mnt/data/mafei" -m -s "/bin/bash" mafei 
sudo passwd mafei

【删除用户】
sudo userdel -r mafei
username是指用户名;比如用户名是zhangsan,现在需要删除他:sudo userdel -r zhangsan
【查看系统有哪些用户】
cat /etc/passwd

Ubuntu新建用户并指定目录_51CTO博客_linux创建用户并指定目录
Linux useradd 命令 | 菜鸟教程

3.2 用户组、用户权限设置

# 查看系统中所有的用户组及其对应的成员
cat /etc/group
# 查看指定用户组的信息,包括组名、组ID(GID)以及属于该组的用户列表
getent group 组名


# 加入组长项目组
sudo gpasswd -a 用户名 mafei
# 如果不重启并重连ssh客户端的话,需要手动重启服务并刷新组成员
sudo service docker restart
newgrp - docker

4. 用户使用手册

4.1 基础设置

登录软件:ssh软件、xshell、mobaxterm等
个人文件夹权限设置
用户组group添加成员,主要由项目组长添加,方便组内成员交换文件

4.2 环境配置,生成容器

# 通过netstat命令查看端口占用情况
netstat -apn | grep LISTEN
# 通过lsof命令查看端口占用情况,生成容器不要产生端口冲突
sudo lsof -i :端口号


# 根据docker镜像生成docker容器
# $(pwd):/app 表示把当前host工作路径挂载到容器的/app目录下
# --name env_pyt_1.12 表示容器的名称是env_pyt_1.12
docker run -d --gpus all -it --restart=always --name env_mafei -p 2345:22 -v /mnt/data/mafei/workspace:/workspace nvcr.io/nvidia/pytorch:22.03-py3

-d 容器保持后台运行
-p 2345:22 容器22端口映射到宿主机2345端口
-i, --interactive=false, 打开STDIN,用于控制台交互
-t, --tty=false, 分配tty设备,该可以支持终端登录,默认为false
–name=env_mafei 命名容器
–privileged 以特权模式启动,容器内能访问操作宿主机设备,如mininet等需要控制网卡等类似的应用需要
–restart=always docker启动后(如宿主机断电重启)自动启动容器
-v /home/docker-common-dir:/home/common-dir 将宿主机/home/docker-common-dir映射到容器/home/common-dir,一般用于共享目录
–restart=“no”, 指定容器停止后的重启策略
no:容器退出时不重启
on-failure:容器故障退出(返回值非零)时重启
always:容器退出时总是重启

【连接容器】
SSH 远程连接docker容器

远程操作服务器时的bash: conda: command not found_pycharm bash: conda: command not found_影子里的风的博客-CSDN博客

4.3 容器打包镜像

4.4 分配容器步骤

# 运维人员收到container版本需求,如下操作:
# 生成容器
netstat -apn | grep LISTEN
# 通过lsof命令查看端口占用情况,生成容器不要产生端口冲突
sudo lsof -i :端口号
docker run -d --gpus all -it --restart=always --name env_用户名 -p 端口号:22 -v /mnt/data/用户名/workspace:/workspace 镜像文件(如nvcr.io/nvidia/pytorch:22.03-py3)

# 进入容器
docker exec -it env_mafei /bin/bash
# 增加密码123456
passwd

# 换源20.04
cp /etc/apt/sources.list /etc/apt/sources.list.bak
rm /etc/apt/sources.list
vim /etc/apt/sources.list

修改
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu/ focal-security main restricted universe multiverse

# 安装ssh,开启ssh,分步骤执行
apt update
apt-get install openssh-server
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
rm /etc/ssh/sshd_config
vim /etc/ssh/sshd_config

修改
  PermitRootLogin yes # 可以登录 root 用户
  PubkeyAuthentication yes # 可以使用 ssh 公钥许可 
  AuthorizedKeysFile	.ssh/authorized_keys  
  UsePAM no 

# sshd_config实际有效内容
Include /etc/ssh/sshd_config.d/*.conf
# 可以登录 root 用户
PermitRootLogin yes	
# 可以使用 ssh 公钥许可
PubkeyAuthentication yes 
# 公钥信息保存到文件 .ssh/authorized_keys 中
AuthorizedKeysFile	.ssh/authorized_keys .ssh/authorized_keys2
ChallengeResponseAuthentication no
UsePAM no
X11Forwarding yes
PrintMotd no
AcceptEnv LANG LC_*
Subsystem	sftp	/usr/lib/openssh/sftp-server

# 重启ssh
service ssh restart

# 给用户登录地址
地址:ssh root@宿主机IP -p 端口号
密码:123456
文件代码保存路径(docker重启文件消失):/workspace

注意

  1. 重启容器导致软件安装出现问题,解决办法保存运行时容器作为镜像文件。
# 普通用户收到登录地址,如下操作
# 1.修改环境变量
vim ~/.bashrc
# 修改:环境变量加在该句前(第四句 # If not running interactively, don't do anything)
  export LD_LIBRARY_PATH=/usr/local/cuda/lib
  export PATH=$PATH:/usr/local/cuda/bin
  export PATH=$PATH:/opt/conda/bin
source ~/.bashrc
# 2.改容器密码
passwd
# 3.更换anaconda、pip源等

注意:
# 1.代码数据文件保存路径 /workspace,如保存在其他文件夹会造成丢失
# 2.重启ssh连接
# service ssh restart
# 3.勿使用exit命令,会重启容器

5. 服务器报错信息汇总

5.1 nvidia-smi 报错:无法与 nvidia driver 通信

NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. 
Make sure that the latest NVIDIA driver is installed and running.

nvidia-smi 报错:无法与 nvidia driver 通信

5.2 报错

Error response from daemon: Get "https://nvcr.io/v2/": tls: failed to verify certificate: x509: certificate is valid for s-core.shiseido.co.jp, not nvcr.io

三步解决Docker拉取镜像报错:x509: certificate has expired or is not yet v…-腾讯云开发者社区-腾讯云
更新同步时间

# 查看当前时间
date

# 安装ntpdate
sudo apt update
sudo apt install ntpdate

# 更新同步时间
ntpdate cn.pool.ntp.org

5.3 permission denied

MobaXterm自带sftp,可以非常方便的查看Linux机器上的文件,支持拖拽上传文件,但是上传文件时经常会出现Error #3(/npx.cmd):Permission denied
这是因为我们通过这个软件访问的时候有权限的文件夹只开放了/tmp这个目录,需要将目录切换到/tmp下才可以正常进行文件的传输。

  • 2
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
slurm-gpu集群搭建是一种用于创建高性能计算环境的解决方案,它能够有效地利用多个GPU来加速任务执行。以下是关于如何搭建slurm-gpu集群的简要步骤: 1. 购买所需硬件:首先,您需要购买足够数量的GPU服务器和交换机来组成集群。确保GPU服务器的型号和配置都兼容并且能满足您的计算需求。 2. 安装并配置操作系统:在每个服务器上安装您选择的操作系统,并确保操作系统和组件的版本兼容。建议选择一个常用的Linux发行版,如Ubuntu或CentOS。 3. 安装Slurm:使用包管理器或从源代码编译安装Slurm调度系统。Slurm是一个开源的高性能计算和作业调度系统,为集群提供了任务分配和管理功能。 4. 配置Slurm集群:编辑Slurm配置文件以设置集群的参数,例如节点名称、队列配置、资源限制等。确保每个节点都被正确地添加到Slurm的集群配置中。 5. 安装GPU驱动程序:为每个服务器上的GPU安装正确的驱动程序,并确保它们在操作系统中正确识别和配置。 6. 测试和优化:在完成集群配置后,进行一些基准测试,以确保GPU可以被正确地调用和使用。优化Slurm和GPU驱动程序的配置,以最大程度地提高集群的性能。 7. 添加用户和作业:为集群上的用户创建账户,并允许他们提交作业。根据需要,在Slurm中配置用户权限和资源限制。 总结:通过购买适当的硬件,安装并配置操作系统、Slurm和GPU驱动程序,以及进行测试和优化,您可以成功地搭建一个slurm-gpu集群。此集群能够高效地利用多个GPU来加速计算任务的执行,为您提供一个强大的计算环境。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值