InternStudio 是大模型时代下的云端算力平台。基于 InternLM 组织下的诸多算法库支持,为开发者提供开箱即用的大语言模型微调环境、工具、数据集,并完美兼容 🤗 HugginFace 开源生态。
如果大家想了解更多关于InternStduio的介绍的话可以查看下面的文档:https://aicarrier.feishu.cn/wiki/GQ1Qwxb3UiQuewk8BVLcuyiEnHe
首先打开上面的链接进入InternStudio,在控制台界面进行操作,如下图所示:
进入开发机后,开发机有三种模式可以选择:JupyterLab、终端和VScode
其中:
我们要了解什么是SSH、为什么使用远程连接、如何使用SSH远程连接开发机、什么是端口映射以及如何进行端口映射。
SSH全称Secure Shell,中文翻译为安全外壳,它是一种网络安全协议,通过加密和认证机制实现安全的访问和文件传输等业务。SSH 协议通过对网络数据进行加密和验证,在不安全的网络环境中提供了安全的网络服务。
SSH 是(C/S架构)由服务器和客户端组成,为建立安全的 SSH 通道,双方需要先建立 TCP 连接,然后协商使用的版本号和各类算法,并生成相同的会话密钥用于后续的对称加密。在完成用户认证后,双方即可建立会话进行数据交互。
那在后面的实践中我们会配置SSH密钥,配置密钥是为了当我们远程连接开发机时不用重复的输入密码,那为什么要进行远程连接呢?
远程连接的好处就是,如果你使用的是远程办公,你可以通过SSH远程连接开发机,这样就可以在本地进行开发。而且如果你需要跑一些本地的代码,又没有环境,那么远程连接就非常有必要了。
首先我们使用输入密码的方式进行SSH远程连接,后面我们会讲如何配置免密登录。
当完成开发机的创建以后,我们需要打开自己电脑的powerShell终端,使用Win+R快捷键打开运行框,输入powerShell,打开powerShell终端。(如果你是Linux或者Mac操作系统,下面的步骤都是一样的)
我们回到开发机平台,进入开发机页面找到我们创建的开发机,点击SSH连接。
将复制的命令粘贴到powershell中,然后回车,这里我们需要输入密码,我们将登录命令下面的密码复制下来,然后粘贴到终端中,这里密码粘贴密码是不显示的,这是正常的。
最后回车出现以下内容就代表成功了:
当我们连接上开发机以后,可以使用hostname查看开发机名称,使用uname -a查看开发机内核信息,使用lsb_release -a查看开发机版本信息,使用nvidia-smi查看GPU的信息,这些命令我们后面都会讲到,如果想要退出远程连接,输入两次exit就可以了。
但是在我们开发学习的时候,每次远程都输入密码比较麻烦,我们可以设置SSH key来跳过输入密码这一步骤,在ssh命令中我们可以使用ssh-keygen命令来生成密钥
如果大家计算机的用户名是中文的,InternStudio会识别不了,这种情况就需要用密码来登录SSH,不过不影响使用,大家不用担心。
SSH密钥是一种安全便捷的登录认证方式,用于在SSH协议中进行身份验证和加密通信。
ssh-keygen支持RSA和DSA两种认证密钥。
常用参数包括:
将刚刚生成的密钥复制下来,粘贴到公钥框中,名称会被自动识别到,最后点击立即添加,SSH Key就配置完成了。
完成SSH Key创建以后,重启终端进行远程连接,就会跳过密码输入这一步了。
当然也可以使用SSH远程连接软件,例如:Windterm、Xterminal等。这里我们使用VScode进行远程连接,使用VScode的好处是,本身它就是代码编辑器,进行代码修改等操作时会非常方便。
如果要在VScode中进行远程连接,我们还需要安装一套插件,如何安装VScode大家可以网上搜索一下非常简单。
如果你已经安装好了VScode,可以在点击左侧的扩展页面,在搜索框中输入“SSH”,第一个就是我们要安装的插件,点开它“Install”就可以了。
安装完成插件以后,点击侧边栏的远程连接图标,在SSH中点击“+”按钮,添加开发机SSH连接的登录命令。
配置文件这一块默认就好,当然你也可以自定义,下面是配置文件的具体内容:(这里包括了你所有远程连接过的信息)
Host ssh.intern-ai.org.cn #主机ip也可以是域名
HostName ssh.intern-ai.org.cn #主机名
Port 37367 #主机的SSH端口
User root #登录SSH使用的用户
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
后面的一些配置选项,如果想要手动添加就需要按照上面的格式对相应部分进行修改。
如果将StrictHostKeyChecking no和UserKnownHostsFile /dev/null删除掉会跳出指纹验证的弹窗:
[图片]
StrictHostKeyChecking no表示禁用严格的主机密钥检查。这意味着当连接到一个新的 SSH 服务器时,不会严格验证服务器的主机密钥,可能会带来一定的安全风险。
UserKnownHostsFile /dev/null则是将用户已知的主机密钥文件设置为 /dev/null ,这实质上是忽略了对已知主机密钥的记录和使用。
但是在一般的安全实践中,不建议随意禁用严格的主机密钥检查。
然后在右下角弹出来的提示窗口中点击“连接”就可以远程到开发机中了。
端口映射是一种网络技术,它可以将外网中的任意端口映射到内网中的相应端口,实现内网与外网之间的通信。通过端口映射,可以在外网访问内网中的服务或应用,实现跨越网络的便捷通信。
那么我们使用开发机为什么要进行端口映射呢?
因为在后续的课程中我们会进行模型web_demo的部署实践,那在这个过程中,很有可能遇到web ui加载不全的问题。这是因为开发机Web IDE中运行web_demo时,直接访问开发机内 http/https 服务可能会遇到代理问题,外网链接的ui资源没有被加载完全。
所以为了解决这个问题,我们需要对运行web_demo的连接进行端口映射,将外网链接映射到我们本地主机,我们使用本地连接访问,解决这个代理问题。下面让我们实践一下。
ssh -p 45831 root@ssh.intern-ai.org.cn -CNg -L {本地机器_PORT}:127.0.0.1:{开发机_PORT} -o StrictHostKeyChecking=no
个人PC会远程连接到开发机唯一暴露在外的37367端口,(这个在SSH的时候提到过每个人的开发机暴露的端口都不一样),并设置隧道选项。暴露端口是作为中转站进行流量的转发。
我们还是来到开发机界面,找到我们的开发机,点击自定义服务,复制第一条命令,
ssh -p 45831 root@ssh.intern-ai.org.cn -CNg -L {本地机器_PORT}:127.0.0.1:{开发机_PORT} -o StrictHostKeyChecking=no
下面给他大家介绍一下命令各部分的含义:
def get_hostname():
hostname = socket.gethostname()
match = re.search(r’-(\d+)$', hostname)
name = match.group(1)
return name
with gr.Blocks(gr.themes.Soft()) as demo:
html_code = f"“”
""" gr.Markdown(html_code)
demo.launch()
在运行代码之前,需要先使用pip install gradio==4.29.0命令安装以下依赖包,然后在Web IDE的终端中运行了一个hello_world.py
在运行代码之前,需要先使用pip install gradio==4.29.0命令安装以下依赖包,然后在Web IDE的终端中运行了一个hello_world.py
如果不进行端口映射的话,使用本地IP是访问不了的
当然,如果我们运行不同的web ui的话,需要重复输入命令,这样很麻烦,这就需要用到VScode了。前面我们已经SSH远程连接了开发机,VScode提供了自动端口映射的功能,我们不需要手动配置,我们可以使用“Ctrl+Shift+~”快捷键唤醒终端,在终端的右侧可以找到端口选项:
在 Linux 中,常见的文件管理操作包括:
1.2 mkdir
同样的使用方法,如果要创建一个名为test1的目录:
1.3 cd
这个命令会是使用最多的一个命令,在使用之前需要为没有计算机基础的同学讲一下目录结构,画一张图让大家理解:
我们现在使用的是root目录,也是root用户的家目录~,linux操作系统中/表示根目录,根目录下有许多系统所需的目录和文件,刚才我们创建的目录就存在与root目录下,其中.表示的是当前目录,…表示的上级目录。如果我现在要进入到test目录,然后回到root目录,我们可以这样操作:
1.4 pwd
我们可以使用pwd命令查看当前所在的目录:这样可以方便我们确定我们当前所在哪个目录下面。
1.5 cat
cat命令可以查看文件里面的内容,更多的使用命令可以使用–help命令查看:
进入编辑模式可以使用i,vim的方便之处就是可以在终端进行简单的文件修改。
1.7 cp 和 ln(重点)
cp命令在后面课程中会经常用到,它是用来将一个文件或者目录复制到另一个目录下的操作,常用的使用有:
1.11 sed
sed命令是一种流编辑器,主要用于文本处理,在处理复杂的文件操作时经常用到,在后续的课程中会使用到,sed命令常用参数及使用示例如下:
grep是一个强大的文本搜索工具。常用参数如下:
为什么要介绍这个工具呢?因为在后面进行Xtuner微调模型的时候,时间会很长,使用Tmux可以解决程序被杀死中断的情况
具体使用参考:https://www.ruanyifeng.com/blog/2019/10/tmux.html
想退出tmux可以使用Ctrl+d快捷键
4、conda&shell介绍
4.1添加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
如果我们想要查看conda的配置信息可以使用conda config --show命令
4.2创建虚拟环境
conda create -n name numpy
命令常用参数:
-n 或 --name:指定要创建的环境名称。
-c 或 --channel:指定额外的软件包通道。
–clone:从现有的环境克隆来创建新环境。
-p 或 --prefix:指定环境的安装路径(非默认位置)。
4.3导出与还原环境
conda env export --name myenv > myenv.yml
conda env create -f myenv.yml
4.4pip&conda
Wheel 是一种 Python 安装包的格式。它是一种预编译的二进制分发格式,类似于 conda 中的已编译二进制文件。
Wheel 格式的主要优点包括:
安装速度快:因为已经进行了预编译,所以在安装时不需要像源码安装那样进行编译过程,节省了时间。
一致性:确保在不同的系统和环境中安装的结果是一致的。
例如,如果您要安装一个大型的 Python 库,使用 Wheel 格式可以避免在不同的机器上因为编译环境的差异而导致的安装问题。而且,对于那些没有编译环境或者编译能力较弱的系统,Wheel 格式能够让安装过程更加顺畅。
4.5conda环境导出与还原
创建test.sh脚本并赋予可执行权限,写入以下内容
#!/bin/bash
export_env() {
local env_name=$1
echo “正在导出环境: KaTeX parse error: Expected 'EOF', got '#' at position 15: env_name" #̲ 导出环境到当前目录下的env…env_name” > “$env_name.yml”
echo “环境导出完成。”
}
restore_env() {
local env_name=$1
echo “正在还原环境: KaTeX parse error: Expected 'EOF', got '#' at position 15: env_name" #̲ 从当前目录下的env_nam…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
使用./test.sh restore xtuner0.1.17,restore是默认参数,后面是环境名称
4.6shell
Shell 脚本 是一种包含一系列命令的文本文件,这些命令按照特定的顺序排列,用于在 Unix/Linux 或类似的操作系统环境中自动执行任务。
Shell 脚本通常使用 Shell 语言编写,常见的 Shell 语言如 Bash、Sh 等,就是我们前面所介绍了Linux基础命令,这就属于Shell语言。
它有以下几个重要特点:
自动化:可以将一系列重复、复杂的操作编写为一个脚本,然后只需运行脚本即可自动完成这些操作,从而节省时间和减少错误。例如,每天定时备份重要文件的脚本。
系统管理:用于管理系统配置、用户权限、进程控制等。比如,创建新用户并设置其权限的脚本。
批处理:能够同时处理多个文件或数据。例如,将一批图片文件从一种格式转换为另一种格式的脚本。
流程控制:像条件判断(if-else)、循环(for、while)等,使脚本能够根据不同的情况执行不同的操作。
是一个学习基础的过程,因为之前有事,只能在最后时期来学习,但是学习的过程非常有益,值得学习!
上一篇:17年不更新,世界上最简陋的网站,收割了全世界的程序员
下一篇:BGP实验