第一关:Linux基础知识,SSH连接远程服务器,Linux常用命令,创建Anaconda虚拟环境

SSH连接远程服务器

过程参考如下过程

Tutorial/docs/L0/Linux/readme.md at camp3 · InternLM/Tutorial (github.com)

运行如下代码:

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

如果不进行端口映射的话,使用本地IP是访问不了的

可以使用下面的命令,将它输入到powerShell中:

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

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

最终结果

使用 vscode 进行端口映射

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

Linux常用命令

文件管理

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

touch

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

mkdir

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

cd

我们现在使用的是root目录,也是root用户的家目录~,linux操作系统中/表示根目录,根目录下有许多系统所需的目录和文件,刚才我们创建的目录就存在与root目录下,其中.表示的是当前目录,..表示的上级目录。如果我现在要进入到test目录,然后回到root目录,我们可以这样操作:

pwd

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

cat

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除外

vi or vim

当我们需要编辑文件的时候可以使用vi或者vim命令,当你进入文件编辑以后,有三种模式:进入编辑模式可以使用i,vim的方便之处就是可以在终端进行简单的文件修改。

cp 和 ln

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

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

linux中链接分为两种 : 硬链接(hard link)与软链接(symbolic link),硬链接的意思是一个档案可以有多个名称,而软链接的方式则是产生一个特殊的档案,该档案的内容是指向另一个档案的位置。硬链接是存在同一个文件系统中,而软链接却可以跨越不同的文件系统。

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

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

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

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

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:列出当前系统中的进程。使用不同的选项可以显示不同的进程信息,例如:
    • ps aux # 显示系统所有进程的详细信息
  • top:动态显示系统中进程的状态。它会实时更新进程列表,显示CPU和内存使用率最高的进程。
    • top  # 启动top命令,动态显示进程信息
  • pstree:以树状图的形式显示当前运行的进程及其父子关系。
    • pstree  # 显示进程树
  • pgrep:查找匹配条件的进程。可以根据进程名、用户等条件查找进程。
    • pgrep -u username  # 查找特定用户的所有进程
  • nice:更改进程的优先级。nice 值越低,进程优先级越高。
    • nice -n 10 long-running-command  # 以较低优先级运行一个长时间运行的命令
  • jobs:显示当前终端会话中的作业列表,包括后台运行的进程。
    • jobs  # 列出当前会话的后台作业
  • bg 和 fgbg 将挂起的进程放到后台运行,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。

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

工具使用

这里介绍一个工具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(扩展)

4.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环境配置中,会影响软件包的安装、更新、环境管理等操作的方式和结果。

4.2 conda环境管理

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

4.2.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:指定环境的安装路径(非默认位置)。
4.2.2 查看有哪些虚拟环境

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

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

同时我们还可以看到环境所在的目录。

4.2.3 激活与退出虚拟环境

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

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

conda activate
conda deactivate

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

4.2.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

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

其中包括环境名字虚拟环境软件包的在线存储库的位置虚拟环境的依赖。后面我们会使用进阶的使用方法来快速的还原虚拟环境。

4.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 格式能够让安装过程更加顺畅。

  • 7
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sɪʟᴇɴᴛ໊ོ5329

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值