大家好,又见面了,我是你们的朋友全栈君。
目录
介绍
版本
部署
安装驱动
安装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显卡是必须的)的服务器,检查一下显卡是否安装。
代码语言:javascript复制[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的系统镜像作为基础镜像。
代码语言:javascript复制[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
启动创建容器。
命令:
代码语言:javascript复制docker run --name=aliang -itd --gpus all --restart=always --shm-size 16G --net=host ubuntu:18.04 bash
执行结果:
代码语言:javascript复制[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、查看显卡编号
代码语言:javascript复制[root@data2 home]# nvidia-smi -L
选择一块卡,复制UUID后面的序列号
2、使用命令
代码语言:javascript复制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的虚拟环境肯定是不二选择。
这里要做的是在容器内安装,所以需要对容器内系统做一些命令升级。
代码语言:javascript复制apt-get update
apt-get upgrade
至于安装Anaconda,就不过多赘述了,上链接: https://blog.csdn.net/tkzky001/article/details/118705205
关于Anaconda的使用
简单的说一下Anaconda的原理,主要是它可以构建多个虚拟的运行环境,我们可以通过命令行前缀判断目前所使用的虚拟环境。
代码语言:javascript复制(base) root@data2:/#
base是基础环境,下面我们安装一下机器学习模型所需要的环境。使用下面的命令,其中机器学习架构主要是用pytorch。
创建python3.6的基础环境
代码语言:javascript复制conda create -n bg_matting python=3.6
激活环境
代码语言:javascript复制(base) root@data2:/# conda activate bg_matting
(bg_matting) root@data2:/#
我们可以通过前缀判断是不是切换到了新的虚拟环境。
验证环境
代码语言:javascript复制(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,不然太麻烦了。
代码语言:javascript复制apt-get install vim
安装openssh
代码语言:javascript复制apt-get install openssh-server
使用passwd,添加用户名密码
代码语言:javascript复制passwd
修改vim配置文件
代码语言:javascript复制vim /etc/ssh/sshd_config
修改两个地方
1、端口
需要说明一下,如果在构建docker容器的时候使用了 –net=host,则必须要改端口,因为原本的22端口会和宿主机的ssh端口冲突。可以调整为别的,例如下面。
如果使用的是上面另一种方法,则无需修改,因为容器是将内部的22端口映射到宿主机的2299,没有共享。
2、登入权限
#PermitRootLogin prohibit-password
PermitRootLogin yes
以上的配置都做完了下面启动ssh
代码语言:javascript复制/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容器内,或者反过来从远端容器下载到本地。
验证容器内的产物是否生成
输入命令进入容器,查看程序运行产物。
代码语言:javascript复制[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镜像,其他人只要拉取该镜像就可以运行你的程序代码。直接解决容器化工程的问题。
如果这篇文章对你有作用的话,请来个点赞吧,比心。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/175229.html原文链接:https://javaforall.cn