[LLM] 开源 AI 大语言模型的本地化定制实践

通过llama.cpp与羊驼聊天的网页界面- 详解 Serge 的启动使用

 

LLM(Large Language Model,大型语言模型)是一种基于深度学习的自然语言处理模型,旨在理解和生成人类语言。

它们在大量的文本数据上进行训练,可以执行广泛的任务,包括文本总结、翻译、情感分析等等。

LLM的特点是规模庞大,包含数十亿的参数,帮助它们学习语言数据中的复杂模式。

 

本文假定你对一些类似 ChatGPT 的工具已有使用经验, 了解其中的强大和不足。

 

LLM 应用层面介绍

 

1、LLM 当前主要应用

 

通用问答类——基于OpenAI等做的套壳。(能做不限于创作、翻译、分析、摘要、预测)

领域搜索类——基于”数据库”做的垂直领域搜索。*

  

2、为什么需要开源的 LLM ?

 

隐私性

基于openai或其它第三方模型时对数据的控制性;AWS、Azure内的数据隐私性。

(随提供方政策)

 

精准性

当你不知道某件事的时候,生成的答案感觉是靠谱的,但不一定正确。

(GPT插件系统、可信数据源)

怎么验证这个正确性、提高服务的准确性,是需要提高的地方。

 

拓展性

单独使用 LLM 通常不足以创建一个真正强大的应用程序,真正的强大之处在于将它们与其他计算或知识来源结合起来。

(LLM训练成本)

后面会介绍基于语言模型的开发框架 LangChain。

 

3、LLM 应用优化方向

0.(模型架构改进)

1. 模型调参。(Fine-tuning:小规模的特定任务上继续训练)

2. 关键词拆分。(AutoGPT为代表的,用合理的架构让模型自动拆分关键词、更细使得精度提高)

 

LLM 应用实践

 

1. 单独部署使用开源 LLM 

  一种是用终端执行,另一种是用比较多的 Webui 可以直接与同一类LLM进行chat。

  比如基于 ChatGLM 的 ChatGLM-webui(https://github.com/Akegarasu/ChatGLM-webui/)操作示例:https://www.cnblogs.com/farwish/p/17289475.html

  比如基于 alpaca-7B-ggml 的 Serge(https://github.com/nsarrazin/serge)操作示例:https://www.cnblogs.com/farwish/p/17280159.html

  等等。

 

2. 开源 LLM 与私有数据配合

  LangChain 框架使从数据到 LLM 的各个部分都组件化,LangChain + LLMs 较为通用。

 

1)LangChain 与某一个 LLM 的结合。

# 下载语言模型

# 支持CPU的 LLaMA 2 7B 模型
# https://gpt4all.io/ 首页可以找到该模型
# 下载地址:https://huggingface.co/TheBloke/Llama-2-7B-Chat-GGML/resolve/main/llama-2-7b-chat.ggmlv3.q4_0.bin
local_path = (
    "./llama-2-7b-chat.ggmlv3.q4_0.bin"  # replace with your desired local file path
)

# 执行下载

import requests

from pathlib import Path
from tqdm import tqdm

Path(local_path).parent.mkdir(parents=True, exist_ok=True)

url = 'https://huggingface.co/TheBloke/Llama-2-7B-Chat-GGML/resolve/main/llama-2-7b-chat.ggmlv3.q4_0.bin'

# send a GET request to the URL to download the file. Stream since it's large
response = requests.get(url, stream=True)

# open the file in binary mode and write the contents of the response to it in chunks
# This is a large file, so be prepared to wait.
with open(local_path, 'wb') as f:
    for chunk in tqdm(response.iter_content(chunk_size=8192)):
        if chunk:
            f.write(chunk)

运行:

# !pip install langchain
# !pip install llama-cpp-python

## https://python.langchain.com/docs/integrations/llms/llamacpp

# 1.导入包
from langchain.llms import LlamaCpp
from langchain import PromptTemplate, LLMChain
from langchain.callbacks.manager import CallbackManager
from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler

# 2.回调
# 回调支持逐个token的流式处理
callback_manager = CallbackManager([StreamingStdOutCallbackHandler()])
# 在回调管理器中需要传递 verbose 参数

# 3. 模型,确保路径正确
llm = LlamaCpp(
    model_path="./llama-2-7b-chat.ggmlv3.q4_0.bin",
    temperature=0.75,
    max_tokens=2000,
    top_p=1,
    callback_manager=callback_manager,
    verbose=True,
)

# 4.提问
prompt = """
Question: who are you?
"""
llm(prompt)

其它支持的 LLMs:https://python.langchain.com/docs/integrations/llms

 

2)对文档作为知识源的查询提问。

由于 LLM 擅长于文本理解,想对文档内容进行提问时,可以作为一个很好的工具。

总体架构概览:

 

将非结构化数据转换为 QA 对话的链路过程:

1. Loading:首先我们需要加载我们的数据。

2. Splitting:文本分隔符将文档分成指定大小的分隔符。

3. Storage:(通常是一个向量存储) 存储将容纳并嵌入分割的字符。

4. Retrieval:应用程序从存储中检索分割的文本 (例如,通常情况下与输入问题有类似的Embedding)

5. Generation:这个 LLM 使用 含问题的提示词(prompt) 和 检索到的数据(data) 来生成答案。

6. Conversation:通过在 QA 链中添加 Memory 来进行多回合对话。

 

详细文档:https://python.langchain.com/docs/use_cases/question_answering.html

 

3. 多模态应用方面

这里不展开讨论,除了数据量本身庞大,计算耗费更多资源。

模型层面主要在于处理多种不同类型的数据,例如图像、音频和视频等。

多模态数据的获取和标注成本较高,因为需要同时收集和标注不同类型的数据。

随着硬件等各方面提升、未来这一方面应用可能还会有更多场景涌现。

 

其它类型Ai在线体验:ChatAi.

 

Other:https://gist.github.com/psychemedia/51f45fbfe160f78605bdd0c1b404e499

Other:https://soulteary.com/2023/07/23/build-llama2-chinese-large-model-that-can-run-on-cpu.html

Link:https://www.cnblogs.com/farwish/p/17632893.html

posted on 2023-08-16 08:59  ercom  阅读(579)  评论(0编辑  收藏  举报