第三期书生大模型实战营入门岛 Linux+InternStudio 关卡

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

SSH及端口映射

什么是SSH为什么使用远程连接、如何使用SSH远程连接开发机、什么是端口映射以及如何进行端口映射

1. SSH连接

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

SSH 是(C/S架构)由服务器客户端组成,为建立安全的 SSH 通道,双方需要先建立 TCP 连接,然后协商使用的版本号和各类算法,并生成相同的会话密钥用于后续的对称加密。在完成用户认证后,双方即可建立会话进行数据交互。

那在后面的实践中我们会配置SSH密钥,配置密钥是为了当我们远程连接开发机时不用重复的输入密码,那为什么要进行远程连接呢

远程连接的好处就是,如果你使用的是远程办公,你可以通过SSH远程连接开发机,这样就可以在本地进行开发。而且如果你需要跑一些本地的代码,又没有环境,那么远程连接就非常有必要了。

在这里插入图片描述

2. 端口映射

2.3.1 什么是端口映射?

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

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

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

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

在这里插入图片描述

2.3.2 使用vscode进行端口映射

vscode ssh连接
在这里插入图片描述
运行webdemo.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()

在这里插入图片描述
VScode提供了自动端口映射的功能,我们不需要手动配置,我们可以使用“Ctrl+Shift+~”快捷键唤醒终端,在终端的右侧可以找到端口选项:
在这里插入图片描述
本地访问127.0.0.1:7860
在这里插入图片描述

Linux命令

  • 创建文件:可以使用 touch 命令创建空文件。
  • 创建目录:使用 mkdir 命令。
  • 目录切换:使用cd命令。
  • 显示所在目录:使用pwd命令。
  • 查看文件内容:如使用 cat 直接显示文件全部内容,moreless 可以分页查看。
  • 编辑文件:如 vivim 等编辑器。
  • 复制文件:用 cp 命令。
  • 创建文件链接:用ln命令。
  • 移动文件:通过 mv 命令。
  • 删除文件:使用 rm 命令。
  • 删除目录rmdir(只能删除空目录)或 rm -r(可删除非空目录)。
  • 查找文件:可以用 find 命令。
  • 查看文件或目录的详细信息:使用ls命令,如使用 ls -l查看目录下文件的详细信息。
  • 处理文件:进行复杂的文件操作,可以使用sed命令。
  • vim
    在这里插入图片描述

cp 和 ln(重点)

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

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

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

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

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

参数如下:

-s:创建软链接(符号链接)也是最常用的;
-f:强制执行,覆盖已存在的目标文件;
-i:交互模式,文件存在则提示用户是否覆盖;
-n:把符号链接视为一般目录;
-v:显示详细的处理过程。

find

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

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

  1. 按文件名查找:使用-name选项按照文件名查找文件。例如,find /path/to/directory -name "file.txt"将在指定目录及其子目录中查找名为file.txt的文件。
  2. 按文件类型查找:使用-type选项按照文件类型查找文件。例如,find /path/to/directory -type f将查找指定目录及其子目录中的所有普通文件。
  3. 按文件大小查找:使用-size选项按照文件大小查找文件。例如,find /path/to/directory -size +100M将查找指定目录及其子目录中大于100MB的文件。
  4. 按修改时间查找:使用-mtime-atime-ctime选项按照文件的修改时间、访问时间或状态更改时间查找文件。例如,find /path/to/directory -mtime -7将查找指定目录及其子目录中在7天内修改过的文件。
  5. 按文件权限查找:使用-perm选项按照文件权限查找文件。例如,find /path/to/directory -perm 755将查找指定目录及其子目录中权限为755的文件。
  6. 按用户或组查找:使用-user-group选项按照文件的所有者或所属组查找文件。例如,find /path/to/directory -user username将查找指定目录及其子目录中属于用户username的文件。
  7. 执行操作:使用-exec选项可以对找到的文件执行相应的操作。例如,find /path/to/directory -name "*.txt" -exec rm {} \;将删除找到的所有以.txt结尾的文件。

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”。
      在这里插入图片描述

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

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

进程管理

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

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

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

  • ps:列出当前系统中的进程。使用不同的选项可以显示不同的进程信息,例如:
    • ps aux  # 显示系统所有进程的详细信息
      
  • top:动态显示系统中进程的状态。它会实时更新进程列表,显示CPU和内存使用率最高的进程。
    • top  # 启动top命令,动态显示进程信息
      
  • pstree:以树状图的形式显示当前运行的进程及其父子关系。
    • pstree  # 显示进程树
      
  • pgrep:查找匹配条件的进程。可以根据进程名、用户等条件查找进程。
    • pgrep -u username  # 查找特定用户的所有进程
      
  • nice:更改进程的优先级。nice 值越低,进程优先级越高。
    • nice -n 10 long-running-command  # 以较低优先级运行一个长时间运行的命令
      
  • jobs:显示当前终端会话中的作业列表,包括后台运行的进程。
    • jobs  # 列出当前会话的后台作业
      
  • bgfgbg 将挂起的进程放到后台运行,fg 将后台进程调回前台运行。
    • bg  # 将最近一个挂起的作业放到后台运行
      fg  # 将后台作业调到前台运行
      
  • kill:发送信号到指定的进程,通常用于杀死进程。
    • kill PID  # 杀死指定的进程ID
      
    • 注意,kill 命令默认发送 SIGTERM 信号,如果进程没有响应,可以使用-9使用SIGKILL 信号强制杀死进程:

    • kill -9 PID  # 强制杀死进程    
      

SIGTERM(Signal Termination)信号是Unix和类Unix操作系统中用于请求进程终止的标准信号。当系统或用户想要优雅地关闭一个进程时,通常会发送这个信号。与SIGKILL信号不同,SIGTERM信号可以被进程捕获并处理,从而允许进程在退出前进行清理工作。(来源于网络)

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

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

  • 显示 GPU 的帮助信息:
    • nvidia-smi -h
      
  • 列出所有 GPU 并显示它们的 PID 和进程名称:
    • nvidia-smi pmon
      
  • 强制结束指定的 GPU 进程:
    • nvidia-smi --id=0 --ex_pid=12345
      
    • 这会强制结束 GPU ID 为 0 上的 PID 为 12345 的进程。

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

  • 重启 GPU:
    • nvidia-smi --id=0 -r
      
    • 这会重启 ID 为 0 的 GPU。

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

工具使用

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

因为开发机使用的是ubuntu的操作系统,可以使用lsb_release -a 命令查看ubuntu的系统信息:
在这里插入图片描述

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

具体的使用方法可以查看:

https://www.ruanyifeng.com/blog/2019/10/tmux.html

conda和shell

1 conda 设置

想要查看conda的配置信息可以使用conda config --show命令
在这里插入图片描述

2 conda环境管理

我们可以使用conda create -n name python=3.10创建虚拟环境,这里表示创建了python版本为3.10、名字为name的虚拟环境。创建后,可以在.conda目录下的envs目录下找到。
创建虚拟环境的常用参数如下:

  • -n 或 --name:指定要创建的环境名称。
  • -c 或 --channel:指定额外的软件包通道。
  • –clone:从现有的环境克隆来创建新环境。
  • -p 或 --prefix:指定环境的安装路径(非默认位置)。
    如果想要查看有哪些虚拟环境我们可以使用下面的命令:
conda env list
conda info -e
conda info --envs

在这里插入图片描述

3 删除与导出虚拟环境

如果想要删除某个虚拟环境可以使用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、付费专栏及课程。

余额充值