第三期-书生大模型实战营学习记录

一、准备工作:

1.创建好GitHub用户,网址如下:

https://github.com/

2.在InternStudio算力平台中创建开发机,网址如下:

https://studio.intern-ai.org.cn

(1)先点击首页,然后点击创建开发机,进入创建开发机页面

(2)依次填写开发机名称,镜像版本和资源配置,然后点击立即创建

(3)在左侧开发机选项中,即可看到创建的开发机基础信息

二、SSH及端口映射

1.启动开发机

2.点击ssh连接查看当前开发机的ssh密码,每台开发机的密码有不一样,注意复制自己开发机的密码进行连接

3.打开个人电脑的powershell终端,复制输入登录命令,然后终端会提示输入密码,复制密码敲击回车,这里需注意密码不会以密文的形式显示出来,切勿重复粘贴!!

4.若终端提示,Permission denied, please try again,表示密码错误;

若出现下述内容表示登录成功。

5.配置ssh秘钥实现免密登录

(1)终端输入ssh-keygen -t rsa,创建ssh秘钥,一路按回车即可

(2)注意观察ssh生成路径,如果是/root开头则表示存储在linux系统中,如果是C:/Users开头则表示存储在Windows系统中,Linux使用cat+路径查看ssh秘钥,Windows使用Get-Content+路径查看。(Windows系统必须在本地生成ssh后续才能免密登录,本地生成操作为:打开powershell终端 -> 直接输入ssh-keygen -t rsa命令即可)

(3)回到开发机页面,点击添加公钥

(4)把终端里输出的ssh秘钥复制到公钥文本框中,点击立即添加

6.使用vs连接

(1)下载SSH连接插件

(2)添加ssh连接

(3)复制登录命令

(4)粘贴到(2)图中的输入框中回车,右下角出现添加主机提示即可

(5)远程连接完成后,点击打开文件夹,进入工作目录

7.端口映射

(1)点击自定义服务

(2)复制映射命令,默认将7860端口作为映射端口

(3)创建hello_world.py文件,运行一个web demo代码

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()

(4)在powershell终端中运行命令启动端口映射

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

成功运行后终端内容如下:

(5)运行代码后在浏览器中访问7860端口

三、Linux基础命令

1.文件操作命令

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

(1)touch+文件名,创建文件

(2)mkdir+目录名,创建目录

(3)cd,切换目录命令,.表示当前目录,..表示上级目录,~表示root的home目录,/表示根目录

(4)pwd命令,查看当前所在目录

(5)cat命令,查看文件内容,更多的使用命令可以使用--help命令查看

  • -a,--show-all等价于-vET
  • -b,--number-non空白数非空输出行,覆盖-n
  • -e, 等价于-vE
  • -E,--show-结束显示$在每一行的末尾
  • -n,--number编号所有输出行
  • -s,--crick-空白抑制重复的空输出行
  • -t等价于-vT
  • -t,--show-tabs将制表符显示为^I
  • -v,--show非打印使用^和M-表示法,LFD和TAB除外

(6)vi和vim命令,编辑文件

(7)cp和ln

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

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

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

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

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

参数如下:

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

(8)mv和rm

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

(9)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结尾的文件。

(10)ls

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

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

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

(11)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:统计匹配的行数。

2.进程管理命令

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

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

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

ps aux  # 显示系统所有进程的详细信息

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

top  # 启动top命令,动态显示进程信息

(3)pstree:以树状图的形式显示当前运行的进程及其父子关系。

pstree  # 显示进程树

如果出现下图提示(pstree未知命令):

则需要先运行以下命令安装pstree,没有就不管

apt-get install psmisc

然后在运行pstree命令

(4)pgrep:查找匹配条件的进程。可以根据进程名、用户等条件查找进程。

pgrep -u username  # 查找特定用户的所有进程

(5)nice:更改进程的优先级。nice 值越低,进程优先级越高。

nice -n 10 long-running-command  # 以较低优先级运行一个长时间运行的命令

(6)jobs:显示当前终端会话中的作业列表,包括后台运行的进程。

(7)bg 和 fgbg 将挂起的进程放到后台运行,fg 将后台进程调回前台运行。

bg  # 将最近一个挂起的作业放到后台运行
fg  # 将后台作业调到前台运行

(8)kill:发送信号到指定的进程,通常用于杀死进程。

kill PID  # 杀死指定的进程ID

  • 注意,kill 命令默认发送 SIGTERM 信号,如果进程没有响应,可以使用-9使用SIGKILL 信号强制杀死进程:

kill -9 PID  # 强制杀死进程    

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

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

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

显示详细的 GPU 状态信息:nvidia-smi -l 1,1表示更新间隔时间为1s

显示 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

下面通过一张图片对GPU信息进行介绍:

3.工具使用

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

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

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

开发机仅 /root 路径下的文件是持久化存储的,其他路径下安装的软件重启后都会被重置。

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

Tmux 使用教程 - 阮一峰的网络日志

四、Conda和Shell介绍

Conda 是一个开源的包管理和环境管理系统,可在 Windows、macOS 和 Linux 上运行。它快速安装、运行和更新软件包及其依赖项。使用 Conda,您可以轻松在本地计算机上创建、保存、加载和切换不同的环境。

在开发机中已经安装了conda,我们可以直接使用,而且开发机中也有内置的conda命令studio-conda,下面我们会介绍conda的基本使用,还有studio-conda的使用方法以及介绍一下studio-conda是怎么实现的。

我们会从下面几部分进行介绍:

  1. conda设置
  2. conda环境管理
  3. conda和pip
  4. studio-conda使用与Shell(扩展)

1.conda设置

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

当我们要使用conda安装包的时候会非常慢,我们可以设置国内镜像提升安装速度,示例如下:

#设置清华镜像
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/pro
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2

但是我们一般都是使用pip进行包的安装的,后面我们会介绍pipconda的区别。

如果我们想要查看conda的配置信息可以使用conda config --show命令,如果是开发机默认的设置的话会返回:(一部分信息)

这些配置在Conda环境配置中,会影响软件包的安装、更新、环境管理等操作的方式和结果。

2.conda环境管理

这一部分是conda中非常重要的一部分,掌握了这一部分大家就可以将开发环境玩转到飞起了😀。

(1)创建虚拟环境

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

在不指定python版本时,会自动创建基于最新python版本的虚拟环境。同时我们可以在创建虚拟环境的同时安装必要的包:conda create -n name numpy matplotlib python=3.10(但是不建议大家这样用)

创建虚拟环境的常用参数如下:

  • -n 或 --name:指定要创建的环境名称。
  • -c 或 --channel:指定额外的软件包通道。
  • --clone:从现有的环境克隆来创建新环境。
  • -p 或 --prefix:指定环境的安装路径(非默认位置)。

(2)查看有哪些虚拟环境

如果想要查看有哪些虚拟环境我们可以使用下面的命令:

conda env list
conda info -e
conda info --envs

 

(3)激活与退出虚拟环境

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

如果想要退出虚拟环境的话可以使用:

conda activate
conda deactivate

 这两条命令都会回到base环境,因为base是conda的基础环境,如果仔细观察的话,base环境目录比其他的虚拟环境目录层级要高。

(4)删除与导出虚拟环境

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

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

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

 比如我们将name虚拟环境导出,配置信息是这样的:

比如我们将name虚拟环境导出,配置信息是这样的:

3.conda和pip

这部分我们介绍一些condapip的一些区别:

  1. conda可以管理非python包,pip只能管理python包。
  2. conda可以用来创建虚拟环境,pip不能,需要依赖virtualenv之类的包。
  3. conda安装的包是编译好的二进制文件,安装包文件过程中会自动安装依赖包;pip安装的包是wheel或源码,装过程中不会去支持python语言之外的依赖项。
  4. conda安装的包会统一下载到当前虚拟环境对应的目录下,下载一次多次安装。pip是直接下载到对应环境中。

Wheel 是一种 Python 安装包的格式。

它是一种预编译的二进制分发格式,类似于 conda 中的已编译二进制文件。

Wheel 格式的主要优点包括:

  1. 安装速度快:因为已经进行了预编译,所以在安装时不需要像源码安装那样进行编译过程,节省了时间。
  2. 一致性:确保在不同的系统和环境中安装的结果是一致的。

例如,如果您要安装一个大型的 Python 库,使用 Wheel 格式可以避免在不同的机器上因为编译环境的差异而导致的安装问题。而且,对于那些没有编译环境或者编译能力较弱的系统,Wheel 格式能够让安装过程更加顺畅。

4.studio-conda使用与Shell 

在导出环境文件目录下创建test.sh脚本文件

#!/bin/bash

# 定义导出环境的函数
export_env() {
    local env_name=$1
    echo "正在导出环境: $env_name"
    # 导出环境到当前目录下的env_name.yml文件
    conda env export -n "$env_name" > "$env_name.yml"
    echo "环境导出完成。"
}

# 定义还原环境的函数
restore_env() {
    local env_name=$1
    echo "正在还原环境: $env_name"
    # 从当前目录下的env_name.yml文件还原环境
    conda env create -n "$env_name" -f "$env_name.yml"
    echo "环境还原完成。"
}

# 检查是否有足够的参数
if [ $# -ne 2 ]; then
    echo "使用方法: $0 <操作> <环境名>"
    echo "操作可以是 'export' 或 'restore'"
    exit 1
fi

# 根据参数执行操作
case "$1" in
    export)
        export_env "$2"
        ;;
    restore)
        restore_env "$2"
        ;;
    *)
        echo "未知操作: $1"
        exit 1
        ;;
esac

当我们完成Shell脚本的创建以后我们需要为脚本赋予权限,可以使用命令:chmod +x test.sh ,然后输入./test.sh restore name.yml并按下回车就可以还原虚拟环境了。 

  • 23
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值