wordpress 资源站主题,网架公司招聘信息,全国工商企业查询网官网,网站是否备案怎么查询DockerPyCharmMiniconda实现深度学习代码远程调试和环境隔离 本文详细介绍了如何在局域网环境下#xff0c;利用Docker、PyCharm和Miniconda构建一个高效的深度学习远程调试平台。首先在服务器#xff08;server#xff09;上#xff0c;通过Docker构建包含不同CUDA环境的镜…DockerPyCharmMiniconda实现深度学习代码远程调试和环境隔离 本文详细介绍了如何在局域网环境下利用Docker、PyCharm和Miniconda构建一个高效的深度学习远程调试平台。首先在服务器server上通过Docker构建包含不同CUDA环境的镜像以运行容器并实现环境的隔离。通过位于主机host的PyCharm将项目代码deploy至容器中从而实现远程debug或代码运行。为了处理容器内产生的大量数据文件这些文件将被挂载到服务器的存储设备上。此外通过在服务器Windows系统上设置文件分享与主机建立连接便于用户在主机上访问和浏览由深度学习应用产生的数据。这种配置确保Host内的项目代码只能在Host上被修改而server上的数据文件只能在host上被预览且不可更改从而最大程度上保障了数据的安全性和完整性。
环境说明
Windows 11 23H2Docker Desktop 4.34.2WindowsDocker Engine v27.2.0PyCharm 2024.2.1GeForce 3060Ti
路由配置
WAN口接入互联网LAN口接host和servers为LAN口配置静态ip例如本文主图的静态ip配置。
关于路由我选用的是水星MercuryMR100GP-AC 商用5口千兆有线路由-250元。
Docker设置Windows系统
以Windows上Docker Desktop 4.34.2 (167172)为例。
环境配置
docker图标右键switch to Linux containers切换至Linux container如果显示switch to Windows containers说明已经在Linux container环境了跳过该步骤即可。 设置里builders把desktop-Linux设置为default builder. 网络配置
设置里general-expose daemon on tcp://localhost:2375选项开启。让其他软件可以调用docker的daemon接口 that only can be accessed via tcp://127.0.0.1, My inner IP address 192.168.3.9 doesn’t work. The document said to edit the C:\ProgramData\Docker\config\daemon.json and add “hosts”: [“tcp://0.0.0.0:2375”], but it’s doesn’t work for any IP address, I’m very sure I did it as the document. 不要尝试上述方案因为不起作用。请按下述方式进行。 管理员身份运行Windows powershell运行监听防火墙
netsh interface portproxy add v4tov4 listenport2375 connectaddress127.0.0.1 connectport2375 listenaddress192.168.1.3 protocoltcp
netsh advfirewall firewall add rule namedocker_daemon dirin actionallow protocolTCP localport2375listenaddress192.168.1.3是我server的静态ip你应当修改为你的server的实际地址。
设置docker的proxy才能拉取镜像或者换源大部分镜像最近都失效了或者只能在校园/公司网内部使用。 注意上述ip和port应当改成你自己局域网内的proxy地址。
连接测试
pycharm(2024.2): settings-build,execution,deployment-docker 通过TCP socket连接server’s docker若virtual machine path那个框内有项目可以先把里面的项目删掉。看是否显示connection successful. 然后你可以在pycharm里远程控制docker on the server.找到侧边栏services或快捷键alt8。你可以自行探索一下pycharm的远程docker控制功能有哪些。 构建image
直接pull image
我构建好的镜像已上传my docker hub可以直接pull避免手动构建失败:
GeForce 3060Ti适用此镜像从nvidia官方镜像nvidia/cuda:11.3.1-cudnn8-runtime-ubuntu20.04构建
docker pull sylvanding/my-cuda:11.3.1-cudnn8-runtime-ubuntu20.04image push命令 docker push sylvanding/my-cuda:11.3.1-cudnn8-runtime-ubuntu20.04
# The push refers to repository [docker.io/sylvanding/my-cuda]从Dockerfile手动构建
我的server使用GeForce 3060Ti以此为例我们从nvidia官方镜像nvidia/cuda:11.3.1-cudnn8-runtime-ubuntu20.04开始构建dockerfile:
继承官方cuda和cudnn runtime环境安装工具包最重要的是openssh-server将用于pycharm远程连接修改root用户登录密码修改openssh配置文件允许远程连接安装nvidia-container-toolkit会根据当前容器环境自动选择合适的版本从而使nvidia-smi等命令可以运行安装miniconda设置工作目录和暴露接口
上述dockerfile文件如下
FROM nvidia/cuda:11.3.1-cudnn8-runtime-ubuntu20.04LABEL maintainersylvandingqq.com# set env
# https://stackoverflow.com/questions/61388002/how-to-avoid-question-during-the-docker-build
ENV TZAsia/Shanghai \DEBIAN_FRONTENDnoninteractiveRUN apt-get update apt-get install -y \wget \curl \git \bzip2 \vim \openssh-server \ rm -rf /var/lib/apt/lists/*# change root pwd
ARG USERPWD123456
RUN echo root:${USERPWD} | chpasswd# openssh config
RUN mkdir /var/run/sshd
RUN echo PasswordAuthentication yes /etc/ssh/sshd_config.d/ssh_config.conf \ echo PermitRootLogin yes /etc/ssh/sshd_config.d/ssh_config.conf
RUN service ssh restart# install nvidia-container-toolkit
# https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html
## configure the production repository
RUN curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | gpg --dearmor -o \/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \ curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \sed s#deb https://#deb [signed-by/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g | \tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
## update the packages list from the repository
RUN apt-get update
## install the NVIDIA Container Toolkit packages
RUN apt-get install -y nvidia-container-toolkit# install Miniconda
# https://docs.anaconda.com/miniconda/#quick-command-line-install
RUN mkdir -p ~/miniconda3
RUN wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh
RUN bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3
RUN rm ~/miniconda3/miniconda.sh
## initialize newly-installed Miniconda
RUN ~/miniconda3/bin/conda init bashWORKDIR /reposEXPOSE 22 8080各个组件的版本选择显卡驱动 → CUDA → CUDA Toolkit → cuDNN → Pytorch 通过命令构建image
docker build --build-arg HTTP_PROXYhttp://192.168.1.2:10811 -f ./path/to/your/Dockerfile -t sylvanding/my-cuda:11.3.1-cudnn8-runtime-ubuntu20.04 .注意修改你的http_proxy才能顺利构建环境国内。
在pycharm里构建image
打开编写的dockerfileedit设置build image的配置 name是你这个run configuration的名称server选择你刚刚添加的docker服务器接口注意在build args中添加http_proxy才能顺利构建环境国内。之前设置的proxy只是docker desktop的proxy这里构建镜像时要再次指定 最后apply和run。 创建容器
pycharm里选中image右键create container. docker run配置
server: 设置为之前配置的网络dockerbind ports: 将container 22端口映射到server的2222端口bind mounts: 将container的/repos工作路径挂载到server的E:\repos方便以后直接在serverWindows里设置E:\repos文件夹网络共享文件env variables: 为container设置proxy记得更换为你自己的run options: --gpus all
docker run -p 2222:22 -v E:\repos:/repos --env http_proxyhttp://192.168.1.2:10811 --env https_proxyhttp://192.168.1.2:10811 --name cuda113-cudnn8-ubuntu20 --pull missing --restart always --gpus all sylvanding/my-cuda:11.3.1-cudnn8-runtime-ubuntu20.04 ☑️ container创建成功 PyCharm项目部署和远程同步基于Windows文件共享
pycharm项目部署
settings-deployment-new SFTP 新建ssh连接 ❌ 若test connection提示Cannot connect to remote host: net.schmizz.sshj.transport.TransportException: Server closed connection during identification exchange首先尝试重启ssh服务docker exec cuda113-cudnn8-ubuntu20 service ssh restart. 若依然无法连接检查/etc/ssh/sshd_config.d/*.conf和/etc/ssh/sshd_config等ssh配置文件和防火墙配置修改正确后重启ssh服务再次进行test connection. root path设置为工作目录Rsync可根据个人需求选择是否开启。 设置项目mapping路径local path是本地项目路径 --mapping deployment path是server上相对于root path的远程项目路径。 向server的development path推送项目选中需要推送的项目比如我的project是DBlink工具栏tools-deployment-upload…建议开启automatic upload. ⚠️ 不推荐使用Deployment中的 Mapping 设置为记录的完整性在此列出相关操作。更推荐在配置远程interpreter时直接设置项目同步见下一节原因如下 Deployment 功能主要用于将本地开发环境中的文件部署到远程服务器上。这包括将代码文件、资源和相关配置文件传输到线上环境或开发测试服务器中。SSH 连接解释器中的 Sync Folders 设置主要用于同步本地和远程解释器环境中的文件以便在远程服务器上运行和测试代码同时保持本地和远程环境的代码一致性。非常适合于远程开发场景可以在本地编辑代码并直接在远程环境下运行和调试。 Deployment 主要用于部署而 Sync Folders 更侧重于持续的开发和实时调试。如果是开发过程中频繁需要测试代码即利用远程资源和环境则使用 SSH 解释器的 Sync Folders 更为合适如果主要是将更新推送到生产或测试环境使用 Deployment 功能会更直接有效。 ——generated by GPT 推送成功结果查看 pycharm远程miniconda环境解释器配置
通过ssh连接远程container调用miniconda获取miniconda中的所有虚拟python环境。设置双向文件同步。
settings-project-python interpreter-add interpreter -on ssh ⚠️ 这里并非创建基于docker的interpreter因为我的之前run的container cuda环境在多个项目中是可以复用的因此我们在container中用miniconda创建虚拟环境是一种更好的选择。 自动读取远程环境配置… 选择conda environment设置conda虚拟环境。sync folders填写工作路径/repos/your project name勾选自动上传到服务器。 查看interpreter配置结果 查看同步情况 查看从container-server的挂载是否成功 Windows文件共享 ⚠️ 测试发现pycharm可以实现本地文件的Automatic upload但无法实现服务器端文件更新后传回本地。事实上在深度学习模型训练、测试过程中产生的大量数据文件也不需要传回本地可以使用Windows的文件共享实现在server端共享挂载的文件夹在本地预览server上的文件选择需要的数据文件进行下载降低本地存储大小。 在host和server均为Windows操作系统上开启网络共享。 server
server: 在局域网上共享container挂载的E:\repos:/repos. server上也可以管理共享或查看所有共享 host
Host: 在host上挂载server共享的repos文件夹 这样数据文件存放在远端电脑而host可以通过文件共享的方式预览文件并不会下载文件到本地。
Windows通过SSH连接实现远程显存监控
ServerWindows
Windows开启SSH-server服务
检查 OpenSSH 的可用性
管理员身份打开powershell并运行:
Get-WindowsCapability -Online | Where-Object Name -like OpenSSH*如果任何 SSH 客户端或服务器功能不可用请根据 PowerShell (Admin) 中的要求使用以下命令。
安装 OpenSSH 服务器
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0再次检查可用性。 修改ssh-server配置文件
默认情况下OpenSSH 客户端和 OpenSSH 服务器位于以下目录C:\Windows\System32\OpenSSH. 管理员身份打开记事本再在记事本里打开配置文件sshd_config_default. 修改如下部分
PermitRootLogin yesPasswordAuthentication yes
保存。搜索service服务 找到openssh ssh server服务修改启动方式为“自动”点“启动”。然后apply and ok. Host-
Host通过ssh服务测试连接serverWindows ssh
ssh admin192.168.1.3显卡状态监控
nvidia-smi -l 5测试pytorch能否正常使用显卡
参考官方文档安装pytorch后尝试运行下述代码
import torchprint(torch.cuda.is_available())输出true则pytorch cuda版运行正常。 原创声明©️ 本文为博主原创文章转载需注明出处——https://blog.csdn.net/IYXUAN