【书生大模型实战】L0-Linux

avatar
作者
猴君
阅读量:0

一、关卡任务

任务描述完成时间
闯关任务完成SSH连接与端口映射并运行hello_world.py10min
可选任务 1将Linux基础命令在开发机上完成一遍10min
可选任务 2使用 VSCODE 远程连接开发机并创建一个conda环境10min
可选任务 3创建并运行test.sh文件10min

二、实验过程

2.1 创建开发机

2.2 本地生成 SSH Key

在终端中,运行以下命令来生成SSH密钥对:

ssh-keygen

2.3 在 InternStudio 配置公钥

将刚刚生成的公钥复制到 InternStudio,公钥默认存储在

~/.ssh/id_rsa.pub

,可以通过系统自带的 cat 工具查看文件内容:

cat ~\.ssh\id_rsa.pub

将 SSH 公钥复制到 InternStudio,此公钥是所有开发机共用的,本地机器不变的情况下配置一次即可。换句话说,如果换了一台电脑连接开发机需要再配置一次公钥。

2.4 使用本地机器 SSH 连接开发机

进入开发机列表,查看 ssh 命令 (端口、用户名、IP)

使用 VSCode Remote-SSH 插件连接开发机,首次连接成功后需要等待一段时间,用于将本地的插件、配置等同步至开发机 (~/.vscode文件夹)

成功连接到远程服务器~

2.5 端口映射

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

那么我们使用开发机为什么要进行端口映射呢?

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

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

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 demo的时候,就可以使用这个命令进行端口映射,举个例子:

创建一个hello_world.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;">😀 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()

在运行代码之前,需要先使用pip install gradio==4.29.0命令安装以下依赖包,然后在Web IDE的终端中运行了一个hello_world.py

没有端口映射之前,无法访问Web应用:

端口映射后:

2.6 linux基础命令

 2.6.1 touch 

可以使用touch快速的创建文件,这样我们不用手动点击进行创建了。例如我们要创建一个demo.py文件:

touch demo.py

2.6.2 mkdir

同样的使用方法,如果要创建一个名为test的目录:

mkdir test

2.6.3 cd

cd test

2.6.4 pwd

可以使用pwd命令查看当前所在的目录:这样可以方便我们确定我们当前所在哪个目录下面。

2.6.5 cp 和 ln

cp命令在后面课程中会经常用到,它是用来将一个文件或者目录复制到另一个目录下的操作,常用的使用有:

  • 复制文件:cp 源文件 目标文件
  • 复制目录:cp -r 源目录 目标目录

但是如果我们是要使用模型的话,这种操作会占用大量的磁盘空间,所以我们一般使用ln命令,这个就和windows的快捷方式一样。linux中链接分为两种 : 硬链接(hard link)与软链接(symbolic link),硬链接的意思是一个档案可以有多个名称,而软链接的方式则是产生一个特殊的档案,该档案的内容是指向另一个档案的位置。硬链接是存在同一个文件系统中,而软链接却可以跨越不同的文件系统。

2.6.6 mv

mv命令和rm命令的使用方式很相似,但是mv是用来移动文件或者目录的,同时还可以进行重命名。rm命令则是用来删除文件或者目录的。

常用的使用方法如下:

  • mv 命令

常用参数:

  • -i:交互模式,覆盖前询问。
  • -f:强制覆盖。
  • -u:只在源文件比目标文件新时才进行移动。

使用示例:

  • mv file1.txt dir1/:将文件 file1.txt 移动到目录 dir1 中。

  • mv file1.txt file2.txt:将文件 file1.txt 重命名为 file2.txt

  • rm 命令

常用参数:

  • -i:交互模式,删除前询问。
  • -f:强制删除,忽略不存在的文件,不提示确认。
  • -r:递归删除目录及其内容。

使用示例:

  • rm file.txt:删除文件 file.txt
  • rm -r dir1/:递归删除目录 dir1 及其所有内容。

删除目录的命令也可以使用rmdir

2.7 使用 VSCODE 远程连接开发机并创建一个conda环境

使用conda --version来查看当前开发机中conda的版本信息:

2.7.1 创建虚拟环境

conda create -n cjy python=3.8

2.7.2 查看有哪些虚拟环境

conda env list

2.7.3 激活与退出虚拟环境

conda activate cjy # 进入环境 conda deactivate cjy  # 退出环境

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!