前言
近期在参加书生大模型实战营,将会总结课程中的学习笔记发布到博客中来与大家一起分享学习交流。本次学习如何使用Linux与Conda,使用的服务器环境是InternStduio(以下简称IS平台)提供的,感谢上海人工智能实验室与书生实战营。
InternStduio开发机如何创建,可以参考官方文档,不再过多赘述~
准备环境
这里使用InternStduio作为本次练习的运行环境,具体的配置版本如下
Ubuntu 20.04 系统环境, 内置 cudatoolkit12.2
InternStudio开发机介绍:在 InternStudio 中您使用的开发机就是一个 Docker 容器。容器中通常包含运行一个应用程序的依赖,并且实现了计算资源的隔离。
使用SSH远程连接
什么是SSH
SSH全称Secure Shell,中文翻译为安全外壳,它是一种网络安全协议,通过加密和认证机制实现安全的访问和文件传输等业务。SSH 协议通过对网络数据进行加密和验证,在不安全的网络环境中提供了安全的网络服务。
使用密码进行SSH远程连接
我们首先使用的是密码登录方式,完成虚拟机创建后,我们需要打开自己电脑的powerShell终端,使用Win+R快捷键打开运行框,输入powerShell,打开powerShell终端。如果使用Mac则使用commadn+空格键打开聚焦搜索输入teri打开终端。
在进入IS平台中开发机页面找到我们创建的开发机,点击SSH连接。在这里就可以轻松拿到指令~
指令解析:
ssh -p 42936 root@ssh.intern-ai.org.cn -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null
ssh:这是调用SSH客户端程序的命令,用来建立一个加密的通信会话。
-p 42936:指定要使用的端口号。默认情况下,SSH使用22号端口,但这里指定了42936作为替代端口。
root@ssh.intern-ai.org.cn:指定目标主机和登录用户名。root是用户名,而ssh.intern-ai.org.cn是目标主机的域名或IP地址。
-o StrictHostKeyChecking=no:这是一个选项,告诉SSH客户端不要检查主机密钥。正常情况下,SSH客户端会在首次连接到新主机时提示用户确认主机密钥,以防止中间人攻击。设置为no则跳过了这个安全步骤,自动接受主机密钥。
-o UserKnownHostsFile=/dev/null:这也是一个选项,它告诉SSH客户端将已知主机文件设置为/dev/null。通常,SSH客户端会维护一个已知主机文件来记录已经访问过的主机的密钥。通过指向/dev/null,实际上是禁用了这个功能,意味着每次连接时都不会保存或检查主机密钥。
当我们复制好指令,将其粘贴到powershell【终端】中,然后回车。
这里我们需要输入密码,我们将登录命令下面的密码复制下来,然后粘贴回终端中~
但是!这里密码粘贴密码是不显示的,这是正常的。
密码输入好之后回车,出现类似下面的内容就是登录成功了~
如果我们想要退出远程连接,输入两次exit
就可以啦
配置SSH密钥进行SSH远程连接
如果我们每次远程都输入密码比较麻烦,我们可以通过设置SSH key来跳过输入密码这一步骤,在ssh命令中我们可以使用ssh-keygen命令来生成密钥~
PS:如果计算机用户名是中文的,可能部分平台无法识别,比如IS就无法识别
ssh-keygen支持RSA和DSA两种认证密钥。
常用参数包括:
- -t:指定密钥类型,如dsa、ecdsa、ed25519、rsa。
- -b:指定密钥长度。
- -C:添加注释。
- -f:指定保存密钥的文件名。
- -i:读取未加密的ssh-v2兼容的私钥/公钥文件。
这里我们使用RSA算法生成密钥,命令为:
ssh-keygen -t rsa
输入命令后一路回车就可以了,这里的密钥默认情况下是生成在~/.ssh/
目录下的,~
表示的是家目录,如果是windows就是C:\Users\{your_username}\
。
在powerShell中可以使用Get-Content
命令查看生成的密钥,如果是linux操作系统可以使用cat
命令。
随后去平台上配置一下~
此时我们再次去使用终端连接开发机就不用再输入密码了,瞬间感觉幸福提升了好多。
使用VSCode进行SSH远程连接
首先,少年你需要有vscode,其次需要准备一个插件,安装后进入远程连接
可能部分显示设置会隐藏起来,在隐藏选项中找找就行。
安装完成插件以后,点击侧边栏的远程连接图标,并在SSH中点击“+”按钮,使用之前的登录指令就行。
随后点击链接就会打开一个新的窗口~
选择打开文件夹,并选择需要打开的文件夹
随后侧边文件资源管理器显示的内容就是远程容器【或者是服务器】内的啦
这里是这个插件远程连接配置的一些说明,以供参考~
Host ssh.intern-ai.org.cn #主机ip也可以是域名
HostName ssh.intern-ai.org.cn #主机名
Port 37367 #主机的SSH端口
User root #登录SSH使用的用户
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
远程端口映射
端口映射 is what?
端口映射是一种网络技术,它可以将外网中的任意端口映射到内网中的相应端口,实现内网与外网之间的通信。通过端口映射,可以在外网访问内网中的服务或应用,实现跨越网络的便捷通信。
有很多程序可能在外网访问不是那么的方便,会存在一些端口限制,因此我们可以选择使用端口映射去解决这个问题~将外网链接映射到我们本地主机,我们使用本地连接访问。
下面的流程图可以方便理解端口映射的过程(出处:书生大模型实战营)
参考指令
ssh -p 37367 root@ssh.intern-ai.org.cn -CNg -L 7860:127.0.0.1:7860 -o StrictHostKeyChecking=no
图解:
个人PC会远程连接到开发机唯一暴露在外的37367端口,(这个在SSH的时候提到过每个人的开发机暴露的端口都不一样),并设置隧道选项。暴露端口是作为中转站进行流量的转发。
-C
:启用压缩,减少传输数据量。-N
:不执行远程命令,只建立隧道。-g
:允许远程主机连接到本地转发的端口。当在个人PC上执行这个SSH命令后,SSH客户端会在本地机器的7860端口上监听。
任何发送到本地7860端口的流量,都会被SSH隧道转发到远程服务器的127.0.0.1地址上的7860端口。
这意味着,即使开发机的这个端口没有直接暴露给外部网络,我们也可以通过这个隧道安全地访问远程服务器上的服务。
使用 SSH 命令进行端口映射
参考指令,部分平台可以直接获取(比如IS平台)。
ssh -p 37367 root@ssh.intern-ai.org.cn -CNg -L {本地机器_PORT}:127.0.0.1:{开发机_PORT} -o StrictHostKeyChecking=no
下面给大家介绍一下命令各部分的含义:
-p 37367
:是指定 SSH 连接的端口为 37367,这个前面提到过。root@ssh.intern-ai.org.cn
:表示要以root
用户身份连接到ssh.intern-ai.org.cn
这个主机。-CNg
:
-C
通常用于启用压缩。-N
表示不执行远程命令,仅建立连接用于端口转发等。-g
允许远程主机连接到本地转发的端口。-L {本地机器_PORT}:127.0.0.1:{开发机_PORT}
:这是设置本地端口转发,将本地机器的指定端口(由{本地机器_PORT}
表示)转发到远程主机(这里即ssh.intern-ai.org.cn
)的127.0.0.1
(即本地回环地址)和指定的开发机端口(由{开发机_PORT}
表示)。-o StrictHostKeyChecking=no
:关闭严格的主机密钥检查,这样可以避免第一次连接时因为未知主机密钥而产生的提示或错误。
下面是一个代码DEMO(来自书生训练营),我们需要将其储存到服务器上然后运行通过SSH代理端口到本地进行访问~
新建一个HelloWorld.py文件(很经典哈)
import socket
import re
import gradio as gr
# 获取主机名
def get_hostname():
hostname = socket.gethostname()
match = re.search(r'-(\d+)$', hostname)
name = match.group(1)
return name
# 创建 Gradio 界面
with gr.Blocks(gr.themes.Soft()) as demo:
html_code = f"""
<p align="center">
<a href="https://intern-ai.org.cn/home">
<img src="https://intern-ai.org.cn/assets/headerLogo-4ea34f23.svg" alt="Logo" width="20%" style="border-radius: 5px;">
</a>
</p>
<h1 style="text-align: center;">☁️ Welcome {get_hostname()} user, welcome to the ShuSheng LLM Practical Camp Course!</h1>
<h2 style="text-align: center;">
标签:文件,运维,Linux,命令,conda,使用,进程,Conda,目录
From: https://blog.csdn.net/qq_29162275/article/details/144171600