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
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.修改环境变量
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下才可以正常进行文件的传输。