PyCharm+ssh跳板机+服务器

PyCharm+ssh跳板机+服务器

文章目录

  • PyCharm+ssh跳板机+服务器
    • 准备工作
      • 登录服务器
      • 查看CUDA
      • 查看conda
      • 创建虚拟环境
    • 前言
    • 配置ssh免密登录
    • 设置ssh隧道
    • 配置pycharm
    • 测试
      • 第一种
      • 第二种
    • 服务器空闲查询
    • 传输数据

准备工作

登录服务器

直接ssh连接就行,在终端(命令行)直接输入下面命令:

  1. 跳板机:ssh 跳板机用户名@跳板机ip -p 端口号 密码:xxx
  2. 内网服务器:ssh 内网服务器用户名@内网服务器ip -p 端口号 -i 私钥文件

登陆后再 cd /data0/qiujielv 然后在下面创建一个文件夹里面放自己的代码。
在这里插入图片描述

查看CUDA

使用nvidia-smi命令查看CUDA版本:
在这里插入图片描述

查看conda

服务器已经提前安装了conda,使用conda --version命令查看conda版本:
在这里插入图片描述
如果没有安装conda,则还需要安装conda。

创建虚拟环境

这部分参考博客。

输入此条指令创建conda虚拟环境,可以自己更改名称和python版本:

conda create -n 自己输入名称 python=版本号

在这里插入图片描述
在这里插入图片描述

输入下行代码激活刚才创建的环境,主要名称要与之前创建时设置的名称相应:

conda activate 名称

例如我们输入conda activate lxl激活刚才创建的虚拟环境:
在这里插入图片描述

需要在虚拟环境中重新安装包如jupyter,d2l,这部分跳到配置pycharm镜像源。

同样需要在虚拟环境中安装PyTorch。激活虚拟环境后进入PyTorch官网下载对应版本的pytorch(GPU版本),服务器是Linux,前面看到CUDA版本为11.4。

首先通过conda list命令看到虚拟环境中没有安装pytorch:
在这里插入图片描述
下载对应版本的pytorch(使用pip或者conda命令都行,这里用了conda命令):
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
下载完成:
在这里插入图片描述
通过conda list命令可以看到虚拟环境中安装了pytorch:
在这里插入图片描述

前言

pycharm连接内网服务器必须通过跳板机,这种情况下pycharm的配置则比较复杂,需要使用ssh免密登录和ssh隧道。如果不是内网服务器则pycharm配置比较简单。

下面介绍的都是pycharm通过跳板机连接内网服务器。

配置ssh免密登录

配置跳板机和服务器的免密登录,实现方式有多,这里只列出了一种方式。

  • 在本地配置
    到本地C:\Users\<Administrator>\.ssh文件夹下找到 config文件(.ssh文件夹没有,就新建个; config文件没有,就新建个),在config文件中输入以下内容:
Host *ControlPersist yesControlMaster autoControlPath ~/.ssh/%n:%p

在这里插入图片描述
同时,还需要在 config文件中再添加如下内容:

Host <jump>HostName <x1.x1.x1.x1>User <xxx>Port <xxx>Host <remote>HostName <x2.x2.x2.x2>User <xxx>Port <xxx>ProxyCommand ssh -q -W %h:%p <jump>

这里的<jump>是指跳板机,可以改成喜欢的名字,<x1.x1.x1.x1>是跳板机的ip,UserPort都是登录跳板机的所提供的参数;<remote>指服务器,也是命名而已,可以随便改,<x2.x2.x2.x2>是服务器的ip,UserPort都是从跳板机登录服务器所提供的参数。把本地登录跳板机的秘钥都放到.ssh文件夹中
在这里插入图片描述
在这里插入图片描述

这里用的是GUI界面,当然也可以使用vim编辑器修改config文件:

vim ~/.ssh/config

完成配置后在本地登录一次跳板机

登录跳板机:直接打开命令行,输入 ssh 跳板机用户名@跳板机ip -p 端口号 。然后回车
在这里插入图片描述

  • 登录跳板机,并在跳板机配置
vim ~/.ssh/config

在config文件中输入以下内容:

Host *ControlPersist yesControlMaster autoControlPath ~/.ssh/%n:%p

完成配置后在跳板机上登录一次内网服务器

登录内网服务器:
ssh 内网服务器用户名@内网服务器ip -p 端口号 -i 私钥文件

注意需要提前将内网服务器私钥文件放到 .ssh文件夹下

在这里插入图片描述
在这里插入图片描述

设置ssh隧道

在本地命令行输入如下命令即可:

ssh -N -f -L 6000:<内网服务器ip>:22 -p <跳板机端口> username@<跳板机ip> -o TCPKeepAlive=yes

上述命令各个参数的含义如下:

  • -N 告诉SSH客户端,这个连接不需要执行任何命令。仅仅做端口转发
  • -f 告诉SSH客户端在后台运行
  • -L 做本地映射端口

在这里插入图片描述

注意
配置好SSH免密登录后开机便不必再进行配置了,但每次开机都需要重新设置SSH隧道(即在命令行输入上述命令)pycharm才能连接内网服务器

此时,登录本地的6000端口就相当于登录内网服务器了。

ssh -p 6000 内网服务器用户名@localhost

在这里插入图片描述

配置pycharm

这里配置pycharm是通过跳板机连接内网服务器,而如果pycharm可以直接连接服务器则不需要这么麻烦。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

下面配置python解释器(重要),首先激活自己的虚拟环境,然后通过conda env list查看所有环境,*表示当前所在环境,记下当前虚拟环境python3.8解释器所在目录,配置pycharm时找到该解释器:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

最终效果:
在这里插入图片描述

点击create,等待创建完成。

创建完成后,就通过pycharm连上内网服务器了,可以查看一下:
在这里插入图片描述
在这里插入图片描述

下面进行一些其他设置,前面提到创建完虚拟环境后需要在虚拟环境中重新安装包如jupyter,d2l。
下面在pycharm中配置镜像源
在这里插入图片描述

测试

这里用于测试的代码是:

import torch
import torch.nn as nn
import torchvision
import torchvision.transforms as transforms# 定义超参数
batch_size = 64
learning_rate = 0.001
num_epochs = 5# 数据预处理
transform = transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.5,), (0.5,))
])# 加载 MNIST 数据集
train_dataset = torchvision.datasets.MNIST(root='./data', train=True, transform=transform, download=True)
test_dataset = torchvision.datasets.MNIST(root='./data', train=False, transform=transform)train_loader = torch.utils.data.DataLoader(dataset=train_dataset, batch_size=batch_size, shuffle=True)
test_loader = torch.utils.data.DataLoader(dataset=test_dataset, batch_size=batch_size, shuffle=False)# 定义神经网络模型
class Net(nn.Module):def __init__(self):super(Net, self).__init__()self.conv1 = nn.Conv2d(1, 16, kernel_size=5)self.pool = nn.MaxPool2d(2, 2)self.conv2 = nn.Conv2d(16, 32, kernel_size=5)self.fc1 = nn.Linear(32 * 4 * 4, 120)self.fc2 = nn.Linear(120, 84)self.fc3 = nn.Linear(84, 10)def forward(self, x):x = self.pool(torch.relu(self.conv1(x)))x = self.pool(torch.relu(self.conv2(x)))x = x.view(-1, 32 * 4 * 4)x = torch.relu(self.fc1(x))x = torch.relu(self.fc2(x))x = self.fc3(x)return xmodel = Net()# 定义损失函数和优化器
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate)# 训练模型
for epoch in range(num_epochs):for i, (images, labels) in enumerate(train_loader):optimizer.zero_grad()outputs = model(images)loss = criterion(outputs, labels)loss.backward()optimizer.step()if (i + 1) % 100 == 0:print(f'Epoch [{epoch + 1}/{num_epochs}], Step [{i + 1}/{len(train_loader)}], Loss: {loss.item()}')# 测试模型
with torch.no_grad():correct = 0total = 0for images, labels in test_loader:outputs = model(images)_, predicted = torch.max(outputs.data, 1)total += labels.size(0)correct += (predicted == labels).sum().item()print(f'Accuracy of the network on the 10000 test images: {100 * correct / total}%')

在pycharm中修改了代码可以手动上传同步至服务器,也可以设置为自动上传同步至服务器。
在这里插入图片描述

有两种方式运行代码:

第一种

在这里插入图片描述
激活环境后直接右键run运行即可:

在这里插入图片描述

运行结果:
在这里插入图片描述

第二种

在命令行使用指令运行:
同样新建一个连接:
在这里插入图片描述
在这里插入图片描述

服务器空闲查询

查询是否有空闲GPU:使用命令nvidia-smi查看使用情况:
在这里插入图片描述

只要Memory—Usage还没用满,就可以多个人、多个程序在同一张卡上跑。

怎么指定使用哪块GPU呢?在你python代码的最前面,加上这句就可以了。每次跑之前看哪块空着,或者剩余空间足够,修改数字即可。

import os 
# 只用2号卡
os.environ['CUDA_VISIBLE_DEVICES']='2' 
# 可用1号和2号卡
os.environ['CUDA_VISIBLE_DEVICES']='1,2' 

如果在nvidia-smi发现所有卡都跑满了,而你又急着要跑程序,怎么“逮住”是哪些兄弟姐妹正在跑实验呢?使用linux命令top。这个命令会显示当前占用内存最高的进程。
在这里插入图片描述

根据nvidia-smi中的PID,也就是进程号,在top中找到该进程所归属的USER,就可以知道是谁在用卡跑实验啦。

传输数据

下载FileZilla,官网:https://filezilla-project.org/。
在这里插入图片描述
在这里插入图片描述
打开安装包,然后一路默认选项安装即可:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

连接:
在这里插入图片描述
在这里插入图片描述
要传输数据只需要将自己电脑中的文件拖过来即可:
在这里插入图片描述

上述连接针对的是不需要跳板机的服务器。而如果是使用了跳板机的内网服务器则与配置pycharm一样,需要配置SSH免密登录,设置SSH隧道等。

前面配置pycharm时已经配置SSH免密登录,设置SSH隧道,这里就可以直接新建站点然后连接:
在这里插入图片描述

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

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

相关文章

K8s-services+pod详解1

一、Service 我们能够利用Deployment创建一组Pod来提供具有高可用性的服务。 虽然每个Pod都会分配一个单独的Pod IP&#xff0c;然而却存在如下两问题&#xff1a; Pod IP 会随着Pod的重建产生变化Pod IP 仅仅是集群内可见的虚拟IP&#xff0c;外部无法访问 这样对于访问这…

基于Python Django的在线考试管理系统

&#x1f34a;作者&#xff1a;计算机毕设匠心工作室 &#x1f34a;简介&#xff1a;毕业后就一直专业从事计算机软件程序开发&#xff0c;至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长&#xff1a;按照需求定制化开发项目…

线程基础学习

线程的实现 通过实现Runnable接口的方式&#xff0c;实现其中的run方法。继承Thread类&#xff0c;然后重写其中的run方法。通过线程池创建线程&#xff0c;默认采用DefaultThreadFactory。有返回值的callable&#xff0c;实现callable接口&#xff0c;实行call方法。 本质上…

【Linux-基础IO】软硬链接+动静态库

一、软硬链接 见一见 软连接 硬连接 通过观察我们发现以下几点&#xff1a; 1.ll - i后&#xff0c;软连接形成的文件有指向&#xff0c;并且软连接的Inode编号与对应文件的Inode编号不一样 2.ll - i后&#xff0c;硬连接形成的文件与对应的文件Inode编号一样 3.软连接…

大佬,简单解释下“嵌入式软件开发”和“嵌入式硬件开发”的区别

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「嵌入式的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;首先&#xff0c;嵌入式硬…

初识数据结构--时间复杂度 和 空间复杂度

数据结构前言 数据结构 数据结构是计算机存储、组织数据的方式(指不仅能存储数据&#xff0c;还能够管理数据-->增删改)。指相互之间存在一种或多种特定关系的数据元素的集合。没有单一的数据结构对所有用途都有用&#xff0c;所以我们要学习各种的数据结构&#xff0c;比…

visual studio使用ssh连接linux虚拟机运行程序

1.vs安装linux组件 2.安装后新建项目 新建后会有一个使用指南 设置网络为桥接网卡后打开虚拟机 使用vs提升的那句话安装工具 sudo apt-get install openssh-server g gdb gdbserver 重启ssh服务 sudo service ssh restart 接着进去打开ssh端口 sudo vi /etc/ssh/sshd_config …

pytest的基础入门

pytest判断用例的成功或者失败 pytest识别用例失败时会报AssertionError或者xxxError错误&#xff0c;当捕获异常时pytest无法识别到失败的用例 pytest的fixture夹具 pytest的参数化 #coding:utf-8 import pytestfrom PythonProject.pytest_test.funcs.guess_point import ge…

小程序知识付费的优势 知识付费服务 知识付费平台 知识付费方法

在信息爆炸的时代&#xff0c;知识如同繁星点点&#xff0c;璀璨而散落。如何在这片知识的海洋中精准捕捞&#xff0c;成为现代人追求自我提升的迫切需求。小程序知识付费&#xff0c;正是这样一座桥梁&#xff0c;它以独特的优势&#xff0c;让智慧触手可及&#xff0c;轻触未…

Miniconda更改虚拟环境创建路径

Miniconda更改虚拟环境创建路径 文章目录 Miniconda更改虚拟环境创建路径前言步骤一 修改配置文件步骤二 提升路径访问权限步骤三 测试配置修改是否生效 前言 在我使用 conda 命令创建新的虚拟环境时&#xff0c;发现创建好的虚拟环境存放路径是在 ../miniconda3/pkgs/ 路径下…

Nginx从入门到实战(八):版本平滑无感知,不停机升级

一、查看旧版本信息 可以通过nginx -V命令&#xff0c;来查看当前nginx的版本信息&#xff0c;和配置参数。 [rootnb001 sbin]# nginx -V -bash: nginx: command not found [rootnb001 sbin]# ./nginx -V nginx version: nginx/1.20.1 built by gcc 4.8.5 20150623 (Red Hat …

C/C++语言基础--C++神奇的多态

本专栏目的 更新C/C的基础语法&#xff0c;包括C的一些新特性 前言 通过前面几节课&#xff0c;我们学习了抽象、封装、继承相关的概念&#xff0c;接下来我们将讲解多态&#xff0c;多态他非常神奇&#xff0c;正式有了他&#xff0c;类才能出现多样性特征&#xff1b;C语言…

【C++差分数组】P1672何时运输的饲料

本文涉及知识点 C差分数组 C算法&#xff1a;前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 P1672何时运输的饲料 原文比较啰嗦&#xff0c;我简述一下&#xff1a; 第x天运来F1(1<F1<1e6)千克的饲料&#xff0c;第D&#xff08;1<2e3)天还剩F2&…

DBA | 如何将 .mdf 与 .ldf 的数据库文件导入到SQL Server 数据库中?

[ 知识是人生的灯塔&#xff0c;只有不断学习&#xff0c;才能照亮前行的道路 ] 原文链接&#xff1a;DBA | 如何将 .mdf 与 .ldf 的数据库文件导入到SQL Server 数据库中? 如何将 (.mdf) 和 (.ldf) 的SQL Server 数据库文件导入到当前数据库中? Step 1.登录到 Sql Server 服…

【Nginx系列】Nginx启动失败

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

数学建模算法与应用 第12章 现代优化算法

目录 12.1 粒子群优化算法 Matlab代码示例&#xff1a;粒子群优化算法求解函数最小值 12.2 遗传算法 Matlab代码示例&#xff1a;遗传算法求解函数最小值 12.3 蚁群算法 Matlab代码示例&#xff1a;蚁群算法求解旅行商问题 12.4 Matlab 遗传算法工具 使用遗传算法工具箱…

PyCharm打开及配置现有工程(详细图解)

本文详细介绍了如何利用Pycharm打开一个现有的工程&#xff0c;其中包括编译器的配置。 PyCharm打开及配置现有工程 1、打开工程2、配置编译器 1、打开工程 双击PyCharm软件&#xff0c;点击左上角 文件 >> 打开(O)… 选中想要打开的项目之后点击“确定” 2、配置编译器…

余承东直播论道智能驾驶:激光雷达不可或缺,华为ADS 3.0引领安全创新

华为余承东:激光雷达,智能驾驶安全性的关键 9月29日,华为消费者业务集团CEO余承东在一场引人注目的直播中,与知名主持人马东就智能驾驶技术的最新进展进行了深入交流。在这场直播中,余承东针对激光雷达在智能驾驶中的必要性问题,发表了明确且深刻的观点,引发了业界和公众…

uniapp自定义导航,全端兼容

我们在用uniapp 开发应用的时候&#xff0c;有的页面需要自定义导航&#xff0c; 1.如果普通的直接使用uni 扩展柜组件的 uni-nav-bar 也基本够用&#xff0c; 2.如果稍微带点自定义的这个值无法支持的&#xff0c;特别在小程序端&#xff0c;胶囊是会压住右边的按钮的 自定…

小白必看web专题!PHP-WebShell免杀(基础版)!!真的很简单!(全网最详细版本)

大家好&#xff0c;我是Dest1ny&#xff01; 最近一直在搞辅导啥的&#xff0c;所以没啥时间搞写&#xff5e; 也谢谢大家一直的点赞&#xff0c;今天特意把之前的web专题再发一个。 废话不多说&#xff0c;我们直接开始&#xff01; CLASS-1 WebShell免杀测试 渊龙Sec团队导…