服务器安装与使用
文章目录
一、镜像与容器,容器与虚拟机的区别:
镜像与容器:
个人理解,镜像就像是一个安装好的软件(静态),容器则是运行中的软件(动态),一个软件可以多开几个分身。比如电脑上安装了一个QQ软件,打开QQ软件,登上A账号,即是一个运行中的QQ,此外,还可以登录上B账号。所以,安装好但没有运行的QQ软件可以看作是一个镜像,而登上了AB账号的QQ则是容器。也可以这么理解,镜像是类,容器是实例对象。
容器与虚拟机:
容器是轻量级的系统,是一个极其精简的系统。它只是运行在宿主机上的一种特殊的进程,多个容器之间使用的还是同一个宿主机的操作系统内核。容器可以看成一个装好了一组特定应用的虚拟机,它直接利用了宿主机的内核,抽象层比虚拟机更少,更加轻量化,启动速度极快。
虚拟机会将虚拟硬件、内核(即操作系统)以及用户空间打包在新虚拟机当中,虚拟机能够利用“虚拟机管理程序”运行在物理设备之上。
在占用内存方面,容器只占用少量内存,而虚拟机会占用大量内存。
二、服务器使用:
1、账户
服务器系统里边没有自己的账户的,自己添加,并添加sudo权限,加入docker用户组。可参考附录的linux命令。
2、列出已拉取的镜像(各镜像环境版本说明在后面)
(base) lxg@lab:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
lab 506 3516eef7b45b 6 hours ago 20.4GB
yy_env 1.0 7cc0c38f13cb 2 days ago 4GB
nvidia/cuda 11.2.0-devel-ubuntu20.04 4efde6cef680 2 months ago 4.09GB
nvidia/cuda 10.2-devel-ubuntu18.04 f96fc4ccf322 2 months ago 3.07GB
3、容器使用
3.1服务器里边没有自己容器的,首先需要从镜像启动一个新的容器
docker run -itd -p 1008:22 --gpus all --name lxg lab:506
# 建议使用此镜像conda/nvidia/cuda:2.0
说明:docker run是运行镜像的命令,参数 -itd 是以交互的方式进行且是以后台的方式启动,d也可去掉,-p 1008:22 是设置启动新容器的端口映射(我们使用pycharm远程连接,所以需要设置端口映射,可自行设置,如555:22。每人的端口设置应不一样,后面的22应该一样),--gpus all 是设置gpu可用系统内的所有gpu,lab:1.0 是说明从这个镜像启动的新容器,--name lxg是给新启动的容器起一个名字,方便辨别。更多参数看docker run –help。
3.2服务器里边已有容器的
# 查看容器是否在运行中
docker ps
//若在运行中,则docker exec [container_id];
//若不在运行中,查看系统中所有容器,找到自己的容器id,启动,再进入。
docker ps -a
docker start [container_id] 或者NAMES
docker exec -it [container_id] 或者NAMES /bin/bash
3.3注意
# 容器停止后,再次启动容器,需要开启ssh服务,及激活环境
sudo service ssh start
source activate
3.4在容器中时,可按ctrl + P + Q 不停止退出。
4、Visual Studio Code连接
vscode连接相比pycharm连接优点:
(1)、支持从本地拖放文件上传到容器中
(2)、点击可以跳转到容器里边的代码,而pycharm无法跳转到环境下的源码。
参考https://blog.csdn.net/qq_38113006/article/details/105569857?utm_term=vscode%E8%BF%9E%E6%8E%A5ssh&utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2allsobaiduweb~default-1-105569857&spm=3001.4430
三、镜像说明
(base) lxg@lab:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
lab 506 3516eef7b45b 6 hours ago 20.4GB
yy_env 1.0 7cc0c38f13cb 2 days ago 4GB
nvidia/cuda 11.2.0-devel-ubuntu20.04 4efde6cef680 2 months ago 4.09GB
nvidia/cuda 10.2-devel-ubuntu18.04 f96fc4ccf322 2 months ago 3.07GB
A、yy_env:1.0
此镜像是个人私人制作的镜像
B、nvidia/cuda: 11.2.0-devel-ubuntu20.04
此镜像是从docker-hub拉取的官方nvidia/cuda镜像,镜像包含了cuda11.2。里边极其精简,可根据需要从0开始自行配置。
C、nvidia/cuda: 10.2-devel-ubuntu18.04
此镜像是从docker-hub拉取的官方nvidia/cuda镜像,镜像包含了cuda10.2。里边极其精简,可根据需要从0开始自行配置。
D、lab:506
此镜像是我们使用的基础镜像,是由nvidia/cuda: 11.2.0-devel-ubuntu20.04配置而来,安装了conda环境,可根据需要自己安装需要的conda环境。
# 1、账号说明:
里边有两个账号:root 和 self。密码都是123456。self已添加sudo权限
# 2、环境说明:
A、nvcc -V:cuda11.2
self@0ca4df508561:~$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2021 NVIDIA Corporation
Built on Sun_Feb_14_21:12:58_PST_2021
Cuda compilation tools, release 11.2, V11.2.152
Build cuda_11.2.r11.2/compiler.29618528_0
B、ssh服务已安装
但容器停止后,再次进入容器,需要开启。Sudo service ssh start
C、apt环境源(cat /etc/apt/sources.list)
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
D、除了C中的国内源,文件/etc/apt/sources.list.guangfang则是官方源
# 3、anaconda环境说明:
在self账号下创建了名为torch的环境,可根据需要自己创建环境。
torch1.8环境下安装的pytorch版本安装命令是:
conda install pytorch==1.8.1 torchvision==0.9.1 torchaudio==0.8.1 cudatoolkit=10.2 -c pytorch
注意:当安装其他版本的pytorch的时候,选择cuda10.2的。其他cuda版本的torch.cuda.is_available的输出结果可能是False。
# torch环境说明:
python版本:3.7
torch版本:1.8.1
torchvision版本:0.9.1
# conda下载源(cat /home/self/.condarc):
channels:
- http://mirrors.ustc.edu.cn/anaconda/pkgs/free/
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
- defaults
show_channel_urls: true
四、注意事项汇总:
# 1、nvcc -V 提示找不到命令。
a) 这种情况下其实是没有设置好环境变量导致的。
b) 两种解决办法:
① 在当前用户下,修改/home/username/.bashrc文件。这种修改方法仅对当前用户生效。
② 在root用户下,修改/etc/bash.bashrc文件。这种修改方法对所有用户生效。
修改内容为,在上述两个文件内容的末尾添加一下内容(cuda-11.2是安装的cuda版本):
export PATH=/usr/local/cuda-11.2/bin/:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-11.2/lib64:$LD_LIBRARY_PATH
修改完成之后,执行:source /etc/bash.bashrc 或者 source /home/username/.bashrc
# 2、使用conda activate 报错:CommandNotFoundError: Your shell has not been properly configured to use 'conda activate'.
To initialize your shell, run
解决方案:执行:source activate
# 3、conda未找到命令:
a) 这种情况是未设置conda的环境变量
b) 解决办法,修改/home/self/.bashrc文件
修改内容:
vim /home/self/.bashrc //打开.bashrc文件
在最后加入:
export PATH=/home/self/anaconda3/bin:$PATH
退出环境,并激活环境:
source ~/.bashrc
source activate
# 4、关于容器的远程连接问题:
a) 容器停止之后,再次进入容器,需要手动开启ssh服务,service ssh start,无法设置容器自动启动ssh服务。
b) 重新进入容器,进入到self账户下,也需要执行:source activate,不然conda命令无法使用。
# 5、进入容器有两种方法,一种是从镜像运行一个新容器,从而进入容器;另一种是进入一个已有的容器。所以,需要注意,自己开启了多少容器。毕竟容器占用还是挺大的。
五、docker命令
# 1、docker服务重启
# 守护进程重启
sudo systemctl daemon-reload
# 重启docker服务
sudo systemctl restart docker
5.1、镜像使用
# 1、列出镜像列表
docker images
# 2、获取镜像(若本地不存在,从docker_hub上下载)
docker pull [image_name]
# 3、查找镜像
docker search [image_name]
# 4、删除镜像
docker rmi [image_name]
# 5、创建镜像,有两种方法
# 1、dockerfile文件创建
# 2、把容器打包成镜像。在宿主机使用命令方式,或者退出容器后执行命令:
docker commit -a="lxg" -m="安装了anaconda的nvidia/cuda镜像" a1691b4c3b10 conda/nvidia/cuda:1.0
参数解释:命令为commit,-a为作者,-m为描述信息,a1691b4c3b10为要打包成镜像的容器id,conda/nvidia/cuda是镜像名,1.0是版本号。
# 6、构建镜像
我们使用命令 docker build , 从零开始来创建一个新的镜像。为此,我们需要创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像。
# 7、设置镜像标签
docker tag 860c279d2fec runoob/centos:dev
# 8、导出导入镜像
docker save image_id >xxxx.tar //导出镜像
docker load < xxxx.tar //导入镜像
# 9、给镜像重命名
docker tag image_id name:tag
5.2、 容器使用
# 1、使用镜像启动新容器
docker run -it -p 999:22 --gpus all nvidia/cuda:11.2.0-devel-ubuntu20.04
# 2、启动已停止的容器,docker start
# 先查看有哪些容器
docker ps -a
# 使用docker start启动一个已停止的容器
docker start container_id
# 3、停止容器,docker stop
docker stop container_id
# 4、进入容器,docker exec
docker exec -it 243c32535da7 /bin/bash
# 5、导出容器,docker export
docker export container_id > xxx.tgz
# 6、导入容器,docker import
cat xxx.tgz | docker import - xxx:new
# 7、删除容器
docker rm -f container_id
# 8、查看容器端口映射情况
docker port container_id
# 9、退出容器
在容器内输入:exit
# 10、杀死容器
docker kill container_id
# 11、查看容器占用磁盘大小
docker system df
# 11、查看单个镜像、容器占用磁盘大小
docker system df -v
# 12、给容器改名字,方便辨认
docker rename old_name newname
docker ps 会看到最后一列NAMES
# 13、导入导出容器
docker export container_id > xxxx.tar
docker import xxxx.tar
六、linux命令
6.1、基础命令
ls dir # 列出文件夹dir下的文件和文件夹
cd path # 切换到路径path
mkdir name # 新建名为name文件夹
cp -R dir_name dir_name # 复制文件夹
co file_name path # 复制文件
rm file_name # 删除文件
rm -rf dir_name # 删除文件夹
6.2、用户命令
# 1、创建用户
adduser [username] //会自动为创建的用户指定主目录、系统shell版本,会在创建时输入用户密码。
useradd [username] //需要使用参数选项指定上述基本设置,若不使用任何参数,则创建的用户无密码、无主目录、没有指定shell版本。
# 2、给用户添加sudo权限
1、安装sudo
a) apt-get update
b) apt install sudo
2、修改 /etc/sudoers 文件
vim /etc/sudoers
修改成:
# User privilege specification
root ALL=(ALL) ALL
db ALL=(ALL) ALL
保存退出,db用户就拥有了root权限。
# 3、加入用户组
sudo usermod -aG docker lab # lab是用户名,docker是用户组
# 4、删除用户
userdel -r username
6.3、输出命令
# 把文本内容写进文件
echo [] > filename
> 是覆盖写
>> 是追加写
cat xxx.txt >aaa.txt
6.4、vim命令
1、i 进入插入编辑模式
2、esc 退出编辑模式
3、:wq! 保存退出
6.5、磁盘命令
# 1、查看挂载磁盘使用情况
df -h
# 2、查看文件夹大小
du -sh [dir]
# 3、查看各磁盘大小
sudo fdisk -l
# 4、挂载ntfs硬盘
1、下载:wget http://tuxera.com/opensource/ntfs-3g_ntfsprogs-2013.1.13.tgz
2、解压:tar -xvf ntfs-3g_ntfsprogs-2013.1.13.tgz
3、cd ntfs-3g_ntfsprogs-2013.1.13
./configure
4、make && make install安装即可
5、安装完之后,然后输入mkn,按两次tab键,你就会发现mknfs这个命令了,表示已支持mknod mkntfs 这时服务器支持NTFS文件系统了
6、挂载硬盘:mount -t ntfs-3g /dev/sdb1 /mnt/usb
7、df -h 显示挂载磁盘信息,若出现了/dev/sdb1则说明挂载成功
8、卸载硬盘:umount /dev/sdb1
注意:会有个sdb的,这个是设备符,要挂载的是分区符,所以是sdb1。
若是挂载失败说,已经打开或者已经挂载,则:
1、fuser -a /dev/sdb1 //列出使用该硬盘的进程,然后kill掉即可
2、卸载硬盘再挂载硬盘
# 5、挂载fat硬盘
mount -t vfat /dev/sdb1 /mnt/usb
# 6、查看各文件夹大小,查看path目录下各文件夹大小
cd path
du -sh *
七、conda命令
# 创建环境:
conda create –name torch python==3.7
# 删除环境
conda remove -n torch --all
# 切换环境
conda activate py37
八、rsync使用
rsync是一个可以增量传输的工具,且可以在linux与linux之间进行文件传输,速度快,稳定,备份文件的好工具。
基本命令 rsync [option] [source_dir] [target_dir]
# 1、本地同步文件
rsync -rtv -P /home/lxg/data/ /home/lxg/dataset
# 2、远程服务器之间同步文件 把本地data下的文件传到远程服务器上
rsync -avztrv -P /home/lxg/data/ lxg@172.16.73.82:/home/lxg/3/1
# Linux下处理ssh连接出现Are you sure you want to continue connecting (yes/no)提示
echo '
Host *
StrictHostKeyChecking no
UserKnownHostsFile=/dev/null' >>/home/share/.ssh/config
选项参数:
-v:显示rsync过程中详细信息。可以使用"-vvvv"获取更详细信息。
-P:显示文件传输的进度信息。(实际上"-P"="--partial --progress",其中的"--progress"才是显示进度信息的)。
-n --dry-run :仅测试传输,而不实际传输。常和"-vvvv"配合使用来查看rsync是如何工作的。
-a --archive :归档模式,表示递归传输并保持文件属性。等同于"-rtopgDl"。
-r --recursive:递归到目录中去。
-t --times:保持mtime属性。强烈建议任何时候都加上"-t",否则目标文件mtime会设置为系统时间,导致下次更新
:检查出mtime不同从而导致增量传输无效。
-o --owner:保持owner属性(属主)。
-g --group:保持group属性(属组)。
-p --perms:保持perms属性(权限,不包括特殊权限)。
-D :是"--device --specials"选项的组合,即也拷贝设备文件和特殊文件。
-l --links:如果文件是软链接文件,则拷贝软链接本身而非软链接所指向的对象。
-z :传输时进行压缩提高效率。
-R --relative:使用相对路径。意味着将命令行中指定的全路径而非路径最尾部的文件名发送给服务端,包括它们的属性。用法见下文示例。
--size-only :默认算法是检查文件大小和mtime不同的文件,使用此选项将只检查文件大小。
-u --update :仅在源mtime比目标已存在文件的mtime新时才拷贝。注意,该选项是接收端判断的,不会影响删除行为。
-d --dirs :以不递归的方式拷贝目录本身。默认递归时,如果源为"dir1/file1",则不会拷贝dir1目录,使用该选项将拷贝dir1但不拷贝file1。
--max-size :限制rsync传输的最大文件大小。可以使用单位后缀,还可以是一个小数值(例如:"--max-size=1.5m")
--min-size :限制rsync传输的最小文件大小。这可以用于禁止传输小文件或那些垃圾文件。
--exclude :指定排除规则来排除不需要传输的文件。
--delete :以SRC为主,对DEST进行同步。多则删之,少则补之。注意"--delete"是在接收端执行的,所以它是在
:exclude/include规则生效之后才执行的。
-b --backup :对目标上已存在的文件做一个备份,备份的文件名后默认使用"~"做后缀。
--backup-dir:指定备份文件的保存路径。不指定时默认和待备份文件保存在同一目录下。
-e :指定所要使用的远程shell程序,默认为ssh。
--port :连接daemon时使用的端口号,默认为873端口。
--password-file:daemon模式时的密码文件,可以从中读取密码实现非交互式。注意,这不是远程shell认证的密码,而是rsync模块认证的密码。
-W --whole-file:rsync将不再使用增量传输,而是全量传输。在网络带宽高于磁盘带宽时,该选项比增量传输更高效。
--existing :要求只更新目标端已存在的文件,目标端还不存在的文件不传输。注意,使用相对路径时如果上层目录不存在也不会传输。
--ignore-existing:要求只更新目标端不存在的文件。和"--existing"结合使用有特殊功能,见下文示例。
--remove-source-files:要求删除源端已经成功传输的文件。
九、2080Ti服务器安装及服务配置
9.1、 服务器硬件配置
处理器 | 英特尔Xeon(至强)E5-2678v3@2.50GHz |
---|---|
主板 | 华硕X99-EWS/USB3.1(Wellsburg) |
内存 | 32GB(威刚DDR4 2666MHz) |
主硬盘 | AsgardAN3500NVMe-M.2/80(500GB/固态硬盘) |
2T HDD | |
970G三星SSD | |
显卡 | Nvidia GeForce RTX2080Ti(11GB/Nvidia)*2 |
显示器 | 戴尔DELF06 FDELL E2216HV(21.7英寸) |
声卡 | 瑞昱High Definition audio@英特尔Wellsburg高保真音频 |
网卡 | 英特尔Ethernet Connection I218-LM/华硕 |
9.2、安装Ubuntu系统
启动热键:F8
下载镜像 https://next.itellyou.cn/Original/
安装
挂载点:
/home | 2t硬盘 | |
---|---|---|
swap | 8G | 1T三星860ssd |
/EFI | 512M | 1T三星860ssd |
/ | 剩余 | 1T三星860ssd |
注:仍有一张500G的SSD暂未使用,后期可自行挂载到系统中。
查看硬盘挂载状态
(base) lxg@lab:~$ df -h
文件系统 容量 已用 可用 已用% 挂载点
udev 16G 0 16G 0% /dev
tmpfs 3.2G 6.1M 3.2G 1% /run
/dev/sdb3 908G 87G 776G 11% /
tmpfs 16G 0 16G 0% /dev/shm
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 16G 0 16G 0% /sys/fs/cgroup
/dev/loop0 56M 56M 0 100% /snap/core18/1988
/dev/loop1 219M 219M 0 100% /snap/gnome-3-34-1804/77
/dev/loop2 66M 66M 0 100% /snap/gtk-common-themes/1519
/dev/loop3 56M 56M 0 100% /snap/core18/2344
/dev/loop4 128K 128K 0 100% /snap/bare/5
/dev/loop5 55M 55M 0 100% /snap/snap-store/558
/dev/loop6 65M 65M 0 100% /snap/gtk-common-themes/1514
/dev/loop7 219M 219M 0 100% /snap/gnome-3-34-1804/66
/dev/loop8 52M 52M 0 100% /snap/snap-store/518
/dev/loop9 62M 62M 0 100% /snap/core20/1405
/dev/loop10 249M 249M 0 100% /snap/gnome-3-38-2004/99
/dev/sdb2 488M 5.3M 482M 2% /boot/efi
/dev/loop11 44M 44M 0 100% /snap/snapd/15177
/dev/sda1 1.8T 341G 1.4T 20% /home
tmpfs 3.2G 20K 3.2G 1% /run/user/125
tmpfs 3.2G 24K 3.2G 1% /run/user/1000
tmpfs 3.2G 88K 3.2G 1% /run/user/1002
tmpfs 3.2G 88K 3.2G 1% /run/user/1003
tmpfs 3.2G 84K 3.2G 1% /run/user/1005
tmpfs 3.2G 100K 3.2G 1% /run/user/1004
tmpfs 3.2G 20K 3.2G 1% /run/user/1001
详情讲解:
/dev/sdb3 908G 87G 776G 11% /
这个是1t的三星ssd,挂载在根目录 / 下
/dev/sdb2 488M 5.3M 482M 2% /boot/efi
这个是efi系统文件
/dev/sda1 1.8T 341G 1.4T 20% /home
这个是2t的机械硬盘,挂载在 /home 下
挂载的意思,就是把这个设备挂在这个路径下面。比如windows中,一个硬盘可以是E盘;在linux中,/home 就相当于盘符 E。
所以,/home 就是一整个机械硬盘。后续如果要重装系统的话,这个盘不受影响,用户的数据不会有影响。
9.3、配置Ubuntu系统
9.3.1、设置root账户
# 刚装好的ubuntu系统,需要给root账户设置密码
sudo passwd root
9.3.2、配置ssh
# 1、配置ssh,方便在自己电脑上操作
sudo apt install openssh-server
# 2、安装ssh客户端
sudo apt install openssh-client
# 3、配置ssh客户端。去掉PasswordAuthentication yes前面的#号,保存退出
sudo vim /etc/ssh/ssh_config
# 4、配置ssh服务器,把PermitRootLogin prohibit-password改成PermitRootLogin yes,若没有,则添加进去,保存退出。这一步是允许root账户在远程登录。
sudo vim /etc/ssh/ssh_config
# 5、重启ssh服务
sudo /etc/init.d/ssh restart
# 6、查看ssh服务是否开启
ps -e | grep ssh
# 另:开启ssh服务的命令
sudo service ssh start
9.3.3、安装nvidia-driver、cuda及cudnn
参考:https://zhuanlan.zhihu.com/p/124292857
A、安装nvidia-driver
(1)、查找合适的驱动**https://www.nvidia.com/Download/index.aspx?lang=en-us#
(2)、安装显卡驱动(两张显卡只需要安装一个驱动)
# 1、禁用nouveau
sudo gedit /etc/modprobe.d/blacklist.conf
在blacklist.conf文件末尾加上这两行,并保存:
blacklist nouveau
options nouveau modeset=0
# 2、应用更改
sudo update-initramfs -u
# 3、重启电脑,验证是否禁用nouveau
lsmod | grep nouveau // 没有返回信息则说明已经禁用了
# 4、卸载旧版本NVIDIA驱动
sudo apt-get remove --purge nvidia*
# 5、给驱动run文件赋予执行权限
sudo chmod a+x NVIDIA-Linux-x86_64-510.60.02.run //对应自己下载的驱动名称
# 6、安装NVIDIA驱动
sudo ./NVIDIA-Linux-x86_64-440.64.run -no-x-check -no-nouveau-check -no-opengl-files
只有禁用opengl这样安装才不会出现循环登陆的问题
-no-x-check:安装驱动时关闭X服务
-no-nouveau-check:安装驱动时禁用nouveau
-no-opengl-files:只安装驱动文件,不安装OpenGL文件
# 7、安装过程中会出现的选项
1、The distribution-provided pre-install script failed! Are you sure you want to continue? 选择 yes 继续。
2、Would you like to register the kernel module souces with DKMS? This will allow DKMS to automatically build a new module, if you install a different kernel later? 选择 No 继续。
3、问题没记住,选项是:install without signing
4、问题大概是:Nvidia's 32-bit compatibility libraries?
选择 No 继续。
5、Would you like to run the nvidia-xconfigutility to automatically update your x configuration so that the NVIDIA x driver will be used when you restart x? Any pre-existing x confile will be backed up.
选择 Yes
# 8、安装过程中出现缺少 cc
sudo update apt-get
sudo apt-get install gcc
# 9、缺少make
sudo apt-get install ubuntu-make
sudo apt-get install make
# 10、安装完成,重启
sudo reboot
# 11、测试驱动是否安装成功
(base) lxg@lab:~$ nvidia-smi
Sun Apr 3 20:57:31 2022
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 510.60.02 Driver Version: 510.60.02 CUDA Version: 11.6 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 NVIDIA GeForce ... Off | 00000000:05:00.0 Off | N/A |
| 17% 36C P8 15W / 250W | 118MiB / 11264MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
| 1 NVIDIA GeForce ... Off | 00000000:09:00.0 Off | N/A |
| 0% 39C P8 7W / 250W | 33MiB / 11264MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| 0 N/A N/A 1173 G /usr/lib/xorg/Xorg 14MiB |
| 0 N/A N/A 1943 G /usr/lib/xorg/Xorg 14MiB |
| 0 N/A N/A 2906 G /usr/lib/xorg/Xorg 14MiB |
| 0 N/A N/A 3862 G /usr/lib/xorg/Xorg 14MiB |
| 0 N/A N/A 4823 G /usr/lib/xorg/Xorg 14MiB |
| 0 N/A N/A 5813 G /usr/lib/xorg/Xorg 27MiB |
| 0 N/A N/A 597285 G /usr/lib/xorg/Xorg 14MiB |
| 1 N/A N/A 1173 G /usr/lib/xorg/Xorg 4MiB |
| 1 N/A N/A 1943 G /usr/lib/xorg/Xorg 4MiB |
| 1 N/A N/A 2906 G /usr/lib/xorg/Xorg 4MiB |
| 1 N/A N/A 3862 G /usr/lib/xorg/Xorg 4MiB |
| 1 N/A N/A 4823 G /usr/lib/xorg/Xorg 4MiB |
| 1 N/A N/A 5813 G /usr/lib/xorg/Xorg 4MiB |
| 1 N/A N/A 597285 G /usr/lib/xorg/Xorg 4MiB |
+-----------------------------------------------------------------------------+
B、安装cuda
(1)、选用合适的cuda:https://developer.nvidia.com/cuda-downloads?target_os=Linux&target_arch=x86_64&Distribution=Ubuntu&target_version=20.04&target_type=runfile_local
安装CUDA,安装版本需要和当前驱动版本对应,具体对应要去英伟达的官方网站查询(https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html),表会随着时间更新。我这个服务器是510.60,按照表可以下载11.2。
(2)、下载运行
wget https://developer.download.nvidia.com/compute/cuda/11.6.2/local_installers/cuda_11.6.2_510.47.03_linux.run
sudo sh cuda_11.6.2_510.47.03_linux.run
选择accept。
把Driver前边的 x 给去掉(按enter键),我这里没去,后边安装失败了。
出现这样的算是安装完成了。
验证:
cat /usr/local/cuda/version.txt
找不到文件的,自己写一个。
echo CUDA Version 11.2.1 >/usr/local/cuda/version.txt
# 输入命令验证是否安装成功
cat /usr/local/cuda/version.txt
我这里找不到文件,但应该是成功了的。
# 设置环境变量
sudo vim ~/.bashrc
加入如下环境变量:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-11.2/lib64
export PATH=$PATH:/usr/local/cuda-11.2/bin
export CUDA_HOME=$CUDA_HOME:/usr/local/cuda-11.2
# 刷新
source ~/.bashrc
mobaxterm若出现oem@adaptation:~$ sudo gedit ~/.bashrc
[sudo] oem 的密码:
MoTTY X11 proxy: Unsupported authorisation protocol
Unable to init server: 无法连接: 拒绝连接
(gedit:35046): Gtk-WARNING **: 20:31:14.137: cannot open display: localhost:10.0
则:
oem@adaptation:~$ sudo cp /home/oem/.Xauthority /root/.Xauthority
# 查看nvcc-V版本
(base) lxg@lab:~$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2021 NVIDIA Corporation
Built on Thu_Jan_28_19:32:09_PST_2021
Cuda compilation tools, release 11.2, V11.2.142
Build cuda_11.2.r11.2/compiler.29558016_0
C、安装cudnn
查看cudnn在哪可以如下指令:
lab@lab:~$ whereis cudnn
cudnn: /usr/include/cudnn.h
下载:https://developer.nvidia.com/rdp/cudnn-archive
找到合适的三个包:
我这里cuda’是11.2的,Ubuntu是20.04的,选择这三个!
然后解包,会解到合适的位置,这个不用管。
sudo dpkg -i libcudnn8_8.2.1.32-1+cuda11.3_amd64.deb
sudo dpkg -i libcudnn8-dev_8.2.1.32-1+cuda11.3_amd64.deb
sudo dpkg -i libcudnn8-samples_8.2.1.32-1+cuda11.3_amd64.deb
检查cudnn是否安装
cd /usr/src/cudnn_samples_v8/mnistCUDNN
sudo make clean
sudo make(出错了,提示没有安装g++,那就安装一下,这里大家遇到的问题可能都不太一样,就是看他缺啥,咱就补啥就行)
//卸载g++:
sudo apt-get remove g++
//重装:
sudo apt-get install g++
make 报错
test.c:1:10: fatal error: FreeImage.h: 没有那个文件或目录
1 | #include "FreeImage.h"
执行:sudo apt-get install libfreeimage3 libfreeimage-dev
提示无法下载
#更换软件源为阿里云
mv /etc/apt/sources.list /etc/apt/sources.list.bak #对官方源做一个备份
echo deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse >/etc/apt/sources.list
echo deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse >>/etc/apt/sources.list
echo deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse >>/etc/apt/sources.list
echo deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse >>/etc/apt/sources.list
root@f3137b999d36:/home# cat /etc/apt/sources.list #查看软件源是否更换
root@f3137b999d36:/home# apt-get update # 更新软件源
再次执行:sudo apt-get install libfreeimage3 libfreeimage-dev
# 再次测试
sudo make
./mnistCUDNN
Resulting weights from Softmax:
0.0000000 0.0000000 0.0000000 1.0000000 0.0000000 0.0000714 0.0000000 0.0000000 0.0000000 0.0000000
Loading image data/five_28x28.pgm
Performing forward propagation ...
Resulting weights from Softmax:
0.0000000 0.0000008 0.0000000 0.0000002 0.0000000 1.0000000 0.0000154 0.0000000 0.0000012 0.0000006
Result of classification: 1 3 5
Test passed!
最后出现如此,代表cudnn正常使用。
D、安装conda,torch,并验证是否安装成功。
sh Anaconda3-2020.11-Linux-x86_64.sh -b -p
# 给conda设置环境变量
vim ~/.bashrc
键盘“i”表示插入
在最后添加:
export PATH=~/anaconda3/bin:$PATH
按下Esc之后输入“:wq!” 保存退出即可
然后:
source ~/.bashrc
# 更换congda源
conda config --add channels http://mirrors.ustc.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --set show_channel_urls yes # 设置搜索时显示通道地址
# 创建conda环境
conda create --name torch1.8 python==3.7
# 激活环境
conda activate torch1.8
报错:CommandNotFoundError: Your shell has not been properly configured to use 'conda activate'.
执行:source activate
再激活环境:conda activate torch1.8
# 安装pytorch
conda install pytorch==1.8.1 torchvision==0.9.1 torchaudio==0.8.1 cudatoolkit=10.2 -c pytorch
# 测试gpu是否可用
python
import torch
torch.cuda.is_available()
9.4、配置samba服务
# 1、安装samba
sudo apt-get update //安装出现什么依赖包出现错误的时候就换源,在官方源和阿里源之间切换,并更新源
sudo apt install samba
# 2、修改配置文件
sudo vim /etc/samba/smb.conf
# 添加以下内容
[share]
path = PATH #此处为要共享的文件夹位置
browseable = yes #文件夹是否可见
writable = yes #文件夹是否可写
guest ok = yes #是否允许匿名访问
public = yes #是否公开
# 把PATH下的所有文件夹权限更改为 777
递归更改:
find -type d -exec chmod 755 {} \; // 后边的分号也需要
# 3、重启samba服务
service smbd restart
# 4、查看samba服务状态
service smbd status
9.5、配置docker
9.5.1 、安装docker
来自官网教程:https://docs.docker.com/engine/install/ubuntu/
# 卸载旧版驱动
root@lab:apt-get remove docker docker-engine docker.io containerd runc
// “/var/lib/docker/”文件中的内容,包括镜像、容器、卷和网络,都被保留下来。
A、Install using the repository
1、设置仓库
# 1、安装依赖包
$ sudo apt-get update
$ sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
# 报错:
下列软件包有未满足的依赖关系:
curl : 依赖: libcurl4 (= 7.58.0-2ubuntu3.16) 但是 7.68.0-1ubuntu2.4 正要被安装
E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。
# 解决:
root@lab:/home/lxg# apt-get purge libcurl4
root@lab:/home/lxg# apt-get install curl
# 2、添加Docker的官方GPG密钥:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 3、设置稳定仓库
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
2、安装docker引擎
# 1、更新,安装
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
# 2、也可以安装指定版本,具体看官网
# 3、验证是否安装成功,运行hello-word
sudo docker run hello-world
3、修改docker位置
# 查看docker信息:docker info,可以看到
ID: 3SNE:SQMZ:MQGE:KQ7A:RFEC:7D4I:34BR:VSHL:7HNA:4QJQ:6BB7:I5GY
Docker Root Dir: /var/lib/docker
Debug Mode: false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
# Docker Root Dir: /home/docker 即是docker保存的目录
# 官方文档的修改办法是编辑 /etc/docker/daemon.json 文件,默认情况下这个配置文件是没有的,这里实际也就是新建一个,然后写入以下内容:
{
"data-root": "/home/docker"
}
# 此文件还涉及默认源的设定,如果设定了国内源,那么实际就是在源地址下方加一行,写成:
{
"registry-mirrors": ["http://hub-mirror.c.163.com"],
"data-root": "/home/docker"
}
# 重启 docker 服务:
systemctl restart docker
# docker info 再次查看信息
ID: 3SNE:SQMZ:MQGE:KQ7A:RFEC:7D4I:34BR:VSHL:7HNA:4QJQ:6BB7:I5GY
Docker Root Dir: /home/docker
4、用户加入docker用户组
# 1、创建docker用户组
sudo groupadd docker
# 2、应用用户加入docker用户组
sudo usermod -aG docker lab # lab是用户名
# 3、重启docker服务
sudo systemctl restart docker
# 4、切换或者退出当前账户再从新登入
su root
su lab
9.5.2、安装nvidia-docker
# 1、nvidia/cuda镜像
到docker-hub(https://hub.docker.com/)查找nvidia/cuda镜像,拉取与ubuntu一样的cuda版本(nvcc -V下的cuda,不是nvidia-smi显示的cuda),且拉取devel版本。这里ubuntu的cuda是11.2,拉取11.2.1的nvidia/cuda镜像。
sudo docker pull nvidia/cuda:11.2.1-devel-ubi8
# 2、查看拉取的镜像
lab@lab:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nvidia/cuda 11.2.1-devel-ubi8 2b3bea41eb70 2 months ago 4.13GB
# 3、安装nvidia-docker2
详情参考:https://zhuanlan.zhihu.com/p/88351963?from_voters_page=true
# 1、卸载nvidia-docker及其它GPU容器
1. docker volume ls -q -f driver=nvidia-docker | xargs -r -I{} -n1 docker ps -q -a -f volume={} | xargs -r docker rm -f
2. sudo apt-get purge -y nvidia-docker
# 2、添加仓库包
1. curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
2. distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
3. curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
4. sudo apt-get update
# 3、安装nvidia-docker2
sudo apt-get install -y nvidia-docker2
sudo pkill -SIGHUP dockerd
# 4、测试安装nvidia-docker成功(注意选择自己的cuda版本)
docker run --runtime=nvidia --rm nvidia/cuda:11.2.1-devel-ubi8 nvidia-smi
注:nvidia/cuda:11.2.1-devel-ubi8 是拉取的镜像名
# 4、测试容器内部使用nvidia-smi并映射端口1008
# 加上端口映射及 --gpus all 才能实现在容器内部使用nvidia-smi
docker run -it -p 1008:1008 --gpus all nvidia/cuda:11.2.1-devel-ubi8
# 发现nvidia/cuda:11.2.1-devel-ubi8此镜像内无法使用apt,转而使用其他镜像:nvidia/cuda:11.2.0-devel-ubuntu20.04
# 使用dockerfile文件构建定制镜像,注意后边的点是需要的
docker build -f Dockerfile -t nvidia/cuda:11.2.0-devel-ubuntu20.04 .
# 运行镜像
docker run -it -p 1008:1008 --gpus all nvidia/cuda:11.2.0-devel-ubuntu20.04
9.6、定制镜像
docker cp 宿主机中要拷贝的文件名及其路径 容器名:要拷贝到容器里面对应的路径进入容器编辑自己的环境,为什么不通过dockerfile文件定制镜像呢?因为出问题了。
所用镜像是很精简的Ubuntu系统,所以在容器里边需要安装自己需要的一些包。
# 1、启动容器(首次启动容器,指定端口映射,交互方式)
docker run -it -p 555:22 --gpus all nvidia/cuda:11.2.0-devel-ubuntu20.04
注:-p 是映射端口,555:22 可自己修改
# 2、给容器内的root账户设置密码
passwd root
# 3、添加用户self以便远程,并添加sudo权限。因为root不知道怎么设置远程可以登录。后续可自己改名。
adduser self
# 给用户添加sudo权限
1、安装sudo
apt-get update
apt install sudo
apt install vim
2、修改 /etc/sudoers 文件
vim /etc/sudoers
修改成:
# User privilege specification
root ALL=(ALL) ALL
self ALL=(ALL) ALL
保存退出,self用户就拥有了sudo权限。
# 修改/etc/bash.bashrc文件
vim /etc/bash.bashrc
末尾加入:
export PATH=/usr/local/cuda-11.2/bin/:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-11.2/lib64:$LD_LIBRARY_PATH
然后:
source /etc/bash.bashrc
# 4、安装ssh服务,再换源
# 1、配置ssh,方便在自己电脑上操作
apt-get update
apt install openssh-server
# 2、安装ssh客户端
apt install openssh-client
# 3、配置ssh客户端。去掉PasswordAuthentication yes前面的#号,保存退出
vim /etc/ssh/ssh_config
# 5、重启ssh服务
/etc/init.d/ssh restart
# 6、查看ssh服务是否开启
ps -e | grep ssh
# 另:开启ssh服务的命令
service ssh start
# 5、从宿主机复制文件source.list(apt安装的国内源) 到容器里边 /etc/apt/,并更新源(不换使用官方的也行)
mv /etc/apt/sources.list /etc/apt/sources.list.backups (对容器内官方源进行备份)
docker cp /home/lab/dockerfile/sources.list a1691b4c3b10:/etc/apt/
注:docker cp 宿主机中要拷贝的文件名及其路径 容器名:要拷贝到容器里面对应的路径
apt-get update # 换源之后要更新源
# 6、安装依赖包
apt install bzip2
apt install g++
apt install git
apt install graphviz
apt install libgl1-mesa-glx
apt install libhdf5-dev
apt install openmpi-bin
apt install vim
apt install libopencv-dev
apt install libsnappy-dev
apt install python-dev
apt install python-pip
apt install build-essential
apt install wget
#
apt install bzip2 \
g++ \
git \
graphviz \
libgl1-mesa-glx \
libhdf5-dev \
openmpi-bin \
vim \
libopencv-dev \
libsnappy-dev
python-dev
python-pip
build-essential
wget
# 删除已安装的安装包
rm -rf /var/lib/apt/lists/*
# 10、打包成镜像
经过上述设置,已经符合我们需要了,若还不符合,可自己定制。
打包成镜像(可在宿主机操作,多开一个终端即可):
docker commit -a="lxg" -m="xxxx" 5e2590b51d1d conda/nvidia/cuda:2.0
# 11、查看镜像
(base) lxg@lab:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
lab 506 3516eef7b45b 7 hours ago 20.4GB
yy_env 1.0 7cc0c38f13cb 3 days ago 4GB
nvidia/cuda 11.2.0-devel-ubuntu20.04 4efde6cef680 2 months ago 4.09GB
nvidia/cuda 10.2-devel-ubuntu18.04 f96fc4ccf322 2 months ago 3.07GB
9.7、安装conda
# 1、安装
sh Anaconda3-2020.11-Linux-x86_64.sh -b -p
# 2、修改配置文件
vim ~/.bashrc
在最后加入:
export PATH=/home/self/anaconda3/bin:$PATH
退出环境,并激活环境:
source ~/.bashrc
source activate
# 3、更改conda源
vim ~/.condarc
加入以下内容:
channels:
- http://mirrors.ustc.edu.cn/anaconda/pkgs/free/
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
- defaults
show_channel_urls: true
# 4、更改pip源
# 5、创建环境
conda create -n torch python==3.7
# 6、切换环境
conda activate torch
# 7、安装pytorch1.8.1,cuda11.3
conda install pytorch==1.8.1 torchvision==0.9.1 torchaudio==0.8.1 cudatoolkit=11.3 -c pytorch -c conda-forge(3080容器里边行)
pip install torch==1.8.1+cu111 torchvision==0.9.1+cu111 torchaudio==0.8.1 -f https://download.pytorch.org/whl/torch_stable.html # 还得pip是永远的神
# 8、验证cuda是否可用
import torch
torch.cuda.is_available()
torch.zeros(1).cuda()
# 9、不能用,移除环境
conda remove -n torch --all