书生大模型实战营闯关1 - Linux基础知识

系列文章目录

入门岛之一,Linux基础知识



前言

2024.7.10日开始,我参加了由上海人工智能创新中心举行的,第三期书生大模型实战营,本文为学习过程的记录。如有理解错误的地方,欢迎指正。

一、InternStudio开发机

InternStudio是上海人工智能创新中心提供的在线的云端算力平台,地址是:https://studio.intern-ai.org.cn/,在完成本节的打卡前,需要创建一个开发机。

注册登录后,点击页面上的创建开发机,镜像选择cuda12.2-conda GPU选最低的10%(10%也会扣算力,要是有0%的GPU就好了,这几节都用不到显卡),其它配置自行配置或者默认即可,点击 立即创建 等一会就可以在开发机列表中看到创建好的开发机了。注意开发机不用的话一定要关闭,默认开了8个小时,如果没有用完关机,还会退给你算力点
创建配置
创建好的开发机

二、SSH及端口映射

1. SSH

ssh的全名是Secure Shell,是一种网络安全协议,通过加密和认证机制来实现安全的访问和文件传输等功能。
SSH由服务端和客户端组成(是C/S架构)。通过TCP连接来创建SSH通道,先通过一些算法生成一个会话密钥(对称的),然后通过会话密钥进行数据的加密和解密。

在平时的使用中,我们使用密钥来生成会话密钥,这样可以防止每次连接时都还要输入密码。而之所以使用SSH连接远程电脑是因为环境可以只配置一次,后续直接连接使用,不需要再从新的电脑上安装,配置等等操作。

点击开发机列表中右边的SSH连接,可以查看开发机的SSH密码连接方式,我们根据上面的简介使用本地的SSH连接工具进行连接,这里我使用的连接工具是MobaXterm,是一个针对个人免费的SSH连接工具。

连接成功的欢迎消息
当看到以上的提示信息时,我们就已经成功的连接到开发机了。

2. 配置密钥连接

如果不配置密钥连接的话,我们每次连接开发机都要求输入密码,非常的麻烦,所以我们来配置一个密钥连接。

步骤主要有两步,首先通过 ssh-keygen -t rsa 来生成一个你自己电脑的密钥,然后将这个密钥的公钥添加到开发机中,点击 SSH连接弹出的窗口上方有添加公钥的入口。

首先是在本机输入 ssh-keygen -t rsa 来生成一对密钥。注意一定是在本机输入,不要在开发机中生成。过程中会提示要将密钥生成到什么位置,默认是输入到当前用户的home目录下的.ssh下,会生成两个文件,一个是id_rsa 这是生成的密钥对的私钥,另一个是id_rsa.pub,它是密钥对的公钥。

通过执行cat命令(或者在windows下使用文本编辑器打开id_rsa.pub文件),将文件的内容复制一下,粘贴到开发机的配置里(上面有提到入口)。

保存后,再使用命令直接连接开发机,就不会提示输入密码了。

3. 端口映射

商品映射是一种网络技术,用于将外网的端口映射为某个内网的端口,实现内网与外网的通信。通过端口映射,我们在外网中也可以访问内网中的资源或者服务,实现跨网络的便捷通信。

在后面的学习过程中,我们可能会要使用到开发机中的一些web服务,为了可以在任意的网络中访问到这些web服务,我们就需要对开发机上的端口进行端口映射。
端口映射逻辑图
我们可以直接使用ssh命令的一些参数来创建端口映射,在连接的时候增加几个参数就可以实现
例如:

# 原始的ssh连接命令
ssh -p 37367 root@ssh.intern-ai.org.cn -o StrictHostKeyChecking=no

# 将开发机的7860端口映射到本地的7860端口
ssh -p 37367 root@ssh.intern-ai.org.cn -CNg -L 7860:127.0.0.1:7860 -o StrictHostKeyChecking=no

其中,C代表启用压缩N;代表只建立隧道,不执行命令;g代表允许远程主机连接到本地的端口(通常意味着绑定的IP为0.0.0.0);L为设置转发

在开发机列表中,点击自定义服务,会有指令的提示,忘记的时候可以点开对照着输入。

我们创建一个测试用的web服务

3.1 安装依赖

由于我们的web服务使用了gradio库来创建,所以需要安装这个库,在开发机连接成功后,输入
pip install gradio==4.29.0来安装

这里最好使用conda create -n xxxx python=3.11 & conda activate xxxx 来创建一个新的环境,防止多个项目对环境产生干扰

3.2 创建服务文件

创建一个名为hello_world.py 的python文件

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

3.3 开启服务

在开发机hello_world.py的同目录下输入python hello_world.py来启动服务。

3.4 访问服务

我们直接在本机打开localhost:7860来访问我们启动的服务即可。
在本机打开
可以看到在本机成功打开了开发机中的目录

二、SSH及端口映射

3.1 文件管理

touch 快速创建文件

>touch demo.py
>ls 

trouch

mkdir 快速创建目录

>mkdir test
>ls

mkdir

cd 修改目录

>cd test
>ls
>cd ..
>ls

cd

pwd 查看当前目录

>pwd

pwd

cat 查看文件内容

>cat demo.py

cat

vi或vim文本编辑

>vi

vi
Vi有三种模式,编辑模式、命令模式和末行模式
命令模式通过a,i或o来进入编辑模式,编辑模式通过ESC进入命令模式,命令模式通过 : 进入末行模式,末行模式ESC同样可以回到命令模式。

cp 复制

复制文件

cp 源文件 目标文件

>cp demo.py demo1.py
>ls

cp

复制目录

cp -r 源目录 目录目标

>cp -r test test1
>ls

cpr

ln 创建链接

链接分成软链接和硬链接两种形式,软链接是产生一种特殊的档案,它指向目标档案,硬链接是一份档案可以有多个名字。因此硬链接只能在同一个文件系统中,而软链接可以跨越不同的文件系统。

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

mv 移动

  • -i 交互模式,覆盖前询问
  • -f 强制覆盖
  • -u 只在源比目标新时才移动
>mv [] [目标]

mv

rm 删除

  • -i 交互模式,删除前询问
  • -f 强制删除
  • -r 递归删除
>rm -rf test

rm

find 查找命令

find命令是linux中非常强大的命令

  • 按文件名查找 -name find [目标目录] -name [文件名]
    按文件名查找
  • 按文件类型查找 -type find [目标目录] -type [文件类型]
    按类型查找
  • 按文件大小查找 -size find [目标目录] -size +100M
    按大小查找
  • 按修改时间查找 find [目标目录] -mtime
    按修改时间
  • 按访问时间 find [目标目录] -atime
    按访问时间查找
  • 按状态更改时间 find[目标目录] -ctime
    按状态更改时间
  • 按权限查找 find [目标目录] -perm
    按权限查找
  • 按用户查找 find [目标目录] - user
    按用户查找
  • 按用户组查找 find [目标目录] --group
    按用户组查找
  • 执行方法 find [目标目录] --exec [代码]
    执行方法

ls 列出目录内容和文件详情

  • -a 显示所有文件和目录,包括隐藏的
  • -l 以长格式显示详细信息
  • -h-l 一起使用,以人类可读的方式显示详细信息
  • -R 递归列出子目录的内容
  • -t 按文件的修改时间排序

ls

sed 流编辑器

主要用于文本处理,它的命令参数包括参数和动作

参数
  • -e--expression 直接在命令行中指定脚本进行文本处理
  • -f--file 从指定的脚本文件中读取脚本进行文本处理
  • -n-silent-quite 仅打印经过输出的结果,不打印未匹配的行
动作
  • a 在当前行的下一行添加指定的文本字符串
  • c 用指定的文本字符串替换指定范围内的行
  • d 删除指定的行
  • i 在当前行的上一行添加指定的文本字符串
  • p 打印经过选择的行。通常与-n参数一起使用,只打印匹配的行
  • s 使用正则表达式进行文本替换。例如:s/old/new/g 将所有的old替换为new

grep 文本搜索

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

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

3.2 进程管理

ps 查看正在运行的进程

>ps aux

top 动态显示正在运行的进程

>top

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

>pstree

pgrep 查找匹配条件的进程

可以根据进程名、用户名等条件查找进程

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

nice 更改进程优先级

nice值越低,优先级越高

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

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

>jobs

bg 将挂起的进程放到后台运行

fg 将后台进程调回到前台运行

kill 发送信号到指定的进程,通常用于杀死进程

>kill PID # 杀死指定进程
>kill -9 PID # 强制杀死进程

nvidia-smi命令

显示GPU状态摘要
>nvidia-smi
显示详细的GPU状态信息
>nvidia-smi -l 1 # 1s 更新一次状态信息
列出所有GPU并显示它们的PID和进程名称
>nvidia-smi pmon
强制结束指定GPU的进程
>nvidia-smi --id 0 --ex_pid=12345 # 强制结束 CPU ID为0的显卡上的PID为12345的进程

#### 设置GPU性能模式
```shell

>nvidia-smi -pm 1 # 为所有的GPU设置为性能模式
>nvidia-smi -i 0 -pm 1 # 只针对ID为0的GPU
重启GPU
>nvidia-smi --id=0 -r # 重启ID为0的GPU
显示GPU帮助信息
>nvidia-smi -h

nvidia-smi

3.3 工具使用

tmux

tmux是一个终端多路复用器,可以在多个终端之间快速切换,分离和将它们重新连接到其它终端中。
使用tmux可以解决程序长时间运行被杀死中断的问题

安装
apt install tmux

3.4 conda

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

conda --version 查看版本信息

>conda --version

conda config --show 查看配置信息

>conda config --show

创建虚拟环境

conda create -n python=3.10 # 创建虚拟环境,并在环境中安装3.10版本的python

不指定python版本时,会自动创建基于最新python版本来创建环境

  • -n--name 指定要创建的环境名称
  • -c--channel 指定额外的软件包通道
  • --clone从现有的环境克隆来创建新环境
  • p--prefix 指定环境的安装路径

查看有哪些虚拟环境

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

激活与退出虚拟环境

>conda activte name # 激活虚拟环境
>conda deactivate # 退出虚拟环境

删除与导出虚拟环境

>conda remove --name name --all # 删除某个虚拟环境
>conda remvoe --name name package_name # 删除只钉一个人
# 获得环境中所有的配置
conda env export --name myenv > myenv.yaml
# 还原环境
conda env create -f myenv.yml

conda与pip

  • conda可以管理非python包,pip只能管理python包
  • conda可以用来创建虚拟环境,pip不能, 需要依赖别的包
  • conda安装的库是编译好的代码,安装过程中会自动依赖新的包。
  • conda安装 的包会统一下载到当前虚拟环境对应的目录下,下载一次,一次安装;而pip直接下载到对就的环境中。

什么是wheel

它是一种python安装包格式,是预编译的二进制分发格式,类似于conda中的已编译二进制文件。特点有:

  • 安装速度快,省略了安装时的编译过程,节省了时间
  • 一致性,确保在不同的系统和环境中安装的结果是一致的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值