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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 配置环境: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操作
相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
目录
相关文章
|
7天前
|
JavaScript 前端开发 Docker
前端的全栈之路Meteor篇(一):开发环境的搭建 -全局安装或使用容器镜像
本文介绍了如何搭建 Meteor 开发环境,包括全局安装 Meteor 工具和使用 Docker 镜像两种方法,以及创建和运行一个简单的 Meteor 项目的基本步骤。 Meteor 是一个全栈 JavaScript 框架,适用于构建实时 Web 应用程序。文章还提供了遇到问题时的解决建议和调试技巧。
|
15天前
|
网络安全 Docker 容器
VScode远程服务器之远程 远程容器 进行开发(五)
VScode远程服务器之远程 远程容器 进行开发(五)
17 1
|
26天前
|
JavaScript iOS开发 MacOS
Jupyter模块Plotly及labextension插件的安装
Jupyter模块Plotly及labextension插件的安装
43 1
|
12天前
|
前端开发 Docker 容器
主机host服务器和Docker容器之间的文件互传方法汇总
Docker 成为前端工具,可实现跨设备兼容。本文介绍主机与 Docker 容器/镜像间文件传输的三种方法:1. 构建镜像时使用 `COPY` 或 `ADD` 指令;2. 启动容器时使用 `-v` 挂载卷;3. 运行时使用 `docker cp` 命令。每种方法适用于不同场景,如静态文件打包、开发时文件同步及临时文件传输。注意权限问题、容器停止后的文件传输及性能影响。
|
2月前
|
NoSQL 关系型数据库 Redis
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
|
2月前
|
Prometheus 监控 Cloud Native
docker安装prometheus+Granfan并监控容器
【9月更文挑战第14天】本文介绍了在Docker中安装Prometheus与Grafana并监控容器的步骤,包括创建配置文件、运行Prometheus与Grafana容器,以及在Grafana中配置数据源和创建监控仪表盘,展示了如何通过Prometheus抓取数据并利用Grafana展示容器的CPU使用率等关键指标。
|
3月前
|
Kubernetes 应用服务中间件 nginx
基于容器化的Web服务器管理
【8月更文第28天】随着云原生技术的发展,容器化已经成为部署和管理应用程序的标准方式之一。Docker 和 Kubernetes 等工具提供了强大的容器管理和编排能力,使得开发者能够轻松地部署、扩展和维护 Web 服务器。本文将详细介绍如何使用 Docker 和 Kubernetes 实现 Web 服务器的容器化部署,并提供详细的步骤和代码示例。
75 1
|
3月前
|
应用服务中间件 Linux nginx
Linux虚拟机磁盘扩容、Docker容器磁盘满的问题、Docker安装nginx
这篇文章讨论了Linux虚拟机磁盘扩容的方法,包括外部配置、具体扩容步骤和扩容后的效果验证。同时,文章还涉及了Docker容器磁盘满的问题及其解决方法,如删除不必要的镜像和容器,以及调整Docker的安装路径。此外,还提到了意外情况的处理,例如误删除停止的容器后的应对措施。最后,文章还提供了使用Docker安装nginx的步骤和成功访问的截图。
Linux虚拟机磁盘扩容、Docker容器磁盘满的问题、Docker安装nginx
|
3月前
|
弹性计算 Kubernetes 开发者
利用容器化服务实现游戏服务器的动态资源配置
【8月更文第12天】在游戏行业中,用户基数的变化往往呈现出明显的波动性,特别是在推广活动期间,用户基数会显著增加,而在非推广期则会有所下降。为了应对这种变化,游戏开发者需要一种能够根据用户基数动态调整服务器资源的解决方案,以确保用户体验的同时最大限度地节省成本。容器化服务因其灵活的资源管理和成本控制能力,成为了理想的解决方案。
57 2
|
3月前
|
存储 Ubuntu 搜索推荐
构建多用户的 Jupyter 服务器 —— 利用 JupyterHub
【8月更文第29天】**摘要** JupyterHub 是一个易于使用的、可伸缩的、多用户的 Jupyter Notebook 服务器。它允许您在一个集中式服务器上托管多个独立的 Jupyter Notebook 会话,非常适合团队协作和教学环境。本文将详细介绍如何安装和配置 JupyterHub,以及如何利用它来构建一个多用户 Jupyter 服务器环境。
592 0

热门文章

最新文章