目录

介绍

版本

部署

安装驱动

安装docker

创建基础容器

安装Anaconda

关于Anaconda的使用

Docker容器SSH服务启动

Pycharm连接Docker容器

验证

运行验证

代码更新如何上传或者下载远端容器产物

验证容器内的产物是否生成

总结


介绍

常规的本地化运行机器学习代码,安装Anaconda+cuda显卡驱动支持,许多文章都有介绍,不在此多做赘述了。本文主要是为了解决在工作环境中,本机电脑没有显卡,需要将程序运行在带显卡的远程服务器上。

本文会介绍如何部署使用显卡的docker容器、如何使用pycharm连接docker容器运行机器学习代码。

版本

Pycharm: 2020.1.3

docker: 19.03.12

python: 3.6.13

demo算法: BackgroundMattingV2

部署

下面我会按照详细的流程,对主要过程进行说明,对于一些基础组件的安装简述。

安装驱动

我们来到这台带显卡(机器学习你懂的,NVIDIA显卡是必须的)的服务器,检查一下显卡是否安装。

[root@data2 home]# nvidia-smi
Wed Sep 29 22:56:47 2021
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 440.100      Driver Version: 440.100      CUDA Version: 10.2     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce GTX 108...  Off  | 00000000:13:00.0 Off |                  N/A |
| 23%   24C    P8     8W / 250W |   1543MiB / 11178MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   1  GeForce GTX 108...  Off  | 00000000:1B:00.0 Off |                  N/A |
| 28%   46C    P2    70W / 250W |   1865MiB / 11178MiB |      0%      Default |
+-------------------------------+----------------------+----------------------++-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0      8895      C   python                                      1529MiB |
|    1      8881      C   python                                      1849MiB |
+-----------------------------------------------------------------------------+

如果显示命令不存在,需要安装对应版本的显卡驱动。

可以参考链接:https://blog.csdn.net/maqian5/article/details/109777701

装好了之后先别管她,后面会用到。

安装docker

安装好docker,这里不多赘述了,上链接:https://blog.csdn.net/u014069688/article/details/100532774

安装好之后可以使用docker ps检查一下。

创建基础容器

因为基础容器我们需要使用anaconda实现虚拟环境,就不用python的基础镜像了,直接使用Ubuntu18的系统镜像作为基础镜像。

[root@data2 home]# docker pull ubuntu:18.04
18.04: Pulling from library/ubuntu
e4ca327ec0e7: Pull complete
Digest: sha256:9bc830af2bef73276515a29aa896eedfa7bdf4bdbc5c1063b4c457a4bbb8cd79
Status: Downloaded newer image for ubuntu:18.04
docker.io/library/ubuntu:18.04

启动创建容器。

命令:

docker run --name=aliang -itd --gpus all --restart=always --shm-size 16G --net=host ubuntu:18.04 bash

执行结果:

[root@data2 home]# docker run --name=aliang -itd --gpus all --restart=always --shm-size 16G --net=host ubuntu:18.04 bash
6c0b30fd0c258adeb76bc2baf817aaaf2064f1f0d96b0054d7e6a187ae0e5725
[root@data2 home]# docker exec -it aliang bash
root@data2:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

命令说明:

1、--name=aliang: 给容器命名

2、--gpus all: 所有gpu都可使用,不建议这么设置,有点浪费,下面会有另一个例子

3、--shm-size 16G:显存参数,给不给问题不大

4、--net=host:容器使用,懒人做法,容器内和宿主机共享网络,下面另一个例子会有更好的方式。

更好的方式:

1、查看显卡编号

[root@data2 home]# nvidia-smi -L

选择一块卡,复制UUID后面的序列号

2、使用命令

docker run --name=aliang -itd --restart=always --shm-size 16G --gpus device=GPU-xxxxx -p 2299:22 ubuntu:18.04 bash

在device后面接上上面查出来的序列号。把容器内22端口映射到宿主机的2299端口(当然这个出来的端口看你心情了)。

安装Anaconda

为了以后可以频繁使用这个容器做训练,使用conda的虚拟环境肯定是不二选择。

这里要做的是在容器内安装,所以需要对容器内系统做一些命令升级。

apt-get update
apt-get upgrade

至于安装Anaconda,就不过多赘述了,上链接: https://blog.csdn.net/tkzky001/article/details/118705205

关于Anaconda的使用

简单的说一下Anaconda的原理,主要是它可以构建多个虚拟的运行环境,我们可以通过命令行前缀判断目前所使用的虚拟环境。

(base) root@data2:/#

base是基础环境,下面我们安装一下机器学习模型所需要的环境。使用下面的命令,其中机器学习架构主要是用pytorch。

创建python3.6的基础环境

conda create -n bg_matting python=3.6

激活环境

(base) root@data2:/# conda activate bg_matting
(bg_matting) root@data2:/#

我们可以通过前缀判断是不是切换到了新的虚拟环境。

验证环境

(bg_matting) root@data2:/# python -V
Python 3.6.13 :: Anaconda, Inc.

的确是我们需要的3.6版本。

安装pytorch

打开pytorch官网:https://pytorch.org/ ,往下翻可以看到安装命令。

选择linux环境CUDA最新版本。

Docker容器SSH服务启动

完成了以上的步骤,docker的环境基本ok了,下面来配置该容器的ssh服务,为了远程调试用。

首先装个vim,不然太麻烦了。

apt-get install vim

安装openssh

apt-get install openssh-server

使用passwd,添加用户名密码

passwd

修改vim配置文件

vim /etc/ssh/sshd_config

修改两个地方

1、端口

需要说明一下,如果在构建docker容器的时候使用了 --net=host,则必须要改端口,因为原本的22端口会和宿主机的ssh端口冲突。可以调整为别的,例如下面。

如果使用的是上面另一种方法,则无需修改,因为容器是将内部的22端口映射到宿主机的2299,没有共享。

2、登入权限

#PermitRootLogin prohibit-password

PermitRootLogin yes

以上的配置都做完了下面启动ssh

/etc/init.d/ssh restart

Pycharm连接Docker容器

现在基本环境都安装好了,我们来尝试让IDE和docker容器环境连接起来。

1、点开setting,打开Project Interpreter。

2、点击新增,选择SSH Interpreter。

3、填写宿主机IP,映射的端口,ssh用户名。

4、填写passwd设置的密码,下一步。

5、选择远程docker容器python执行文件,在安装Anaconda包内, 例如我的位置是:/root/anaconda3/envs/bg_matting/bin/python

6、选择本地项目目录与远程项目目录位置映射

7、可以在右下方看到你的远程执行配置。

8、pycharm会将你的项目全量同步到远程的docker容器内。

验证

现在我们所有的配置都做好了,来运行一下我们的项目看看是否能够远程运行成功。

运行验证

没有问题。

代码更新如何上传或者下载远端容器产物

可以点击工具把选中的文件或者文件夹推送到docker容器内,或者反过来从远端容器下载到本地。

验证容器内的产物是否生成

输入命令进入容器,查看程序运行产物。

[root@data2 home]# docker exec -it a8d bash
(base) root@data2:/# cd /home/BackgroundMattingV2-master/
(base) root@data2:/home/BackgroundMattingV2-master# ls
LICENSE      data          export_onnx.py         inference_hy.spec        inference_video.py   train_base.py
README.md    data_path.py  export_torchscript.py  inference_images.py      inference_webcam.py  train_refine.py
__pycache__  dataset       images                 inference_speed_test.py  model
content      doc           inference_hy.py        inference_utils.py       requirements.txt
(base) root@data2:/home/BackgroundMattingV2-master# cd content/output/
(base) root@data2:/home/BackgroundMattingV2-master/content/output# ls
fuse
(base) root@data2:/home/BackgroundMattingV2-master/content/output#

没有问题!

总结

总的来说这种方式还是很不错的,因为在工作中我们并没有那么多显卡,又或者你需要调试已经部署的工程项目,都是很好的选择。还有一个很重要的功能,就是这个你调试好的容器可以直接打包docker镜像,其他人只要拉取该镜像就可以运行你的程序代码。直接解决容器化工程的问题。

如果这篇文章对你有作用的话,请来个点赞吧,比心。

Pycharm代码docker容器运行调试 | 机器学习系列相关推荐

  1. ML与Docker:《Deploy Machine Learning Pipeline on the cloud using Docker Container使用Docker容器在云端部署机器学习管道

    ML与Docker:<Deploy Machine Learning Pipeline on the cloud using Docker Container使用Docker容器在云端部署机器学 ...

  2. Docker4.Docker容器运行、查看、启停、删除

    Docker4.Docker容器运行.查看.启停.删除 docker run:运行容器 常用选项参数 -p的四种方式 docker run -it:交互式进入容器 docker run -d:后台启动 ...

  3. Docker容器运行GUI程序的方法(直接进入Docker容器运行或通过SSH连接Docker容器运行)

    以下两种方法都需要先在主机执行 xhost + 命令,若无该命令,先apt安装 x11-xserver-utils 后再执行,否则会报 No protocol specified 这个错 sudo a ...

  4. 使用docker容器运行java程序

    使用docker容器运行java程序 java 18 一.文件准备 mkdir 11 cd 11 创建并进入目录 docker pull ubuntu:22.04 wget https://downl ...

  5. VSCode连接远程服务器docker容器并调试代码

    1.连接远程服务器 (1)在VSCode中安装扩展Remote Development (2)安装完成左侧菜单栏出现一个远程资源管理的图标,选择SSH Targets,点击"+"添 ...

  6. dingding(钉钉)+sonar(代码质量管理工具)通知并打包成docker容器运行

    项目地址:https://gitee.com/vians/dingding-sonar dingding-sonar-docker 基于dingding-sonar的作者,钉钉的sonar集成通知,钉 ...

  7. docker容器运行mysql持久化_docker容器实现数据持久化的两种方式及其区别

    前言 这篇博文是我对docker实现数据持久化几种方式的特征进行一个总结. 在docker中,它的存储文件系统是在dockerhost上原有的xfs或ext4架设了一层文件系统:overlay2(将此 ...

  8. linux docker 容器运行后不退出的方法

    现象 启动docker容器  docker run –name [CONTAINER_NAME] [CONTAINER_ID]  查看容器运行状态  docker ps -a  发现刚刚启动的mydo ...

  9. Docker容器运行后退出,怎么才能一直运行?

    现象 启动docker容器      docker run –name [CONTAINER_NAME] [CONTAINER_ID] 查看容器运行状态      docker ps -a 发现刚刚启 ...

最新文章

  1. android屏幕密度高度,Android获取常用辅助方法(获取屏幕高度、宽度、密度、通知栏高度、截图)...
  2. 【java】牛客网刷题
  3. 构建现代化的命令行工具
  4. go语言触发异常的场景
  5. 移动机器人路径规划---深蓝学院培训学习记录
  6. 【Paper】2018_Group Consensus for Discrete-Time Heterogeneous Multiagent Systems with Input and Commun
  7. Mybatis插入数据
  8. [渝粤教育] 西南科技大学 管理信息系统 在线考试复习资料(1)
  9. SQL SERVER 2005 使用订阅发布同步数据库
  10. Hibernate常用配置
  11. 4.4 数值分析: 局部收敛性
  12. 对付U盘病毒彻底免疫
  13. 人脸识别支付欺诈手段和防范措施
  14. SpaceSyntax【空间句法】之DepthMapX学习:第二篇 输出了什么东西 与 核心概念
  15. 领英中国总裁陆坚:顺应本土化发展,领英进入3.0阶段 。我们该如何正确使用领英
  16. FPGA配合debussy、modelsim仿真环境搭建
  17. 解决vmware虚拟机安装ubuntu 无法连接wifi找不到wifi适配器问题
  18. 上海市高新技术企业各区奖励政策汇总2022版
  19. 输出用1、2、3、4四个数字,能组成多少个互不相同且无重复数字的三位数(C语言)
  20. 百度语音识别下载|百度语音识别demo_绿盟市场_绿色软件联盟

热门文章

  1. Python:实现doomsday末日算法(附完整源码)
  2. 每日一佳——Information-Theoretic Metric Learning(Jason V. Davis et al. ,ICML,2007)
  3. 长理2019选拔赛1.0
  4. Plus版SBOM:流水线物料清单PBOM
  5. 英雄联盟出现game_error_directx的解决办法
  6. Markdown还能这么玩?这款开源神器绝了!
  7. 视频监控录像机默认端口 34567 修改为37420
  8. Win11电脑的色盲模式如何开启?
  9. 微PE工具箱增加安装Linux/Ubuntu/Centos/deepin系统菜单
  10. 张量积型的Bernstein基函数