打造自己的AIGC应用(一)入门篇

news2024/10/2 8:26:10

其实细数AI的发展历程非常之久,而让AI的应用一下子出现在人们眼前的其实就是ChatGPT的出现,这意味着AIGC应用已经从概念为王变的非常实用了。伴随着ChatGPT的出现,大量的开源大模型也如雨后春笋一样出现。就现在而言,打造一个自己的AIGC应用已经非常简单了

基础环境

我们需要配置一个环境

  • python3.8+,不要太新
  • CUDA+环境
  • pytorch
  • 支持C++17的编译器

首先我比较推荐你配置一个anaconda的环境,因为pytorch的其他安装方法真的很麻烦

  • https://www.anaconda.com/distribution/#download-section

然后你需要安装CUDA的环境,正常来说只需要下载对应的CUDA版本即可

  • CUDA Toolkit 12.3 Update 2 Downloads | NVIDIA Developer

然后就是安装pytorch的环境,这个环境比较麻烦,正常来说通过conda来安装是比较靠谱的办法,当然有些时候就是安不了。

img

如果安装不成功,就只能用源码来编译了。

  • GitHub - pytorch/pytorch: Tensors and Dynamic neural networks in Python with strong GPU acceleration

首先,clone一下源码

1
2
3
4
5
git clone --recursive https://github.com/pytorch/pytorch
cd pytorch
# if you are updating an existing checkout
git submodule sync
git submodule update --init --recursive

然后安装一下对应的各种依赖

1
2
3
4
5
6
7
8
conda install cmake ninja
# Run this command from the PyTorch directory after cloning the source code using the “Get the PyTorch Source“ section below
pip install -r requirements.txt

conda install mkl mkl-include
# Add these packages if torch.distributed is needed.
# Distributed package support on Windows is a prototype feature and is subject to changes.
conda install -c conda-forge libuv=1.39

然后windows的源码编译有点儿复杂,具体要参考各种情况下的编译

  • GitHub - pytorch/pytorch: Tensors and Dynamic neural networks in Python with strong GPU acceleration

在编译这个pytorch这个东西的时候我遇到过贼多问题,其中大部分问题我都搜不到解决方案,最终找到的最靠谱的方案是,不能用太低或者太高版本的python,会好解决很多,最终我选择了用3.10版本的python,解决了大部分的问题。

另外就是如果gpu不是很好或者显存不是很高,也可以使用cpu版本,大部分电脑的内存都会比较大,起码能跑起来。

如果是windows,那一定会用到huggingface,有个东西我建议一定要注意下。

默认的huggingface和pytorch的缓存文件夹是在~/.cache/下,是在c盘下面,而一般LLM的模型文件都贼大,很容易把C盘塞满,这个注意要改下。

在环境变量里加入**HF_HOME和TORCH_HOME ,设**置为指定变量即可。

img

除此之外,有的项目也会提供docker化的部署方案,如果采用这种方案,就必须在宿主机安装NVIDIA Container Toolkit,并重启docker

1
2
3
sudo apt-get install -y nvidia-container-toolkit-base
sudo systemctl daemon-reload 
sudo systemctl restart docker

进阶构成

LLM

LLM全称**Large Language Model,大语言模型,是以ChatGPT为代表的ai对话核心模块,相比我们无法控制、训练的ChatGPT,也逐渐在出现大量的开源大语言模型,尤其是以ChatGLM、LLaMA**为代表的轻量级语言模型相当好用。

虽然这些开源语言模型相比ChatGPT差距巨大,但深度垂直领域的ai应用也在逐渐被人们所认可。与其说我们想要在开源世界寻找ChatGPT的代替品,不如说这些开源大语言模型的出现,意味着我们有能力打造自己的GPT。

  • ChatGLM-6B
  • GitHub - THUDM/ChatGLM-6B: ChatGLM-6B: An Open Bilingual Dialogue Language Model | 开源双语对话语言模型
  • ChatGLM2-6B
  • GitHub - THUDM/ChatGLM2-6B: ChatGLM2-6B: An Open Bilingual Chat LLM | 开源双语对话语言模型

目前中文领域效果最好,也是应用最多的开源底座模型。大部分的中文GPT二次开发几乎都是在这个模型的基础上做的开发,尤其是2代之后进一步拓展了基座模型的上下文长度。最厉害的是它允许商用。

  • Moss
  • GitHub - OpenLMLab/MOSS: An open-source tool-augmented conversational language model from Fudan University

MOSS是一个支持中英双语和多种插件的开源对话语言模型,moss-moon系列模型具有160亿参数,在FP16精度下可在单张A100/A800或两张3090显卡运行,在INT4/8精度下可在单张3090显卡运行。MOSS基座语言模型在约七千亿中英文以及代码单词上预训练得到,后续经过对话指令微调、插件增强学习和人类偏好训练具备多轮对话能力及使用多种插件的能力。

  • ChatRWKV
  • GitHub - BlinkDL/ChatRWKV: ChatRWKV is like ChatGPT but powered by RWKV (100% RNN) language model, and open source.

一系列基于RWKV架构的Chat模型(包括英文和中文),发布了包括Raven,Novel-ChnEng,Novel-Ch与Novel-ChnEng-ChnPro等模型,可以直接闲聊及进行诗歌,小说等创作,包括7B和14B等规模的模型。

LLM的基座模型说实话有点儿多,尤其是在最开始的几个开源之后,后面各种LLM基座就像雨后春笋一样出现了,比较可惜的是目前的的开源模型距离ChatGPT的差距非常之大,大部分的模型只能达到GPT3的级别,距离GPT3.5都有几个量级的差距,更别提GPT4了。

  • GitHub - HqWu-HITCS/Awesome-Chinese-LLM: 整理开源的中文大语言模型,以规模较小、可私有化部署、训练成本较低的模型为主,包括底座模型,垂直领域微调及应用,数据集与教程等。
  • GitHub - chenking2020/FindTheChatGPTer: ChatGPT爆火,开启了通往AGI的关键一步,本项目旨在汇总那些ChatGPT的开源平替们,包括文本大模型、多模态大模型等,为大家提供一些便利

给大家看一个通过一些标准排名出来的LLM排行榜,这个说法比较多,一般就是看样本集的覆盖程度。

  • GitHub - CLUEbenchmark/SuperCLUElyb: SuperCLUE琅琊榜:中文通用大模型匿名对战评价基准

img

Embedding

Embedding 模型也是GPT的很重要一环,在之前的文章里曾经提到过。由于GPT的只能依赖对话的模式受限于上下文的长度。

所以也就衍生出了不少的开源Embedding模型

  • https://huggingface.co/GanymedeNil/text2vec-large-chinese
  • https://huggingface.co/shibing624/text2vec-base-chinese

img

gradio

gradio是一个非常有名的机器学习用于数据演示的web框架。通过gradio可以快速的构建一个可以实时交互的web界面。有点儿像flask

  • GitHub - gradio-app/gradio: Build and share delightful machine learning apps, all in Python. 🌟 Star to support our work!

img

首先要注意gradio最起码python在3.8版本以上.

1
2
3
4
5
6
7
8
import gradio as gr

def greet(name):
    return "Hello " + name + "!"

demo = gr.Interface(fn=greet, inputs="text", outputs="text")
    
demo.launch()

img

gradio支持非常多这类的常用场景,就比如文本、勾选框、输入条,甚至文件上传、图片上传,都有非常不错的原生支持。

img

FastChat

FastChat是一个在LLM基础上构筑的一体化平台,FastChat是基于LLaMA做的二次调参训练。

1
pip3 install fschat

正常使用需要用机器生成Vicuna模型,将LLaMa weights合并Vicuna weights。而这个过程需要大量的内存和CPU,官方给出的参考数据是

  • Vicuna-7B:30 GB of CPU RAM
  • Vicuna-13B:60 GB of CPU RAM

如果没有足够的内存用,可以尝试下面两个办法来操作一下:

1、在命令中加入–low-cpu-mem,这个命令可以把峰值内存降到16G以下

2、创建一个比较大的交换分区让操作系统用硬盘作为虚拟内存

1
2
3
4
5
6
7
8
9
python3 -m fastchat.model.apply_delta \
    --base-model-path /path/to/llama-7b \
    --target-model-path /path/to/output/vicuna-7b \
    --delta-path lmsys/vicuna-7b-delta-v1.1

python3 -m fastchat.model.apply_delta \
    --base-model-path /path/to/llama-13b \
    --target-model-path /path/to/output/vicuna-13b \
    --delta-path lmsys/vicuna-13b-delta-v1.1

下载完模型文件之后,可以快捷的使用对应的模型

1
python3 -m fastchat.serve.cli --model-path lmsys/fastchat-t5-3b-v1.0

相比其他的基座模型LLM,FastChat的平台化程度就比较高了。

首先提供了controller和model worker分别部署的方案,一对多的方案本身比较符合项目化的结构。

1
2
3
python3 -m fastchat.serve.controller

python3 -m fastchat.serve.model_worker --model-path /path/to/model/weights

而且同样利用gradio构建了相应的web界面

1
python3 -m fastchat.serve.gradio_web_server

除此之外FastChat还提供了和openai完全兼容的api接口和restfulapi.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import openai
openai.api_key = "EMPTY" # Not support yet
openai.api_base = "http://localhost:8000/v1"

model = "vicuna-7b-v1.3"
prompt = "Once upon a time"

# create a completion
completion = openai.Completion.create(model=model, prompt=prompt, max_tokens=64)
# print the completion
print(prompt + completion.choices[0].text)

# create a chat completion
completion = openai.ChatCompletion.create(
  model=model,
  messages=[{"role": "user", "content": "Hello! What is your name?"}]
)
# print the completion
print(completion.choices[0].message.content)

甚至可以直接以api的方式接入到其他的平台中,完成度很高。

知识库文件

知识库文件是langchain类方案中比较重要的一环,所有的问题会先进入知识库中搜索结果然后再作为上下文,知识库文件的数据量会直接影响到这类应用的结果有效度。而现在比较常见的相似度检测用的都是faiss,构建向量数据库用于数据比对。

  • GitHub - facebookresearch/faiss: A library for efficient similarity search and clustering of dense vectors.
知识库数据FAISS向量
中文维基百科截止4月份数据,45万链接:百度网盘 请输入提取码 提取码:l3pn
截止去年九月的130w条中文维基百科处理结果和对应faiss向量文件链接:百度网盘 请输入提取码 提取码:exij
💹 大规模金融研报知识图谱链接:百度网盘 请输入提取码 提取码:ujjv

相应的现在很多应用还内置了用于测试知识库的接口,比如langchain-ChatGLM

img

通过微调知识相关度的阈值,可以让回答消息更有效。你甚至可以直接在平台新建知识库并录入数据。

img

langchain

langchain是现在成熟度比较高的一套Aigc应用,现在比较主流的一种知识库检索方案,用的是曾经的文章中提到过的基于上下文的训练方案,用户输出会先进入数据库检索,然后找出最匹配问题的部分结果然后和问题一起加入到prompt的上下文中,最终由LLM生成最终的回答

img

这个方案是目前最经典的知识库型训练方案,最有效的解决了大模型本身训练的难度和反馈结果的有效度难以兼容的问题。

  • GitHub - langchain-ai/langchain: 🦜🔗 Build context-aware reasoning applications

建立在langchain的思想上,其实衍生了非常多比较有意思的项目,一方面引用了包括ChatGLM-6B等各种开源的大模型,也用了开源的embedding方案来处理文本。

  • GitHub - THUDM/ChatGLM-6B: ChatGLM-6B: An Open Bilingual Dialogue Language Model | 开源双语对话语言模型

img

  • https://huggingface.co/GanymedeNil/text2vec-large-chinese/tree/main

另一方面呢也做了比较成熟的vue前端+知识库,可以快速的拼凑出可用的chat ai。

  • GitHub - chatchat-space/Langchain-Chatchat: Langchain-Chatchat(原Langchain-ChatGLM)基于 Langchain 与 ChatGLM 等语言模型的本地知识库问答 | Langchain-Chatchat (formerly langchain-ChatGLM), local knowledge based LLM (like ChatGLM) QA app with langchain
  • GitHub - yanqiangmiffy/Chinese-LangChain: 中文langchain项目|小必应,Q.Talk,强聊,QiangTalk

langchain-ChatGLM

langchain-ChatGLM是诸多langchain方案中中文支持实现的比较好的一个,过程包括加载文件 -> 读取文本 -> 文本分割 -> 文本向量化 -> 问句向量化 -> 在文本向量中匹配出与问句向量最相似的**top k个 -> 匹配出的文本作为上下文和问题一起添加到prompt中 -> 提交给LLM**生成回答

整个项目中的每个部分都可以一定程度的自由组合,Embedding 默认选用的是 GanymedeNil/text2vec-large-chinese,LLM 默认选用的是 ChatGLM-6B。或者也可以通过fastchat来接入。

img

配置完成并安装好环境之后,就可以运行,首次运行会下载对应的大模型。

img

当然,这个模型实在是太大了,命令行下载的时候非常容易出问题,所以可以参考ChatGLM-6B的方案,自己下载模型然后再加载。

  • GitHub - THUDM/ChatGLM-6B: ChatGLM-6B: An Open Bilingual Dialogue Language Model | 开源双语对话语言模型

比较靠谱的就是先下模型实现,然后再单独下载模型并覆盖所有的文件

1
GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/THUDM/chatglm-6b
  • 清华大学云盘

然后需要修改对应的配置文件中模型的位置,在configs/model_config.py

img

默认的知识库文件路径是

1
knowledge_base\samples

如果想用自用的本地知识文件,放在对应目录的knowledge_base即可。现在的知识库文件会遍历目录下的文件,所以指定目录即可。

1
python cli_demo.py

img

1
python3.10 .\webui.py

img

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

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

相关文章

49 kmalloc 的实现

前言 这里说的是 内核中分配小对象的一种内存分配方式 kmalloc 呵呵 经典程度不必多说了, 内核使用的大多数 不经常使用的小对象基本上是基于 kmalloc 这里 我们来看一下 kmalloc, kmalloc 基于 slab, 因此 这里不会赘述太多 如何分配对象 kmalloc 是系统中分配小空间…

面试题JS篇

目录 Js 基本数据类型有哪些Ajax 如何使用如何判断一个数据是 NaN?Js 中 null 与 undefined 区别闭包是什么?有什么特性?对页面会有什么影响JS中模块化的方法Js 中常见的内存泄漏什么是事件冒泡?事件委托是什么?如何确…

Arduino中安装ESP32网络抽风无法下载 暴力解决办法 python

不知道什么仙人设计的arduino连接网络部分,死活下不下来。(真的沙口,第一次看到这么抽风的下载口) 操作 给爷惹火了我踏马解析json选zip直接全部下下来 把这个大家的开发板管理地址下下来跟后面python放在同一目录下&#xff0c…

redis——客户端

Redis是一个典型一对多服务器程序,一个服务器可以与多个客户端进行网络连接,每隔客户端可以向服务器发送命令请求,而服务器则接收并处理客户端发送的命令请求,并向客户端返回命令请求。 通过是一个I/O多路复用技术实现的文件事件处…

09 Redis之分布式系统(数据分区算法 + 系统搭建与集群操作)

6 分布式系统 Redis 分布式系统,官方称为 Redis Cluster,Redis 集群,其是 Redis 3.0 开始推出的分布式解决方案。其可以很好地解决不同 Redis 节点存放不同数据,并将用户请求方便地路由到不同 Redis 的问题。 什么是分布式系统?…

blender bvh显示关节名称

导入bvh,菜单选择布局,右边出现属性窗口, 在下图红色框依次点击选中,就可以查看bvh关节名称了。

如何保证档案室符合建设标准要求

保证档案室符合建设标准要求需要考虑以下几个方面: 1. 总体规划:合理规划档案室的布局和大小,确保能够满足现有和未来的档案存储需求。考虑档案室的空间利用率、通风、照明、安全出口等因素。 2. 档案室环境:档案室的环境应具备稳…

SQL Server 开发环境配置教程(SSMS+SQL Prompt)

背景 记录一下 SQL Server 常用开发软件 体验了各种数据库IDE(DBeaver、Navicat、DataGrip)之后综合下来还是感觉 SSMSSQL Prompt 对于 SQL Server 最好用,所以在此记录一下配置过程 数据库可视化管理工具SSMS 官方下载地址: https://learn.microsoft…

【Java程序设计】【C00317】基于Springboot的智慧社区居家养老健康管理系统(有论文)

基于Springboot的智慧社区居家养老健康管理系统(有论文) 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的智慧社区居家养老健康管理系统设计与实现,本系统有管理员、社区工作人员、医生以及家属四种角色权限 管…

01|Mysql底层存储引擎

1. 聚集索引(聚簇)与非聚集索引 1.1 聚集索引 索引和数据存储在一起。叶子节点存储了完整的数据记录; 1.2 非聚集索引 MyISAM存储引擎就是非聚集索引,索引和数据文件是分开存储的。索引在MYI文件中,数据在MYD文件中…

Zoho ToDo 满足您的需求:任务管理满足隐私和安全要求

任务管理工具已经成为我们日常生活中不可或缺的一部分,它们帮助我们处理各种事务,从杂项和愿望清单到管理截止日期和资源。这些工具不仅仅是简单的任务列表,它们掌握了项目的蓝图、雄心勃勃的目标和完成的最后期限。然而随着这些工具的使用越…

装配制造业的MES系统种的物料齐套技术

装配是制造企业涉及产品生产加工最为普遍的一种模式,包括汽车、电子、电器、电气等行业。经研究表明,装配在整个产品制造总成本中所占比例超过了50%,所占用的总生产时间比例在40%-60%,直接影响着产品质量和成本。装配制造非常强调…

Arduino单片机基础介绍

(本文为简单介绍,内容源于网络和AI) Arduino单片机,自2005年诞生以来,已经成为全球爱好者和专业工程师们快速实现创意原型的重要工具。Arduino的普及不仅因其强大的功能和简易的操作,还在于其背后强大的社…

websocket入门及应用

websocket When to use a HTTP call instead of a WebSocket (or HTTP 2.0) WebSocket 是基于TCP/IP协议,独立于HTTP协议的通信协议。WebSocket 是双向通讯,有状态,客户端一(多)个与服务端一(多&#xff09…

7.(数据结构)堆

7.1 相关概念 堆(Heap)在计算机科学中是一种特殊的数据结构,它通常被实现为一个可以看作完全二叉树的数组对象。以下是一些关于堆的基本概念: 数据结构: 堆是一个优先队列的抽象数据类型实现,通过完全二叉树…

Oracle 基础表管理(Heap-Organized Table Management)

表是数据库中负责数据存储的对象,在RDBMS中,数据以行、列的形式存储在表中。Oracle中表有很多种类型,最基础且应用最常用的类型就是堆表(Heap-Organized Table),本文列举了Oracle堆表的常用管理操作。 一、…

【PX4-AutoPilot教程-仿真环境架构】梳理PX4GazeboMAVLinkMAVROSROSROS2之间的关系

梳理PX4&Gazebo&MAVLink&MAVROS&ROS&ROS2之间的关系 PX4与仿真器PX4支持的仿真器PX4与除Gazebo之外的仿真器的连接PX4与Gazebo仿真器的连接 PX4默认的MAVLink UDP端口PX4 SITL软件在环仿真的架构Gazebo仿真PX4启动仿真的launch文件ROS与PX4的关系 PX4与仿真…

LeetCode 0938.二叉搜索树的范围和:深度优先搜索(可中序遍历)

【LetMeFly】938.二叉搜索树的范围和:深度优先搜索(可中序遍历) 力扣题目链接:https://leetcode.cn/problems/range-sum-of-bst/ 给定二叉搜索树的根结点 root,返回值位于范围 [low, high] 之间的所有结点的值的和。…

《武汉市贯彻实施细则》解读房地产经纪活动时效性

时效性【当前有效】 为进一步规范我市房地产经纪活动,保护房地产交易和经纪活动当事人的合法权益,促进行业健康发展,制定《武汉市房地产经纪实施细则》(以下简称《实施细则》)。 (以下简称《实施细则》&am…

《Docker 简易速速上手小册》第5章 Docker Compose 与服务编排(2024 最新版)

文章目录 5.1 理解 Docker Compose5.1.1 重点基础知识5.1.2 重点案例:部署 Flask 应用和 Redis5.1.3 拓展案例 1:多服务协作5.1.4 拓展案例 2:使用自定义网络 5.2 编排多容器应用5.2.1 重点基础知识5.2.2 重点案例:部署 Flask 应用…