文章目录
一. 关卡内容部分
1. InternStudio开发机简介
InternStudio 是大模型时代下的云端算力平台。基于 InternLM 组织下的诸多算法库支持,为开发者提供开箱即用的大语言模型微调环境、工具、数据集,并完美兼容 HugginFace开源生态。
详细介绍及官网如下:
2. SSH及端口映射
2.1 什么是SSH?
想必各位对SSH这个词并不陌生,即使以前没有亲身接触过,听也听过很多遍了,那SSH究竟是什么呢?
SSH全称Secure Shell,是一种网络安全协议,通过加密和认证机制实现安全的访问和文件传输等业务。SSH 协议通过对网络数据进行加密和验证,在不安全的网络环境中提供了安全的网络服务。
SSH 是(C/S架构)由服务器和客户端组成,为建立安全的 SSH 通道,双方需要先建立 TCP 连接,然后协商使用的版本号和各类算法,并生成相同的会话密钥用于后续的对称加密。在完成用户认证后,双方即可建立会话进行数据交互。
2.2 使用SSH连接开发机
首先进入InternStudio官网,找到自己创建的开发机,然后点击SSH连接,如下图所示:
这里可以看到登录命令及密码,复制登录命令,然后打开自己电脑的powerShell终端,使用Win+R快捷键打开运行框,输入powerShell,打开powerShell终端。
输入登录命令,并输入刚刚看到的密码,回车即可。
这里有一些基本的命令
2.3 端口映射
端口映射是一种网络技术,它可以将外网中的任意端口映射到内网中的相应端口,实现内网与外网之间的通信。通过端口映射,可以在外网访问内网中的服务或应用,实现跨越网络的便捷通信。
端口映射命令:
ssh -p 开发机端口号 root@ssh.intern-ai.org.cn -CNg -L 本地端口号:127.0.0.1:开发机端口号 -o StrictHostKeyChecking=no
解释:
-p 开发机端口号
:是指定 SSH 连接的端口为 开发机端口号。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
:关闭严格的主机密钥检查,这样可以避免第一次连接时因为未知主机密钥而产生的提示或错误。
流程图可见:
3. Linux基础命令
3. 1 文件管理
在 Linux 中,常见文件管理操作包括:
- 创建文件:可以使用
touch
命令创建空文件。 - 创建目录:使用
mkdir
命令。 - 目录切换:使用
cd
命令。 - 显示所在目录:使用
pwd
命令。 - 查看文件内容:如使用
cat
直接显示文件全部内容,more
和less
可以分页查看。 - 编辑文件:如
vi
或vim
等编辑器。 - 复制文件:用
cp
命令。 - 创建文件链接:用
ln
命令。 - 移动文件:通过
mv
命令。 - 删除文件:使用
rm
命令。 - 删除目录:
rmdir
(只能删除空目录)或rm -r
(可删除非空目录)。 - 查找文件:可以用
find
命令。 - 查看文件或目录的详细信息:使用
ls
命令,如使用ls -l
查看目录下文件的详细信息。 - 处理文件:进行复杂的文件操作,可以使用
sed
命令。
3.1.1 touch
可以使用touch快速的创建文件,例如创建一个demo.py
文件:
3.1.2 mkdir
创建一个名为test
的目录:
3.1.3 cd
这个命令最常用的一个命令。首先我们需要了解linux操作系统中/
表示根目录,根目录下有许多系统所需的目录和文件,其中.
表示的是当前目录,..
表示的上级目录。
3.1.4 pwd
使用pwd
命令查看当前所在的目录
3.1.5 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除外
上述命令结果
3.1.6 vi or vim
编辑文件的时候可以使用vi
或者vim
命令,当进入文件编辑以后,有三种模式:
3.1.7 cp 和 ln
**cp
**是用来将一个文件或者目录复制到另一个目录下的操作,常用的使用有:
- 复制文件:
cp 源文件 目标文件
- 复制目录:
cp -r 源目录 目标目录
但是如果我们是要使用模型的话,这种操作会占用大量的磁盘空间,所以我们一般使用ln
命令,这个就和windows的快捷方式一样。linux中链接分为两种 : 硬链接(hard link)与软链接(symbolic link),硬链接的意思是一个档案可以有多个名称,而软链接的方式则是产生一个特殊的档案,该档案的内容是指向另一个档案的位置。硬链接是存在同一个文件系统中,而软链接却可以跨越不同的文件系统。
一般使用软连接,它的常用的使用方法如下:
ln [参数][源文件或目录][目标文件或目录]
参数如下:
- -s:创建软链接(符号链接)也是最常用的;
- -f:强制执行,覆盖已存在的目标文件;
- -i:交互模式,文件存在则提示用户是否覆盖;
- -n:把符号链接视为一般目录;
- -v:显示详细的处理过程。
3.1.8 mv 和 rm
mv
命令和rm
命令的使用方式很相似,但是mv
是用来移动文件或者目录的,同时还可以进行重命名。rm
命令则是用来删除文件或者目录的。
常用的使用方法如下:
- mv 命令:
常用参数:
-i
:交互模式,覆盖前询问。-f
:强制覆盖。-u
:只在源文件比目标文件新时才进行移动。rm 命令:
常用参数:
-i
:交互模式,删除前询问。-f
:强制删除,忽略不存在的文件,不提示确认。-r
:递归删除目录及其内容。
3.1.9 find
find
命令是Linux系统中一个强大的文件搜索工具,它可以在指定的目录及其子目录中查找符合条件的文件或目录,并执行相应的操作。
以下是find
命令的一些常见用法:
- 按文件名查找:使用
-name
选项按照文件名查找文件。例如,find /path/to/directory -name "file.txt"
将在指定目录及其子目录中查找名为file.txt
的文件。 - 按文件类型查找:使用
-type
选项按照文件类型查找文件。例如,find /path/to/directory -type f
将查找指定目录及其子目录中的所有普通文件。 - 按文件大小查找:使用
-size
选项按照文件大小查找文件。例如,find /path/to/directory -size +100M
将查找指定目录及其子目录中大于100MB的文件。 - 按修改时间查找:使用
-mtime
、-atime
或-ctime
选项按照文件的修改时间、访问时间或状态更改时间查找文件。例如,find /path/to/directory -mtime -7
将查找指定目录及其子目录中在7天内修改过的文件。 - 按文件权限查找:使用
-perm
选项按照文件权限查找文件。例如,find /path/to/directory -perm 755
将查找指定目录及其子目录中权限为755的文件。 - 按用户或组查找:使用
-user
或-group
选项按照文件的所有者或所属组查找文件。例如,find /path/to/directory -user username
将查找指定目录及其子目录中属于用户username
的文件。 - 执行操作:使用
-exec
选项可以对找到的文件执行相应的操作。例如,find /path/to/directory -name "*.txt" -exec rm {} \;
将删除找到的所有以.txt
结尾的文件。
3.1.10 ls
ls
命令可以用来列出目录的内容以及详细信息。
常用参数及使用方法如下:
-a
:显示所有文件和目录,包括隐藏文件(以.
开头的文件或目录)。-l
:以长格式显示详细信息,包括文件权限、所有者、大小、修改时间等。-h
:与-l
结合使用,以人类可读的方式显示文件大小(如K
、M
、G
等)。-R
:递归列出子目录的内容。-t
:按文件修改时间排序显示。、
3.1.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”。
上述命令结果
3.2 进程管理
进程管理命令是进行系统监控和进程管理时的重要工具,常用的进程管理命令有以下几种:
- ps:查看正在运行的进程
- top:动态显示正在运行的进程
- pstree:树状查看正在运行的进程
- pgrep:用于查找进程
- nice:更改进程的优先级
- jobs:显示进程的相关信息
- bg 和 fg:将进程调入后台
- kill:杀死进程
在开发机中还有一条特殊的命令nvidia-smi
,它是 NVIDIA 系统管理接口(NVIDIA System Management Interface)的命令行工具,用于监控和管理 NVIDIA GPU 设备。
下面是关于各个命令使用示例:
ps
:列出当前系统中的进程。使用不同的选项可以显示不同的进程信息,例如:ps aux
: 显示系统所有进程的详细信息top
:动态显示系统中进程的状态。它会实时更新进程列表,显示CPU和内存使用率最高的进程。pstree
:以树状图的形式显示当前运行的进程及其父子关系。pgrep
:查找匹配条件的进程。可以根据进程名、用户等条件查找进程。jobs
:显示当前终端会话中的作业列表,包括后台运行的进程。kill
:发送信号到指定的进程,通常用于杀死进程。
以下是 nvidia-smi
命令的一些基本命令用法:
显示 GPU 状态的摘要信息:
nvidia-smi
显示详细的 GPU 状态信息:
nvidia-smi -l 1
这个命令会每1秒更新一次状态信息。
列出所有 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.3 工具使用
这里介绍一个工具TMUX
,TMUX
是一个终端多路复用器。它可以在多个终端之间轻松切换,分离它们(这不会杀死终端,它们继续在后台运行)和将它们重新连接到其他终端中。使用Tmux
可以解决程序被杀死中断的情况,
使用apt install tmux
命令安装tmux,安装完成以后可以使用tmux
命令就可以使用tmux了,如果想退出tmux可以使用“Ctrl+d”快捷键。
4. Conda和Shell介绍
Conda 是一个开源的包管理和环境管理系统,可在 Windows、macOS 和 Linux 上运行。它快速安装、运行和更新软件包及其依赖项。使用 Conda,您可以轻松在本地计算机上创建、保存、加载和切换不同的环境。
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
进行包的安装的,后面我们会介绍pip
和conda
的区别。
想要查看conda的配置信息可以使用conda config --show
命令,如果是开发机默认的设置的话会返回:(一部分信息)
4.2 conda环境管理
4.2.1 创建虚拟环境
我们可以使用conda create -n name python``=3.10
创建虚拟环境,这里表示创建了python版本为3.10、名字为name的虚拟环境。创建后,可以在.conda
目录下的envs
目录下找到。
创建虚拟环境的常用参数如下:
- -n 或 --name:指定要创建的环境名称。
- -c 或 --channel:指定额外的软件包通道。
- –clone:从现有的环境克隆来创建新环境。
- -p 或 --prefix:指定环境的安装路径(非默认位置)。
4.2.2 查看有哪些虚拟环境
如果想要查看有哪些虚拟环境可以使用下面的命令:
conda env list
conda info -e
conda info --envs
4.2.3 激活与退出虚拟环境
主要命令如下
conda activate env_name
conda deactivate
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
4.3 conda和pip的区别及联系
- conda可以管理非python包,pip只能管理python包。
- conda可以用来创建虚拟环境,pip不能,需要依赖virtualenv之类的包。
- conda安装的包是编译好的二进制文件,安装包文件过程中会自动安装依赖包;pip安装的包是wheel或源码,装过程中不会去支持python语言之外的依赖项。
- conda安装的包会统一下载到当前虚拟环境对应的目录下,下载一次多次安装。pip是直接下载到对应环境中。
Wheel 是一种 Python 安装包的格式。
它是一种预编译的二进制分发格式,类似于 conda 中的已编译二进制文件。
Wheel 格式的主要优点包括:
- 安装速度快:因为已经进行了预编译,所以在安装时不需要像源码安装那样进行编译过程,节省了时间。
- 一致性:确保在不同的系统和环境中安装的结果是一致的。
例如,如果您要安装一个大型的 Python 库,使用 Wheel 格式可以避免在不同的机器上因为编译环境的差异而导致的安装问题。而且,对于那些没有编译环境或者编译能力较弱的系统,Wheel 格式能够让安装过程更加顺畅。
二. 课后作业部分
课程文档中有个小bug,pstree不是内置的命令,需要自己手动安装一下
psmisc
,如下图所示
闯关任务
完成SSH连接与端口映射并运行hello_world.py
结果:
可选任务1
将Linux基础命令在开发机上完成一遍
结果:见博客中出现的命令演示图,已全部完成Linux基础命令
可选任务2
使用 VSCODE 远程连接开发机并创建一个conda环境
结果:
可选任务3
创建并运行test.sh
文件