第四期书生大模型实战营——入门岛


入门岛关卡概览

  • 第1关 Linux基础知识

  • (必做)完成SSH连接与端口映射并运行hello_world.py

  • 将Linux基础命令在开发机上完成一遍

  • 使用VScode远程连接开发机并创建一个conda环境

  • 第2关 Python基础知识

  • (必做)通过Leetcode 383

  • (必做)VScode连接InternStudio debug笔记

  • pip安装到指定目录

  • 第3关 Git基础知识

  • 提交自我介绍

  • 构建个人项目

  • 第4关 玩转HF/魔搭/魔乐社区

  • (必做)使用HF/魔搭/魔乐社区下载模型(至少下载config.jsonmodel.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()

激活环境L0pip install gradio==4.29.0安装hello_world.py的依赖:
在这里插入图片描述
运行该文件,并本地打开链接就可以看到Web UI的界面了:
在这里插入图片描述
在这里插入图片描述
由于VScode提供了自动端口映射的功能,因此不需要手动配置,在终端的右侧可以找到端口选项:
在这里插入图片描述

第2关 Python基础知识

VScode连接InternStudio debug笔记

1.python debug

Step1.安装Python扩展

  • 打开VSCode,点击左侧扩展栏,搜索Python,并安装。
    在这里插入图片描述Step2.配置调试
  • 打开你的Python文件,点击左侧活动栏的“运行和调试”图标。
  • 首次debug需要配置,点击“create a launch.json file”,选择python debugger后选择“Python File” config。
    在这里插入图片描述 - 可以直接编辑生成的launch.json文件,配置调试参数,比如添加config(Add Configuration)等。
    在这里插入图片描述

Step3.设置断点

  • 在代码行号旁边点击,可以添加一个红点,这就是断点(如果不能添加红点需要检查一下Python扩展是否已经正确安装)。当代码运行到这里时,它会停下来,这样你就可以检查变量的值、执行步骤等。
    • 普通断点:在代码行号左侧点击,添加断点。
    • 条件断点:在断点标记上右键,选择条件断点(conditional breakpoint)。
  • VSCode 中常用的条件断点主要有三种类型:
    • 表达式(Expression):输入一个 Python 表达式,每次触发断点时运行该表达式,当表达式的值为 True 时 VS Code 会暂停执行。例如:x == 10
    • 触发计数(Hit Count):断点触发计数达到输入值时才会暂停运行。
    • 记录日志(Log Message):触发该断点时在 Debug Console 中输出指定信息,实际上就是 logpoint。需要输入要输出的信息,如果要用到表达式,可以使用 {} 将表达式括起来。例如,每次记录变量 i 的值可以写 x={i}。

Step4.启动debug

  • 点击VSCode侧边栏的“Run and Debug”(运行和调试),选择调试配置后,点击绿色箭头(开始调试)按钮,或者按F5键。
    在这里插入图片描述

Step5.查看变量

  • 当代码在断点处停下来时,你可以查看和修改变量的值。在“Run and
    Debug”侧边栏的“Variables”(变量)部分,你可以看到当前作用域内的所有变量及其值。

Step6.单步执行代码

  • 你可以使用顶部的debug面板的按钮来单步执行代码。这样,你可以逐行运行代码,并查看每行代码执行后的效果。
  • debug面板各按钮功能介绍:
    在这里插入图片描述
    • 1 continue: 继续运行到下一个断点。
    • 2 step over: 单步跳过,可以理解为运行当前行代码,不进入具体的函数或者方法。
    • 3 step into: 单步进入。如果当前行代码存在函数调用,则进入该函数内部。如果当前行代码没有函数调用,则等价于step over。
    • 4 step out: 单步退出函数,返回到调用该函数的上一层代码。
    • 5 restart: 重新启动调试。
    • 6 stop: 终止调试。

Step7.修复错误并重新运行
如果你找到了代码中的错误,可以修复它,然后重新运行debug来确保问题已经被解决。

通过遵循以上步骤,你可以使用VSCode的debug功能来更容易地找到和修复你Python代码中的错误。可以自己编写一个简单的python脚本,并尝试使用debug来更好的理解代码的运行逻辑。记住,debug是编程中非常重要的一部分,所以不要怕花时间在这上面。随着时间的推移,你会变得越来越擅长它!

2.命令行debug

很多时候我们要debug的不止是一个简单的python文件,而是很多参数,参数中不止会有简单的值还可能有错综复杂的文件关系,甚至debug一整个项目。这种情况下,直接使用命令行来发起debug会是一个更好的选择。

其实不太理解这个要用在什么场景啦

VScode设置
VScode支持通过remote的方法连接我们在命令行中发起的debug server。首先我们要配置一下debug的config。

还是点击VScode侧边栏的“Run and Debug”(运行和调试),单击"create a lauch.json file"

选择debugger时选择python debugger。选择debug config时选择remote attach就行,随后会让我们选择debug server的地址,因为我们是在本地debug,所以全都保持默认直接回车就可以了,也就是我们的server地址为 localhost:5678。

配置完以后会打开配置的json文件,但这不是重点,可以关掉。这时我们会看到run and debug界面有变化,出现了debug选项。

注意:已经有配置好的json文件

如果有已经配置好的debug json配置文件,则需要在原json上增加配置。可以通过Run and Debug卡片左上角的下拉菜单单击Add configuration,或者点击设置按钮打开配置文件,在配置文件的右下角也会有一个Add configuration。剩下的步骤就和前面一样选择Python debugger-Remote attach,剩下的全都保持默认直接回车就可以了,也就是我们的server地址为 localhost:5678。

debug命令行
现在vscode已经准备就绪,让我们来看看如何在命令行中发起debug。如果没有安装debugpy的话可以先通过pip install debugpy安装一下。

python -m debugpy --listen 5678 --wait-for-client ./myscript.py
  • ./myscript.py可以替换为我们想要debug的python文件,后面可以和直接在命令行中启动python一样跟上输入的参数。记得要先在想要debug的python文件打好断点并保存。

    --wait-for-client参数会让我们的debug server在等客户端连入后才开始运行debug。在这就是要等到我们在run and debug界面启动debug。

注意: 在开发机上使用该debug方式运行的时候可能会报以下warning。此时,debug可能不能正常运行,需要按他提示的给python加上-Xfrozen_modules=off参数禁用冻结模块即可。

Debugger warning: It seems that frozen modules are being used, which may make the debugger miss breakpoints. Please pass -Xfrozen_modules=off to python to disable frozen modules.
python -m -Xfrozen_modules=off debugpy --listen 5678 --wait-for-client ./myscript.py

先在终端中发起debug server,然后再去vscode debug页面单击一下绿色箭头开启debug。

使用别名简化命令
由于python -m debugpy --listen 5678 --wait-for-client这个命令太长了,可以给这段常用的命令设置一个别名。

在linux系统中,可以对 ~/.bashrc 文件中添加以下命令

alias pyd='python -m debugpy --wait-for-client --listen 5678'

然后执行

source ~/.bashrc

这样之后使用 pyd 命令(你可以自己命名) 替代 python 就能在命令行中起debug了,之前的debug命令就变成了

pyd ./myscript.py

实战

通过Leetcode 383

在这里插入图片描述

class Solution(object):
    def canConstruct(self, ransomNote, magazine):
        """
        :type ransomNote: str
        :type magazine: str
        :rtype: bool
        """
        # 用于存储 magazine 中每个字符的出现次数
        char_count = {}
        # 遍历 magazine 中的每个字符
        for char in magazine:
            if char in char_count:
                char_count[char] += 1
            else:
                char_count[char] = 1
        # 遍历 ransomNote 中的每个字符
        for char in ransomNote:
            if char not in char_count or char_count[char] == 0:
                return False
            char_count[char] -= 1

        return True

提交通过截图:
在这里插入图片描述

python调用InternLM API并debug

获取API Key
书生·浦语的API文档
在这里插入图片描述
我们可以使用openai python sdk来调用InternLM api。注意在配置api key时,更推荐使用环境变量来配置以避免token泄露。

  • 可以在终端中临时将token加入变量,此时该环境变量只在当前终端内有效。
export api_key="填入你的api token"
python internlm_test.py
  • 若是想永久加入环境变量,可以对 ~/.bashrc 文件中添加以下命令。
export api_key="填入你的api token"
  • 保存后记得source ~/.bashrc

debug单个文件
下面是一段调用书生浦语API实现将非结构化文本转化成结构化json的例子,其中有一个小bug会导致报错。为了便于debug所以将api_key明文写在代码中,这是一种极其不可取的行为!

from openai import OpenAI
import json
def internlm_gen(prompt,client):
    '''
    LLM生成函数
    Param prompt: prompt string
    Param client: OpenAI client 
    '''
    response = client.chat.completions.create(
        model="internlm2.5-latest",
        messages=[
            {"role": "user", "content": prompt},
      ],
        stream=False
    )
    return response.choices[0].message.content

api_key = ''
client = OpenAI(base_url="https://internlm-chat.intern-ai.org.cn/puyu/api/v1/",api_key=api_key)

content = """
书生浦语InternLM2.5是上海人工智能实验室于2024年7月推出的新一代大语言模型,提供1.8B、7B和20B三种参数版本,以适应不同需求。
该模型在复杂场景下的推理能力得到全面增强,支持1M超长上下文,能自主进行互联网搜索并整合信息。
"""
prompt = f"""
请帮我从以下``内的这段模型介绍文字中提取关于该模型的信息,要求包含模型名字、开发机构、提供参数版本、上下文长度四个内容,以json格式返回。
`{content}`
"""
res = internlm_gen(prompt,client)
res_json = json.loads(res)
print(res_json)

(1)首次运行报错,未安装openai库:
在这里插入图片描述
(2)再次运行报错,定位在res = internlm_gen(prompt,client)
在这里插入图片描述
(3)python debug安装扩展并配置调试
(4)设置断点,启动debug,查看变量
在这里插入图片描述
res变量的值如下:

'根据提供的模型介绍文字,以下是提取的关于该模型的信息,以JSON格式返回:\n\n```json\n{\n  "模型名字": "书生浦语InternLM2.5",\n  "开发机构": "上海人工智能实验室",\n  "提供参数版本": ["1.8B", "7B", "20B"],\n  "上下文长度": "1M"\n}\n```\n\n这个JSON对象包含了模型名字、开发机构、提供参数版本以及上下文长度这四个关键信息。希望这对您有帮助!如果有其他问题或需要进一步的信息,请随时告诉我。'

错误定位:res 变量中的内容并不是一个纯粹的 JSON 字符串。它包含了一些额外的文本描述,如 “根据提供的模型介绍文字,以下是提取的关于该模型的信息,以 JSON 格式返回:” 以及前后的注释信息和格式化标记(如 json 和 ),而 json.loads() 方法只能处理标准的 JSON 格式字符串,所以遇到这些非 JSON 内容时就会抛出解析错误。

(5)修复错误并重新运行
在这里插入图片描述

pip安装到指定目录

使用VScode连接开发机后使用pip install -t命令安装一个numpy到开发机/root/myenvs目录下,并成功在一个新建的python文件中引用。
在这里插入图片描述
创建新的文件np_demo.py并运行:
在这里插入图片描述
在这里插入图片描述

第3关 Git基础知识

Git相关

Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。 Git的诞生离不开Linux社区的努力,它是开源的,而且是免费的。它支持多种操作系统,包括 Linux、Unix、Mac OS X、Windows。

Git简易入门四部曲

在Git的日常使用中,下面四步曲是常用的流程,尤其是在团队协作环境中。

  • 添(Add)

    • 命令:git add <文件名>git add .
    • 作用:将修改过的文件添加到本地暂存区(Staging Area)。这一步是准备阶段,你可以选择性地添加文件,决定哪些修改应该被包括在即将进行的提交中。
  • 提(Commit)

    • 命令:git commit -m '描述信息'
    • 作用:将暂存区中的更改提交到本地仓库。这一步是将你的更改正式记录下来,每次提交都应附带一个清晰的描述信息,说明这次提交的目的或所解决的问题。
  • 拉(Pull)

    • 命令:git pull
    • 作用:从远程仓库拉取最新的内容到本地仓库,并自动尝试合并到当前分支。这一步是同步的重要环节,确保你的工作基于最新的项目状态进行。在多人协作中,定期拉取可以避免将来的合并冲突。
  • 推(Push)

    • 命令:git push
    • 作用:将本地仓库的更改推送到远程仓库。这一步是共享你的工作成果,让团队成员看到你的贡献。

帮助团队成员有效地管理和同步代码,避免工作冲突,确保项目的顺利进行。正确地使用这些命令可以极大地提高开发效率和协作质量。

Git常用指令

指令描述
git config配置用户信息和偏好设置
git init初始化一个新的 Git 仓库
git clone克隆一个远程仓库到本地
git status查看仓库当前的状态,显示有变更的文件
git add将文件更改添加到暂存区
git commit提交暂存区到仓库区
git branch列出、创建或删除分支
git checkout切换分支或恢复工作树文件
git merge合并两个或更多的开发历史
git pull从另一仓库获取并合并本地的版本
git push更新远程引用和相关的对象
git remote管理跟踪远程仓库的命令
git fetch从远程仓库获取数据到本地仓库,但不自动合并
git stash暂存当前工作目录的修改,以便可以切换分支
git cherry-pick选择一个提交,将其作为新的提交引入
git rebase将提交从一个分支移动到另一个分支
git reset重设当前 HEAD 到指定状态,可选修改工作区和暂存区
git revert通过创建一个新的提交来撤销之前的提交
git mv移动或重命名一个文件、目录或符号链接,并自动更新索引
git rm从工作区和索引中删除文件

实战

提交自我介绍

将本项目直接fork到自己的账号下,这样就可以直接在自己的账号下进行修改和提交。注意取消勾选仅克隆当前分支。配置git并克隆项目到InternStudio本地。

# 修改为自己fork的仓库,改为上图中你的https仓库的git地址,将random-zhou改为自己的用户名
git clone https://github.com/random-zhou/Tutorial.git 
#git clone git@github.com:random-zhou/Tutorial.git 
#git clone https://github.com/InternLM/Tutorial.git
cd Tutorial/
git branch -a
git checkout -b class origin/class

在这里插入图片描述
创建分支。

git checkout -b class_036 # 自定义一个新的分支
#git checkout -b class_id 分支名字改为你的uid分支名称

创建自己的介绍文件。

【大家可以叫我】:InternLM
【坐标】:上海
【专业/职业】:小助手
【兴趣爱好】:乒乓球
【项目技能】:cv、nlp
【组队情况】:未组队,快来一起!
【本课程学习基础】:CV、NLP、LLM
【本期活动目标】:一起学习,快乐暑假,闯关达人!

提交更改分支,推送分支到远程仓库。

git add .
git commit -m "add git_camp4_036_introduction" # 提交信息记录,这里需要修改为自己的uid
git push origin class_036
#注意,这里要改为你自己的分支名称
#大家提交使用英文,避免同步错误

在这里插入图片描述
检查提交内容并创建PR:点击右上角Compare & pull request,在“Add a title中”输入 “add git_< id >_introduction”,然后点击“Create pull request”。
在这里插入图片描述
在这里插入图片描述

第4关 玩转HF/魔搭/魔乐社区

Hugging Face平台

Hugging Face 最初专注于开发聊天机器人服务。尽管他们的聊天机器人项目并未取得预期的成功,但他们在GitHub上开源的Transformers库却意外地在机器学习领域引起了巨大轰动。如今,Hugging Face已经发展成为一个拥有超过100,000个预训练模型和10,000个数据集的平台,被誉为机器学习界的GitHub。

HF的Transformers库,作为HF最核心的项目,它可以:

  • 直接使用预训练模型进行推理;
  • 提供了大量预训练模型可供使用;
  • 使用预训练模型进行迁移学习。

模型详情页

在这里插入图片描述

  • Model Card:类似于GitHub的README.md文件,都是展示模型的overview。
  • Files and Versions:包含模型文件以及模型的版本管理。
  • Use this model:提供我们使用模型的示例代码,当然一般在Model card下方也会提到各种该模型的使用方法。

实战

使用GitHub CodeSpace下载模型

Github CodeSpace是Github推出的线上代码平台,提供了一系列templates,我们这里选择Jupyter Notebook进行创建环境。创建好环境后,可以进入网页版VSCode的界面,这就是CodeSpace提供给我们的在线编程环境。
在这里插入图片描述

在界面下方的终端安装以下依赖,便于模型运行。

# 安装transformers
pip install transformers==4.38
pip install sentencepiece==0.1.99
pip install einops==0.8.0
pip install protobuf==5.27.2
pip install accelerate==0.33.0

以下载模型的配置文件为例,先新建一个hf_download_json.py 文件,文件内容如下:

import os
from huggingface_hub import hf_hub_download

# 指定模型标识符
repo_id = "internlm/internlm2_5-7b"

# 指定要下载的文件列表
files_to_download = [
    {"filename": "config.json"},
    {"filename": "model.safetensors.index.json"}
]

# 创建一个目录来存放下载的文件
local_dir = f"{repo_id.split('/')[1]}"
os.makedirs(local_dir, exist_ok=True)

# 遍历文件列表并下载每个文件
for file_info in files_to_download:
    file_path = hf_hub_download(
        repo_id=repo_id,
        filename=file_info["filename"],
        local_dir=local_dir
    )
    print(f"{file_info['filename']} file downloaded to: {file_path}")

运行该文件(注意文件目录请在该文件所在目录下运行该文件),可以看到,已经从Hugging Face上下载了相应配置文件。
在这里插入图片描述

创建一个python文件用于下载internlm2_5-1_8B模型并运行,下载速度跟网速和模型参数量大小相关联。

import torch
from transformers import AutoTokenizer, AutoModelForCausalLM

tokenizer = AutoTokenizer.from_pretrained("internlm/internlm2_5-1_8b", trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained("internlm/internlm2_5-1_8b", torch_dtype=torch.float16, trust_remote_code=True)
model = model.eval()

inputs = tokenizer(["A beautiful flower"], return_tensors="pt")
gen_kwargs = {
    "max_length": 128,
    "top_p": 0.8,
    "temperature": 0.8,
    "do_sample": True,
    "repetition_penalty": 1.0
}

# 以下内容可选,如果解除注释等待一段时间后可以看到模型输出
output = model.generate(**inputs, **gen_kwargs)
output = tokenizer.decode(output[0].tolist(), skip_special_tokens=True)
print(output)

这里以“A beautiful flower”开头,模型对其进行“续写”。
在这里插入图片描述

使用Hugging Face Spaces应用部署

Hugging Face Spaces 是一个允许我们轻松地托管、分享和发现基于机器学习模型的应用的平台。Spaces 使得开发者可以快速将我们的模型部署为可交互的 web 应用,且无需担心后端基础设施或部署的复杂性。 首先访问以下链接,进入Spaces。在右上角点击Create new Space进行创建。

在创建页面中,输入项目名为intern_cobuild,并选择Static应用进行创建。创建成功后会自动跳转到一个默认的HTML页面。
在这里插入图片描述
创建好项目后,回到我们的CodeSpace,接着clone项目。

cd /workspaces/codespaces-jupyter
# 请将<your_username>替换你自己的username
git clone https://huggingface.co/spaces/<your_username>/intern_cobuild
cd /workspaces/codespaces-jupyter/intern_cobuild

找到该目录文件夹下的index.html文件,修改我们的html代码,代码内容如下:

<!doctype html>
<html>
<head>
  <meta charset="utf-8" />
  <meta name="viewport" content="width=device-width" />
  <title>My static Space</title>
  <style>
    html, body {
      margin: 0;
      padding: 0;
      height: 100%;
    }
    body {
      display: flex;
      justify-content: center;
      align-items: center;
    }
    iframe {
      width: 430px;
      height: 932px;
      border: none;
    }
  </style>
</head>
<body>
  <iframe src="https://colearn.intern-ai.org.cn/cobuild" title="description"></iframe>
</body>
</html>

保存后就可以push到远程仓库上了,它会自动更新页面。

git add .
git commit -m "update: colearn page"
git push

在这里插入图片描述
出现以下报错,需要使用用户的Access Token再次设置项目的验证。

remote: Password authentication in git is no longer supported. You must use a user access token or an SSH key instead. See https://huggingface.co/blog/password-git-deprecation

点击Settings进入设置界面,点击Access Tokens进入页面,点击Create new token创建一个类型为“Write”的token,并请复制好token后要存储在合适的地方。
在这里插入图片描述
再次尝试git push更新页面。

git remote set-url origin https://<user_name>:<token>@huggingface.co/<repo_path>
git push

在这里插入图片描述

进入Space界面,就可以看到更新后的实战营页面。
在这里插入图片描述

使用CLI上传模型

通过CLI上传 Hugging Face同样是跟Git相关联,通常大模型的模型文件都比较大,因此我们需要安装git lfs,对大文件系统支持。

curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash
# sudo apt-get install git-lfs # CodeSpace里面可能会有aptkey冲突且没有足够权限
git lfs install # 直接在git环境下配置git LFS

# 使用以下命令进行登录,这时需要输入刚刚的token
pip install huggingface_hub
git config --global credential.helper store
huggingface-cli login

在这里插入图片描述

创建项目并克隆到本地,刷新文件目录可以看到克隆好的intern_study_L0_4文件夹。

cd /workspaces/codespaces-jupyter

#intern_study_L0_4就是model_name
huggingface-cli repo create intern_study_L0_4

# 克隆到本地 your_huggingface_name 注意替换成你自己的
git clone https://huggingface.co/{your_huggingface_name}/intern_study_L0_4

我们可以把训练好的模型保存进里面,这里考虑到网速问题,只上传我们刚刚下载好的config.json,把它复制粘贴进这个文件夹里面,还可以写一个README.md文件,比如可以粘贴以下内容:

# 书生浦语大模型实战营camp4
- hugging face模型上传测试
- 更多内容请访问 https://github.com/InternLM/Tutorial/tree/camp4

在这里插入图片描述

现在可以用git提交到远程仓库。

cd intern_study_L0_4
git add .
git commit -m "add:intern_study_L0_4"
git push

现在可以在Hugging Face的个人profile里面看到这个model。
在这里插入图片描述
在这里插入图片描述
var code = “ff022a4c-8f90-4361-aef2-6000bf527387”


posted @ 2025-02-04 15:57  。。。714  阅读(90)  评论(0)    收藏  举报  来源