本文同步到CSDN,为书生大模型实战营的作业记录。
四期飞书文档
开发机的使用
创建开发机
首先注册InternStudio账号,进入控制台:InternStudio

按照教程中的步骤创建开发机(其实一开始不太会用的话,可以选1个小时,我一开始操作失误把一个8h的开发机停止了,痛失8算力🥹)
创建成功后可以在开发机选项卡点击进入开发机,来在Web界面连接开发机,在Web界面我们可以使用以下三种模式:
- JupyterLab:一个交互式的编程和教学环境,同时内置终端,可以很方便地查看文件,执行代码等
- 终端(Terminal, 最轻量级):主要进行命令行操作,或者运行脚本和简单程序
- VSCode:网页中集成的VSCode,也可以在本地VSCode中通过SSH连接远程开发,下面就会讲如何配置远程连接
使用SSH连接开发机
什么是SSH?
SSH全称Secure Shell,中文翻译为安全外壳,它是一种网络安全协议,通过加密和认证机制实现安全的访问和文件传输等业务。SSH 协议通过对网络数据进行加密和验证,在不安全的网络环境中提供了安全的网络服务。
SSH 是(C/S架构)由服务器和客户端组成,为建立安全的 SSH 通道,双方需要先建立 TCP 连接,然后协商使用的版本号和各类算法,并生成相同的会话密钥用于后续的对称加密。在完成用户认证后,双方即可建立会话进行数据交互。
远程连接的好处就是,如果你使用的是远程办公,你可以通过SSH远程连接开发机,这样就可以在本地进行开发。而且如果你需要跑一些本地的代码,又没有环境,那么远程连接就非常有必要了。
在Windows下连接SSH开发机
首先来试用一下通过密码连接,在Windows下打开PowerShell,其实用CMD应该也是可以的,但更多时候,使用Powershell可以实现更加复杂的功能。
然后在Web控制台开发机页点击SSH连接来查看登录命令:(我的开发机在我写这篇文章时已经停机,所以我用教程里的指令来进行详细解释)
1 | ssh -p 37367 root@ssh.intern-ai.org.cn -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null |
这条 SSH 命令用于通过特定端口远程连接到服务器。以下是每个部分的解释:
-
ssh:命令行工具,用于通过 SSH(安全外壳)协议连接到远程计算机。 -
-p 37367:指定使用端口号 37367 进行连接(默认情况下,SSH 使用端口 22)。 -
root@ssh.intern-ai.org.cn:远程主机信息,root表示用户名,ssh.intern-ai.org.cn是远程服务器的地址。 -
-o StrictHostKeyChecking=no:此选项用于禁用主机密钥检查。如果此项设置为no,SSH 不会提示用户验证主机的身份,即使密钥未知。 -
-o UserKnownHostsFile=/dev/null:指定将用户已知的主机密钥文件设置为/dev/null,即不记录远程主机密钥。这意味着不会保存连接的服务器信息,也不会在未来访问中被使用。
总结:这条命令连接到 ssh.intern-ai.org.cn 服务器的端口 37367,并通过 root 用户进行身份验证。它禁用主机密钥检查,并忽略记录已知的主机密钥,通常用于避免提示或为不受信任的环境创建临时连接。
需要注意的是:
主机密钥检查里的“主机”指的是服务器,而不是你的 PC 端。
当你通过 SSH 连接到一台服务器时,SSH 客户端会从该服务器接收到一个主机密钥,用来验证你正在连接的服务器的身份。
如果是你第一次连接这台服务器,SSH 会提示你是否信任并保存该主机密钥,以便在未来访问时验证服务器的身份。
这一步是为了防止中间人攻击,如果主机密钥发生变化,SSH 会发出警告。
在你的命令中,通过设置 -o StrictHostKeyChecking=no,SSH 跳过了这个验证步骤,因此不会询问你是否信任这台服务器的密钥。
按下enter需要输入密码,这里是可以在控制台复制过来的,不多赘述。回车,出现以下界面说明连接成功:

输入一系列指令来查看开发机信息:

输入两次exit来退出远程连接。
配置SSH密钥进行SSH远程连接
为了使连接更加方便,我们来配置SSH密钥以进行快捷的远程连接。
(这里如果用户名含中文,将无法支持,但还好我的是数字)
ssh-keygen支持RSA和DSA两种认证密钥。
常用参数包括:
-t:指定密钥类型,如dsa、ecdsa、ed25519、rsa。
-b:指定密钥长度。
-C:添加注释。
-f:指定保存密钥的文件名。
-i:读取未加密的ssh-v2兼容的私钥/公钥文件。
这里我们使用RSA算法生成密钥,命令为:
1 | ssh-keygen -t rsa |
有些同学可能之前配置过(比如我),就可以在用户文件夹下找到这个密钥,路径:
1 | C:/Users/{用户名}/.ssh/id_rsa.pub |
在powerShell中可以使用Get-Content命令查看生成的密钥:

但我后面发现,即便直接用txt打开也可以复制到这部分内容(doge)。
然后我们回到开发机平台,在首页点击配置SSH Key,接着点击添加SSH公钥,将刚刚生成的密钥复制下来,粘贴到公钥框中,名称会被自动识别到,最后点击立即添加,SSH Key就配置完成了。

重启终端进行远程连接,就会跳过密码输入这一步了。
使用vscode进行SSH远程连接
首先需要下载下图中的插件们:

安装完成插件以后,点击侧边栏的远程连接图标,在SSH中点击“+”按钮,添加开发机SSH连接的登录命令。
后面的一系列操作直接按照默认执行即可。
然后点击弹出的“已添加主机”窗口的连接,就可以远程使用开发机了。

端口映射
什么是端口映射?
端口映射是一种网络技术,它可以将外网中的任意端口映射到内网中的相应端口,实现内网与外网之间的通信。通过端口映射,可以在外网访问内网中的服务或应用,实现跨越网络的便捷通信。
在后续的课程中我们会进行模型web_demo的部署实践,那在这个过程中,很有可能遇到web ui加载不全的问题。这是因为开发机Web IDE中运行web_demo时,直接访问开发机内 http/https 服务可能会遇到代理问题,外网链接的ui资源没有被加载完全。
为了解决这个问题,我们需要对运行web_demo的连接进行端口映射,将外网链接映射到我们本地主机,我们使用本地连接访问,解决这个代理问题。
如何进行端口映射
在开发机选项卡,点击自定义服务,复制第一条命令(这里实际上是第二条也行,除非你机器上的7860端口已经被使用了,127.0.0.1对应的是本地机,localhost等同于127.0.0.1,区别在于localhost是域名,127.0.0.1是IP地址,它们都是本机访问,访问时都不需要联网)
1 | ssh -p 37367 root@ssh.intern-ai.org.cn -CNg -L {本地机器_PORT}:127.0.0.1:{开发机_PORT} -o StrictHostKeyChecking=no |
命令各部分的含义:
p 37367:是指定 SSH 连接的端口为 37367,这个前面提到过。
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:关闭严格的主机密钥检查,这样可以避免第一次连接时因为未知主机密钥而产生的提示或错误。
然后用上面所教的任意一种方法连接开发机,然后在一个你能控制的目录下创建hello_world.py(注意这里不要在share文件夹下创建因为他是只读的,会写入失败):
1 | import socket |
在运行代码之前,需要先使用pip install gradio==4.29.0命令安装依赖包,并在本机PC端的Powershell中运行:
1 | ssh -p 37367 root@ssh.intern-ai.org.cn -CNg -L 7860:127.0.0.1:7860 -o StrictHostKeyChecking=no |
然后在Web IDE的终端中运行hello_world.py:
1 | python hello_world.py |
看到如下界面:

就可以在浏览器中通过127.0.0.1:7860来访问界面:

映射成功
Linux入门指令
Linux在入门使用的时候最常用的就是下面几个:
pwd: 查看当前目录cd: 切换路径(change directory)cd ..:切换到上一级目录(相对路径)cd /home:切换到home目录(绝对路径)
ls: 打印当前目录下所有的内容(文件夹和文件颜色是不一样的)mkdir: 创建文件夹,在后面跟文件夹名,如果文件夹名中含空格,需要带引号mkdir "dir name"
touch: 创建文件,在后面跟文件名,要带后缀,如果含空格与上一条同理touch hello_world.py
cat: 查看文件内容,在后面跟文件名,将文件内容打印在终端。vi: 使用vim编辑器创建(如果没有这个文件)并打开文件,进行编辑:- 编辑模式有多种,教程很多,我这里肯定说不清楚,事实上我掌握的也只是最基础的功能,建议是不会就去google,越用越熟吧
rm: 删除一个文件rm hello.py
rm -r: 递归删除一个文件夹rm -r "dir name"
grep: 跟一个字符串, 筛选出含有这个字符串的内容grep "hello" file.txt
>: 将输出写入文件,覆盖原有内容python hello.py > output.txt
>>: 将输出写入文件,追加到原有内容后面python hello.py >> output.txt
|: 管道操作符,用于将一个命令的输出传递给另一个命令python hello.py | grep "Hello"
参考材料
https://github.com/InternLM/Tutorial/tree/camp4/docs/L0/linux
PowerShell和cmd的区别是什么