菜单

构建系统

相关源文件

本文档介绍了GPT4All使用的构建系统,包括配置过程、依赖项、构建变体和跨平台部署。有关CI/CD管道的信息,请参阅CI/CD管道

概述

GPT4All使用CMake作为其主要的构建系统,以便在多个平台(Windows、macOS和Linux)上编译和打包应用程序。构建系统处理包括主聊天应用程序、模型执行的后端库以及特定于硬件的优化在内的各种组件。

来源:gpt4all-chat/CMakeLists.txt1-147 gpt4all-backend/CMakeLists.txt1-40

先决条件

在构建GPT4All之前,您需要安装以下依赖项

依赖项目的必需版本
CMake构建系统3.25+
QtUI 框架6.8+
C++编译器源代码编译C++23支持
Git源代码管理任意最新版本
Python用于测试和绑定3.12+(可选)

其他特定于平台的必需项

  • Windows:Visual Studio 2022或MinGW,支持C++23
  • macOS:Xcode 命令行工具
  • Linux:GCC 11+或Clang 16+

用于硬件加速

  • CUDA Toolkit(用于NVIDIA GPU)
  • Vulkan SDK(用于Vulkan/Kompute加速)
  • Metal Developer Tools(用于macOS上的Apple GPU)

来源:gpt4all-chat/CMakeLists.txt1-10 gpt4all-backend/CMakeLists.txt1-20

项目结构

来源:.gitmodules1-26 gpt4all-chat/CMakeLists.txt147-148 gpt4all-backend/CMakeLists.txt53-54

子模块

GPT4All依赖多个git子模块来实现关键功能

子模块位置描述
llama.cppgpt4all-backend/deps/llama.cpp-mainline核心推理引擎
usearchgpt4all-chat/deps/usearch用于LocalDocs的向量搜索
SingleApplicationgpt4all-chat/deps/SingleApplication确保只有一个实例运行
fmtgpt4all-chat/deps/fmt字符串格式化库
DuckXgpt4all-chat/deps/DuckXDOCX文件处理
QXlsxgpt4all-chat/deps/QXlsxExcel文件处理
minjagpt4all-chat/deps/minja用于聊天模板的模板系统
jsongpt4all-chat/deps/jsonJSON解析库

子模块使用

来源:.gitmodules1-26 gpt4all-chat/deps/CMakeLists.txt1-52

构建配置

主要配置选项在CMake文件中定义

应用程序选项

选项描述默认
GPT4ALL_TEST构建测试如果找到Python 3.12+,则为ON
GPT4ALL_LOCALHOST构建本地仓库OFF
GPT4ALL_OFFLINE_INSTALLER构建离线安装程序OFF
GPT4ALL_SIGN_INSTALL签名二进制文件和安装程序OFF
GPT4ALL_USE_QTPDF为LocalDocs使用QtPDFAUTO
GPT4ALL_FORCE_D3D12使用Direct3D 12后端AUTO(Windows ARM为ON)

来源:gpt4all-chat/CMakeLists.txt31-39

后端选项

选项描述默认
BUILD_UNIVERSAL在macOS上构建Universal二进制文件ON(仅macOS)
LLMODEL_KOMPUTE使用Kompute进行Vulkan计算ON(非macOS)
LLMODEL_VULKAN直接使用VulkanOFF
LLMODEL_CUDA使用CUDAON
LLMODEL_ROCM使用ROCmOFF

来源:gpt4all-backend/CMakeLists.txt8-15

构建变体

GPT4All构建了多种语言模型的执行后端版本,以支持不同的硬件加速选项

构建过程为每种硬件加速方法创建了多个共享库

  • CPU:基础版和AVX优化版
  • 显卡:
    • CUDA(适用于NVIDIA GPU)
    • Metal(适用于Apple GPU)
    • Vulkan(用于跨平台GPU支持)
    • Kompute(用于Vulkan计算)

运行时,应用程序会根据硬件可用性和用户设置加载适当的模型实现。

来源:gpt4all-backend/CMakeLists.txt56-101 gpt4all-backend/CMakeLists.txt153-166

构建流程

构建过程包含几个阶段

  1. 配置:CMake处理构建选项并为目标平台生成构建文件
  2. 编译:源代码被编译成二进制文件
  3. 嵌入模型:下载用于LocalDocs功能的嵌入模型
  4. 资源打包:Qt资源和其他资产被打包
  5. 打包:CPack创建用于分发的安装程序

构建聊天应用程序

聊天应用程序作为Qt应用程序构建,使用Qt Quick进行UI。主可执行文件链接到用于模型执行的后端库。

来源:gpt4all-chat/CMakeLists.txt228-317 gpt4all-chat/CMakeLists.txt391-412

构建后端库

后端库提供加载和执行语言模型的核心功能。它采用插件架构设计,允许在运行时加载不同的模型实现。

来源:gpt4all-backend/CMakeLists.txt100-187 gpt4all-backend/llama.cpp.cmake1-100

跨平台考量

GPT4All设计用于在Windows、macOS和Linux上运行,并针对每个平台进行了特定优化

Windows

  • 支持x64和ARM64架构
  • Windows ARM64使用Direct3D 12
  • 包含特定的Windows API集成以进行窗口管理
  • 支持分发的二进制文件签名

来源:gpt4all-chat/CMakeLists.txt517-523 gpt4all-chat/src/main.cpp57-65

macOS

  • Universal二进制文件支持(x64和ARM64)
  • Metal优化,适用于Apple Silicon
  • App bundle结构,具有正确的框架路径
  • 代码签名和公证,用于分发

来源:gpt4all-chat/CMakeLists.txt17-27 gpt4all-chat/CMakeLists.txt403-412 gpt4all-chat/cmake/deploy-qt-mac.cmake.in1-27

Linux

  • 支持x64架构
  • 提供与各种Linux发行版的兼容性
  • 尽可能使用系统库

来源:gpt4all-chat/CMakeLists.txt564-567

打包系统

GPT4All使用CPack和QtIFW(Qt Installer Framework)来创建特定于平台的安装程序

打包过程包括

  1. Qt资源部署:使用特定于平台的Qt部署工具来收集所有必需的Qt库
  2. 库打包:包含必要的库,如后端模型实现
  3. 嵌入资源:包含嵌入模型和其他必需资源
  4. 签名:macOS和Windows的代码签名(启用时)
  5. 安装程序创建:创建独立的安装程序

来源: gpt4all-chat/CMakeLists.txt563-603 gpt4all-chat/cmake/deploy-qt-mac.cmake.in1-27

测试

GPT4All 包含一个测试框架,可以通过 GPT4ALL_TEST 选项启用

  • 单元测试:测试特定组件
  • 集成测试:测试组件之间的交互
  • 模型测试:测试模型加载和执行

测试是通过 check 目标运行的,该目标确保所有依赖项(包括测试模型)都已正确下载和配置。

来源: gpt4all-chat/CMakeLists.txt150-176

从源代码构建

要从源代码构建 GPT4All

  1. 克隆包含子模块的存储库:

  2. 创建一个构建目录:

  3. 使用 CMake 进行配置:

  4. 构建应用程序:

  5. 打包应用程序(可选)

您可以通过向 CMake 传递选项来定制构建

来源: gpt4all-chat/CMakeLists.txt1-20 gpt4all-backend/CMakeLists.txt1-20