以笔记形式为主,需要对AI有一点了解,结合该内容的过程,减少搜索资料的时间,提高部署的效率和应用

环境

conda环境管理

用来管理整体电脑环境,可以去区分多套环境,便于部署多种方案
https://www.anaconda.com/download

python>=3.10.0

语言环境
https://www.python.org/downloads

显卡驱动

安装适用于你的GPU型号的最新NVIDIA驱动。你可以从NVIDIA官方网站(NVIDIA 官方驱动)上下载并按照说明进行安装。驱动的版本要与后续安装的CUDA版本兼容。
验证驱动是否安装成功:在cmd中输入“nvidia-smi”,如果输出信息证明成功了。

CUDA

CUDA只有显卡N卡需要安装请添加图片描述

上图中1为显卡驱动版本,2为cuda最大支持版本,选择cuda版本,点击下面地址选择适合的CUDA Toolkit 并安装
CUDA Toolkit Archive

Pytorch

Pytorch版本与cuda版本必须要对应
START LOCALLY

大语言模型开发

下载GLM项目并安装环境

GLM3

git clone https://github.com/THUDM/ChatGLM3
cd ChatGLM3
pip install requirements.txt

GLM-4

git clone https://github.com/THUDM/GLM-4

下载模型(用户本地开发时,使用本地模型)

GLM3

https://modelscope.cn/models/ZhipuAI/chatglm3-6b

GLM-4

https://modelscope.cn/models/ZhipuAI/glm-4v-9b

修改GLM服务使用本地模型

模型量化

默认情况下,模型以 FP16 精度加载,运行上述代码需要大概 13GB 显存。如果你的 GPU 显存有限,可以尝试以量化方式加载模型,使用方法如下:

model = AutoModel.from_pretrained("your local path", trust_remote_code=True).quantize(4).cuda()

模型量化会带来一定的性能损失,经过测试,ChatGLM3-6B 在 4-bit 量化下仍然能够进行自然流畅的生成。

CPU 部署

如果你没有 GPU 硬件的话,也可以在 CPU 上进行推理,但是推理速度会更慢。使用方法如下(需要大概 32GB 内存)

model = AutoModel.from_pretrained("your local path", trust_remote_code=True).float()

Mac 部署

对于搭载了 Apple Silicon 或者 AMD GPU 的 Mac,可以使用 MPS 后端来在 GPU 上运行 ChatGLM3-6B。需要参考 Apple 的 官方说明 安装 PyTorch-Nightly(正确的版本号应该是2.x.x.dev2023xxxx,而不是 2.x.x)。

目前在 MacOS 上只支持从本地加载模型。将代码中的模型加载改为从本地加载,并使用 mps 后端:

model = AutoModel.from_pretrained("your local path", trust_remote_code=True).to('mps')
加载半精度的 ChatGLM3-6B 模型需要大概 13GB 内存。内存较小的机器(比如 16GB 内存的 MacBook Pro),在空余内存不足的情况下会使用硬盘上的虚拟内存,导致推理速度严重变慢。

DEMO web部署

使用工具或脚本部署,可以直接和chat沟通,仅限于这些功能,GLM3的base demo中有几个示例
令启动基于 Gradio 的网页版 demo:

python web_demo_gradio.py

可以通过以下命令启动基于 Streamlit 的网页版 demo:

streamlit run web_demo_streamlit.py

API服务部署

部署后将会以http形式暴露给其他应用调用,支持更多功能,其他应用不需要写Python代码调用,使用http调用API即可
可以通过运行仓库中的 api_server.py 进行部署

cd openai_api_demo
python api_server.py

注意机器环境是否cuda,调整脚本配置
同时,代码中也提供了一个示例代码,用来测试API调用的性能。

OpenAI 测试脚本:openai_api_request.py
ZhipuAI 测试脚本:zhipu_api_request.py

工具调用

申请API key

请求在线的api需要key,本地部署的或者其他私有的要和部署方确认key
如bigmodel的在线平台:https://open.bigmodel.cn/

代码调用

>> from transformers import AutoTokenizer, AutoModel
>> tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm3-6b", trust_remote_code=True)
>> model = AutoModel.from_pretrained("THUDM/chatglm3-6b", trust_remote_code=True, device='cuda')
>> model = model.eval()
>> response, history = model.chat(tokenizer, "你好", history=[])
>> print(response)

你好👋!我是人工智能助手 ChatGLM3 - 6B, 很高兴见到你, 欢迎问我任何问题。
>> response, history = model.chat(tokenizer, "晚上睡不着应该怎么办", history=history)
>> print(response)

晚上睡不着可能会让你感到焦虑或不舒服, 但以下是一些可以帮助你入睡的方法:

1.制定规律的睡眠时间表: 保持规律的睡眠时间表可以帮助你建立健康的睡眠习惯, 使你更容易入睡。尽量在每天的相同时间上床, 并在同一时间起床。
2.创造一个舒适的睡眠环境: 确保睡眠环境舒适, 安静, 黑暗且温度适宜。可以使用舒适的床上用品, 并保持房间通风。
3.放松身心: 在睡前做些放松的活动, 例如泡个热水澡, 听些轻柔的音乐, 阅读一些有趣的书籍等, 有助于缓解紧张和焦虑, 使你更容易入睡。
4.避免饮用含有咖啡因的饮料: 咖啡因是一种刺激性物质, 会影响你的睡眠质量。尽量避免在睡前饮用含有咖啡因的饮料, 例如咖啡, 茶和可乐。
5.避免在床上做与睡眠无关的事情: 在床上做些与睡眠无关的事情, 例如看电影, 玩游戏或工作等, 可能会干扰你的睡眠。
6.尝试呼吸技巧: 深呼吸是一种放松技巧, 可以帮助你缓解紧张和焦虑, 使你更容易入睡。试着慢慢吸气, 保持几秒钟, 然后缓慢呼气。

如果这些方法无法帮助你入睡, 你可以考虑咨询医生或睡眠专家, 寻求进一步的建议。

连接本地数据库

使用langchain做本地知识库

Langchain-chatchat框架

https://github.com/chatchat-space/Langchain-Chatchat/

Langchain-Chatchat pip部署(3.0以上)

https://github.com/chatchat-space/Langchain-Chatchat?tab=readme-ov-file#%E5%BF%AB%E9%80%9F%E4%B8%8A%E6%89%8B

Langchain-Chatchat 源代码部署/开发部署指南

https://github.com/chatchat-space/Langchain-Chatchat/blob/master/docs/contributing/README_dev.md

https://python-poetry.org/docs/#installing-with-pipx

使用Langchain TypeScript版本(不支持GLM3,以下内容来自AI,未经验证)

• 安装Langchain TypeScript库和TypeORM。您可以使用以下命令来安装:

npm install -D typescript langchain
npm install typeorm

• 创建一个TypeScript配置文件(tsconfig.json),其中包含Langchain TypeScript库的类型声明。您可以使用以下内容作为参考:

{
  "compilerOptions": {
    "target": "es2017",
    "module": "commonjs",
    "strict": true,
    "esModuleInterop": true,
    "skipLibCheck": true,
    "forceConsistentCasingInFileNames": true,
    "declaration": true,
    "outDir": "dist",
    "lib": ["dom", "es2017"],
    "types": ["langchain", "typeorm"]
  },
  "include": ["src/**/*.ts"],
  "exclude": ["node_modules"]
}

要使用Langchain TypeScript版本中的Chat功能,您需要按照以下步骤操作:

• 创建一个ChatOpenAI实例,并将其用于工具包中。以下是一个示例,其中使用了Langchain TypeScript库和TypeORM:

import { SqlToolkit } from "langchain/agents/toolkits/sql";
import { DataSource } from "typeorm";
import { SqlDatabase } from "langchain/sql_db";
import { ChatOpenAI } from "langchain/llms/chat_openai";

const glmModel = new ChatOpenAI({ model: "gpt-4o-mini", temperature: 0 });

const datasource = new DataSource({
  type: "sqlite",
  database: "../../../../../../Chinook.db", // Replace with the link to your database
});

const db = await SqlDatabase.fromDataSourceParams({
  appDataSource: datasource,
});

const toolkit = new SqlToolkit(db, glmModel);

const tools = toolkit.getTools();
console.log(tools);

const chat = new Chat(glmModel, tools);

const response = await chat.call({
  question: "What is the total number of employees in the company?",
});

console.log(response);

这个示例演示了如何使用Langchain TypeScript库和TypeORM创建一个SQL工具包,并获取其工具列表,同时使用ChatOpenAI模型。
请注意,这些步骤可能会因您的项目和环境而有所不同。请参考Langchain TypeScript库和TypeORM的官方文档以获取更多信息和详细指示。此外,您需要确保ChatOpenAI模型已安装并可以在您的项目中使用。
在这个示例中,我们创建了一个Chat实例,并使用它来调用工具包中的工具。我们将问题传递给Chat实例,它将使用GLM3模型和工具包中的工具来生成响应。最后,我们在控制台中打印出响应。

Langchain-Chatchat与数据库对话

https://github.com/chatchat-space/Langchain-Chatchat/blob/master/docs/install/README_text2sql.md

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐