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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/221424.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【coco】掩膜mask影像转coco格式txt(含python代码)

最近在做实例分割,遇到二值掩膜影像——coco格式txt的实例分割转换问题,困扰很久,不知道怎么转换,转出来的txt没法用代码成功读取。一系列问题,索性记录下自己的结局路程,方便大家python代码自取。 目录 &…

GPT4 Vision对于盲人或低视力者将来会成为他们的眼睛直通大脑 还需要解决一些关键问题 骨传导能解决耳聋问题吗?

一位盲人测试者说: 感谢您倾听我们所有人并理解这项技术即使只是一瞥也带来了巨大的影响。在这项服务之前,我从未真正情感上理解一张图片的力量。标志和书中的页面都获得了新的意义,而且得到对在世或已故家庭成员的描述实在是不可思议。感谢…

DevOps搭建(五)-JDK安装详细步骤

1、官网下载 官方网站下载JDK,这里我们安装JDK8 https://docs.oracle.com/javase/8/docs/technotes/guides/install/install_overview.html 点击上图中的Java SE Downloads项目,也可直接点击下面链接进入: Java Downloads | Oracle 往下滚…

学习Linux(3)-Linux软件安装之yum

什么是yum yum( Yellow dog Updater, Modified)是一个在 Fedora 和 RedHat 以及 SUSE 中的 Shell 前端软件包管理器。 假设,在一台window系统的电脑上要用qq,那么我们回去下载qq的安装包,然后执行qq.exe文件在本机上进…

10 个顶级 iPhone 数据恢复软件工具评测

很多事情都可能导致 iPhone 数据丢失:iOS 更新失败、越狱错误、解锁问题等。如果您遇到类似情况并且想要访问您的文件,通常最好的解决方案是使用数据恢复工具。由于研究市场上可用的工具可能会花费您大量的时间(在尝试从 iPhone 恢复数据时&a…

7.25 SpringBoot项目实战【我的借阅记录】

文章目录 前言一、编写控制器二、编写服务层三、Git提交前言 至此,我们已经实现 图书借阅、收藏、评论等场景,最后来到【还书】场景,首先 还书的 入口 一般 是【我的借阅记录】,在这里可以根据产品设计,对于需要归还的书 操作【还书】,所以本文来实现【我的借阅记录】。…

报表自定义导出文件名

需求背景 一般报表模板文件名按照开发人员定义的规则都是英文或拼音字母,在业务人员使用导出excel或pdf的时候默认文件名为报表模板的文件名,此时用户希望导出文件名是报表的业务名称。 解决方案 硕迪报表提供jsp的标签自定义saveAsName属性&#xff…

SAP STMC教程

一、概述 SAP Technical Monitoring Cockpit(STMC)是SAP最新推出的数据迁移工具,方便在项目部署阶段进行期初数据的导入,是LSMW的小平替,做过LSMW的朋友应该都知道,LSMW步骤比较繁复,并且校验复…

从零开始创建一个项目,springBoot+mybatisPlus+mysql+swagger+maven

一,前提 从零开始创建一个项目,绑定了数据库 用到的技术栈:springBootmybatisPlusmysqlswaggermaven 二,创建项目步骤 1,创建项目 创建出来的项目结构如图所示 2,修改配置文件 因为我比较习惯yml语言&…

Java刷题篇——LeetCode118. 杨辉三角

1.题目描述 给定一个非负整数numRows,生成杨辉三角的前numRows行。 在杨辉三角中,每个数是它左上方和右上方的数的和。 示例1 输入:numRows 5 输出:[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1] 示例2 输入:numRows 1…

如何在 Eolink Apikit 中发起 TCP/UDP 文档测试

TCP/UDP 是两种常用的网络传输协议。TCP 协议提供可靠的连接,而 UDP 协议提供不可靠的连接。 TCP 协议是面向连接的协议,在建立连接之前,客户端和服务器需要先握手。握手完成后,客户端和服务器之间就会建立一个可靠的连接。在连接…

开源协作知识库软件AFFINE如何本地部署并结合内网穿透实现远程访问——“cpolar内网穿透”

前言 本篇文章讲解Notion开源平替全能知识库工具AFFINE如何本地部署,并实现公网远程访问。AFFiNE 是一个全新的开源项目,旨在克服 Notion 和 Miro 在安全和隐私方面的一些局限性。它的设计目标是帮助用户将会议记录、待办事项、文档中的目标、视频会议白…

快速排序的非递归实现

上期我们实现了快速排序的递归实现,但是我们知道如果递归深度太深,栈就会溢出,所以我们本期将为大家讲述快速排序的非递归实现,我们需要用到栈的数据结构,我们知道栈中的数据全是在堆区开辟的空间,堆的空间…

双导师制的中国社科大-新加坡新跃社科大学工商管理博士

双导师制的中国社科大-新加坡新跃社科大学工商管理博士 论文采用双导师制,中新双方各安排一名导师,以社科大导师为主。导师学生双向选择,主要参考学生的研究方向。 中国社科大-新加坡新跃社科大学工商管理博士师资详情 中国社会科学院大学…

Halcon reduce_domain和scale_image的作用

在Halcon中,reduce_domain是用于缩小图像域(Image Domain)的操作。 它的作用是通过指定一个感兴趣区域(ROI,Region of Interest),将图像数据限制在该区域内,从而实现对图像进行裁剪…

到底什么是DevOps

DevOps不是一组工具,也不是一个特定的岗位。在我看来DevOps更像是一种软件开发文化,一种实现快速交付能力的手段。 DevOps 强调的是高效组织团队之间如何通过自动化的工具协作和沟通来完成软件的生命周期管理,从而更快、更频繁地交付更稳定的…

UDP实现群聊

代码: import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.net.*; import java.io.IOException; import java.lang.String;public class liaotian extends JFrame{private static final int DEFAULT_PORT8899;private JLabel stateLB…

基于javaweb实现的实践教学基地管理系统

一、系统架构 前端:html | js | css | bootstrap 后端:spring | springmvc | mybatis-plus 环境:jdk1.8 | mysql8 | tomcat | maven 二、代码及数据库 三、功能介绍 01. web-首页1 02. web-首页2 03. web-首页3 04. web-首页4 05. 管…

【android开发-24】android中访问http协议网络以及解析xml格式数据的详细讲解

1,访问http协议网络 在Android中,使用HttpURLConnection访问网络的完整参考代码如下: 首先,创建一个名为HttpUtils的工具类,用于封装HTTP请求的方法。 import java.io.BufferedReader; import java.io.IOException;…

智慧运维:一体化管理软件解决方案

随着信息化时代的快速发展,各行各业对运维管理的要求越来越高。为了满足不断增长的需求,我们推出了一款全新的一体化监控运维软件。该软件采用综合运维系统,实现对云服务平台、大数据平台、智慧安防、业务软件、基础设施和安全防范设施的全方…