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

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 yes
    ControlMaster auto
    ControlPath ~/.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 yes
    ControlMaster auto
    ControlPath ~/.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 x

model = 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 = 0
    total = 0
    for 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.kler.cn/news/356622.html

相关文章:

  • 自闭症儿童能否适应学校生活:提供专业辅助,助力顺利融入
  • 使用人体关键点驱动FBX格式虚拟人原理【详解】
  • Linux——应用软件的生命周期
  • 基于SpringBoot+Vue+uniapp的诗词学习系统的详细设计和实现(源码+lw+部署文档+讲解等)
  • 自由学习记录(11)
  • pc轨迹回放制作
  • 【DevOps工具篇】Docker的DNS原理
  • Snowflake算法js(实现)
  • Python线性回归算法:面向对象的实现与案例详解
  • 牛客编程初学者入门训练——BC53 判断是元音还是辅音
  • 驱动开发系列21 - 编译内核模块的Makefile解释
  • Qt键盘按下事件和定时器事件及事件的接收和忽略
  • Javaweb基础-axios
  • ElasticSearch+Kibana 8.1.0安装部署
  • 今日总结10.18
  • 反向传播和优化 pytorch
  • 为什么在 Vue 中处理 Excel 文件
  • MySQL 数据的持久化
  • 进入 Searing-66 火焰星球:第一周游戏指南
  • 昇腾CANN 8.0正式发布,多项核心技术引领大模型原生创新