服务器安装与使用

服务器安装与使用

一、镜像与容器,容器与虚拟机的区别:

镜像与容器:

​ 个人理解,镜像就像是一个安装好的软件(静态),容器则是运行中的软件(动态),一个软件可以多开几个分身。比如电脑上安装了一个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/

安装

挂载点:

/home2t硬盘
swap8G1T三星860ssd
/EFI512M1T三星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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值