入门岛关卡概览
-
第1关 Linux基础知识
-
(必做)完成SSH连接与端口映射并运行
hello_world.py
-
将Linux基础命令在开发机上完成一遍
-
使用VScode远程连接开发机并创建一个conda环境
-
第2关 Python基础知识
-
(必做)通过Leetcode 383
-
(必做)VScode连接InternStudio debug笔记
-
pip安装到指定目录
-
第3关 Git基础知识
-
提交自我介绍
-
构建个人项目
-
第4关 玩转HF/魔搭/魔乐社区
-
(必做)使用HF/魔搭/魔乐社区下载模型(至少下载
config.json
和model.safetensors.index.json
文件) -
(优秀作业必做)将下载好的文件上传到对应HF/魔搭/魔乐社区
-
(优秀作业必做)在HF平台上使用Spaces并把intern_cobuild部署成功
第1关 Linux基础知识
SSH及端口映射
什么是SSH
SSH全称Secure Shell,中文翻译为安全外壳,它是一种网络安全协议,通过加密和认证机制实现安全的访问和文件传输等业务。SSH 协议通过对网络数据进行加密和验证,在不安全的网络环境中提供了安全的网络服务。
SSH 是(C/S架构)由服务器和客户端组成,为建立安全的 SSH 通道,双方需要先建立 TCP 连接,然后协商使用的版本号和各类算法,并生成相同的会话密钥用于后续的对称加密。在完成用户认证后,双方即可建立会话进行数据交互。
什么是端口映射
端口映射是一种网络技术,它可以将外网中的任意端口映射到内网中的相应端口,实现内网与外网之间的通信。通过端口映射,可以在外网访问内网中的服务或应用,实现跨越网络的便捷通信。
在主机上运行端口映射命令
ssh -p 37367 root@ssh.intern-ai.org.cn -CNg -L 7860:127.0.0.1:7860 -o StrictHostKeyChecking=no
个人PC会远程连接到开发机唯一暴露在外的37367端口,(这个在SSH的时候提到过每个人的开发机暴露的端口都不一样),并设置隧道选项。暴露端口是作为中转站进行流量的转发。
-C:启用压缩,减少传输数据量。
-N:不执行远程命令,只建立隧道。
-g:允许远程主机连接到本地转发的端口。
当在个人PC上执行这个SSH命令后,SSH客户端会在本地机器的7860端口上监听。
任何发送到本地7860端口的流量,都会被SSH隧道转发到远程服务器的127.0.0.1地址上的7860端口。
这意味着,即使开发机的这个端口没有直接暴露给外部网络,我们也可以通过这个隧道安全地访问远程服务器上的服务。
实战
1.使用VScode远程连接开发机
(1)创建开发机
(2) 配置SSH密钥
使用RSA算法生成密钥,命令为ssh-keygen -t rsa
:
注意,windows中使用PowerShell而不是cmd
ssh-keygen支持RSA和DSA两种认证密钥。
常用参数包括:
-t:指定密钥类型,如dsa、ecdsa、ed25519、rsa。
-b:指定密钥长度。
-C:添加注释。
-f:指定保存密钥的文件名。
-i:读取未加密的ssh-v2兼容的私钥/公钥文件。
使用Get-Content命令查看生成的密钥并复制:
添加SSH公钥:
添加公钥成功:
重启终端
(3)使用VScode进行SSH远程连接
复制SSH连接的登陆命令:
打开本地VScode,安装Remote-SSH
插件:
点击侧边栏的远程连接图标,在SSH中点击“+”按钮,添加开发机SSH连接的登录命令并回车:
可使用默认的配置文件,若自定义配置文件,具体内容如下:
Host ssh.intern-ai.org.cn #主机ip也可以是域名
HostName ssh.intern-ai.org.cn #主机名
Port 43637 #主机的SSH端口
User root #登录SSH使用的用户
#忽略指纹验证,但是在一般的安全实践中,不建议随意禁用严格的主机密钥检查:
StrictHostKeyChecking no #表示禁用严格的主机密钥检查。这意味着当连接到一个新的 SSH 服务器时,不会严格验证服务器的主机密钥,可能会带来一定的安全风险
UserKnownHostsFile /dev/null #将用户已知的主机密钥文件设置为 /dev/null ,这实质上是忽略了对已知主机密钥的记录和使用。
点击连接该远程开发机:
connected
表示开发机连接成功:
当下一次进行远程连接的时候,就不需要输入登录命令等信息了,只需要打开VScode的远程连接就可以看到第一次连接的开发机信息,下面的root代表我们第一连接开发机时使用的是/root工作目录。
查看/root/share/目录下的README文件:
2.创建一个conda环境
单击VScode页面底部状态栏中的“终端”图标(通常显示为两个图标一个X和一个!),可以快速打开VScode的终端面板。使用conda config --show
查看conda的默认配置,发现该开发机提供的conda已使用国内清华镜像源,无需换源:
使用conda env list
查看当前conda中的所有环境:
使用conda create -n L0 python=3.10
创建一个新环境L0
:
创建虚拟环境的常用参数如下:
-n 或 --name:指定要创建的环境名称。
-c 或 --channel:指定额外的软件包通道。
–clone:从现有的环境克隆来创建新环境。
-p 或 --prefix:指定环境的安装路径(非默认位置)。-
创建后,可以在.conda目录下的envs目录下找到。
3.完成端口映射并运行hello_world.py
创建一个新的文件,命名为hello_world.py
,并将代码内容复制粘贴到该文件中并保存:
hello_world.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/202410081252022.png" alt="Logo" width="50%" style="border-radius: 5px;">
</a>
</p>
"""
gr.Markdown(html_code)
demo.launch()
激活环境L0
并pip install gradio==4.29.0
安装hello_world.py
的依赖:
运行该文件,并本地打开链接就可以看到Web UI的界面了: