🌀Jarson Cai's Blog
头脑是日用品,不是装饰品
服务器深度学习环境
为深度学习不同端侧的部署提供一个较好的方案。

深度学习环境搭建

租用云GPU服务

这里我使用的是AutoDL,主要是价格比较便宜。

在租用GPU时,要注意所需项目的环境,特别是Pytorch和CUDA版本。服务器可以选择你需要的环境,如果没有你想要的环境,可以只选择Miniconda环境,选择一个使用的Unbantu和Python版本,然后自行下载需要的环境。

vscode连接服务器

  • 打开vscode,下载Remote - SSH插件。
  • 打开最左边的Remote - SSH模块,点击+,添加远程ssh登录指令,并输入AutoDL实例页面的登录指令,并按回车,再次按回车写入配置文件。
  • 点击右下角的connect,然后输入AutoDL示例页面提供的密码,回车,成功连接。
  • 在vscode的插件商店中选择Python,并为服务器端下载插件。
  • 在vscode中按下command+shift+p,输入python,选择Python: Select Interpreter,选择服务器中自动配置好的base环境。如果在配置实例时只选择了Miniconda,可以重新建立一个虚拟环境,安装Pytorch大礼包

配置服务器免密登录

这里我使用的是Mac操作系统进行配置,Windows具体流程相似。

操作流程:

  • 在本机创建新的ssh key:
1
2
$ cd ~/.ssh
$ ssh-keygen -t rsa -C "ssh key的注释"

此时在.ssh目录下就会生成两个文件id_rsaid_rsa.pub,分别是私钥和公钥。

  • 复制公钥的内容到服务器端/root/.ssh目录下的authorized_keys(有时也是authorized_keys2):
1
2
$ cat ~/.ssh/id_rsa.pub
$ # 然后选中复制,并粘贴到服务器端的目标位置
  • 配置完成之后,本地进入服务器端就不需要一直输ssh密码了。

上传文件

  • 如果我们的文件可以在Github中找到,直接使用Terminal进行克隆:
1
$ git clone 你的repo的https地址
  • 如果文件在本机,可以直接将文件拖拽到vscode目录下,也可以通过实例进入JupyterLab上传文件。

谷歌Colab白嫖GPU资源

首先登录Colab官网,点击新建笔记本,点击代码执行程序,点击下拉列表里的更改运行时类型,选择GPU,保存。然后就可以开心地白嫖了!

修改Linux服务器文件权限问题

  • 将文件设置为可读写执行权限:
1
$ chmod 777 file
  • 给文件所有者增加写权限:
1
$ chmod u+w file
  • 给文件所有者和同组用户赋予读写权限,其他用户只有读权限:
1
$ chmod 664 file
  • 递归修改目录及其子目录中的文件权限:
1
$ chmod -R 755 directory
  • 显示修改后的权限信息:
1
$ chmod -v 755 file

请注意,修改文件或目录的权限需要有足够的权限进行操作。只有文件或目录的所有者或超级用户(root)才能更改权限。

Docker配置深度学习环境

第一步,安装Docker

  • 检查docker是否安装:
1
$ docker help
  • 如果没有安装docker,则使用官方提供的脚本进行安装:
1
$ curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

Docker镜像加速

  • /etc/docker/daemon.json中写入如下内容,如果没有该文件则新建:
1
{"registry-mirrors":["https://XXX.mirror.aliyuncs.com/"]}
  • 重启Docker服务:
1
2
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker

从Docker Hub下载镜像

  • 进入Docker Hub,因为我使用的是pytorch的训练框架,搜索torch1.9.0-cuda11.1-cudnn8
  • 点击左边的tags,复制拉取镜像的脚本,在服务器的命令行上运行

运行Docker容器

  • 下载完容器镜像之后,查看所有images:
1
$ docker images
  • 找到自己的容器,启动该容器:
1
$ docker run -it mindest/torch1.9.0-cuda11.1-cudnn8:bevt /bin/bash 

参数说明:

-i:交互式操作

-t:终端

mindest/torch1.9.0-cuda11.1-cudnn8:bevt:镜像名称:镜像标签

bin/bash:放在镜像后面的是命令,这里我们希望有个交互式 Shell,因此用的是bin/bash。/bin/bash的作用是表示载入容器后运行bash ,docker中必须要保持一个进程的运行,要不然整个容器启动后就会马上kill itself,这个/bin/bash就表示启动容器后启动bash。

在容器内安装所需要的包,并更新镜像

  • 安装需要的包,直接使用pip installconda install
  • 更新镜像:容器是动态的,镜像是静态的。我们在容器里更新了Python包,为了以后可以持久地使用,还需要使用commit将容器打包为镜像。
1
$ docker commit -m="update packages" -a="XXX" bb8967093b48 XXX/torch1.9.0-cuda11.1-cudnn8:bevt

各个参数说明:

  • -m: 提交的描述信息
  • -a: 指定镜像作者
  • bb8967093b48:容器 ID
  • XXX/mypymarl:v1: 指定要创建的目标镜像名(作者名/镜像名:标签)

在本地使用容器运行代码

  • 首先我们需要创建一个本地的Ubuntu系统和docker容器共享的文件夹:
1
2
$ sudo mkdir /data
$ sudo docker run -v /data:/data -itd caixj/pytorch:v1
  • 查看正在运行的容器:
1
$ docker ps
  • 找到我们容器的ID,并进入该容器
1
$ docker attach 500ad76de1cf

安装nvdia-cuda

Docker 默认是不支持在容器内 GPU 加速的,NVIDIA 官方做了个工具箱来支持容器内 GPU 加速运算,这大大方便了深度学习开发者。这里直接根据官方教程安装即可。

https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html

安装完nvidia-cuda之后,再创建容器时加上--gpus all,即可在容器内调用cuda,即

1
sudo docker run -v /data:/data -itd --gpus all caixj/pytorch:v1 bash

然后跟上述步骤相同,进入容器,然后运行代码就ok。

  • 本地保存镜像
1
2
3
$ docker save -o <your_file_name.tar> <image id>
# 根据测试的反馈来说,最好不用image id进行save
$ docker save -o <your_file_name.tar> <image name:version>
  • 通过本地镜像导入docker容器
1
2
3
4
$ docker load < your_file.tar.gz
# 或者
$ docker load --input your_file.tar
# 它的images的名字会变为your_file:latest

Docker常用命令

  • 查看所有镜像
1
docker images
  • 查找镜像
1
docker search XXX/image
  • 下载镜像
1
docker pull XXX/images:tag
  • 删除镜像
1
docker rmi XXX/images:ta
  • 启动容器
1
docker run -it image:tag /bin/bash
  • 退出容器
1
exit
  • 查看正在运行的容器
1
docker ps
  • 进入正在运行的容器
1
docker attach container_ID
  • 查看已停止运行的容器
1
docker ps -a
  • 启动已停止的容器
1
docker start container_ID
  • 停止容器
1
docker stop container_ID
  • 重启已停止容器
1
docker restart container_I
  • 退出容器终端(但不停止)
1
docker exec

最后修改于 2023-05-17

知识共享许可协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。