系列文章目录
入门岛之一,Linux基础知识
前言
2024.7.10日开始,我参加了由上海人工智能创新中心举行的,第三期书生大模型实战营,本文为学习过程的记录。如有理解错误的地方,欢迎指正。
一、InternStudio开发机
InternStudio是上海人工智能创新中心提供的在线的云端算力平台,地址是:https://studio.intern-ai.org.cn/,在完成本节的打卡前,需要创建一个开发机。
注册登录后,点击页面上的创建开发机,镜像选择cuda12.2-conda GPU选最低的10%(10%也会扣算力,要是有0%的GPU就好了,这几节都用不到显卡),其它配置自行配置或者默认即可,点击 立即创建 等一会就可以在开发机列表中看到创建好的开发机了。注意开发机不用的话一定要关闭,默认开了8个小时,如果没有用完关机,还会退给你算力点
二、SSH及端口映射
1. SSH
ssh的全名是Secure Shell,是一种网络安全协议,通过加密和认证机制来实现安全的访问和文件传输等功能。
SSH由服务端和客户端组成(是C/S架构)。通过TCP连接来创建SSH通道,先通过一些算法生成一个会话密钥(对称的),然后通过会话密钥进行数据的加密和解密。
在平时的使用中,我们使用密钥来生成会话密钥,这样可以防止每次连接时都还要输入密码。而之所以使用SSH连接远程电脑是因为环境可以只配置一次,后续直接连接使用,不需要再从新的电脑上安装,配置等等操作。
点击开发机列表中右边的SSH连接,可以查看开发机的SSH密码连接方式,我们根据上面的简介使用本地的SSH连接工具进行连接,这里我使用的连接工具是MobaXterm,是一个针对个人免费的SSH连接工具。
当看到以上的提示信息时,我们就已经成功的连接到开发机了。
2. 配置密钥连接
如果不配置密钥连接的话,我们每次连接开发机都要求输入密码,非常的麻烦,所以我们来配置一个密钥连接。
步骤主要有两步,首先通过 ssh-keygen -t rsa
来生成一个你自己电脑的密钥,然后将这个密钥的公钥添加到开发机中,点击 SSH连接弹出的窗口上方有添加公钥的入口。
首先是在本机输入 ssh-keygen -t rsa
来生成一对密钥。注意一定是在本机输入,不要在开发机中生成。过程中会提示要将密钥生成到什么位置,默认是输入到当前用户的home目录下的.ssh下,会生成两个文件,一个是id_rsa
这是生成的密钥对的私钥,另一个是id_rsa.pub
,它是密钥对的公钥。
通过执行cat
命令(或者在windows下使用文本编辑器打开id_rsa.pub
文件),将文件的内容复制一下,粘贴到开发机的配置里(上面有提到入口)。
保存后,再使用命令直接连接开发机,就不会提示输入密码了。
3. 端口映射
商品映射是一种网络技术,用于将外网的端口映射为某个内网的端口,实现内网与外网的通信。通过端口映射,我们在外网中也可以访问内网中的资源或者服务,实现跨网络的便捷通信。
在后面的学习过程中,我们可能会要使用到开发机中的一些web服务,为了可以在任意的网络中访问到这些web服务,我们就需要对开发机上的端口进行端口映射。
我们可以直接使用ssh命令的一些参数来创建端口映射,在连接的时候增加几个参数就可以实现
例如:
# 原始的ssh连接命令
ssh -p 37367 root@ssh.intern-ai.org.cn -o StrictHostKeyChecking=no
# 将开发机的7860端口映射到本地的7860端口
ssh -p 37367 root@ssh.intern-ai.org.cn -CNg -L 7860:127.0.0.1:7860 -o StrictHostKeyChecking=no
其中,C
代表启用压缩N
;代表只建立隧道,不执行命令;g
代表允许远程主机连接到本地的端口(通常意味着绑定的IP为0.0.0.0);L
为设置转发
在开发机列表中,点击自定义服务,会有指令的提示,忘记的时候可以点开对照着输入。
我们创建一个测试用的web服务
3.1 安装依赖
由于我们的web服务使用了gradio库来创建,所以需要安装这个库,在开发机连接成功后,输入
pip install gradio==4.29.0
来安装
这里最好使用conda create -n xxxx python=3.11 & conda activate xxxx
来创建一个新的环境,防止多个项目对环境产生干扰
3.2 创建服务文件
创建一个名为hello_world.py
的python文件
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 g