书生大模型实战营(1)——InterStudio基础知识+Vscode SSH连接远程服务器+Linux基础指令

参加书生.浦江大模型实战训练营,学习大模型知识和微调技术,所有课程免费,通过闯关的形式学习,也比较有趣。一起来了解LLM的世界。邀请链接

产品简介

InternStudio 是大模型时代下的云端算力平台。基于 InternLM 组织下的诸多算法库支持,为开发者提供开箱即用的大语言模型微调环境、工具、数据集,并完美兼容 🤗 HugginFace 开源生态。更多了解可通过官网文档了解。

基础知识

1、名词解释

1.云原生名词

云原生 (Clould - Native)
  • 云原生应用程序通常借助容器、微服务架构、自动化、持续集成/持续交付(CI/CD)等现代技术和实践来提供更高的敏捷性、可靠性和可扩展性。
(Docker) 容器
  • 在 InternStudio 中您使用的开发机就是一个 Docker 容器。容器中通常包含运行一个应用程序的依赖,并且实现了计算资源的隔离。
(Docker) 镜像
  • Docker 镜像是容器的构建模块,可以理解为容器的运行环境。它是一个轻量级的、可执行的软件包,包括了软件所需的依赖项和配置文件。因此,docker 镜像非常适合应用为模型训练的开发环境,帮助用户进行敏捷的环境切换。

2.微调名词

SFT (Supervised-Finetuning)

  • SFT 是有监督微调的缩写,通常用于针对特定任务或应用程序微调预训练(基座)的深度学习模型,如 BERT、GPT、或其他自然语言处理(NLP)或计算机视觉模型,从而通过更少量的数据,训练更少的参数以达到快速适配下游任务的效果。
PEFT (Parameter-Efficient Finetuning)
  • 是伴随大模型兴起的一种参数友好型微调方法。与传统的全量微调模型参数、微调模型部分参数不同,PEFT 类型的微调方法具有参与训练参数数量少、对硬件资源依赖小且效果与传统微调方法相当的特点。Xtuner 库支持了目前使用的最主流 PEFT 方法:LORA、QLORA
LORA (Low Rank Adaption of LLM)
  • 目前最主流的大模型微调方法之一,特点是将模型中的权重矩阵低秩分解,分解成2个参数量极小的矩阵来加入微调任务,而不微调模型本身。优势是:1. 训练所需显存极小 2. 部署灵活。
Adapter
  • 伴随 PEFT 方法出现的名词。通常情况下,使用 PEFT 方法如 LORA,会训练出一个模型 Adapter,它区分于预训练模型本身,在部署时会作为模型的适配器共同部署,从而改变模型的推理结果。换句话说,PEFT 方法不会训练预训练模型本身,而是训练出一个 Adapter,从而使大模型的部署更加灵活。

关卡任务

1、InternStudio使用

第一步:登录InternStudio首页,首次登录要输入邀请码,填写了上面的邀请链接,会获得一份邀请码,进入首页页面如下:

之后按照相应的文本教程创建开发机,镜像选择cuda12.2,GPU选择10%的A100,点击立即创建。

点击加入开发机:

InternStudio界面的左上角有三个可选项,分别对应的是jupyter notebook,Terminal终端和vscode网页版,各自的界面都与对应应用的界面相似,有过了解的同学,对此应该不会感到陌生。

2、使用Vscode SSH连接远程服务器

接下来介绍使用本地IDE 的 SSH 功能远程连接开发机,这次本地IDE选择VS code

2.1什么是SSH?

SSH 全称Secure Shell,中文翻译为安全外壳,它是一种网络安全协议,通过加密和认证机制实现安全的访问和文件传输等业务。SSH 协议通过对网络数据进行加密和验证,在不安全的网络环境中提供了安全的网络服务。

有两种方式进行远程服务器连接 ,第一种是每次登录都是用密码 ,第二种是配置密钥登录,后续登录无需使用密码,先讲解第一种方式:

2.2.使用密码登录

在开发机界面点击使用SSH登录,将登录命令和密码分别复制到本地电脑的powershell中

输入密码的时候,是隐式输入所以确定粘贴一次就可以,直接回车。

输入nvidia-smi查看GPU的信息,hostname查看开发机名称,使用uname -a查看开发机内核信息,使用lsb_release -a查看开发机版本信息,想要退出远程连接,输入两次exit就可以。

2.3配置SSH密钥进行SSH远程连接

密码连接的方式,需要每次输出密码比较繁琐,可以设置SSH key跳过这步,使用ssh命令中的ssh-kengen命令生成密钥。

ssh-keygen支持RSA和DSA两种认证密钥。

常用参数包括:

  • -t:指定密钥类型,如dsa、ecdsa、ed25519、rsa。
  • -b:指定密钥长度。
  • -C:添加注释。
  • -f:指定保存密钥的文件名。
  • -i:读取未加密的ssh-v2兼容的私钥/公钥文件。

使用RSA算法生成密钥,命令为:ssh-keygen -t rsa,一路yes,enter即可,生成的密钥位于C盘~/.ssh/id_rsa.pub位置上。

在powerShell中可以使用**Get-Content** 命令查看生成的密钥,如果是linux操作系统可以使用**cat**命令。也可以通过文本编辑器查看。

回到开发机平台,在首页点击配置SSH Key ,接着点击**添加SSH公钥,**将powershell的密钥复制粘贴上去,名称可以自动生成。

完成SSH Key创建以后,重启终端进行远程连接,就会跳过密码输入这一步了。

2.4使用VScode进行SSH远程连接

这次主要使用VScode,所以使用VScode进行远程连接,VScode进行代码修改等操作时会非常方便。

安装VScode这里就不赘述,CSDN上很多,也很简单。

然后安装插件"SSH",安装完成后,左侧会出现插件的图标,复制之前的SSH登录密码,点击SSH右边的+号,输入连接命令和密码进行连接,右下角会出现连接成功字样,表示连接成功。

然后在右下角弹出来的提示窗口中点击"连接"就可以远程到开发机中了。

3、端口映射

端口映射是一种网络技术,它可以将外网中的任意端口映射到内网中的相应端口,实现内网与外网之间的通信。通过端口映射,可以在外网访问内网中的服务或应用,实现跨越网络的便捷通信。

3.1端口映射作用

后面会进行模型web_demo 的部署实践,那在这个过程中,很有可能遇到web ui加载不全的问题。这是因为开发机Web IDE中运行web_demo时,直接访问开发机内 http/https 服务可能会遇到代理问题,外网链接的ui资源没有被加载完全。

所以为了解决这个问题,我们需要对运行web_demo的连接进行端口映射,将外网链接映射到我们本地主机,我们使用本地连接访问,解决这个代理问题。

端口映射的工作原理:

个人PC会远程连接到开发机唯一暴露在外的37367端口,(这个在SSH的时候提到过每个人的开发机暴露的端口都不一样),并设置隧道选项。暴露端口是作为中转站进行流量的转发。

  • -C:启用压缩,减少传输数据量。
  • -N:不执行远程命令,只建立隧道。
  • -g:允许远程主机连接到本地转发的端口。

当在个人PC上执行这个SSH命令后,SSH客户端会在本地机器的7860端口上监听。

任何发送到本地7860端口的流量,都会被SSH隧道转发到远程服务器的127.0.0.1地址上的7860端口。

这意味着,即使开发机的这个端口没有直接暴露给外部网络,我们也可以通过这个隧道安全地访问远程服务器上的服务。

3.2端口映射方式

3.2.1 使用 ssh 命令进行端口映射

在开发机界面选择自定义服务

复制下面命令在本地终端运行:

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:关闭严格的主机密钥检查,这样可以避免第一次连接时因为未知主机密钥而产生的提示或错误。

(这个命令不返回任何的内容,这样代表端口映射在运行了,然后在网页中打开连接就可以看到web ui的界面了)

在开发机的terminal安装好gradio,pip install gradio==4.29.0,在VScode创建一个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 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;">😀 Let's go on a journey through ShuSheng Island together.</h2>
            <p align="center">
                <a href="https://github.com/InternLM/Tutorial/blob/camp3">
                    <img src="https://oss.lingkongstudy.com.cn/blog/202406301604074.jpg" alt="Logo" width="20%" style="border-radius: 5px;">
                </a>
            </p>

            """
    gr.Markdown(html_code)

demo.launch()

会弹出的一个网址,点击网址打开网站。

成功

3.2.2 使用 vscode 进行端口映射

运行不同的web ui的话,需要重复输入命令,这样很麻烦,这就需要用到VScode了。前面我们已经SSH远程连接了开发机,VScode提供了自动端口映射的功能,我们不需要手动配置,我们可以使用"Ctrl+Shift+~"快捷键唤醒终端,在终端的右侧可以找到端口选项:

4、Linux介绍

Linux指令这里也不用赘述,CSDN上可详细查看,另外大佬博客点击

相关推荐
anddddoooo5 分钟前
vulnhub(7):Toppo(经典的suid滥用提权)
linux·网络·安全·web安全·网络安全
运维Z叔37 分钟前
利用shuji还原webpack打包源码
服务器·前端·webpack·node.js·postman·xss·csrf
Dola_Pan1 小时前
关于Linux Makefile的一些函数知识foreach、if、call、origin、shell、error和warning
linux·运维·服务器
lfsun6661 小时前
【60天备战软考高级系统架构设计师——第十九天:运维与服务管理——系统监控】
运维·系统架构
绿波电龙1 小时前
ld-linux-x86-64.so.2
linux·运维·服务器
Kika写代码2 小时前
Linux与Ubuntu:内核与发行版的关系
linux·运维·ubuntu
程序员-杨胡广2 小时前
掌握ZooKeeper的二阶段提交及其优缺点
linux·运维·服务器·zookeeper
rainsc3 小时前
ubuntu莫名的 系统出现文件系统只读
运维·ubuntu
zjytldz3 小时前
主流无线物联网通信技术有哪些
大数据·运维·网络·数据库·人工智能·物联网
无敌糖果3 小时前
Linux-Swap分区使用与扩容
linux·服务器·centos·swap