[ggerganov/llama.cpp]Windows XP:支持MinGW 8.1.0

2024-07-05 471 views
8

我正在尝试让 LLAMA 在 Windows XP 上运行,在使用 MinGW 8.1.0 时遇到了不少问题,决定添加一个补丁来修复它。

已解决问题摘要:

  • 由于add_link_options和不可用,因此升级到 CMake 3.13 target_link_libraries
  • CMake 3.13 原样不适用于该项目,因为它需要为档案、标题等明确定义目标。这会添加明确的目标。
  • Windows 8 代码未受保护,除非设置 WINVER 保护,否则无法编译。此补丁修复了此问题。
  • 为 std::thread std::mutex 等添加 MinGW/compat,以便它实际上可以在 MinGW 8.1.0 w64 上运行。

再次强调,此 PR 是在 XP 上完全构建和运行此程序所需的最低要求。后续 PR 中将提供更多功能。

工作进度截图:StarCoder 1B 在禁用 mmap 的情况下工作:

截图-工作-LLAMA-StarCoder-1B 截图-工作-LLAMA-StarCoder-1B-V2

通过查看这些屏幕截图可以得知,速度大致为<10个令牌/分钟。

回答

7

是什么阻止您使用 MSVC 进行 cmake 构建,或者使用 w64devkit(支持 Windows XP,请参阅 i686 构建)或最新的 mingw-w64?

8

是什么阻止你使用 MSVC 进行 cmake 构建

我首先在 Visual Studio 2005 上尝试了此操作。CMake 未检测到它。因此,让我也尝试使用旧版本的 CMake 来查看是否可以构建它。据我所知,VS2005 是支持 9x 二进制文件的最后一个版本,但它不支持 C11。我需要调查更多内容,以了解这种兼容性可以达到多远。我真的想在带有KernelEx的 Win 98 SE 上尝试此操作。也许我会为它旋转一个 VM 并尝试一下。目前,MinGW 似乎是二进制兼容性的更好选择。

,或者使用 w64devkit(支持 Windows XP,请参阅 i686 版本)或最新的 mingw-w64?

嗯,这是使用 w64 项目中的 MinGW 8.1.0。由于我已停止关注是否有其他适用于 mingw-w64 的工作版本,因此很乐意尝试一下。 图像

1

哦,对了,微软最近才开始支持 C11。那么就没有必要再使用 MSVC 了,因为我看不出在 XP 上运行 VS2019 有任何可能。

5

作为演示效果会更好,但我打算继续努力找出其他可行的方法。大多数情况下,OpenCL 1.1/CLBLAST 支持、CUDA 6.5 支持、SSE2/SSE3 也仅支持对代码部分进行基准测试。MMAP 代码可能也需要检查兼容性。此外,我认为小型模型在 GGML 中可以显示出巨大的潜力,因此可以随时选择测试它们。

已经关闭了它,但再三考虑后,如果其他人想添加它,我会保持这个 PR 开放。

1

这个 PR 是否只适用于 MinGW-w64 8.1,还是也适用于较新的版本(例如 11.0)?

1

我很乐意尝试。理论上,PR 也应该适用于较新的版本 - 仅当 C++ 标准标头<mutex>在较旧的 MinGW 版本上不可用时才需要兼容标头。

另外,可以依靠简单地重命名该 compat 目录中的标题,而不是编辑.cpp文件的源代码,但我想明确这一点。

PR 的这一部分将很快被删除,我能够在树外添加包含内容,因此所需的更改很少。将这些内容移出 llama 还使我能够测试 CLBlast 功能。

8.1.0 之后,Sourceforge 上没有二进制版本。我需要依靠第三方版本在 XP 上进行测试。为此,我明确需要 32 位、MSVCRT 和 SJLJ。现在似乎没有人发布这个组合,而且较新的 32 位版本似乎只附带 DWARF2。我已经就此事联系了 MinGW Windows 版本的作者。如果可以的话,很乐意测试兼容性。

7

我很好奇,在 Windows XP 和特定版本的 MinGW 上运行它的动机是什么?

2

这是一项改进兼容性的练习,目的是了解如何在旧系统上使用这些模型。这项工作本身并不针对 LLaMA,但这绝对是最新的 GGML 项目。

7

@ggerganov 我最近能够验证兼容性。我只有很小的差异,这些差异是向后兼容所必需的。请参阅:

截图 2023-11-19 045703

我认为 CMake 问题并非 XP 独有,因此找人修复这些CMakeLists.txt文件很重要。我在 Windows 11 机器上运行了此版本:https://github.com/Kitware/CMake/releases/tag/v3.13.4以验证这一点。较新的 CMake 可能会破坏许多旧操作系统的兼容性,如果有计划保持兼容性,建议添加DESTINATION blah

5

还有人使用 Ubuntu 18.04 吗?它 4 个月前就停止接收更新了。我个人觉得要求 cmake 3.14 没问题,因为这样目标就可选了。

1

我已经能够为 XP 构建 cmake 3.14。我认为我们应该尝试将兼容性更新CMakeLists.txt到适合更多人的版本,而不仅仅是我。但如果我们想要真正兼容 3.13,添加这些条目很重要。此 PR 将是文档。