书生大模型实战营(第3期)入门岛第1关Linux基础知识

闯关任务:完成SSH连接与端口映射并运行hello_world.py

 使用密码进行SSH远程连接

        当完成开发机的创建以后,在本地电脑上使用Win+R快捷键打开运行框,输入powerShell,打开powerShell终端。回到开发机平台,进入开发机页面找到我们创建的开发机,点击SSH连接,复制登录命令再根据提示输入密码(注:密码不显示,直接回车就行)。

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

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

但是在我们开发学习的时候,每次远程都输入密码比较麻烦,我们可以设置SSH key来跳过输入密码这一步骤,这里我们使用RSA算法生成密钥,命令为:

ssh-keygen -t rsa

 生成密钥后可以使用Get-Content命令查看生成的密钥(注意:在powerShell里面输入)命令为:

Get-Content .ssh/id_rsa.pub

然后我们回到开发机平台,在首页点击配置SSH Key,接着点击添加SSH公钥

将上一步生成的密钥复制到下方公钥框中,名称不用填,公钥输入后会自动生成名称。

使用VScode进行SSH远程连接

首先,若是觉得英文版用不习惯,可以先安装中文插件,再安装ssh插件

 安装完成插件以后,点击侧边栏的远程连接图标,在SSH中点击“+”按钮,添加开发机SSH连接的登录命令。

打开文件夹,可以添加root目录

端口映射

来到开发机界面,找到我们的开发机,点击自定义服务,复制第二条命令到power shell中,根据提示输入下一条密码(注:密码不可见

我们进入开发机,新建一个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,代码为:

python hello_world.py

 最后在浏览器中输入

http://localhost:7860

 若是浏览器显示拒绝连接请求,我可以使用下面的命令,将它输入到powerShell中:(注:不同机器,数字不一样,要将37367改为自己的端口

ssh -p 37367 root@ssh.intern-ai.org.cn -CNg -L 7860:127.0.0.1:7860 -o StrictHostKeyChecking=no

最终显示结果

可选任务1:将Linux基础命令在开发机上完成一遍

 文件管理

在 Linux 中,常见的文件管理操作包括:

1、使用touch快速的创建文件

2、使用mkdir创建一个名为test的目录

3、使用cd命令进入不同的目录

4、使用pwd命令查看当前所在的目录

使用cat 文件名查看文件

当我们需要编辑文件的时候可以使用vi或者vim命令,当你进入文件编辑以后,有三种模式:

进入编辑模式可以使用i,vim的方便之处就是可以在终端进行简单的文件修改。

cp 和 ln(重点)

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

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

所以我们一般使用软连接,它的常用的使用方法如下:

ln [参数][源文件或目录][目标文件或目录]

 mv 和 rm

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

常用的使用方法如下:

  • mv 命令

使用示例:

  • rm 命令

find

find命令是Linux系统中一个强大的文件搜索工具,它可以在指定的目录及其子目录中查找符合条件的文件或目录,并执行相应的操作。

以下是find命令的一些常见用法:

按文件名查找:使用-name选项按照文件名查找文件。例如,find /path/to/directory -name "file.txt"将在指定目录及其子目录中查找名为file.txt的文件。

按文件类型查找:使用-type选项按照文件类型查找文件。例如,find /path/to/directory -type f将查找指定目录及其子目录中的所有普通文件。

按修改时间查找:使用-mtime-atime-ctime选项按照文件的修改时间、访问时间或状态更改时间查找文件。例如,find /path/to/directory -mtime -7将查找指定目录及其子目录中在7天内修改过的文件。

按文件权限查找:使用-perm选项按照文件权限查找文件。例如,find /path/to/directory -perm 755将查找指定目录及其子目录中权限为755的文件。

执行操作:使用-exec选项可以对找到的文件执行相应的操作。例如,find /path/to/directory -name "*.txt" -exec rm {} \;将删除找到的所有以.txt结尾的文件。

 ls

ls命令可以用来列出目录的内容以及详细信息

常用参数及使用方法如下:

  • -a:显示所有文件和目录,包括隐藏文件(以.开头的文件或目录)。
  • -l:以长格式显示详细信息,包括文件权限、所有者、大小、修改时间等。
  • -h:与-l结合使用,以人类可读的方式显示文件大小(如KMG等)。
  • -R:递归列出子目录的内容。
  • -t:按文件修改时间排序显示。

 sed

sed命令是一种流编辑器,主要用于文本处理,在处理复杂的文件操作时经常用到,在后续的课程中会使用到,sed命令常用参数及使用示例如下:

  • 参数说明:
    • -e<script> 或 --expression=<script>:直接在命令行中指定脚本进行文本处理。
    • -f<script文件> 或 --file=<script文件>:从指定的脚本文件中读取脚本进行文本处理。
    • -n 或 --quiet 或 --silent:仅打印经过脚本处理后的输出结果,不打印未匹配的行。
  • 动作说明:
    • a:在当前行的下一行添加指定的文本字符串。
    • c:用指定的文本字符串替换指定范围内的行。
    • d:删除指定的行。
    • i:在当前行的上一行添加指定的文本字符串。
    • p:打印经过选择的行。通常与 -n 参数一起使用,只打印匹配的行。
    • s:使用正则表达式进行文本替换。例如,s/old/new/g 将所有 "InternLM" 替换为 "InternLM yyds"。

 

在示例中使用了echo命令,这和python中的print一样,用来打印内容,这里使用管道符>将InternLM打印到file文件中,常用的管道符还有<|,比如我们可以使用grep命令来查看python中安装的包含os字段的包:

grep是一个强大的文本搜索工具。常用参数如下:

  • -i:忽略大小写进行搜索。
  • -v:反转匹配,即显示不匹配的行。
  • -n:显示行号。
  • -c:统计匹配的行数

进程管理

进程管理命令是进行系统监控和进程管理时的重要工具,常用的进程管理命令有以下几种:

  • ps:查看正在运行的进程
  • top:动态显示正在运行的进程
  • pstree:树状查看正在运行的进程
  • pgrep:用于查找进程
  • nice:更改进程的优先级
  • jobs:显示进程的相关信息
  • bg 和 fg:将进程调入后台
  • kill:杀死进程

在开发机中还有一条特殊的命令nvidia-smi,它是 NVIDIA 系统管理接口(NVIDIA System Management Interface)的命令行工具,用于监控和管理 NVIDIA GPU 设备。它提供了一种快速查看 GPU 状态、使用情况、温度、内存使用情况、电源使用情况以及运行在 GPU 上的进程等信息的方法。

下面是关于各个命令使用示例:

  • ps:列出当前系统中的进程。使用不同的选项可以显示不同的进程信息,例如:

  • top:动态显示系统中进程的状态。它会实时更新进程列表,显示CPU和内存使用率最高的进程。

以下是 nvidia-smi 命令的一些基本命令用法:

  • 显示 GPU 状态的摘要信息:
    • nvidia-smi

  • 显示详细的 GPU 状态信息:
    • nvidia-smi -l 1
    • 这个命令会每1秒更新一次状态信息。

  • 显示 GPU 的帮助信息:
    • nvidia-smi -h

  • 列出所有 GPU 并显示它们的 PID 和进程名称:
    • nvidia-smi pmon

  • 强制结束指定的 GPU 进程:
  • 设置 GPU 性能模式:
    • nvidia-smi -pm 1
      nvidia-smi -i 0 -pm 1
  • 第一个命令会为所有 GPU 设置为性能模式,第二个命令只针对 ID 为 0 的 GPU。

工具使用

这里介绍一个工具TMUXTMUX 是一个终端多路复用器。它可以在多个终端之间轻松切换,分离它们(这不会杀死终端,它们继续在后台运行)和将它们重新连接到其他终端中。为什么要介绍这个工具呢?因为在后面进行Xtuner微调模型的时候,时间会很长,使用Tmux可以解决程序被杀死中断的情况,下面介绍一下如何安装并使用。

因为开发机使用的是ubuntu的操作系统,可以使用lsb_release -a 命令查看ubuntu的系统信息:

然后使用apt install tmux命令安装tmux,安装完成以后可以使用tmux命令就可以使用tmux了,如果想退出tmux可以使用“Ctrl+d”快捷键。

可选任务2:使用 VSCODE 远程连接开发机并创建一个conda环境

使用以下代码创建一个名为test的虚拟环境

conda create -n test python=3.10

激活与退出虚拟环境

当我们创建完虚拟环境后我们可以使用conda activate test命令来激活虚拟环境,如何查看是否切换成功呢?很简单,只需要看(base)是否变成了创建的虚拟环境的名称。

使用 conda deactivate 退出虚拟环境

使用 conda env list 查看有哪些虚拟环境

 在vscode中远程连接,选择打开root下的conda文件夹,在下图位置可以看到虚拟环境

删除与导出虚拟环境

如果想要删除某个虚拟环境可以使用conda remove --name name --all,如果只删除虚拟环境中的某个或者某些包可以使用conda remove --name name package_name

导出虚拟环境对于特定的环境是非常有必要的,因为有些软件包的依赖关系很复杂,如果自己重新进行创建和配置的话很麻烦,如果我们将配置好的环境导出,这样下次使用还原就行了,而且也可以把配置分享给其他人。

#获得环境中的所有配置
conda env export --name myenv > myenv.yml
#重新还原环境
conda env create -f  myenv.yml

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值