书生·浦语大模型实战营Day04OpenXLab 部署

news2024/11/17 10:47:03

书生·浦语大模型实战营Day04OpenXLab 部署

  • 如何在 OpenXLab 部署一个 InternLM2-7B chat 的应用。

OpenXLab·浦源平台介绍

OpenXLab 浦源平台以开源为核心,旨在构建开源开放的人工智能生态,促进学术成果的开放共享。OpenXLab面向 AI 研究员和开发者提供 AI 领域的一站式服务平台,包含数据集中心、模型中心和应用中心,致力于推动人工智能对产学研各领域全面赋能,为构建人工智能开放生态,推动人工智能科研与技术突破、交叉创新和产业落地提供全方位的平台支撑。

部署 InternLM2

在这里插入图片描述

  • InternLM2 GitHub文档:https://github.com/InternLM/InternLM

  • Gradio官方说明文档:https://www.gradio.app/docs/interface

  • OpenXLab平台地址:https://openxlab.org.cn/home

模型准备

准备InternLM2-Chat-7B的预训练模型。InternLM2-Chat-7B的模型权重链接如下:

ModelOpenXLabHugging FaceModelScope
InternLM2-Chat-7BOpenLMLab/internlm2-chat-7binternlm/internlm2-chat-7bShanghai_AI_Laboratory/internlm2-chat-7b
  1. 如有自己微调的模型,跳过该步骤,用自己训练好的模型即可。

  2. 如需获取 InternLM2其他模型,可查看 GitHub 的 Model Zoo 文档

上传模型

若 OpenXLab 模型中心已托管你所需要的模型,可跳过模型上传的步骤

在这里插入图片描述

初始化 Git 配置

安装Git的命令取决于您使用的操作系统。以下是在不同操作系统上安装 Git 的常见方法:

Windows:

  1. 访问Git官方网站下载页面:Git - Downloads
  2. 点击“Windows”下载Git安装程序。
  3. 运行下载的安装程序并按照向导指示完成安装。
# use git install lfs
git lfs install

Linux:

安装 git 和 git lfs,命令如下

# install git
# sudo apt-get update
# sudo apt-get install git

# install git lfs
sudo apt-get update
sudo apt-get install git-lfs

# use git install lfs
git lfs install

设置您的 Git 用户名,OpenXLab 使用你在平台的用户名作为 Git的用户名,具体获取路径,可登录 OpenXLab 后,点击个人头像下的 【账号与安全】查看个人的用户名

配置 Git Username,用于作为 Git 提交的身份标识。

git config --global user.name "sunxiaobei"

需要将 Username 替换成你在 OpenXLab 平台上的用户名

配置 Git Email

git config --global user.email "1371815174@qq.com"
获取 Git Access Token

在 OpenXLab 的密钥管理添加 Git 令牌

进入密钥管理页面,点击添加令牌,输入一个令牌名称和选择可写的权限

在这里插入图片描述

添加完令牌后,记得复制生成的 Access Token,如下图所示,在后续上传模型文件,执行git push 命令时会需要填入 Username 和 Access Token 信息

拉取模型仓库

首先需要在 OpenXLab 先创建一个模型空仓库,填写模型仓库的基本信息,包括仓库名称、任务类型、访问权限等。

创建完成空的模型仓库后,找到该仓库的 git 地址并拉取该空仓库至本地,空仓库的地址在模型文件的下载按钮下。

cd /root/
git clone https://code.openxlab.org.cn/sunxiaobei/personal_assistant.git
# git clone git@code.openxlab.org.cn:sunxiaobei/personal_assistant.git
cd personal_assistant
git lfs install
上传模型文件

在克隆的仓库目录中整理模型文件,即将你的模型文件放入至clone的目录中,并执行git push命令将模型推送至远程仓库

cp /root/demo/ft/final_model/* /root/personal_assistant/

在执行 git push 之前,如果您的仓库中包含大型文件,并且您希望使用 Git LFS 来管理这些文件,您需要先标记这些文件以便 Git LFS 能够识别它们。这通常是通过使用 git lfs track 命令来标记。以下是使用 git lfs track 命令的基本步骤:

LFS管理大文件:使用 git lfs track 命令来标记你希望通过 Git LFS 管理的大文件。例如,您想要通过LFS管理所有的 .bin .model的模型文件,可以使用以下命令:

git lfs track "*.bin"
git lfs track "*.model"

标记LFS管理的文件后,提交更新的信息,执行 git push 上传模型,命令如下所示:

cd personal_assistant
git add -A
git commit -m "upload model"
git push

命令行解释

  1. cd internlm2-chat-7b:切换到名为internlm2-chat-7b的目录。
  2. git add -A:添加所有新文件、修改过的文件和删除的文件到暂存区。
  3. git commit -m "upload model":创建一个新的提交,附带提交信息"upload model"。
  4. git push:将本地的提交推送到远程仓库。

在这里插入图片描述

在执行 git push 时会弹出身份验证的弹窗,填入 Username 和 Access Token 信息,如图所示

其他身份验证方式

平台也提供SSH密钥方式身份验证,本小节不再赘述,如想了解 SSH 密钥身份验证可参考:https://openxlab.org.cn/docs/models/%E4%B8%8A%E4%BC%A0%E6%A8%A1%E5%9E%8B.html#%E4%B8%8A%E4%BC%A0%E6%A8%A1%E5%9E%8B%E6%96%87%E4%BB%B6

# 生成密钥文件
ssh-keygen -t rsa -C "1371815174@qq.com"

# 公钥信息 复制到配置
ssh-rsa AAAAB3  ******************


git clone git@code.openxlab.org.cn:sunxiaobei/personal_assistant.git

在这里插入图片描述

编写代码

本小节为编写 chat 的 web-ui 代码,主要包括项目结构初始化、应用环境配置和 gradio 应用代码的编写

在这里插入图片描述

初始化项目结构

创建一个新的 GitHub 仓库来存放您的 gradio 应用代码。推荐的项目结构如下:

  • https://github.com/sunxiaobei/internlm_assistant
├─GitHub_Repo_Name
│  ├─app.py                 # Gradio 应用默认启动文件为app.py,应用代码相关的文件包含模型推理,应用的前端配置代码
│  ├─requirements.txt       # 安装运行所需要的 Python 库依赖(pip 安装)
│  ├─packages.txt           # 安装运行所需要的 Debian 依赖项( apt-get 安装)
|  ├─README.md              # 编写应用相关的介绍性的文档
│  └─... 

示例代码仓库: https://github.com/keyhsw/internlm2-chat-7b-git

 

应用环境配置

依赖管理:配置应用所需的运行环境,如有 Python 依赖项( pip 安装)可写入 requirements.txt 中,Debian 依赖项( apt-get 安装)可写入 packages.txt 中,并存放至代码仓库的根目录下。

requirement.txt 配置 python相关的依赖包,例如 gradio、torch、transformers 等

gradio==4.10.0
transformers
sentencepiece
einops
accelerate
tiktoken

packages.txt 配置下载模型权重的工具包 git 和 git-lfs

git
git-lfs

其他环境安装:若您需要安装除了 Python 以外的包,如需要通过 mim 安装 mmcv,您可先在 requirement.txt 中填写 mim,然后在 app.py 中写入以下代码,即可完成相关包的安装:

import os
os.system("mim install mmcv-full")

 

编写 gradio 应用代码

编写一个app.py文件,里面可以通过transformers框架进行模型实例化并通过gradio组件搭建chat聊天界面,本次代码都存放在 GitHub示例代码仓库中,如需查看详细代码编写,可浏览 https://github.com/keyhsw/internlm2-chat-7b-git

import gradio as gr
import os
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, AutoModel

# download internlm2 to the base_path directory using git tool
base_path = './internlm2-chat-7b'
os.system(f'git clone https://code.openxlab.org.cn/OpenLMLab/internlm2-chat-7b.git {base_path}')
os.system(f'cd {base_path} && git lfs pull')

tokenizer = AutoTokenizer.from_pretrained(base_path,trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(base_path,trust_remote_code=True, torch_dtype=torch.float16).cuda()

def chat(message,history):
    for response,history in model.stream_chat(tokenizer,message,history,max_length=2048,top_p=0.7,temperature=1):
        yield response

gr.ChatInterface(chat,
                 title="InternLM2-Chat-7B",
                description="""
InternLM is mainly developed by Shanghai AI Laboratory.  
                 """,
                 ).queue(1).launch()

 
应用代码注意事项 :在 app.py 文件中,如需下载模型和了解文件存放路径

  1. 工作目录:OpenXLab 应用代码默认存储的位置为 /home/xlab-app-center,如需指定存储路径,可用相对路径“./”表示,本示例采用相对路径方式
  2. 模型下载:若需要在app.py中快速导入模型,可前往 模型中心上传模型权重后,通过平台提供的 git 方式进行下载,详情可参考 应用如何导入模型中心的模型,模型上传的详细步骤可查看 模型上传详细流程
import os
# download internlm2 to the base_path directory using git tool
base_path = './internlm2-chat-7b'
os.system(f'git clone https://code.openxlab.org.cn/OpenLMLab/internlm2-chat-7b.git {base_path}')
os.system(f'cd {base_path} && git lfs pull')

 

推送代码至 GitHub

编写完应用代码,记得推动您的应用代码至 GitHub 仓库中,推送本地代码至 GitHub 的命令如下:

cd personal_assistant
git add -A
git commit -m "add app.py requirements.txt packages.txt"
git push

 

部署应用

本小节为在OpenXLab浦源平台中,部署写好的 chat web-ui 的应用,具体步骤如下。

在这里插入图片描述

创建入口

创建入口在导航栏的右侧 + 创建 应用 Gradio

应用配置

填写 Chat 应用的基础信息,包括应用的名称和应用对应的任务类型,并填入 GitHub 仓库的地址,选择硬件资源后,即可立即创建啦~

应用配置注意事项

  1. GitHub 授权:若未进行 GitHub 授权,请先前往授权
  2. 自定义启动文件:若您有需要自定义启动的文件,可以通过配置选择启动文件的路径
  3. 资源申请:若当前您的资源quota不能满足您的应用需求,也可以填写硬件资源申请表单进行 申请获取
  • 如需部署 InternLM2-7b 模型建议申请 8vCPU 32GB Nvidia A10 24GB 规格资源
  • 如需部署 InternLM2-20b 模型建议申请 12vCPU 48GB Nvidia A100 40GB 规格资源
  1. 环境变量配置:若您有不方便在代码中暴露的变量信息,可通过高级配置中的环境变量进行配置

  在这里插入图片描述

应用构建和启动

查看日志,调试应用代码,若应用代码无问题,运行成功,可体验应用,并将应用进行公开

在这里插入图片描述

构建应用过程中,可以尽量去完善应用的信息,包括应用封面、中文别称、关联论文和关联模型等信息,有利于后续的平台的推荐~

 
构建过程中,可查看应用的构建日志,及时查看应用的构建进度和启动情况

由于平台资源有限,可能会因为没有资源启动而进入排队中,请耐心等候

 

应用公开

应用成功运行后,可以进行测试应用是否能跑通,跑通后可以将应用进行公开,让更多人可以看到您的应用哦~

课程资料

  • 课程视频:https://www.bilibili.com/video/BV1Rc411b7ns
  • OpenXLab:https://studio.intern-ai.org.cn
  • 学习手册:https://kvudif1helh.feishu.cn/docx/Xx8hdqGwmopi5NxWxNWc76AOnPf
  • OpenXLab 平台介绍 :https://openxlab.org.cn/docs/intro.html
  • OpenXLab Gradio 应用教程:https://openxlab.org.cn/docs/apps/Gradio%E5%BA%94%E7%94%A8.html
  • OpenXLab 上传模型教程:https://openxlab.org.cn/docs/models/%E4%B8%8A%E4%BC%A0%E6%A8%A1%E5%9E%8B.html

在这里插入图片描述
个人小站:https://www.xiaowangyun.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1614643.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微电子领域常见概念(五)界面结合能

微电子领域常见概念(五)界面结合能 界面结合能,也称为界面能或界面自由能,是描述两种不同材料接触时在它们的交界面上存在的特殊能量状态的物理量。在材料科学中,界面结合能是一个重要的概念,因为它直接影响…

【机器学习】特征筛选:提升模型性能的关键步骤

一、引言 在机器学习领域,特征筛选是一个至关重要的预处理步骤。随着数据集的日益庞大和复杂,特征的数量往往也随之激增。然而,并非所有的特征都对模型的性能提升有所贡献,有些特征甚至可能是冗余的、噪声较大的或者与目标变量无关…

STM32定时器编码器模式

定时器编码器模式: Timer -mode Cubemx配置项: 定时器编码模式选择: Encode: mode: TI1: 通道1上升沿使计数器1 TI2: 通道2上升沿使计数器1 TI1 and TI2: 1 和 2 都会1 EX: 获取 编码器正反转数值 数值demo: int Read_Spee…

claude3国内注册

claude3国内注册 Claude 3 作为大型语言模型的强大之处在于其先进的算法设计和大规模训练数据的应用,能够执行复杂和多样化的任务。以下是 Claude 3 主要的强项: 接近人类的理解能力:Claude 3 能够更加深入地理解文本的含义,包括…

7.Prism框架之对话框服务

文章目录 一. 目标二. 技能介绍① 什么是Dialog?② Prism中Dialog的实现方式③ Dialog使用案例一 (修改器)④ Dialog使用案例2(异常显示窗口) 一. 目标 1. 什么是Dialog?2. 传统的Dialog如何实现?3. Prism中Dialog实现方式4. 使用Dialog实现一个异常信息弹出框 二. 技能介…

python编写一个简单的课时记录系统

👽发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 使用Python创建一个简单的课时记录系统 在学习过程中,跟踪课时的进度是非常重要…

LeetCode in Python 69. Sqrt(x) (x的平方根)

求x的平方根,第一想法可能是遍历0~x,求其平方,找到或且但其时间复杂度为O(n),或是想到遍历0~M即可,其中M x // 2,将时间复杂度降至O()。本文利用二分思想,给出一种时间复…

python--pyQt5 进度条:QProgressBar

https://www.cnblogs.com/itwangqiang/articles/14959401.html https://blog.csdn.net/weixin_43990846/article/details/123880081 进度条用于向用户指示操作的进度,并向他们保证应用程序仍在运行 例 1 import sys from PyQt5.QtWidgets import QApplication, QWi…

(十六)C++自制植物大战僵尸游戏的宏定义讲解

植物大战僵尸游戏开发教程专栏地址http://t.csdnimg.cn/uzrnw 宏定义 在游戏代码中为了方便,定义了许多宏定义。使用宏定义简化代码并提高可读性。下面将讲解游戏中用到的宏定义。 代码位置 代码所在位置是Class\Scenes\GameScene文件夹中。具体如下图所示。 Define.h …

尝试给笔记本超频

超频(英语:overclocking)是把一个电子配件的时脉速度提升至高于厂方所定的速度运作,从而提升性能的方法,但此举有可能导致该配件稳定性以及配件寿命下降。 笔记本配置为: 处理器 AMD Ryzen 7 7730U wit…

学习部分排序,插入排序,冒泡排序以及希尔排序

1.插入排序 <1>.首先我们举个例子 我们要把6进行前面的插入&#xff0c;那我们要进行比较&#xff0c;首先确定一个end的指针&#xff0c;然后他指向的数字就是我们需要比较的&#xff0c;如果end指向的数比我们end1 的大的话&#xff0c;那我们就往前挪一个&#xff0c…

四六级英语听力考试音频无线发射系统在安顺学院的成功应用分析

四六级英语听力考试音频无线发射系统在安顺学院的成功应用分析 由北京海特伟业科技任洪卓发布于2024年4月22日 安顺学院为了提高学生的外语听力水平&#xff0c;并确保英语四六级听力考试的稳定可靠进行&#xff0c;决定对传统的英语听力音频传输系统进行改造&#xff0c;以提供…

【YOLOv9】实战二:手把手教你使用TensorRT实现YOLOv9实时目标检测(含源码)

‍‍&#x1f3e1;博客主页&#xff1a; virobotics(仪酷智能)&#xff1a;LabVIEW深度学习、人工智能博主 &#x1f384;所属专栏&#xff1a;『LabVIEW深度学习实战』 &#x1f4d1;上期文章&#xff1a;『【YOLOv9】实战一&#xff1a;在 Windows 上使用LabVIEW OpenVINO工具…

gitlab 16.x - ERR unknown command ‘HELLO‘

现象 gitlab部分操作报错500。通过Rails日志发现以下报错&#xff1a; 报错&#xff1a; RedisClient::CommandError ERR unknown command HELLO {"severity": "ERROR","time": "2024-04-22T02:50:16.906Z","correlation_id&quo…

3667B芯茂微SOP7封装5V1A 5W适配器/充电器芯片

3667B是一款高度集成的隔离型适配器和充电器的自供电PSR控制芯片&#xff0c;外部设计极其简单。LP3667 固定原边峰值电流&#xff0c;通过变压器原副边匝比来设置输出恒流点&#xff1b;通过设定一个FB 电阻来设置输出恒压点。为了实现系统成本的简化&#xff0c;LP3667 内置启…

CSS基础常用属性之字体属性(如果想知道CSS的字体属性知识点,那么只看这一篇就足够了!)

前言&#xff1a;在我们学习CSS的时候&#xff0c;主要学习选择器和常用的属性&#xff0c;而这篇文章讲解的就是最基础的属性之一——文字属性。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解更多内容可以访问我的主页秋刀鱼不做梦-CSDN博客 废话不多说&#xff0c;让我们直…

删除二叉树的子树:假设二叉树中的结点均不相等,采用二叉链存储,设计递归算法删除根结点值为x的子树。(C语言)

目录 实验内容&#xff1a; 实验过程&#xff1a; 1.算法设计 2.程序清单 3.复杂度分析 4.运行结果 实验内容&#xff1a; 删除二叉树的子树:假设二叉树中的结点均不相等&#xff0c;采用二叉链存储&#xff0c;设计递归算法删除根结点值为x的子树。 实验过程&#xff1…

web前端(简洁版)

0. 开发环境 && 安装插件 这里我使用的是vscode开发环境 Auto Rename Tag是语法自动补齐view-in-browser是快速在浏览器中打开live server实时网页刷新 1. HTML 文件基本结构 <html><head><title>第一个页面</title></head><body&g…

PCIe系统阻抗控制85还是100的验证

高速先生成员--周伟 还记得上次的文章&#xff0c;PCIe阻抗控制&#xff0c;85ohm和100ohm哪个好&#xff0c;文章里面只讲到目前的主要问题&#xff0c;但没有给出具体怎么解决这个问题&#xff0c;今天我们就通过无源仿真的方式来聊聊上次那个问题的最终解决方案。 目前我们看…

lvgl图形化设计工具GUI Guider结合使用

前言 上篇博客整合了lvgl到项目中&#xff0c;采用的是自己编写源码的方式&#xff0c;实现了个简单的界面。实际过程中一般情况开发界面都借助设计工具&#xff0c;这里使用的是gui guider来进行示例记录 项目结构&#xff08;生成代码路径依然放到项目路径下&#xff09; C…