【AIGC】CPM-BEE 开源大模型介绍、部署以及创建接口服务

news2024/11/28 22:49:30

终于! 中文基座模型CPM-Bee开源了

# CPM-Bee

百亿参数的开源中英文双语基座大模型

✨ 模型介绍

CPM-Bee是一个完全开源、允许商用的百亿参数中英文基座模型,也是CPM-Live训练的第二个里程碑。它采用Transformer自回归架构(auto-regressive),在超万亿(trillion)高质量语料上进行预训练,拥有强大的基础能力。开发者和研究者可以在CPM-Bee基座模型的基础上在各类场景进行适配来以创建特定领域的应用模型。

  • 👐 开源可商用:OpenBMB始终秉承“让大模型飞入千家万户”的开源精神,CPM-Bee基座模型将完全开源并且可商用,以推动大模型领域的发展。我们鼓励全球范围内的科研机构、企业和个人开发者在遵守开源许可协议的前提下,自由地在CPM-Bee基座模型上进行创新。

  • 💫 中英双语性能优异: CPM-Bee基座模型在预训练语料上进行了严格的筛选和配比,同时在中英双语上具有亮眼表现,具体可参见评测任务和结果。

  • 📖 超大规模高质量语料: CPM-Bee基座模型在超万亿语料进行训练,是开源社区内经过语料最多的模型之一。同时,我们对预训练语料进行了严格的筛选、清洗和后处理以确保质量。

  • OpenBMB大模型系统生态支持: OpenBMB大模型系统在高性能预训练、适配、压缩、部署、工具开发了一系列工具,CPM-Bee基座模型将配套所有的工具脚本,高效支持开发者进行进阶使用。

  • 🔨 对话和工具使用能力: 结合OpenBMB在指令微调和工具学习的探索,我们在CPM-Bee基座模型的基础上进行微调,训练出了具有强大对话和工具使用能力的实例模型,API和内测将于近期开放。

安装

一、服务部署

1、服务器配置:

  • 1)配置详情

    GPU:8*3080TI服务器 (一块24G显存的卡就可以了)

    CUDA:12.1

2、环境安装

cat requirements.txt
(python38) root@-NF5468M5: cat requirements.txt
torch>=1.10
bmtrain>=0.2.1
jieba
tqdm
tensorboard
numpy>=1.21.0
spacy
opendelta

为了避免cuda环境和pytorch版本的冲突,一个个进行安装。

  • 1)安装pytorch,适配cuda12.1

    参考:https://pytorch.org/get-started/locally/

    注意:使用cuda安装比较慢,所以用pip3安装

    pip3 install --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/cu121
    
  • 2)安装bmtrain

    pip install bmtrain
    
  • 3)安装其他环境

    pip install jieba tqdm tensorboard numpy spacy opendelta
    

3、模型下载

下载地址:https://huggingface.co/openbmb/cpm-bee-10b/tree/main

  • 1)代码克隆

    git clone https://github.com/OpenBMB/CPM-Bee.git
    
  • 2)下载模型 19G

    下载路径: ./model
    

    下载路径,自定义即可

    在这里插入图片描述

4、测试

  • 1)修改测试文件

    修改 vi text_generation.py

    更改模型路径
    在这里插入图片描述

  • 2)测试模型

    python text_generation.py
    

    在这里插入图片描述

5、接口设计(Python版)

  • 1)新建Flask接口

    vi flask_server.py
    
    from flask import Flask, request, jsonify
    import threading
    import torch
    from cpm_live.generation.bee import CPMBeeBeamSearch
    from cpm_live.models import CPMBeeTorch, CPMBeeConfig
    from cpm_live.tokenizers import CPMBeeTokenizer
    from opendelta import LoraModel
    from flask_cors import CORS
    import os
    
    os.environ["CUDA_VISIBLE_DEVICES"] = '6'
    
    app = Flask(__name__)
    CORS(app)
    
    # 加载模型
    config = CPMBeeConfig.from_json_file("config/cpm-bee-10b.json")
    ckpt_path = "model/pytorch_model.bin"
    tokenizer = CPMBeeTokenizer()
    model = CPMBeeTorch(config=config)
    model.load_state_dict(torch.load(ckpt_path))
    model.cuda()
    beam_search = CPMBeeBeamSearch(
        model=model,
        tokenizer=tokenizer,
    )
    
    # 创建线程锁和计数器
    lock = threading.Lock()
    counter = 0
    MAX_CONCURRENT_REQUESTS = 5  # 最大并发请求数
    
    
    @app.route('/cpmbee/conversation', methods=['POST'])
    def conversation():
        global counter
    
        # 请求过载,返回提示信息
        if counter >= MAX_CONCURRENT_REQUESTS:
            return jsonify({'message': '请稍等再试'})
    
        # 获取线程锁
        with lock:
            counter += 1
    
        try:
            # 接收 POST 请求的数据
            question = request.json['question']
    
            inference_results = beam_search.generate([
                {'question': question, "<ans>": ""}
            ], max_length=100, repetition_penalty=1.1)
    
            print('inference_results:', type(inference_results), inference_results)
    
            result = inference_results[0]["<ans>"]
    
            print('result:', type(result), result)
    
            # 返回结果
            response = {'result': result}
            return jsonify(response)
    
        finally:
            # 释放线程锁并减少计数器
            with lock:
                counter -= 1
    
    
    @app.route('/cpmbee/select', methods=['POST'])
    def select():
        global counter
    
        # 请求过载,返回提示信息
        if counter >= MAX_CONCURRENT_REQUESTS:
            return jsonify({'message': '请稍等再试'})
    
        # 获取线程锁
        with lock:
            counter += 1
    
        try:
            # 接收 POST 请求的数据
            print(request.json)
            description = request.json['description']
            options = request.json['options']
            options_index2option = {'<option_%s>' % str(index): str(option) for index, option in enumerate(options)}
            question = request.json['question']
    
            inference_results = beam_search.generate([
                {'input': description, 'options': options_index2option, 'question': question, "<ans>": ""}
            ], max_length=100, repetition_penalty=1.1)
    
            option_result = inference_results[0]["<ans>"]
    
            result = options_index2option.get(option_result, option_result)
    
            # 返回结果
            response = {'result': result}
            return jsonify(response)
    
        finally:
            # 释放线程锁并减少计数器
            with lock:
                counter -= 1
    
    
    if __name__ == '__main__':
        print("Flask 服务器已启动")
        app.run(host='0.0.0.0', port=8000)
    
    

    在上述代码中,我们通过 from flask_cors import CORS 导入了 CORS 类,并在 Flask 应用程序中调用了 CORS(app)。这样就启用了默认的 CORS 配置,允许所有来源跨域访问。

    未避免显存异常,在上述代码中,通过创建一个线程锁 lock 和一个计数器 counter 来控制并发请求的数量。如果请求超过了 MAX_CONCURRENT_REQUESTS 的限制,即达到了最大并发请求数,服务器将返回提示信息"请稍等再试"

  • 2)启动接口

    python flask_server.py
    
  • 3)接口测试

    • 选择题测试
      在这里插入图片描述

    • Chat测试
      在这里插入图片描述

二、聊天窗口(前后端)

在这里插入图片描述

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

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

相关文章

直播预告丨SaaS+CG?UE影视级场景渲染与科学制片全流程揭秘!

余热不减&#xff01;在第二届瑞云3D渲染动画创作大赛赛果公布 后&#xff0c;小瑞紧锣密鼓在安排获奖选手的系列专场直播。在上期的“ 泛CG 聚未来 ” 第四届实用技术线上分享会中,咱们邀请到大赛专业组冠亚军“3ds Max老法师”彼尔德和“Maya大神”Shuiguo 分享了自己的创作历…

cplex基础入门(一)

这边文章会以纯新手小白的视角&#xff0c;教会大家如何快速的搭建自己的cplex模型&#xff0c;做到求解模型不求人。 目录 一、引言 1、掌握数据类型及数据结构 2、常规Cplex编程方法 3、Cplex编程步骤 4、cplex 程序框架 5、创建模型 二、规划建模的入门求解案例 1、…

代码随想录训练营Day57| 647. 回文子串 516.最长回文子序列 动态规划总结篇

目录 学习目标 学习内容 647. 回文子串 516.最长回文子序列 学习目标 647. 回文子串 516.最长回文子序列 动态规划总结篇 学习内容 647. 回文子串 647. 回文子串 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/palindromic-substrings/ class S…

3.部署 Stable Diffusion(SD)

部署Stable Diffusion webui方式: 本地部署:在自己的电脑上安装(官方脚本部署、懒人包部署(文末自取)) 云端部署:在远程服务上运行(免费有时长限制、可付费租用GPU) 两种部署方式哪种都可以,看需选择。如果有性能比较不错的的显卡,那么可以考虑本地部署。如果是没…

java养老院老年人档案管理系统springboot+vue

本居家养老系统管理员和工作人员两个角色。管理员功能有个人中心&#xff0c;老人账号管理&#xff0c;工作人员管理&#xff0c;老人档案管理&#xff0c;订单申请管理&#xff0c;检查检验项目管理&#xff0c;维修服务管理&#xff0c;订单信息管理&#xff0c;转诊信息管理…

一文简述低代码到底是什么?

在进入正文之前&#xff0c;有必要给大家拨正一个误区&#xff1a; “开发≠写代码” 由于现在低代码&零代码产品在宣传过程中着重强调“公民开发”这一概念&#xff0c;我们随便点开一篇相关文章章&#xff0c;必定会有一句&#xff1a;“人人都是开发者&#xff0c;无需…

计算机中丢失MSVCP140.dll无法启动此程序怎么办

MSVCP140.dll是Microsoft Visual C Redistributable文件中的一个动态链接库文件&#xff0c;它是Microsoft Visual Studio 2015和2017中的一部分。它包含一组选项卡&#xff0c;其中包含C/C开发所需的库。该文件通常位于计算机的Windows/System32目录中&#xff0c;它提供了用于…

Vue2——入门(适合后端程序员看)

Vue组件 Vue 的组件文件以 .vue 结尾&#xff0c;每个组件由三部分组成 <template></template><script></script><style></style> template 模板部分&#xff0c;由它生成 html 代码 script 代码部分&#xff0c;控制模板的数据来源和行…

30天从入门到精通TensorFlow1.x 第二天,变量 tf.Variable()

文章目录 一&#xff0c;接前一天&#xff08;1&#xff09;.内容前先弄清楚 sess.run() 函数a. 该函数干嘛的b. 该函数有哪些参数c. 该函数的使用 &#xff08;2&#xff09;.由库函数创建张量&#xff08;3&#xff09;.由库函数创建张量 二、变量tf.Variable()&#xff08;1…

git在一台电脑上配置不同的仓库(多个gitee仓库、或者不同的github仓库)

前言 在开发过程中&#xff0c;我们工作的时候难免会使用到两个不同的仓库&#xff0c;但是正常来说一电脑默认一个参考&#xff0c;直接会用全局命令 git config --global user.name "yourName"但是这样只能配置一个仓库了&#xff0c;本文介绍在一台电脑上配置多…

跟着LearnOpenGL学习5--纹理

文章目录 一、前言二、纹理映射三、纹理环绕方式四、纹理过滤五、多级渐远纹理六、加载与创建纹理七、生成纹理八、应用纹理九、完整代码9.1、工程结构9.2、纹理图片9.3、stb_image.cpp9.4、顶点着色器9.5、片段着色器9.6、main.cpp 十、纹理颜色与顶点颜色混合十一、纹理单元 …

Python系列模块之pymysql操作MySQL 数据库

目录 一、安装pymysql 二、连接数据库 三、数据库操作 3.1 查询 3.2 更新 3.3 使用循环批量更新 Python 系列文章学习记录&#xff1a; Python系列之Windows环境安装配置_开着拖拉机回家的博客-CSDN博客 Python系列之变量和运算符_开着拖拉机回家的博客-CSDN博客 Pyt…

JavaWeb13(ajax01)

目录 一. 什么是ajax 二.为什么需要AJAX? 三. 同步和异步的区别. 四.基于jQuery实现AJAX语法 4.1 语法1-$.ajax(url,[settings]). 4.1 语法2-$.get/post(url, [data], [callback], [type]). 五 .案例 5.1 ajax实现登录 ①html代码 用户登录 用户名&#xff1a; 密码…

Linux安装VNC(Linux桌面版远程)

一、Linux安装VNC服务 适用于CentOS7 #检查系统没有装GUI界面 rpm -qa | grep gnomeyum -y groupinstall "X Window System" yum -y groupinstall "GNOME Desktop"#安装VNC yum install tigervnc tigervnc-server -y检查开机运行级别 systemctl get-defa…

Shell脚本攻略:数组

目录 一、理论 1.数组概述 2.定义数组 3.数组打印 4.数组的数据类型及处理 5.数组赋值 6.数组遍历 7.数组切片 8.数组替换 9.删除数组 10.追加数组中的元素 11.数组排序算法 二、实验 1.实验一 2.实验二 3.实验三 一、理论 1.数组概述 数组是Shell的一种特殊变…

MySQL InnoDB缓存池

缓存池的作用 缓存表数据与索引数据&#xff0c;把磁盘上的数据加载到缓冲池&#xff0c;避免每次访问都进行磁盘IO&#xff0c;起到加速访问的作用。 为什么不把所有数据放到缓冲池中 凡事都具备两面性&#xff0c;抛开数据易失性不说&#xff0c;访问快速的反面是存储容量…

MongoDB 基本概念

MongoDB 部署模型 在生产环境中&#xff0c;MongoDB 经常会部署成一个三节点的复制集&#xff0c;或者一个分片集群。 我们先来看左边&#xff0c;当 MongoDB 部署为一个复制集时&#xff0c;应用程序通过驱动&#xff0c;直接请求复制集中的主节点&#xff0c;完成读写操作。另…

前端学习(DAY51)面试1

组件中的 data 为什么是一个函数&#xff1f; 如果 data 是对象的话&#xff0c;当数据改动时就会影响到所有的实例&#xff0c;可能会造成一些数据的冲突。 HTTP http&#xff1a;以安全为目标的http通道&#xff0c;HTTPs是以安全为目标的https通道&#xff08;使用SSL进…

Linux--ServerProgramming--(3)详解高性能服务器程序框架

1. 服务器框架详解 1.1 服务器模型 1.1.1 C/S 模型 此模型很简单&#xff0c;就是服务器和客户端。 此模型 非常适合资源相对集中的场合。 缺点&#xff1a;因为服务器是通信的中心&#xff0c;当访问量过大时&#xff0c;可能所有的客户都将得到很慢的响应。此缺点可由 P2P…

利用PHP导出MySQL数据表结构和SQL文件

目录 一、获取数据库所有的数据表 方法一&#xff1a;TP5 方法二:原生PHP 二、导出指定数据表的数据结构 三、 导出SQL文件 四、生成SQL语句 五、完整代码 前端 后端 语言&#xff1a;PHP 数据库&#xff1a;MySQL 功能&#xff1a;分为四部分&#xff0c;① 查出数…