Linux+InternStudio
1 SSH远程连接
win电脑win+r再输入powershell,复制登录命令和密码但是显示
因为是用ctrl v粘贴,光标位置没动,据说密码光标位置就是不动的,发现右键一下就可以粘贴啦~(已解决)
可以使用hostname查看开发机名称,使用uname -a查看开发机内核信息,使用lsb_release -a查看开发机版本信息,使用nvidia-smi查看GPU的信息,这些命令我们后面都会讲到,如果想要退出远程连接,输入两次exit就可以了。
配置配置SSH密钥(不用每次输密码了)
还是在powershell,输入ssh-keygen -t rsa
,一直回车,就可以看到C:\Users{your_username}.ssh下有一个pub文件,直接点进去复制到首页的添加密钥就可以啦
vscode远程连接
下载好ssh插件后输入远程连接命令,再连接就能看到远程的文件啦
2 端口映射
内网的资源没法在外网加载,比如开发机上面的网页demo在你的电脑上就看不到,所以通过端口映射,将外网链接映射到我们本地主机,我们使用本地连接访问,解决这个代理问题
个人PC会远程连接到开发机唯一暴露在外的37367端口,(这个在SSH的时候提到过每个人的开发机暴露的端口都不一样),并设置隧道选项。暴露端口是作为中转站进行流量的转发。
-C:启用压缩,减少传输数据量。
-N:不执行远程命令,只建立隧道。
-g:允许远程主机连接到本地转发的端口。
当在个人PC上执行这个SSH命令后,SSH客户端会在本地机器的7860端口上监听。
任何发送到本地7860端口的流量,都会被SSH隧道转发到远程服务器的127.0.0.1地址上的7860端口。
这意味着,即使开发机的这个端口没有直接暴露给外部网络,我们也可以通过这个隧道安全地访问远程服务器上的服务。
在powershell中先退出远程连接(两次exit)在输入下图自己的命令(在开发机的自定义服务中)
在开发机的vscode里面创建一个helloworld.py的文件,然后切换到开发机终端里面pip install gradio==4.29.0
再python helloworld.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()
发现网页端口7860是没有办法访问的
在powershell中输入命令ssh -p [你的开发机主机端口号] root@ssh.intern-ai.org.cn -CNg -L 7860:127.0.0.1:7860 -o StrictHostKeyChecking=no
发现网页可以访问啦,把powershell断掉就又连不上了
使用 vscode 进行端口映射
运行不同的web ui的话,需要重复输入命令,用vscode不需要重复输入哦,“Ctrl+Shift+~”快捷键唤醒终端,添加端口7860
页面就又可以访问了
3 Linux 基础命令
文件管理
- 创建文件:可以使用 touch 命令创建空文件。
- 创建目录:使用 mkdir 命令。 目录切换:使用cd命令。
- 显示所在目录:使用pwd命令。
- 查看文件内容:如使用 cat 直接显示文件全部内容,more 和 less 可以分页查看。
- 编辑文件:如vi 或 vim 等编辑器。
- 复制文件:用 cp 命令。
- 创建文件链接:用ln命令。
- 移动文件:通过 mv 命令。
- 删除文件:使用 rm命令。
- 删除目录:rmdir(只能删除空目录)或 rm -r(可删除非空目录)。
- 查找文件:可以用 find 命令。
- 查看文件或目录的详细信息:使用ls命令,如使用 ls -l查看目录下文件的详细信息。
- 处理文件:进行复杂的文件操作,可以使用sed命令
mkdir
创建目录touch
创建文件
cat
命令显示文件内容
-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除外
vim
编辑器
进入插入模式 在打开文件后,按
i
键进入插入模式,可以开始编辑文本。保存文件并退出
- 退出插入模式:按
Esc
键。- 保存文件并退出:输入
:wq
并按Enter
。- 仅保存文件:输入
:w
并按Enter
。- 仅退出:输入
:q
并按Enter
。- 强制退出(不保存):输入
:q!
并按Enter
。撤销和重做
- 撤销上一步操作:按
u
。- 重做撤销的操作:按
Ctrl+r
。删除行
- 删除当前行:按
dd
。复制和粘贴
- 复制当前行:按
yy
。- 粘贴复制的内容:按
p
。
cp
和 ln
复制文件:cp 源文件 目标文件
复制目录:cp -r 源目录 目标目录
ln连接在linux里面分为硬链接和软链接,硬链接是指不同的名字指向同一个文件,软链接是一个文件的内容指向另一个另一个文件,保存的是位置。这样就能发现,硬链接在同一个文件系统中,软链接可以跨越不同的文件系统
ln [参数][源文件或目录][目标文件或目录]
-s:创建软链接(符号链接)也是最常用的;
-f:强制执行,覆盖已存在的目标文件;
-i:交互模式,文件存在则提示用户是否覆盖;
-n:把符号链接视为一般目录;
-v:显示详细的处理过程
mv
和 rm
都是对文件和目录操作,mv是移动,rm是删除
find
:查找文件
以下是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结尾的文件。
ls
列出目录内容
-a:显示所有文件和目录,包括隐藏文件(以.开头的文件或目录)。
-l:以长格式显示详细信息,包括文件权限、所有者、大小、修改时间等。
-h:与-l结合使用,以人类可读的方式显示文件大小(如K、M、G等)。
-R:递归列出子目录的内容。
-t:按文件修改时间排序显示。
sed
流编辑器,echo
打印
echo 'llm' >file
把llm这个字符打印到file文件,cat file
显示内容,sed 's/llm/llm agent/g file'
对file中的字符进行文本替换
上面的>是一个管道符,常见的还有< |,比如pip list | grep os
在python安装包中找os字段的包,grep
是一个强大的文本搜索
好多好复杂,记不住也没关系,只要会用最常用的,其他参数啥的直接输入–help具体问题具体查询即可。
进程管理
ps:查看正在运行的进程
top:动态显示正在运行的进程
pstree:树状查看正在运行的进程
pgrep:用于查找进程
nice:更改进程的优先级
jobs:显示进程的相关信息
bg 和 fg:将进程调入后台
kill:杀死进程 kill PID # 杀死指定的进程ID, kill -9 PID # 强制杀死进程
nvidia-smi
可以监控和管理GPU设备
nvidia-smi
是 NVIDIA 提供的命令行工具,用于管理和监控 NVIDIA GPU。以下是一些 nvidia-smi
命令的基本用法:
显示 GPU 的基本信息
nvidia-smi
这个命令会显示系统中所有 GPU 的基本信息,包括 GPU 使用率、显存使用情况、温度等。
查看详细信息
nvidia-smi -q
显示系统中所有 GPU 的详细信息,包括硬件信息、驱动版本、性能状态等。
显示指定 GPU 的信息
nvidia-smi -i <gpu_id>
示例:
nvidia-smi -i 0
显示 GPU ID 为 0 的 GPU 信息。
持续监控 GPU 状态
nvidia-smi -l <interval>
示例:
nvidia-smi -l 5
每隔 5 秒刷新一次 GPU 状态。
查看 GPU 上运行的进程
nvidia-smi pmon -c <count>
示例:
nvidia-smi pmon -c 1
显示每个 GPU 上运行的进程信息。
仅显示 GPU 使用率和显存使用情况
nvidia-smi --query-gpu=utilization.gpu,utilization.memory --format=csv
查看指定 GPU 的功耗
nvidia-smi --query-gpu=power.draw --format=csv
将输出写入文件
nvidia-smi -q -d MEMORY > gpu_memory_info.txt
将所有 GPU 的显存信息输出到 gpu_memory_info.txt
文件中。
设置 GPU 的性能状态
sudo nvidia-smi -pm ENABLED
启用持久模式,以提高性能。
sudo nvidia-smi -pm DISABLED
禁用持久模式。
设置 GPU 的显存时钟和图形时钟
sudo nvidia-smi -ac <mem_clock>,<graphics_clock>
示例:
sudo nvidia-smi -ac 5001,1392
将 GPU 的显存时钟设置为 5001 MHz,图形时钟设置为 1392 MHz。
这些是 nvidia-smi
的一些基本用法,可以帮助你管理和监控 NVIDIA GPU。如果有其他问题或需要进一步的帮助,请随时告诉我。
TMUX
是一个终端多路复用器。它可以在多个终端之间轻松切换,分离它们(这不会杀死终端,它们继续在后台运行)和将它们重新连接到其他终端中,可以解决模型调参时间过长出现程序中断被kill的情况
lsb_release -a
ubuntu系统查看系统信息
安装后,退出tmux可以使用“Ctrl+d”快捷键
具体使用见文档
Conda和Shell
conda --version
默认安装会慢,所以配置镜像
#设置清华镜像 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
查看信息conda config --show
创建虚拟环境conda create -n name python=3.10
查看conda env list
conda info -e
conda info --envs
激活conda activate
退出conda deactivate
删除某个虚拟环境可以使用conda remove --name name --all
,如果只删除虚拟环境中的某个或者某些包可以使用conda remove --name name package_name
获得环境中的所有配置conda env export --name myenv > myenv.yml
重新还原环境conda env create -f myenv.yml
conda和pip
conda可以管理非python包,pip只能管理python包。
conda可以用来创建虚拟环境,pip不能,需要依赖virtualenv之类的包。
conda安装的包是编译好的二进制文件,安装包文件过程中会自动安装依赖包;pip安装的包是wheel或源码,装过程中不会去支持python语言之外的依赖项。
conda安装的包会统一下载到当前虚拟环境对应的目录下,下载一次多次安装。pip是直接下载到对应环境中。
Wheel 格式的主要优点包括:
安装速度快:因为已经进行了预编译,所以在安装时不需要像源码安装那样进行编译过程,节省了时间。
一致性:确保在不同的系统和环境中安装的结果是一致的。
创建虚拟环境的时候出错,重启终端,报错CondaVerificationError,应该原因是某些包在安装过程中出现了损坏,导致无法正确安装和使用。清理缓存conda clean --all
清除坏包 conda remove --force python
再重新创建 conda create -n new_env python=3.10
成功