本文档介绍了GPT4All使用的构建系统,包括配置过程、依赖项、构建变体和跨平台部署。有关CI/CD管道的信息,请参阅CI/CD管道。
GPT4All使用CMake作为其主要的构建系统,以便在多个平台(Windows、macOS和Linux)上编译和打包应用程序。构建系统处理包括主聊天应用程序、模型执行的后端库以及特定于硬件的优化在内的各种组件。
来源:gpt4all-chat/CMakeLists.txt1-147 gpt4all-backend/CMakeLists.txt1-40
在构建GPT4All之前,您需要安装以下依赖项
| 依赖项 | 目的 | 必需版本 |
|---|---|---|
| CMake | 构建系统 | 3.25+ |
| Qt | UI 框架 | 6.8+ |
| C++编译器 | 源代码编译 | C++23支持 |
| Git | 源代码管理 | 任意最新版本 |
| Python | 用于测试和绑定 | 3.12+(可选) |
其他特定于平台的必需项
用于硬件加速
来源: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.cpp | gpt4all-backend/deps/llama.cpp-mainline | 核心推理引擎 |
| usearch | gpt4all-chat/deps/usearch | 用于LocalDocs的向量搜索 |
| SingleApplication | gpt4all-chat/deps/SingleApplication | 确保只有一个实例运行 |
| fmt | gpt4all-chat/deps/fmt | 字符串格式化库 |
| DuckX | gpt4all-chat/deps/DuckX | DOCX文件处理 |
| QXlsx | gpt4all-chat/deps/QXlsx | Excel文件处理 |
| minja | gpt4all-chat/deps/minja | 用于聊天模板的模板系统 |
| json | gpt4all-chat/deps/json | JSON解析库 |
子模块使用
来源:.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使用QtPDF | AUTO |
| 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 | 直接使用Vulkan | OFF |
| LLMODEL_CUDA | 使用CUDA | ON |
| LLMODEL_ROCM | 使用ROCm | OFF |
来源:gpt4all-backend/CMakeLists.txt8-15
GPT4All构建了多种语言模型的执行后端版本,以支持不同的硬件加速选项
构建过程为每种硬件加速方法创建了多个共享库
运行时,应用程序会根据硬件可用性和用户设置加载适当的模型实现。
来源:gpt4all-backend/CMakeLists.txt56-101 gpt4all-backend/CMakeLists.txt153-166
构建过程包含几个阶段
聊天应用程序作为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上运行,并针对每个平台进行了特定优化
来源:gpt4all-chat/CMakeLists.txt517-523 gpt4all-chat/src/main.cpp57-65
来源:gpt4all-chat/CMakeLists.txt17-27 gpt4all-chat/CMakeLists.txt403-412 gpt4all-chat/cmake/deploy-qt-mac.cmake.in1-27
来源:gpt4all-chat/CMakeLists.txt564-567
GPT4All使用CPack和QtIFW(Qt Installer Framework)来创建特定于平台的安装程序
打包过程包括
来源: gpt4all-chat/CMakeLists.txt563-603 gpt4all-chat/cmake/deploy-qt-mac.cmake.in1-27
GPT4All 包含一个测试框架,可以通过 GPT4ALL_TEST 选项启用
测试是通过 check 目标运行的,该目标确保所有依赖项(包括测试模型)都已正确下载和配置。
来源: gpt4all-chat/CMakeLists.txt150-176
要从源代码构建 GPT4All
克隆包含子模块的存储库:
创建一个构建目录:
使用 CMake 进行配置:
构建应用程序:
打包应用程序(可选)
您可以通过向 CMake 传递选项来定制构建
来源: gpt4all-chat/CMakeLists.txt1-20 gpt4all-backend/CMakeLists.txt1-20