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

news2024/9/26 1:23:15

概述

在编写常规深度学习代码时,总是需要使用服务器上的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.coloradmin.cn/o/1310348.html

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

相关文章

格式工厂功能详解!!

格式工厂(Format Factory)是由上海格诗网络科技有限公司创立于2008年2月,是面向全球用户的互联网软件。 下载地址https://www.onlinedown.net/soft/64717.htm: 该软件的主打产品“格式工厂”发展以来,已经成为全球领…

华为云之云监控服务CES基础入门实践

华为云之云监控服务CES基础入门实践 一、云监控服务CES介绍二、本次实践介绍1.本次实践介绍2.本次实践目录 三、购买华为云ECS云服务器1.进入ECS云服务器控制台2.购买ECS云服务器3.检查ECS弹性云主机的状态 四、监控ECS弹性云主机性能1.远程连接ECS2.进入云监控服务CES页面3.使…

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

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

Leetcode刷题笔记题解(C++):328. 奇偶链表

思路:遍历链表生成奇链表和偶链表,然后拼接两个链表生成新的链表。 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), ne…

策略模式-大道至简

文章目录 摆个类图本质 摆个类图 本质 定义一个标准策略接口Strategy,这个接口中声明一个场景下应该使用的策略(执行的逻辑)。随后具体的执行器(具体的场景)应当实现这个接口,并实现自己的策略执行逻辑。为…

高通平台开发系列讲解(外设篇)高通平台EMMC适配说明

文章目录 一、EMMC的内部框图说明二、EMMC 设备树配置三、EMMC 内核配置四、EMMC 源码沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇章主要图解高通平台 EMMC适配说明。 eMMC(嵌入式多媒体卡)是一种集成了闪存存储器和控制器的存储芯片,通常用于嵌入式设备中,…

实时输电线路故障监测系统:精准定位、快速修复

随着电力系统的不断发展,输电线路的故障检测和维修变得越来越重要。为了提高故障检测的效率和准确性,恒峰智慧科技设计的实时输电线路故障监测系统应运而生。本文将介绍一种采用分布式行波测量技术的输电线路故障定位及隐患监测装置,以帮助您…

6.3 C++11 原子操作与原子类型

一、原子类型 1.多线程下的问题 在C中&#xff0c;一个全局数据在多个线程中被同时使用时&#xff0c;如果不加任何处理&#xff0c;则会出现数据同步的问题。 #include <iostream> #include <thread> #include <chrono> long val 0;void test() {for (i…

微信小程序单图上传和多图上传

图片上传主要用到 1、wx.chooseImage(Object object) 从本地相册选择图片或使用相机拍照。 参数 Object object 属性类型默认值必填说明countnumber9否最多可以选择的图片张数sizeTypeArray.<string>[original, compressed]否所选的图片的尺寸sourceTypeArray.<s…

docker-ubuntu中基于keepalived+niginx模拟主从热备完整过程

一、环境准备 &#x1f517;在Ubuntu中安装docker 二、主机 1、环境搭建 1.1 镜像拉取 docker pull ubuntu:16.041.2 创建网桥 docker network create -dbridge --subnet192.168.126.0/24 br11.3 启动容器 docker run -it --name ubuntu-1 --privileged -v /home/vac/l…

运行和部署若依分离版前端

一、运行 一、用vscode打开 二、安装依赖 # 建议不要直接使用 cnpm 安装依赖&#xff0c;会有各种诡异的 bug。可以通过如下操作解决 npm 下载速度慢的问题 npm install --registryhttps://registry.npmmirror.com# 启动服务 npm run dev浏览器访问 http://localhost:80二、部…

美颜技术讲解:视频美颜SDK的开发与集成

如今&#xff0c;美颜技术的应用愈发成为吸引用户的一项重要功能。本文将深入探讨视频美颜SDK的开发与集成&#xff0c;揭示其背后的技术原理和实现步骤。 一、美颜技术的背后 美颜技术并非仅仅是简单的滤镜效果&#xff0c;而是一项涉及复杂图像处理和算法的技术。在视频美颜…

(第31天)RHEL 7 安装 Oracle 11GR2 RAC 数据库

前言 Oracle RAC是什么? Oracle Real Application Clusters (RAC) 允许客户跨多台服务器运行单个 Oracle 数据库,以最大限度地提高可用性并实现水平可扩展性,同时访问共享存储。连接到 Oracle RAC 实例的用户会话可以在中断期间进行故障转移并安全地重放更改,而无需对最终…

12.7 GNSS学习笔记记录

1.接收机坐标初值一般采用单点定位获得 2.定位精度主要取决于以下两个因素&#xff1a;一是所测卫星在空间的几何分布&#xff0c;通常称为卫星的几何分布图形&#xff1b;二是观测量的精度。其中&#xff0c;观测量的精度与卫星轨道和钟差、大气传播延迟、接收机噪声等因素有…

2024 年,新程序员如何与AI共赢!!

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

JAVA:注册表窗口的实现

目录 题目要求&#xff1a; 思路大意&#xff1a; 窗体的实现&#xff1a; 窗口A&#xff1a; 窗口B&#xff1a; 窗体之间的构思&#xff1a; 关键代码的实现&#xff1a; 窗口A&#xff1a; 封装列表&#xff1a; 窗口B&#xff1a; 题目要求&#xff1a; 使用…

Web漏洞分析-文件解析及上传(下)

随着互联网的迅速发展&#xff0c;网络安全问题变得日益复杂&#xff0c;而文件解析及上传漏洞成为攻击者们频繁攻击的热点之一。本文将深入研究文件解析及上传漏洞&#xff0c;通过对文件上传、Web容器IIS、命令执行、Nginx文件解析漏洞以及公猫任意文件上传等方面的细致分析&…

前端vue3——实现二次元人物拼图校验

文章目录 ⭐前言⭐vue3拖拽实现拼图&#x1f496; 思路分解&#x1f496; 布局结构&#x1f496; 拖拽函数&#x1f496; 校验函数&#x1f496; inscode整体代码 ⭐运行效果&#x1f496; 随机顺序&#x1f496; 拖拽中&#x1f496; 校验失败&#x1f496; 校验通过 ⭐总结⭐…

【LeetCode:2132. 用邮票贴满网格图 | 二维前缀和 + 二维差分和】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

【Java8系列08】Java8中reducing妙用

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…