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

Flask在线部署ChatGLM2大模型

1、 拉取镜像

docker pull swr.cn-central-221.ovaijisuan.com/mindformers/mindformers_dev_mindspore_2_0:mindformers_0.6.0dev_20230616_py39_37

2、 新建docker.sh

-p 8000:8000 是宿主机映射到镜像8000端口

如果添加–ipc=host --net=host 会和-p冲突

# --device用于控制指定容器的运行NPU卡号和范围# -v 用于映射容器外的目录# --name 用于自定义容器名称docker run -it -u root -p 8080:8080 \--device=/dev/davinci0 \--device=/dev/davinci1 \--device=/dev/davinci2 \--device=/dev/davinci3 \--device=/dev/davinci4 \--device=/dev/davinci5 \--device=/dev/davinci6 \--device=/dev/davinci7 \--device=/dev/davinci_manager \--device=/dev/devmm_svm \--device=/dev/hisi_hdc \-v /etc/localtime:/etc/localtime \-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \-v /var/log/npu/:/usr/slog \-v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \--name 8080-test \-v /home/:/home/ \swr.cn-central-221.ovaijisuan.com/mindformers/mindformers_dev_mindspore_2_0:mindformers_0.6.0dev_20230616_py39_37 \/bin/bash

然后启动该sh文件后

docker ps查看,映射镜像8080端口供外网访问

编写api调用代码,并开放flask8080端口

from flask import Flask, request
import jsonapp = Flask(__name__)from mindformers import AutoConfig, AutoModel, AutoTokenizer
import mindspore as msms.set_context(mode=ms.GRAPH_MODE, device_target="Ascend", device_id=0)
config = AutoConfig.from_pretrained("glm2_6b")
config.checkpoint_name_or_path = "../mindformers/checkpoint_download/glm2/glm2_6b.ckpt"
model = AutoModel.from_config(config)
tokenizer = AutoTokenizer.from_pretrained("glm2_6b")@app.route('/glm2_bot', methods=['POST'])
def say_hello_func():print("----------- in hello func ----------")data = json.loads(request.get_data(as_text=True))text = data['text']inputs = tokenizer(tokenizer.build_prompt(text))["input_ids"]print(tokenizer.decode(inputs))outputs = model.generate(inputs, max_length=14096)outputs_text = tokenizer.decode(outputs)return json.dumps({"response":outputs_text}, ensure_ascii=False,indent=4)@app.route('/goodbye', methods=['GET'])
def say_goodbye_func():print("----------- in goodbye func ----------")return '\nGoodbye!\n'@app.route('/', methods=['POST'])
def default_func():print("----------- in default func ----------")data = json.loads(request.get_data(as_text=True))return '\n called default func !\n {} \n'.format(str(data))# host must be "0.0.0.0", port must be 8080
if __name__ == '__main__':app.run(host="0.0.0.0", port=8080)

本地curl调用:

curl -i -k -H 'Accept:application/json' -H 'Content-Type:application/json;charset=utf8' -
X POST -d'{"text":"你好"}' http://172.17.0.2:8080/glm2_bot

Tips:
在服务端开放默认8080常规接口会遭受到扫描攻击,建议修改该端口或者添加ip白名单限制访问

http://www.lryc.cn/news/171771.html

相关文章:

  • 浅谈Vue3——父子组件传值
  • Wolfram语言之父:ChatGPT到底能做什么? | 阿Q送书第六期
  • antd a-list 添加分页
  • MySQL注入绕安全狗脚本 -- MySQLByPassForSafeDog,以及端口爆破工具 -- PortBrute配置使用
  • R语言绘制热图
  • jmeter线程组 bzm - Concurrency Thread Group 阶梯式压测
  • 计算即时订单比例-首单使用开窗函数row_number()
  • flink集群与资源@k8s源码分析-集群
  • 商城开发:商城系统的哪些功能值得企业去关注?
  • calibre和cpolar搭建一个私有的网络书库
  • c++ nlohmann::json 中文支持
  • vue3 | defineExpose的使用
  • PaddleSeg学习3——使用PP-LiteSeg模型对道路进行分割
  • 时序数据库的关键技术点总结
  • 【ROS】机器人使用Nomachine进行远程控制
  • Jmeter系列-定时器Timers的基本介绍(11)
  • 【华为OD机试python】求满足条件的最长子串的长度【2023 B卷|100分】
  • iOS技术博主指南:填写苹果应用上架中的隐私政策信息
  • Spring事件机制之ApplicationEvent
  • 【操作系统笔记】内存寻址
  • webpack自定义loader解析指定后缀名文件
  • 基于Kintex UltraScale系列FPGA KU060/KU115高性能PCIe数据预处理载板(5GByte/s带宽)
  • Cesium 地球(2)-瓦片创建
  • Selenium-介绍下其他骚操作
  • 【C++从0到王者】第三十一站:map与set
  • 生产消费者模型的介绍以及其的模拟实现
  • Unity ML-Agents默认接口参数含义
  • 【python数据分析基础】—pandas中loc()与iloc()的介绍与区别
  • ad18学习笔记十一:显示和隐藏网络、铺铜
  • 全国职业技能大赛云计算--高职组赛题卷④(私有云)