[ggerganov/llama.cpp]同步:ggml(后端 v2)

2024-07-05 267 views
9

这是将新的 ggml 后端接口引入的第一步llama.cpp。目前应该没有任何功能变化 - 仅在需要的地方过渡到新 API。此 PR 可能会保持开放,直到我们确认一切正常,因此非常感谢您提供测试帮助。

我们预计存在问题的代码的主要部分是训练示例:

  • 微调
  • 从零开始训练
  • 小骆驼

我会在自述文件中放置一条通知,以引导人们到这里。一般来说,如果您关心 中的某些特定功能llama.cpp,请签出此分支并确保它按预期工作,然后在下面发表评论。这将有助于确保它在合并时不会中断。

有关此变更的更多详细信息:

回答

9

向 @xaedes 发送消息 - 希望您有机会查看训练示例是否按预期工作

2

@ggerganov,与主分支相比,考虑到开始时所有 RNG 状态相同,此分支上的 funetune 是否有望生成具有相同哈希值的文件?或者测试应该更加手动,例如查询生成的 LORA?我今天将在 3B 模型上运行几个简短的测试来检查。

2

@CoruNethron 对于相同的 RNG 状态,结果应该相同

7

嗯,似乎没有为我尝试过的 70B 模型计算正确的上下文大小(dolphin-2.1-70b.q4_k_s.gguf):

ggml_new_object: not enough space in the context's memory pool (needed 852464, available 852112)

我尝试过的其他模型似乎可以工作(Mistral、Orca3B、CausalLM 14B)。似乎与 GPU 支持无关,我尝试过仅为 CPU 进行编译,但没有任何区别。

0

@KerfuffleV2 这并没有失败,master正确吗?

7

@ggerganov

并且这在主控上没有失败,对吗?

是的,没错。我也尝试过 Q2_K 70B,但同样失败了 - 数字也没有变化。因此量化、GPU 或无 GPU 似乎并不重要。

0

我会研究训练示例。

3

@KerfuffleV2 现在应该修复

@xaedes 谢谢

4

现在应该修复

谢谢。我可以确认现在看起来不错。

1

抱歉耽误了。尝试比较master(381efbf4) 与sync(081a86d0),我在分支上ggml.c:16209: dst->grads != NULL运行时遇到了断言哦,我看到 @xaedes 已经解决了这个问题。finetunesync

2

我们可能很快就会合并它。有人发现这个分支的最新版本有问题吗?

6

我使用 ROCM 进行了一些测试。主要是加载模型并运行几个困惑度块。我没有注意到性能差异。我测试的模型与主模型相比返回了相同的困惑度结果。

已测试:

  1. Orca 3B
  2. 米斯特拉尔 7B
  3. 因果LM 14B
  4. 伊34B
  5. LLaMA2 70B

由于缺少 CUDA 操作(#4041),我无法使用 Persimmon 进行测试。使用 CUDA/ROCM 编译时,无法卸载层,甚至无法运行困惑。不过,我能够加载模型并进行一点 TG。看起来还不错。

Mistral 和 LLaMA2 70B 之前曾遇到过此问题。目前一切似乎都运行良好master

(并不是说我的批准真的意味着什么。此外,我没有测试任何深奥的东西,例如训练模型。)

4

进行此更改后,当您遇到 GGML_ASSERT 时,您将不再获得核心转储,并且您甚至无法在没有例如的情况下使用 gdb 捕获断言catch syscall exit_group

GGML_ASSERT: /home/jared/src/forks/llama.cpp/ggml-cuda.cu:5644: false
[Detaching after fork from child process 509162]
stack module disabled
warning: process 509151 is already traced by process 509126
ptrace: Operation not permitted.
No stack.
The program is not being run.
[Thread 0x7fffbcfde000 (LWP 509160) exited]
[Thread 0x7fffc9162000 (LWP 509159) exited]
[Thread 0x7fffcbbff000 (LWP 509155) exited]
[Thread 0x7ffff7f36000 (LWP 509151) exited]
[Thread 0x7fffb4fde000 (LWP 509161) exited]
[New process 509151]
[Inferior 1 (process 509151) exited with code 01]
>>>

我们能把exit(1)后面改成 吗abort()

0

是的,我将其改为exit(1)因为abort在不刷新缓冲区的情况下结束,有时崩溃后您无法获得所有输出。但应该fflush已经解决了这个问题。