PyCharm连接远程服务器上Docker容器,使用远程服务器的python intercepter解释器和GPU资源 [本地调试深度学习代码]

概述

在编写常规深度学习代码时,总是需要使用服务器上的GPU资源,所以一般要写完代码,放到服务器,然后使用GPU运行。但是由于之前的习惯,总想本地调试一下或者本地直接跑测试结果,再放到服务器去跑。

网上查了一些文档,遇到了一系列问题,最终还是完美的解决了。整理一下分享出来希望对大家有用。

文档包括三个方面:

  1. 服务器Docker启动,在Docker中使用GPU资源
  2. Docker开启ssh登录
  3. PyCharm连接远程服务器Docker,使用python解释器和远程GPU

1. Docker中使用GPU

我这里使用的镜像是 registry.cn-hangzhou.aliyuncs.com/modelscope-repo/modelscope:ubuntu20.04-cuda11.3.0-py38-torch1.11.0-tf1.15.5-1.6.1

这个影响不大。

为什么要使用Docker呢,因为这样能保证开发环境的一致性。

启动命令:

shell 复制代码
docker run -p 2017:22 --name="gpu-test"  --gpus all -it -v /root/localpath:/workspace  registry.cn-hangzhou.aliyuncs.com/modelscope-repo/modelscope:ubuntu20.04-cuda11.3.0-py38-torch1.11.0-tf1.15.5-1.6.1 bash

-p 2017:22 : 映射了一个宿主机的2017端口到容器的22端口,为了之后连接容器
-v /root/localpath:/workspace : 加了映射容器的磁盘到宿主机上

这样启动后,容器中就可以看到所有的GPU资源

可以验证下是否可以使用gpu

python 复制代码
import torch
print(f'\nAvailable cuda = {torch.cuda.is_available()}')
print(f'\nGPUs availables = {torch.cuda.device_count()}')
print(f'\nCurrent device = {torch.cuda.current_device()}')
print(f'\nCurrent Device location = {torch.cuda.device(0)}')
print(f'\nName of the device = {torch.cuda.get_device_name(0)}')

这里需要注意宿主机是有GPU驱动的,容器中有cuda等环境。

到这个阶段,就可以在容器中跑程序了,如果没有本地调试需求,可以把代码传到宿主机目录,在容器中可以直接运行。如图:

2. 开启Docker中ssh

因为后续需要PyCharm连接Docker容器,所以容器中需要现有ssh服务,并把22端口暴露出去,我们是映射到宿主机上一个端口上。

shell 复制代码
docker run -p 2017:22

在我提供的这个镜像上没有ssh,需要手动安装一下,如果有ssh就不需要装了。

安装脚本:

shell 复制代码
# 更新密码
passwd

# 更新源
apt-get -y update

# 安装sshserver
apt-get install openssh-server
apt-get install openssh-client

# 开启密码登录
vim /etc/ssh/sshd_config
在文件最后加上一行
PermitRootLogin yes #允许root用户使用ssh登录

# 重启ssh服务
/etc/init.d/ssh restart


# 尝试连接远程容器
ssh root@10.22.33.44 -p 2017

3. PyCharm中连接Docker中的Python解释器和GPU

有两个地方需要配置,但是可以一步配置完成。

我使用的PyCharm 2023.2.1 (Professional Editor)版本

使用远程解释器的操作步骤:

  1. 创建Interpreter

    操作路径:Add New Interpreter --> On SSH

  2. 填写远程服务器上Docker容器连接信息

    这里弹框需要填入远程信息,这里的IP是远程宿主机,端口是容器暴露的2017端口,2017会映射到容器内部22端口上,就可以通过2017连接到容器22.

  3. 输入密码

  4. 设置解释器地址

    这一步需要特别注意

    第一Environment: 一定选择远程已存在的解释器,不要创建新的解释器。

    第二Interpreter : 解释器地址,选择远程容器中的解释器地址,具体位置可以在远程中查询,查询方式:

    进入python

python 复制代码
import os
print(os.sys.executable)  # 会输出解释器地址

# 我使用的镜像的解释器位置,所以我在这一步设置的这个地址
/opt/conda/bin/python

第三sync folders : 是选择把本地文件同步到远程容器的什么目录。这儿可以选择一个容器的挂载目录,防止容器重启,远程文件丢失,还需要重传。

最后自动上传可以勾选上,修改后会自动上传。

创建完成后,可以在interpreter中查看,依赖是否跟远程相同。

如果显示的远程pip list中依赖,即成功。

然后执行Run试试。

参考链接:https://zhuanlan.zhihu.com/p/605389180

相关推荐
Yongqiang Cheng8 小时前
PyCharm 设置 Tabs and Indents
pycharm·tabs·indents
MerlinTheMagic8 小时前
PyCharm无法启动jupyter server问题的解决
ide·jupyter·pycharm
Python×CATIA工业智造8 小时前
Python装饰器解包装技术详解:从原理到高级应用
python·pycharm
饼瑶12 小时前
基于AutoDL远端服务器在pycharm复现:具身智能论文pai0
服务器·elasticsearch·pycharm
少林and叔叔12 小时前
基于yolov5.7.0的人工智能算法的下载、开发环境搭建(pycharm)与运行测试
人工智能·pytorch·python·yolo·目标检测·pycharm
动能小子ohhh13 小时前
Langchain从零开始到应用落地案例[AI智能助手]【3】---使用Paddle-OCR识别优化可识别图片进行解析回答
人工智能·python·pycharm·langchain·ocr·paddle·1024程序员节
Serendipity_Carl13 小时前
爬虫数据清洗可视化案例之全球灾害数据
爬虫·python·pycharm·数据可视化·数据清洗
Python×CATIA工业智造1 天前
Pycatia二次开发基础代码解析:组件识别、选择反转与链接创建技术解析
python·pycharm
妮妮喔妮2 天前
pycharm远程提交Git
ide·git·pycharm
被放养的研究生2 天前
PyCharm常用快捷键
pycharm