LLM - 基于 ChatGLM-6B 的工程配置搭建私有 ChatGPT 中文在线聊天

news2024/12/28 3:04:35

欢迎关注我的CSDN:https://spike.blog.csdn.net/
本文地址:https://blog.csdn.net/caroline_wendy/article/details/131104546

Paper:GLM: General Language Model Pretraining with Autoregressive Blank Infilling

一篇于2022年发表在ACL会议上的论文,作者来自清华大学、MIT、BAAI等机构。该论文提出了一种通用的预训练语言模型(GLM),基于自回归的空格填充(Autoregressive Blank Infilling)来进行文本生成和理解。空格填充是一种将文本中的一些片段(span)替换为特殊的空格符号(blank)的方法,然后让模型根据上下文来预测这些空格中应该填充的内容。空格填充可以看作是一种结合了自回归和自编码两种模式的预训练目标,既能够利用双向的上下文信息,又能够生成连贯和多样的文本。

GLM在空格填充的基础上进行了一些改进,主要有以下几点:

  • 引入了二维位置编码(2D positional encoding),使得模型能够区分不同的空格和不同的单词,并且能够处理不同长度和数量的空格。
  • 允许模型以任意顺序来预测空格中的内容,而不是固定地从左到右或从右到左,这样可以增加模型的灵活性和鲁棒性。
  • 根据不同类型的下游任务,调整空格的数量和长度,从而实现不同的预训练目标,例如完形填空、摘要生成、对话生成等。

GLM在多个NLU和NLG任务上进行了实验,包括GLUE、SQuAD、CNN/Daily Mail、Gigaword、CoQA、PersonaChat等,结果显示GLM在相同的模型大小和数据量下,均优于BERT、T5和GPT等基线模型,并且在一个单一的预训练模型上达到了最佳性能。这证明了GLM具有很强的通用性和适应性。

GLM

1. 配置工程

GitHub 工程:GitHub - THUDM/ChatGLM-6B

Hugging Face 网页:https://huggingface.co/THUDM/chatglm-6b

下载 Hugging Face 工程:

GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/THUDM/chatglm-6b

下载参数,用于下载清华云的参数:

git clone https://github.com/chenyifanthu/THU-Cloud-Downloader

参数地址:https://cloud.tsinghua.edu.cn/d/fb9f16d6dc8f482596c2/

cd THU-Cloud-Downloader
python main.py --link https://cloud.tsinghua.edu.cn/d/fb9f16d6dc8f482596c2/ --save ../chatglm-6b/

等待11个模型文件,下载完成,预计15分钟左右。

下载源代码:

git clone git@github.com:THUDM/ChatGLM-6B.git ChatGLM-6B-official

使用 git 下载,需要预先设置 id_rsa ,如下载过慢,可直接下载zip文件,上传之后再解压。

安装 Python 包:

pip install -r requirements.txt

验证 PyTorch 是否安装成功:

python

import torch
print(torch.__version__)  # 2.0.1+cu117
print(torch.cuda.is_available())  # True

2. 服务端测试

cli_demo.py 源码中的模型,修改为已下载的路径:

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

即可运行:

python3 cli_demo.py

对话如下:

欢迎使用 ChatGLM-6B 模型,输入内容即可进行对话,clear 清空对话历史,stop 终止程序

用户:蒙特卡洛方法是什么呢?

ChatGLM-6B:蒙特卡洛方法是一种随机模拟方法,常用于研究随机现象和不确定性原理。在蒙特卡洛方法中,研究者使用随机数生成器生成一组随机样本,然后根据这些样本计算出一些物理量或数学模型的结果。

具体来说,蒙特卡洛方法的基本思想是通过模拟随机过程来估计估计物理量或数学模型的参数。在模拟过程中,研究者随机选择一个物理量或数学模型的参数,然后计算出一组模拟结果。这些模拟结果可以用于估计真实的物理量或数学模型的结果,并给出相应的误差。

蒙特卡洛方法的优点在于可以处理不确定性原理,例如在研究量子物理、化学反应、金融市场等领域中,由于存在大量随机因素,不确定性原理会导致结果的不准确性。而蒙特卡洛方法可以通过模拟大量的随机样本来消除不确定性,提高结果的准确性。

用户:

3. 网页端调用

修改 web_demo.py 源码中的模型,修改为已下载的路径:

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

修改 gradio 插件的服务器ip和端口号,进行端口透传:

...
demo.queue().launch(share=False, server_name='[Your Server IP]', server_port=[Your Server Port], inbrowser=True)
...

参考:基于Gradio可视化部署机器学习应用

即可运行:

python3 web_demo.py

访问地址如下:http://[Your Server IP]:[Your Server Port]

ChatGLM

Bugfix

1. TCP connection reset by peer

当下载 HuggingFace 项目时,遇到错误:

fatal: unable to access 'https://huggingface.co/THUDM/chatglm-6b/': TCP connection reset by peer

原因是 git 版本较低,升级即可:

git --version
git version 1.8.3.1
# 升级之后
git --version
git version 2.25.1

参考:git clone错误: TCP connection reset by peer

2. Permissions 0644 for id_rsa are too open

修改 .id_rsa 的权限即可:

chmod 400 ~/.ssh/id_rsa

参考:Stackoverflow - SSH Key: “Permissions 0644 for ‘id_rsa.pub’ are too open.” on mac

3. 修改 Docker 环境的 pip 安装源

默认 pip 源的优先级,如下:

# This file has been autogenerated or modified by NVIDIA PyIndex.
# In case you need to modify your PIP configuration, please be aware that
# some configuration files may have a priority order. Here are the following 
# files that may exists in your machine by order of priority:
#
# [Priority 1] Site level configuration files
#       1. `/opt/conda/pip.conf`
#
# [Priority 2] User level configuration files
#       1. `/root/.config/pip/pip.conf`
#       2. `/root/.pip/pip.conf`
#
# [Priority 3] Global level configuration files
#       1. `/etc/pip.conf`
#       2. `/etc/xdg/pip/pip.conf`

全部删除:

rm /opt/conda/pip.conf
rm /root/.config/pip/pip.conf
rm /etc/pip.conf
rm /etc/xdg/pip/pip.conf

修改默认源:

vim ~/.pop/pip.conf

[global]
no-cache-dir = true
index-url = https://pypi.tuna.tsinghua.edu.cn/simple/
extra-index-url = https://pypi.ngc.nvidia.com
trusted-host = pypi.tuna.tsinghua.edu.cn pypi.ngc.nvidia.com

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

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

相关文章

脑机接口科普0021——黑门01

本文禁止转载!!!! 我会在接下来的一段时间内,花一些章节,专门科普介绍一下《黑门》这部国产动漫。 科普《黑门》,源自网友看了我的脑机接口科普文章后,介绍我看黑门这个脑机接口科…

盘点那些 IT 技术面试官常用的 10 个挂人套路

最近几个朋友找我聊天,给我讲述了面试过程中遇到的一些不太理解的事情。作为一个技术面试官,今天来分享 10 个面试相关的套路。 1.自我介绍 自我介绍是一个重要的开始,好的开始是成功的一半。不需要太多花里胡哨的东西,简单、清…

86墙插双联明装新款:蓝奥声智能用电设备安全防护有多强

物理绝缘和智能数据分析安全技术重塑了墙壁插座的安全标准,极大可能规避日常生活中的意外,只有做到意外情况下也不会触电,这样的墙壁插座才能真正叫安全墙壁插座,“不触电且足够安全”应该成为墙壁插座的安全标配标准。 智能物理…

检测 ARP 欺骗

地址解析协议 (ARP) 是网络通信的基本推动因素。作为网络互联网层和网络链路层之间的桥梁,此网络协议将网络地址 (IP) 转换为物理层地址(MAC 地址)。ARP协议支持的地址转换在促进同一LAN中不同网…

给数据库构建一个展示界面

给mySQL构建一个展示界面 这是“构建个人小型医学数据库”系列文章的最后一部分。通过之前的工作我们确定了所要收集的各类变量并将其录入到mySQL数据库中。 为了展示MySQL中存储的数据,通过摸索我们最终使用appML、PHP和JavaScript开发一个展示页面。这些技术可以…

组合式API - provide和inject、Vue3小案例【Vue3】

组合式API - provide和inject 作用和场景:顶层组件向任意的底层组件传递数据和方法,实现跨层组件通信 跨层传递普通数据 顶层组件通过provide函数提供数据 provide(key, 顶层组件中的数据)底层组件通过inject函数获取数据 const message inject(key) …

每日学术速递6.14

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.Realistic Saliency Guided Image Enhancement 标题:现实显着性引导图像增强 作者:S. Mahdi H. Miangoleh, Zoya Bylinskii, Eric Kee, Eli Shechtman, Ya…

js创建对象三种方式

创建对象三种方式 1、利用对象字面量创建对象2、利用 new Object 创建对象3、利用构造函数创建对象3.1 构造函数 1、利用对象字面量创建对象 const obj {name: 张三,age: 20 } console.log(obj)结果如下: 2、利用 new Object 创建对象 const obj new Object({…

Jmeter使用||接口测试实战

标题 Jmeter与postman一样,都可以用来进行接口测试。 前面的文章( 测试工具介绍||Jmeter的简单使用),介绍了jmeter的下载、安装及简单使用。基于此背景,通过实例的形式,来介绍下如何利用jmeter进行接口测试…

Rancher集群containerd导出镜像

奇墨科技是国内领先的全域IT质量管理平台及服务商,创始团队为在ITSM、公有云,私有云,超融合及安全业务方向服务多年的业界精英团队,尤其具备领先的运维服务和业务理解能力,已服务了大量的世界及中国500强客户&#xff…

【深度学习】3-4 神经网络的学习- 学习算法的实现

神经网络的学习步骤如下所示: 步骤1(mini-batch) 从训练数据中随机选出一部分数据,目标是减小mini-batch的损失函数的值 步骤2(计算梯度) 为了减小mini-batch的损失函数的值,需要求出各个权重参数的梯度 步骤3(更新参数) 将权重参数沿梯度…

redhat 6.4安装oracle11g RAC (四)

创建集群数据库 在节点rac1上用oracle用户执行dbca创建RAC数据库 [rootrac1 ~]# su - oracle [oraclerac1 ~]$ dbca选择创建数据库 自定义数据库(也可以是通用) 配置类型选择Admin-Managed,输入全局数据库名orcl,每个节点实例SI…

java线上问题排查基本命令

1、jvm基本命令 1.1、java命令 1.1.1、简介 java命令启动java应用程序。它通过启动Java运行时环境(JRE)、加载指定的类并调用该类的main()方法来实现这一点。 1.1.2、命令链接 https://docs.oracle.com/javase/8/docs/techno…

electron 连接打印机打印pdf文件

electron 打印内容 区分系统 类似unix系统的使用 npm包:unix-printwindow系统使用: pdf-to-printer 运行线程 视图线程 函数参数 两个包都提供了print函数来打印文件,配置基本一致,只是参数形式有所不同,pdf-to-pr…

ESP32开发环境搭建Windows VSCode集成Espressif IDF插件ESP32_IDF_V5.0开发编译环境搭建

一、安装ESP32-IDF库 下载网址:https://dl.espressif.com/dl/esp-idf/ 打开上面的网页,选择单击页面中 ESP32-IDF v5.0.2 - Offine Installer,5.0.2是当前最新版本,如果没有ESP32-IDF v5.0.2 - Offine Installer,说明…

JS获取省市区/县,layui获取省市区,layui实现省市区联动,jquery实现省市区联动

前言 通过JS方式获取省市区数据,可自己手动更改JS文件数据 非常简单 效果 实现 百度网盘链接: https://pan.baidu.com/s/1RktJgXY0NP7Eq0ohvBPOEA 提取码: 477z gitee下载链接:https://gitee.com/yuanyongqiang/common-files/blob/master/area.js 下…

超高压系列IXBX50N360HV、IXBT14N300HV、IXBH32N300高压反向导通 (BiMOSFET™) IGBT器件

器件介绍: 超高压系列3000V - 3600V反向导通 (BiMOSFET™) IGBT将MOSFET和IGBT的优势相结合。这些高压器件的饱和电压和内置二极管的正向电压降均具有正电压温度系数,因此非常适合用于并联运行。“自由”内置体二极管用作保护二极管,为器件关…

LibOS Gramine安装

文章目录 参考资料Gramine安装运行helloworld升级kernel到5.15 参考资料 Gramine Quick start Gramine安装 Gramine安装要求: Linux 内核版本至少为 5.11(启用 SGX 驱动程序) 如果是5.4.0-150-generic版本,则可以参考《Install …

Baumer工业相机堡盟工业相机如何通过BGAPISDK将相机图像写入相机内存(C#)

Baumer工业相机堡盟工业相机如何通过BGAPISDK将相机图像写入相机内存(C#) Baumer工业相机Baumer工业相机BGAPISDK和相机内存的技术背景Baumer工业相机通过BGAPISDK将相机图像写入相机内存功能1.引用合适的类文件2.通过BGAPISDK将相机图像写入相机内存功能…

ADManager Plus:提升企业管理效率的强大利器

导语: 在当今数字化时代,企业管理的重要性不言而喻。有效的企业管理可以提高生产力、优化业务流程,并促进组织的持续增长。而ADManager Plus作为一款功能强大的企业管理工具,为企业提供了全面的解决方案,帮助企业管理…