从一无所有的服务器到建立容器,安装jupyter并远程启动,安装MMdetection过程记录

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 配置环境:conda+pytorch 1.8.1+cuda 11.1+cudnn 8.0.5jupyter notebookmmcv-full 1.4.6+mmdet 2.19.0

1. 登录服务器

使用MobaXterm软件,根据ip地址,端口,账号用户名,密码登录。

98c6b6d02f016f74b405fbb8355c627.png


2. 创建拉取镜像

  • 注意:以下操作如果出现如下报错,则说明需要root权限,sudo -i即可。

0d9f68cbd9d8e36e92861594c27e4b1.png


网址:https://registry.hub.docker.com/,直接搜索拉取即可。

022206343e9394c5bc01591233f4a42.png


  • 拉取镜像:

docker pull pytorch/pytorch:1.8.1-cuda11.1-cudnn8-devel

镜像拉取后也许可以选择删除镜像,清理内存,不过楼主没有进行这个操作,不知是否会影响后续建立容器

  • 查找镜像,找到IMAGE ID

docker images

d17e439a8dd36752f0c0c0391d88f02.png


  • 删除镜像

docker rmi IMAGE ID

3. 创建容器

  • 新建容器

docker run -itd --gpus all --shm-size 24g --name mmdet222  -p 20201:22 -p 20202:6006 -p 20203:8888 -p 20204:80  -v /home/docker/user/zhangwenhui/:/workspace pytorch/pytorch:1.8.1-cuda11.1-cudnn8-devel

-itd:以交互模式运行容器,为容器重新分配一个伪输入终端,后台运行容器,并返回容器ID

--gpus all:表示使用--gpus选项指定GPU设备,例如--gpus all,--gpus '"device=1,2"'

--shm-size(重要):docker共享内存大小,默认为64M,如果不设置会出现RuntimeError(楼主成功踩坑,文                     末说明补救方法),设置的大小可以使用df -h命令查看服务器shm的大小进行调整

--name:docker名字

-p:将容器的端口映射到本地的端口,例如20201:22是将容器的22端口映射到本地的20201端口(因为本地的22端口肯定是已经被占用了,需要进行映射)

-v:容器的位置映射,“/home/docker/user/zhangwenhui/”为本地目录,“workspace”为容器目录,表示将“/home/docker/user/zhangwenhui/”挂载到容器的“workspace”目录pytorch/pytorch:1.8.1-cuda11.1-cudnn8-devel:“pytorch/pytorch”为镜像的名字,“1.8.1-cuda11.1-      cudnn8-devel”为镜像的TAG。表示根据该镜像生成容器;

  • 打开容器,红框为容器编号CONTAINER ID

docker ps

ed2758c8e77891ab734d5fbb56982dd.png


  • 进入容器

docker exec -it 486af478a5d7 bash

  • 安装必须软件

apt-get update apt-get install sudo apt-get install -y openssh-server wget vim screen

apt-get是一条linux命令,适用于deb包管理式的操作系统,主要用于自动从互联网的软件仓库中搜索、安装、升级、卸载软件或操作系统。(在此之前楼主几乎没怎么接触过,不过不妨碍它很强大,在此之前楼主遇到没有的东西习关于pip install,但这是基于python的)

因此在linux系统如果使用某个指令报错:command not found,建议使用apt-get install,apt install也行

ab42a12d6ac7288dfe8465627bb5f9d.png


  • 推荐安装locate,可以查找文件位置

apt-get install mlocate sudo updatedb                                                          ## 更新数据库,不然仍会报错

  • 允许通过ssh登录容器

echo "PermitRootLogin yes" >> /etc/ssh/sshd_config

  • 重启ssh服务

service ssh restart

  • 设置登录密码

passwd root

e62e1ac4ff1086a1eb9c78811b3cc56.png


e62e1ac4ff1086a1eb9c78811b3cc56.png

  • 退出容器

exit

  • 通过ssh进入容器,端口号不是22,而是容器的22端口号映射到本地的端口号。

dc5a973c9946c2e97f360cf9ab5588c.png


4. 安装mmcv-full,mmdet


在安装之前,会出现一个小问题,root前没有(base),说明此时并没有进入conda环境 尝试conda activate base,结果是conda :command not found,说明conda无法使用 原因是没有将conda路径加入./bashrc文件中,因此需要进入./bashrc文件中,添加conda路径

d9a583ef78a6ac17b5509066229522f.png


因为conda为指令,所以用whereis定位,bashrc为文件,用locate定位。

  • 定位conda,找到conda位置

whereis conda

6f5952e14d0c88cfd884c8c3a8ce04e.png


  • 定位bashrc,找到./bashrc文件位置,为/root/.bashrc

locate "bashrc"

f6a742b664a11cbb8ab769b5d8a6eaa.png


  • 进入./bashrc文件,将conda路径"/opt/conda/bin/"加入./bashrc文件末尾

vim /root/.bashrc

969c642b1f3c6bf13e52f202e106788.png


  • 在修改./bashrc文件之后,需要激活

source ~/.bashrc

至此,conda命令可以使用,用conda activate base进入base环境,如果报错,可以conda init,然后重启ssh即可。


官方文档提供了好几种方法安装mmdetection,其中有两种比较简洁好用

  • 使用openmim,该方法最为简洁,但是在用mim时如果网速不佳,或者因为其他问题导致下载速度很慢,就不提倡使用(楼主深受其害,VPN也不行,会报错节点不对,咱也不懂,mim也不能用镜像源)

pip install openmim  mim install mmdet

  • 使用pip,这也是楼主最后选择使用的,该方法也很简洁,并且因为是pip,所以可以使用清华源(啥也不说了,清华源yyds)。注意:在安装之前,一定要去MMCV官方文档查看pytorch与cuda的版本是否匹配,然后去MMdet官方文档(附带安装教程)查看MMdet与MMCV的版本匹配。建议加清华源,不然速度会很慢。

# 加清华源之前pip install mmcv-full -f https://download.openmmlab.com/mmcv/dist/cu111/torch1.8.0/index.htmlpip install mmdet==2.19.0 # 加清华源之后pip install -i https://pypi.tuna.tsinghua.edu.cn/simple mmcv-full -f https://download.openmmlab.com/mmcv/dist/cu111/torch1.8.0/index.htmlpip install -i https://pypi.tuna.tsinghua.edu.cn/simple mmdet==2.19.0

安装完成,查看conda环境里的包,也可以通过这个命令查看pytorch与cuda的版本

conda list

37cef56af5916137e22d1ebec762e73.png


5. 安装jupyter,远程登录

jupyter notebook是楼主认为比较好用的编程软件,重在轻量化,界面简单(楼主喜欢简洁) 安装问题不大,主要在于设置登录密码,修改配置文件

  • 安装jupyter和conda扩展

conda install jupyter nb_conda

  • 设置密码

# 终端进入pythonfrom notebook.auth import passwdpasswd()# 会让你设置密码,输入两次,之后得到密令,引号里面的就是

  • 生成jupyter配置文件,进入配置文件

jupyter notebook --generate-config --allow-root vim /root/.jupyter/jupyter_notebook_config.py

  • 找到以下代码,进行修改

c.NotebookApp.allow_root =True c.NotebookApp.ip = '*' c.NotebookApp.password = '密令'                                                      c.NotebookApp.port = 8888 c.NotebookApp.allow_remote_access = True

  • 打开jupyter

# 正常启动jupyter notebook --no-browser --port=8888 --ip=0.0.0.0 --allow-root # 后台启动(即使关闭ssh,jupyter也能一直运行)nohup jupyter notebook --no-browser --port=8888 --ip=0.0.0.0 --allow-root & ### 此处的8888端口号为容器的8888端口,在使用浏览器登录时需要使用本地映射端口,比如楼主的是20203。 ### 假如ssh的ip为10.10.10.1:22,登录IP为10.10.10.1:20203


最后,因为在建立容器时没有设置shm-size参数,所以在跑代码时报错:

RuntimeError: DataLoader worker (pid XXX) is killed by signal: Bus error

解决方法(手动更改shm大小):

  1. 使用服务器账号,进入服务器,sudo-i获取root权限,使用docker ps查找容器ID
  2. 使用locate查找包含容器ID的所有路径,找到一个类似/home/docker/containers/容器ID的目录
  3. 在该目录下进入hostconfig.json文件,修改shmsize,该处的shmsize单位为bit,1G=2^30
  4. 在修改文件前,需要停止容器:docker stop 容器ID
  5. 修改文件之后,开启容器,并重启ssh:docker start 容器ID,service ssh restart
  6. 如果在修改结束,重启容器后,发现配置文件又回到修改前,则需要在修改文件前关闭容器服务:service docker stop,在修改完后开启容器服务,service docker start。完成此操作的同时,仍需进行4,5操作
相关实践学习
在云上部署ChatGLM2-6B大模型(GPU版)
ChatGLM2-6B是由智谱AI及清华KEG实验室于2023年6月发布的中英双语对话开源大模型。通过本实验,可以学习如何配置AIGC开发环境,如何部署ChatGLM2-6B大模型。
目录
相关文章
|
3月前
|
Ubuntu Linux 网络安全
Linux服务器之Ubuntu的安装与配置
Ubuntu Desktop是目前最成功、最流行的图形界面的Linux发行版;而Ubuntu Server也在服务器端市场占据了较大的份额。今天为大家详细介绍了Ubuntu Server的安装与配置,希望对你能有所帮助。关于VMware、VirtualBox等虚拟化软件的使用,朱哥还会在后续的文章中为大家详细介绍,敬请关注!
|
1月前
|
Shell Linux 网络安全
宝塔服务器面板部署安装git通过第三方应用安装收费怎么办—bash: git: command not found解决方案-优雅草卓伊凡
宝塔服务器面板部署安装git通过第三方应用安装收费怎么办—bash: git: command not found解决方案-优雅草卓伊凡
352 3
宝塔服务器面板部署安装git通过第三方应用安装收费怎么办—bash: git: command not found解决方案-优雅草卓伊凡
|
1月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
320 5
|
2月前
|
Ubuntu 安全 关系型数据库
安装MariaDB服务器流程介绍在Ubuntu 22.04系统上
至此, 您已经在 Ubuntu 22.04 系统上成功地完成了 MariadB 的标准部署流程,并且对其进行基础但重要地初步配置加固工作。通过以上简洁明快且实用性强大地操作流程, 您现在拥有一个待定制与使用地强大 SQL 数据库管理系统。
213 18
|
2月前
|
Ubuntu 安全 关系型数据库
安装MariaDB服务器流程介绍在Ubuntu 22.04系统上
至此, 您已经在 Ubuntu 22.04 系统上成功地完成了 MariadB 的标准部署流程,并且对其进行基础但重要地初步配置加固工作。通过以上简洁明快且实用性强大地操作流程, 您现在拥有一个待定制与使用地强大 SQL 数据库管理系统。
239 15
|
2月前
|
弹性计算 安全 Linux
使用阿里云服务器安装Z-Blog博客网站流程,新手一键部署教程
本教程教你如何在阿里云99元服务器上,通过宝塔Linux面板一键部署Z-Blog博客。基于CentOS 7.9系统,从远程连接、安装宝塔面板、开放端口到部署Z-Blog全流程详解,操作简单,新手也能轻松搭建个人博客网站。
393 13
|
3月前
|
弹性计算 安全 Linux
阿里云服务器ECS安装宝塔Linux面板、安装网站(新手图文教程)
本教程详解如何在阿里云服务器上安装宝塔Linux面板,涵盖ECS服务器手动安装步骤,包括系统准备、远程连接、安装命令执行、端口开放及LNMP环境部署,手把手引导用户快速搭建网站环境。
|
4月前
|
自然语言处理 Unix Linux
解决服务器中Jupyter笔记本的文件名字符编码问题
通过上述步骤,可以有效解决Jupyter笔记本的文件名字符编码问题,确保所有文件能在服务器上正常访问并交互,避免因编码问题引起的混淆和数据丢失。在处理任何编码问题时,务必谨慎并确保备份,因为文件名变更是
183 17
|
3月前
|
Ubuntu Linux
如何在 Ubuntu 服务器上安装桌面环境(GUI)
如果你有任何问题,请在评论区留言。你会在服务器上使用 GUI 吗?参照本文后你遇到了什么问题吗?
446 0
|
4月前
|
Windows
Windows下版本控制器(SVN)-验证是否安装成功+配置版本库+启动服务器端程序
Windows下版本控制器(SVN)-验证是否安装成功+配置版本库+启动服务器端程序
141 2