仅学习-用GPU云主机搭建AI大语言模型并用Flask封装成API,实现用户与模型对话

第一步:配置GPU云主机

GPU 云主机(GPU Cloud Virtual Machine )是提供 GPU 算力的弹性计算服务,具有超强的并行计算能力,在深度学习、科学计算、图形图像处理、视频编解码等场景被广泛使用。GPU驱动,提供大量的GPU内存和强悍的计算性能,非常适合运行深度学习应用程序。

相对于实体卡,一张售价一般都是几万左右,而GPU云主机费用门槛很低,按时计费,一小时才十几元,可以根据自己的需求调配。

本次选取的是P40卡: https://www.jdcloud.com/cn/calculator/calHost

系统环境:Ubuntu 20.04 64位

第二步:在云主机搭建Jupyterlab开发环境

按照顺序,下载Anaconda包需要在终端里执行以下命令:

复制代码
mkdir anaconda # 创建文件夹
cd anaconda # 进入文件夹
wget https://repo.anaconda.com/archive/Anaconda3-2023.03-Linux-x86_64.sh # 下载安装包
bash Anaconda3-2023.03-Linux-x86_64.sh # 安装

接下来是环境配置,请按顺序操作:

复制代码
cd /root/anaconda3/bin
vim ~/.bashrc

在.bashrc下添加以下内容:#Anaconda
export PATH="/root/anaconda3/bin:$PATH"

然后退出编辑

source ~/.bashrc


conda create -n jabari python=3.8  安装python3.8版本
# 创建环境
jupyter lab --generate-config

# 生成配置文件

Writing default config to: /root/.jupyter/jupyter_lab_config.py

[root@lavm-ba6po1r9fh bin]# vim /root/.jupyter/jupyter_lab_config.py

# 编辑配置文件

c.ServerApp.ip = '*' # 设置访问的IP地址

c.ServerApp.open_browser = False  

# 不自动打开浏览器

c.ServerApp.port = 6888   #(自己可以自己设置端口,这里设置了6888)

# ServerApp的端口号

c.MappingKernelManager.root_dir = '/root/jupyter_run' 

# 设置Jupyter Notebook的根文件夹

c.ServerApp.allow_remote_access = True 

# 允许远程访问

c.ServerApp.password = '' 

# 不设置登录密码

c.ServerApp.allow_origin='*' 

# 允许任何来源的请求

c.ServerApp.password_required = False 

# 不需要密码

c.ServerApp.token = ''

# 不设置验证token

接下来,jupyter lab --allow-root # 启动JupyterLab

之后,在本地浏览器输入"服务器ip:端口号"访问即可:

也可以安装汉化软件:

复制代码
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple jupyterlab-language-pack-zh-CN

第三步、重点来了:开始安装ChatGLM语言模型

https://huggingface.co/THUDM/chatglm-6b

ChatGLM-6B 是一个开源的、支持中英双语问答的对话语言模型,基于 General Language Model (GLM) 架构,具有 62 亿参数。结合模型量化技术,用户可以在消费级的显卡上进行本地部署(INT4 量化级别下最低只需 6GB 显存)。ChatGLM-6B 使用了和 ChatGLM 相同的技术,针对中文问答和对话进行了优化。经过约 1T 标识符的中英双语训练,辅以监督微调、反馈自助、人类反馈强化学习等技术的加持,62 亿参数的 ChatGLM-6B 已经能生成相当符合人类偏好的回答。

软件环境依赖

复制代码
pip install protobuf==3.20.0 transformers==4.27.1 icetk cpm_kernels

代码

复制代码
from transformers import AutoTokenizer, AutoModel
tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True)
model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).half().cuda()
response, history = model.chat(tokenizer, "你好", history=[])
print(response)
response, history = model.chat(tokenizer, "晚上睡不着应该怎么办", history=history)
print(response)

最终会提示

这里需要安装显卡驱动同时还要安装nvidia-cuda-toolkit

NVIDIA CUDA Toolkit 提供了一个开发环境,用于创建高性能 GPU 加速应用程序。

复制代码
apt install nvidia-cuda-toolkit

再次运行,已经ok了,出现模型回复内容

在Ubuntu命令行输入nvidia-smi 也看下显卡类型:

第四步:用Flask输出模型API

app.py的代码如下:

复制代码
from gevent import pywsgi
from flask import Flask
from flask_restful import Resource, Api, reqparse
from transformers import AutoTokenizer, AutoModel
from flask_cors import CORS

app = Flask(__name__)
CORS(app, resources={r"/api/*": {"origins": "*"}})
api = Api(app)

tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True)
model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).half().cuda()

parser = reqparse.RequestParser()
parser.add_argument('inputs', type=str, help='Inputs for chat')
parser.add_argument('history', type=str, action='append', help='Chat history')

class Chat(Resource):
    def post(self):
        args = parser.parse_args()
        inputs = args['inputs']
        history = args['history'] or []

        response, new_history = model.chat(tokenizer, inputs, history)
        return {'response': response, 'new_history': new_history}

api.add_resource(Chat, '/api/chat')
if __name__ == '__main__':
    server = pywsgi.WSGIServer(('0.0.0.0', 80), app)
    server.serve_forever()

最后在Terminal 里 执行python 目录地址/app.py

客户端,开发者可以通过API来获取数据:

第五步:前端效果:问问五一去哪玩!

相关推荐
乾元2 分钟前
范式转移:从基于规则的“特征码”到基于统计的“特征向量”
运维·网络·人工智能·网络协议·安全
智算菩萨3 分钟前
国内Claude编程完全指南:利用镜像站合法使用Opus、Sonnet与Haiku模型
人工智能·aigc
1024小神5 分钟前
css主题theme变量切换实现原理学习记录
前端·css·学习
木木木一6 分钟前
Rust学习记录--C13 Part1 闭包和迭代器
开发语言·学习·rust
木木木一6 分钟前
Rust学习记录--C13 Part2 闭包和迭代器
开发语言·学习·rust
Deepoch7 分钟前
Deepoc数学大模型:通信行业智能化的算法引擎
人工智能·算法·数学建模·开发板·通信·具身模型·deepoc
莱昂纳多迪卡普利奥10 分钟前
LLM学习指南(四)—— 预训练语言模型(PLM)
人工智能·语言模型·自然语言处理
说私域10 分钟前
链动2+1模式S2B2C商城小程序在电商直播中的应用与影响研究
大数据·人工智能·小程序·流量运营
快降重10 分钟前
效率与安全的平衡:面向毕业季的论文“降AI”应急方案对比研究
人工智能·安全·aigc·ai写作·降重·降ai
代码游侠12 分钟前
ARM 嵌入式开发学习——从内核到外设
arm开发·笔记·嵌入式硬件·学习