本页文档介绍了 GPT Academic 如何管理和利用本地 LLM(大型语言模型)实现。它涵盖了允许在用户本地机器上运行各种 LLM 的架构,而不是调用外部 API。有关远程 LLM 集成的信息,请参阅 LLM Bridge Architecture。
GPT Academic 支持在本地运行多个开源大型语言模型,包括 ChatGLM 系列、InternLM 和 ONNX 优化模型。该系统使用模块化架构来管理这些本地模型,并提供一个通用基类来处理进程隔离、资源管理以及主应用程序与模型进程之间的通信。
来源: request_llms/local_llm_class.py67-215 request_llms/bridge_chatglm3.py12-97 request_llms/bridge_chatglm.py13-78 request_llms/bridge_internlm.py37-203 request_llms/bridge_chatglmonnx.py20-72
本地 LLM 系统采用父子进程架构,将模型加载和推理与主应用程序隔离开。这可以防止内存问题并提供更好的资源管理。
来源: request_llms/local_llm_class.py67-215
LocalLLMHandle 类是所有本地模型实现的基石。它继承了 Python 的 Process 类,以在单独的进程中运行模型,并实现了以下方法:
子类必须实现的键方法
| 方法 | 目的 | 进程 |
|---|---|---|
load_model_info() | 定义模型名称和安装命令 | 子类 |
load_model_and_tokenizer() | 加载实际的模型和分词器 | 子类 |
llm_stream_generator() | 从模型生成文本 | 子类 |
try_to_import_special_deps() | 检查所需依赖项 | 主进程 |
来源: request_llms/local_llm_class.py67-170
本地 LLM 实例通过单例模式进行管理,以确保高效的资源利用。GetSingletonHandle 类维护一个模型实例字典,允许系统重用现有模型,而不是创建新模型。
来源: request_llms/local_llm_class.py31-44
ChatGLM3 通过 GetGLM3Handle 类实现。它支持多种量化选项(INT4、INT8 或全精度),并且可以在 CPU 或 GPU 上运行。
主要功能
CHATGLM_LOCAL_MODEL_PATH 配置模型路径LOCAL_MODEL_QUANT 进行多种量化选项LOCAL_MODEL_DEVICE 进行设备选择来源: request_llms/bridge_chatglm3.py12-97
ChatGLM2 通过 GetGLM2Handle 类实现,具有与 ChatGLM3 类似的功能,但使用了不同的模型架构。
模型加载选项
THUDM/chatglm2-6b-int4THUDM/chatglm2-6b-int8THUDM/chatglm2-6b来源: request_llms/bridge_chatglm.py13-78
InternLM 通过 GetInternlmHandle 类实现。它使用更复杂的文本生成过程,并带有自定义的提示格式。
主要功能
internlm/internlm-chat-7b 模型来源: request_llms/bridge_internlm.py37-203
ChatGLM-ONNX 通过 GetONNXGLMHandle 类实现。它使用 ONNX 运行时进行优化推理。
主要功能
来源: request_llms/bridge_chatglmonnx.py20-72
本地 LLM 实现通过 get_local_llm_predict_fns() 生成的标准预测函数与系统其余部分集成。
来源: request_llms/local_llm_class.py216-322
为每个模型生成两个主要函数
predict_no_ui_long_connection():用于非 UI 交互,供插件和程序化访问使用predict():用于基于 UI 的交互,与聊天界面集成两个函数都处理:
来源: request_llms/local_llm_class.py219-322
本地 LLM 系统使用多种机制来确保线程安全和正确的资源管理:
当多个请求同时到达时,ThreadLock 类用于同步对模型的访问。
来源: request_llms/local_llm_class.py10-29 request_llms/local_llm_class.py190-214
本地 LLM 的行为可以通过 config.py 中的多个参数进行配置:
| 参数 | 描述 | 用途 |
|---|---|---|
CHATGLM_LOCAL_MODEL_PATH | ChatGLM3 模型文件的路径 | ChatGLM3 |
LOCAL_MODEL_QUANT | 量化级别(INT4、INT8 或无) | 所有模型 |
LOCAL_MODEL_DEVICE | 运行模型的设备(cpu 或 cuda) | 所有模型 |
内存优化策略
来源: request_llms/bridge_chatglm3.py26-56 request_llms/bridge_chatglm.py26-41 request_llms/bridge_internlm.py54-64
可以使用测试模块来测试本地 LLM。
该系统包含强大的错误处理机制:
如果缺少依赖项,用户将收到一条清晰的消息。
缺少{model_name}的依赖,如果要使用{model_name},除了基础的pip依赖以外,您还需要运行{cmd_to_install}安装{model_name}的依赖。
来源: request_llms/local_llm_class.py125-134 request_llms/local_llm_class.py166-169