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

相关推荐
小han的日常18 分钟前
pycharm分支提交操作
python·pycharm
想去看海98521 小时前
终端打开程序、为什么要用pycharm
ide·python·pycharm
陈晨辰熟稳重2 天前
20241112-Pycharm使用托管的Anaconda的Jupyter Notebook
python·jupyter·pycharm
计算机学姐2 天前
基于Python的高校成绩分析管理系统
开发语言·vue.js·后端·python·mysql·pycharm·django
计算机学姐3 天前
基于Python的药房管理系统
开发语言·vue.js·后端·python·mysql·pycharm·django
小李子-_-4 天前
使用pycharm调试程序——完全显示张量的数值
ide·python·pycharm
时差9534 天前
使用PyCharm连接虚拟机运行spark任务,本地开发:远程提交测试
大数据·服务器·hadoop·python·pycharm·spark
神里大人7 天前
idea、pycharm等软件的文件名红色怎么变绿色
java·pycharm·intellij-idea
张小生1807 天前
PyCharm中 argparse 库 的使用方法
python·pycharm
叶知安7 天前
如何用pycharm连接sagemath?
ide·python·pycharm