当前位置: 首页 > news >正文

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呢,因为这样能保证开发环境的一致性。

启动命令:

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资源
容器中的nvidia-smi
可以验证下是否可以使用gpu

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
这里需要注意宿主机是有GPU驱动的,容器中有cuda等环境。

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

2. 开启Docker中ssh

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

docker run -p 2017:22

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

# 更新密码
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
    创建interpreter
    操作路径:Add New Interpreter --> On SSH

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

  3. 输入密码登录密码
    提示连接成功

  4. 设置解释器地址
    解释器配置
    这一步需要特别注意
    第一Environment: 一定选择远程已存在的解释器,不要创建新的解释器。
    第二Interpreter : 解释器地址,选择远程容器中的解释器地址,具体位置可以在远程中查询,查询方式:
    进入python

import os
print(os.sys.executable)  # 会输出解释器地址# 我使用的镜像的解释器位置,所以我在这一步设置的这个地址
/opt/conda/bin/python

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

创建完成后,可以在interpreter中查看,依赖是否跟远程相同。
在这里插入图片描述
如果显示的远程pip list中依赖,即成功。

然后执行Run试试。
在这里插入图片描述

在本地运行

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

相关文章:

  • 解决Sortable拖动el-table表头时,由于选择列造成的拖拽顺序错乱的bug
  • 排序-选择排序与堆排序
  • ubuntu18.04配置cuda+cudnn+tensorrt+anconda+pytorch-gpu+pycharm
  • 开源治理典型案例分享(汇编转)
  • 使用BeautifulSoup 4和Pillow合并网页图片到一个PDF:一种高效的方式来处理网页图像
  • 2024 年 SEO 现状
  • IDEA版SSM入门到实战(Maven+MyBatis+Spring+SpringMVC) -Spring IOC底层实现
  • 2023最新vue安装(npm,yarn,国内镜像,vue安装,vue导包)全套教程2023年12月最新
  • 新网站如何被搜索引擎迅速收录
  • 如何写好PPT报告
  • 5.清除SVN用户账号两种方式
  • 亚信科技AntDB携手蓝凌软件,助推企业数字化办公转型升级
  • 打破空间限制,畅享真实生活
  • 【精选】算法设计与分析(第三章分治法)
  • [算法基础 ~排序] Golang 实现
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • 【391天】每日项目总结系列128(2018.03.03)
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • classpath对获取配置文件的影响
  • go语言学习初探(一)
  • isset在php5.6-和php7.0+的一些差异
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • PHP的类修饰符与访问修饰符
  • python学习笔记 - ThreadLocal
  • Python学习笔记 字符串拼接
  • spring boot 整合mybatis 无法输出sql的问题
  • spring学习第二天
  • vue-router的history模式发布配置
  • 创建一种深思熟虑的文化
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 给github项目添加CI badge
  • 回流、重绘及其优化
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 前端面试之闭包
  • 使用parted解决大于2T的磁盘分区
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 一个完整Java Web项目背后的密码
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (9)STL算法之逆转旋转
  • (汇总)os模块以及shutil模块对文件的操作
  • (十六)串口UART
  • (四)汇编语言——简单程序
  • (原+转)Ubuntu16.04软件中心闪退及wifi消失
  • (源码版)2024美国大学生数学建模E题财产保险的可持续模型详解思路+具体代码季节性时序预测SARIMA天气预测建模
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • (转)jQuery 基础
  • .NET 8.0 发布到 IIS
  • .Net Attribute详解(上)-Attribute本质以及一个简单示例