当前位置: 首页 > article >正文

书生大模型第四期闯关任务与笔记

书生大模型第四期闯关任务与笔记

  • 入门岛
    • 第一关 Linux
      • 闯关任务:完成SSH连接与端口映射并运行hello_world.py
      • 笔记与过程
        • SSH
        • 端口映射
        • linux文件管理命令
        • linux进程管理命令
    • 第二关 Python
      • 闯关任务:Leetcode 383(笔记中提交代码与leetcode提交通过截图)
      • 闯关任务:Vscode连接InternStudio debug笔记
      • 笔记与过程
        • conda虚拟环境
        • pip安装
        • 配debug环境
    • 第三关 Git
      • 任务1: 破冰活动:自我介绍
      • 任务2: 实践项目:构建个人项目
      • 笔记与过程
        • 工作区、暂存区和 Git 仓库区
        • 常用指令
    • 第四关 玩转HF/魔搭/魔乐社区
      • 任务:HF平台模型下载与使用过程

入门岛

第一关 Linux

闯关任务:完成SSH连接与端口映射并运行hello_world.py

ssh连接:打开powershell,复制登录命令。使用hostname查看开发机名称,使用uname -a查看开发机内核信息,使用lsb_release -a查看开发机版本信息,使用nvidia-smi查看GPU的信息
在这里插入图片描述
后续使用cursor进行ssh和端口映射,成功运行hello_world.py
在这里插入图片描述

笔记与过程

SSH

cursor安装Remote-SSH

创建开发机

SSH全称Secure Shell,中文翻译为安全外壳,它是一种网络安全协议,通过加密和认证机制实现安全的访问和文件传输等业务。SSH 协议通过对网络数据进行加密和验证,在不安全的网络环境中提供了安全的网络服务。

SSH 是(C/S架构)由服务器客户端组成,为建立安全的 SSH 通道,双方需要先建立 TCP 连接,然后协商使用的版本号和各类算法,并生成相同的会话密钥用于后续的对称加密。在完成用户认证后,双方即可建立会话进行数据交互。

那在后面的实践中我们会配置SSH密钥,配置密钥是为了当我们远程连接开发机时不用重复的输入密码,那为什么要进行远程连接呢

远程连接的好处就是,如果你使用的是远程办公,你可以通过SSH远程连接开发机,这样就可以在本地进行开发。而且如果你需要跑一些本地的代码,又没有环境,那么远程连接就非常有必要了。

命令:ssh -p 38267 root@ssh.intern-ai.org.cn -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null

端口映射

端口映射是一种网络技术,它可以将外网中的任意端口映射到内网中的相应端口,实现内网与外网之间的通信。通过端口映射,可以在外网访问内网中的服务或应用,实现跨越网络的便捷通信。

那么我们使用开发机为什么要进行端口映射呢?

因为在后续的课程中我们会进行模型web_demo的部署实践,那在这个过程中,很有可能遇到web ui加载不全的问题。这是因为开发机Web IDE中运行web_demo时,直接访问开发机内 http/https 服务可能会遇到代理问题,外网链接的ui资源没有被加载完全。

所以为了解决这个问题,我们需要对运行web_demo的连接进行端口映射,将外网链接映射到我们本地主机,我们使用本地连接访问,解决这个代理问题。下面让我们实践一下。

ssh -p 38267 root@ssh.intern-ai.org.cn -CNg -L 7860:127.0.0.1:7860 -o StrictHostKeyChecking=no

这条命令会通过开发机 SSH 通道将开发机内的 {开发机_PORT} 转发到您本地机器的 (本地机器_PORT},这个过程可能会要求你输入 SSH 链接的密码。

linux文件管理命令

在 Linux 中,常见的文件管理操作包括:

  • 创建文件:可以使用 touch 命令创建空文件。
  • 创建目录:使用 mkdir 命令。
  • 目录切换:使用cd命令。
  • 显示所在目录:使用pwd命令。
  • 查看文件内容:如使用 cat 直接显示文件全部内容,moreless 可以分页查看。
  • 编辑文件:如 vivim 等编辑器。
  • 复制文件:用 cp 命令。
  • 创建文件链接:用ln命令。
  • 移动文件:通过 mv 命令。
  • 删除文件:使用 rm 命令。
  • 删除目录rmdir(只能删除空目录)或 rm -r(可删除非空目录)。
  • 查找文件:可以用 find 命令。
  • 查看文件或目录的详细信息:使用ls命令,如使用 ls -l查看目录下文件的详细信息。
  • 处理文件:进行复杂的文件操作,可以使用sed命令。
linux进程管理命令

进程管理命令是进行系统监控和进程管理时的重要工具,常用的进程管理命令有以下几种:

  • ps:查看正在运行的进程
  • top:动态显示正在运行的进程
  • pstree:树状查看正在运行的进程
  • pgrep:用于查找进程
  • nice:更改进程的优先级
  • jobs:显示进程的相关信息
  • bg 和 fg:将进程调入后台
  • kill:杀死进程

第二关 Python

闯关任务:Leetcode 383(笔记中提交代码与leetcode提交通过截图)

代码:

class Solution:
    def canConstruct(self, ransomNote: str, magazine: str) -> bool:
        a = Counter(ransomNote) 
        b = Counter(magazine)
        return (a & b) == a

通过截图:
在这里插入图片描述
思路:一开始的想法是用map统计每个字母的出现次数,保证magazine中每个字母的统计次数>=ransomNote中的;python3正好有很方便的库Collection用来跟踪值出现的次数,常见操作如下,用交集就可以满足该题的要求。

>>> c = Counter("abcdcba")
>>> c
Counter({'a': 2, 'c': 2, 'b': 2, 'd': 1})
>>> c = Counter("abcdefgab")
>>> c["a"]
2
>>> c["c"]
1
>>> c["h"]
0
sum(c.values())  # 所有计数的总数
c.clear()  # 重置Counter对象,注意不是删除
list(c)  # 将c中的键转为列表
set(c)  # 将c中的键转为set
dict(c)  # 将c中的键值对转为字典
c.items()  # 转为(elem, cnt)格式的列表
Counter(dict(list_of_pairs))  # 从(elem, cnt)格式的列表转换为Counter类对象
c.most_common()[:-n:-1]  # 取出计数最少的n-1个元素
c += Counter()  # 移除0和负值

闯关任务:Vscode连接InternStudio debug笔记

pip下载openai环境,运行后发现有bug
在这里插入图片描述
打断点排查,发现json.loads理应处理的json字符串res有一些多余的字符:
在这里插入图片描述
使用res.strip()去除后即可顺利运行:
在这里插入图片描述
完整代码:

from openai import OpenAI#调用书生浦语API实现将非结构化文本转化成结构化json的例子
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)
trimmed_res = res.strip()[7:-3]
res_json = json.loads(trimmed_res)
print(res_json)

笔记与过程

conda虚拟环境

虚拟环境是Python开发中不可或缺的一部分,它允许你在不同的项目中使用不同版本的库,避免依赖冲突。Conda是一个强大的包管理器和环境管理器。

pip只管理python包,conda

conda create --name myenv python=3.9
conda activate myenv
conda deactivate
#查看当前设备上所有的虚拟环境
conda env list
#查看当前环境中安装了的所有包
conda list
#删除环境(比如要删除myenv)
conda env remove myenv
#安装虚拟环境到指定目录 方便共享
conda create --prefix /root/envs/myenv python=3.9
pip安装

pip install -r requirements.txt

为了节省大家的存储空间,本次实战营可以直接使用share目录下的conda环境,但share目录只有读权限,所以要安装额外的包时我们不能直接使用pip将包安装到对应环境中,需要安装到我们自己的目录下。

这里我们用本次实战营最常用的环境/root/share/pre_envs/pytorch2.1.2cu12.1来举例。

# 首先激活环境
conda activate /root/share/pre_envs/pytorch2.1.2cu12.1

# 创建一个目录/root/myenvs,并将包安装到这个目录下
mkdir -p /root/myenvs
pip install <somepackage> --target /root/myenvs

# 注意这里也可以使用-r来安装requirements.txt
pip install -r requirements.txt --target /root/myenvs

要使用安装在指定目录的python包,可以在python脚本开头临时动态地将该路径加入python环境变量中去

import sys  
  
# 你要添加的目录路径  
your_directory = '/root/myenvs'  
  
# 检查该目录是否已经在 sys.path 中  
if your_directory not in sys.path:  
    # 将目录添加到 sys.path  
    sys.path.append(your_directory)  
  
# 现在你可以直接导入该目录中的模块了  
# 例如:import your_module
配debug环境

下载python插件,首次debug需要配置以下,点击“create a launch.json file”,选择python debugger后选择“Python File” config。

第三关 Git

任务1: 破冰活动:自我介绍

fork后下载有一些问题,是网络,多试几次

在这里插入图片描述
写自我介绍文件并提交到本地仓库在这里插入图片描述
提交pr。pr链接:https://github.com/InternLM/Tutorial/pull/2517
在这里插入图片描述

任务2: 实践项目:构建个人项目

因为github经常出现网络问题,使用gitee平台,在其上上传了深度学习相关的个人毕设项目(因为暂无大模型项目),并将书生大模型的超链接加入readme:
https://gitee.com/sammmmy/cfg-gnn
因为个人时间和能力有限,以及主题不相关,不报名第四期实战营项目。

笔记与过程

工作区、暂存区和 Git 仓库区
  • 工作区(Working Directory): 当我们在本地创建一个 Git 项目,或者从 GitHub 上 clone 代码到本地后,项目所在的这个目录就是“工作区”。这里是我们对项目文件进行编辑和使用的地方。
  • 暂存区(Staging Area): 暂存区是 Git 中独有的一个概念,位于 .git 目录中的一个索引文件,记录了下一次提交时将要存入仓库区的文件列表信息。使用 git add 指令可以将工作区的改动放入暂存区。
  • 仓库区 / 本地仓库(Repository): 在项目目录中,.git 隐藏目录不属于工作区,而是 Git 的版本仓库。这个仓库区包含了所有历史版本的完整信息,是 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从工作区和索引中删除文件

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

任务:HF平台模型下载与使用过程

  1. 使用GitHub CodeSpace安装依赖:在这里插入图片描述

  2. 下载internlm2_5-7b-chat的配置文件在这里插入图片描述

  3. 下载internlm2_5-chat-1_8b并打印示例输出:这里以“A beautiful flower”开头,模型对其进行“续写”,InternLM的模型拥有强大的数学方面的能力。这里输出的问题是一个数学问题。在这里插入图片描述

  4. Hugging Face Spaces的使用:
    Hugging Face Spaces 是一个允许我们轻松地托管、分享和发现基于机器学习模型的应用的平台。Spaces 使得开发者可以快速将我们的模型部署为可交互的 web 应用,且无需担心后端基础设施或部署的复杂性。
    首先创建了static space
    在这里插入图片描述
    然后回到CodeSpace,接着clone项目。照着手册修改html,添加token,就能成功push,发现再次进入Space界面变成了下图:在这里插入图片描述

  5. 模型上传:
    通过CLI上传 Hugging Face同样是跟Git相关联,通常大模型的模型文件都比较大,因此我们需要安装git lfs,对大文件系统支持。一些过程:在这里插入图片描述
    上传完毕的模型网页:在这里插入图片描述


http://www.kler.cn/a/387948.html

相关文章:

  • 【贪心算法】No.1---贪心算法(1)
  • 软件设计师-信息安全
  • [免费]SpringBoot+Vue3校园宿舍管理系统(优质版)【论文+源码+SQL脚本】
  • KubeVirt入门介绍
  • Android 开发指南:初学者入门
  • 类型转换指令及方法调用与返回指令
  • 在 WPF 中,绑定机制是如何工作的?WPF数据绑定机制解析
  • onnx-runner:使用ORT运行YOLO的ONNX模型
  • 安全关键型嵌入式系统设计模式整理及应用实例
  • Flink的流、批处理
  • 【开源免费】基于SpringBoot+Vue.JS医院管理系统(JAVA毕业设计)
  • 使用ref操作DOM(React)
  • Qt菜单功能实现
  • 【Ant.designpro】上传图片
  • LeetCode-两整数之和
  • 清华大学提出Mini-Omni2:开源多模态模型,功能与GPT-4o媲美!
  • 继承的学习
  • 漫途LoRa家族系列产品,高效、稳定、智能的物联网通信!
  • 智象未来(HiDream.ai):从科技创新启程,绘制智能未来新篇章
  • 【MySQL】数据的增删查改
  • //字符串数组
  • STM32单片机WIFI语音识别智能衣柜除湿消毒照明
  • 在 C# 中,ICollection 和 IList 接口有什么区别?
  • SQL注入攻击及其在SpringBoot中使用MyBatisPlus的防范策略
  • [OpenGL]使用OpenGL实现硬阴影效果
  • Audio-Language Models