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

news/2024/7/10 22:22:48 标签: AIGC, 开源, 人工智能

终于! 中文基座模型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.niftyadmin.cn/n/383384.html

相关文章

为何溃坝事故频发,大坝安全如何保障?

随着水利水电工程的重要性日益突显&#xff0c;水库大坝安全越来越受到相关部门的重视。因为大坝的安全直接影响水利工程的功能与作用&#xff0c;因此对大坝安全的监测显得十分必要。大坝安全监测的作用是能够及时掌握大坝的运行状态&#xff0c;及时发现大坝的变形、渗漏等异…

Tomcat下载安装以及配置

目录 tomcat的下载安装 修改控制台乱码 idea配置tomcat tomcat的下载安装 到tomcat的官网https://tomcat.apache.org/下载所需版本&#xff0c;我们下载的tomcat必须要和我们的jdk相匹配否则会导致tomcat运行和部署的时候出错&#xff0c;挑选tomcat的版本的时候参考下图 …

【Linux系统基础快速入门详解】find与指纹多角度分析与解决网站页面恶意修改

在Linux系统中,find命令可以用于查找文件和目录,而指纹(fingerprint)则是一种用于识别和验证文件或数据的技术。这两种技术可以用于分析和解决网站页面恶意修改的问题。 1. 使用find命令查找恶意文件 如果网站页面被恶意修改,可能会在服务器上留下一些恶意文件或脚本。可…

CRM和SCRM有什么区别?

首先讲下CRM是什么&#xff1f;光是概念就有7个之多&#xff1a; 提出者概念GartnerGroupCRM是一种商业策略&#xff0c;它按照客户的分类情况有效地组织企业资源&#xff0c;培养以客户为中心的经营行为以及实施以客户为中心的业务流程&#xff0c;并以此为手段来提高企业的赢…

VS2019 C#开发手机App环境配置和开发

上位机开发人员&#xff0c;想开发APP&#xff0c;从头学Java&#xff0c;需要花的时间成本太大&#xff0c;最近网上找找资料发现用c#就可以在熟悉的VS2019下编写APP程序了 看到别人的一句话&#xff1a; 在这个盛行全干的时代&#xff0c;我想每个人都应该懂移动端开发。Xam…

centos7.9升级rockylinux8.8

前言 查看centos的版本 &#xff0c;我这台服务器是虚拟机,下面都是模拟实验 升级前一定要把服务器上配置文件&#xff0c;数据等进行备份 [rootlocalhost ~]#cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) [rootlocalhost ~]#uname -a Linux jenkins_ser…

【Linux系统基础快速入门详解】Linux三剑客:grep和egrep,sed,awk与find原理和使用案例

在Linux系统中,grep、sed、awk和find被称为“Linux三剑客”,是Linux系统中常用的文本处理工具。它们可以帮助用户快速搜索、过滤、替换和处理文本信息。下面分别介绍这四个工具的原理和使用案例。 grep和egrepgrep和egrep是Linux系统中常用的文本搜索工具,可以在文本文件中查…

linux(system V标准)进程间通信2

目录&#xff1a; 1.回顾上一节的代码 2.shmat、shmdt的使用 3.共享内存的大小为什么最好设置成4096字节的整数倍呢&#xff1f; 4.操作系统如何管理共享内存的 ----------------------------------------------------------------------------------------------------------…