Apertus xIELU formula / param-space mismatch — forward pass NaN's on real Apertus-8B Q4_K_S
Maintainer thường phản hồi trong vòng 1 ngày
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 5/5
- Thời gian dự kiến
- Hơn một tuần
- Mức phù hợp với người mới
- 30/100
- Loại issue
- Lỗi
- Độ rõ ràng
- Đặc tả rõ ràng
- Mức độ hoạt động
- Ít trao đổi
- Công nghệ
- kotlin
- Lĩnh vực
- backend, machine-learning
Hướng nghiên cứu
Read ApertusXIELU.kt at line 27 and compare its activation formula with the Hugging Face Apertus modeling code; inspect the layer 0 parameters in the reference checkpoint and compare them with the GGUF values. The issue also points to ApertusWeightLoader.kt, the DSL wiring in apertusNetwork(), and ApertusRealGgufLoadingTest for a forward pass probe. Done means identifying the source of the NaNs and confirming the corrected activation produces finite logits.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Summary
After PR #102 the load → convert → fromWeights → forward chain runs to completion against unsloth/Apertus-8B-Instruct-2509-GGUF (Q4_K_S) — but the logit vector is all-NaN at the first forward pass. The propagation source is ApertusXIELU.xielu(buf, params) in layer 0.
Diagnosis
ApertusXIELU.kt evaluates:
alpha_p_eff = softplus(alpha_p)
alpha_n_eff = beta + softplus(alpha_n)
if x > 0: alpha_p_eff * x*x + beta * x
else: (expm1(min(x, eps)) - x) * alpha_n_eff + beta * x
with softplus(x) = if (x > 20) x else ln(1 + exp(x)).
The unsloth GGUF stores per-layer xIELU params (verified via gguf Python lib):
| layer | alpha_p | alpha_n | beta | eps |
|---|---|---|---|---|
| 0 | 166.0 | 40.75 | 0.5 | -9.98e-7 |
| 1 | 174.0 | 31.625 | 0.5 | -9.98e-7 |
| 2 | 128.0 | 22.875 | 0.5 | -9.98e-7 |
| … | (decaying) | (decaying) | 0.5 | -9.98e-7 |
| 11 | -0.477 | … | 0.5 | -9.98e-7 |
| … | (small / negative) | … | 0.5 | -9.98e-7 |
For layer 0, softplus(166) ≈ 166 (the > 20 shortcut applies), so the activation collapses to 166·x² + 0.5·x. Any input value |x| past a few causes the FFN output to overflow, and the post-FFN matmul + residual chain NaN-poisons the rest of the forward.
Hypothesis
Either:
- The unsloth GGUF stores
alpha_p/alpha_nin a different transform space thanApertusXIELU.ktexpects.softplus(stored)may already be applied (i.e. these are the post-softplusalpha_p_effvalues, not the raw learned parameters). In that case the right thing is to drop thesoftpluscalls in the activation and use the stored values directly — which would still leave layer 0 withalpha_p_eff = 166, and the activation would still overflow for any non-trivial input. ApertusXIELU.kt's formula diverges from the Apertus-8B reference. Possible candidates:- The reference may scale
alpha_pby some normalization factor. - The
if x > 0branch might usealpha_p_eff * (e^x - x - 1)(an ELU-like form) rather thanalpha_p_eff * x². beta,eps, etc. may participate in a different combination.
- The reference may scale
- The unsloth converter is upstream-buggy and writes the wrong values in the wrong fields.
What to verify
- Pull the HF reference checkpoint
swiss-ai/Apertus-8B-Instruct-2509and inspect the actualact_fnparameter values for layer 0 — see whether they match the unsloth-stored values or are very different (e.g. small). - Diff
ApertusXIELU.xieluagainst the activation forward in the HF Apertus modeling code (modeling_apertus.pyor similar). - Quick sanity probe: replace
ApertusXIELUwith a no-op linear (or withsilu) and re-run the forward pass. If logits become finite, the failure is fully inside xIELU. - If a different unsloth quant of Apertus is available, repro under it to rule out a unsloth-conversion glitch isolated to Q4_K_S.
Where the formula lives
llm-inference/apertus/src/commonMain/kotlin/sk/ainet/models/apertus/ApertusXIELU.kt:27- The DSL wiring is
apertusNetwork()line 65:stage.xielu(id = \"act_fn\"). The DSL-emitted op is in skainet-lang-core; need to confirm it computes the same thing asApertusXIELU.xielureference. - Per-layer params are loaded by
extractXIELUParams/extractXIELUParamsFromStreamingMetainApertusWeightLoader.kt, then converted to scalar tensors namedblk.N.mlp.act_fn.{alpha_p,alpha_n,beta,eps}byApertusNetworkLoader.applyWeightsToNetwork.
Out of scope
This issue is only about the activation. Loader / module construction / Q4_K dispatch are all correct (PR #102 verified loader + fromGguf().load() end-to-end on real Apertus-8B). When the activation is fixed, forward / generate / tool calling smoke tests in ApertusRealGgufLoadingTest should pass without further loader work.
- Ngôn ngữ chính
- Kotlin
- Star
- 8
- Fork
- 3
- Merge trung bình
- 1 ngày 16 giờ
- Pull request đã merge (30 ngày)
- 48
Chuẩn bị môi trường
Dự án này không cung cấp dev container, Dockerfile hay hướng dẫn đóng góp, nên bạn cần tự thiết lập môi trường: hãy bắt đầu từ README và xem hướng dẫn đóng góp lần đầu của chúng tôi để biết các bước chung.
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của SKaiNET-developers/SKaiNET-transformers
-
documentation good first issue size:xs skill:docs sub-issue
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
SKaiNET-developers/SKaiNET-transformers#478 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
enhancement skill:kotlin-core
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 48/100
SKaiNET-developers/SKaiNET-transformers#502 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
bug
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 48/100
SKaiNET-developers/SKaiNET-transformers#483 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
coding good first issue size:s skill:kotlin-core sub-issue
Độ khó 4/5 1-2 ngày Mức phù hợp với người mới 64/100
SKaiNET-developers/SKaiNET-transformers#477 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
coding good first issue size:s skill:numerics sub-issue
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 55/100
SKaiNET-developers/SKaiNET-transformers#476 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của SKaiNET-developers/SKaiNET-transformers
Issue tương tự
-
Blank screen in Download tab after searching with no results and switching tabsCó thể đã có người làm @mangod12 đã nhận hôm nay. Đang mởbug good first issue
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100
kiwix/kiwix-android#5211 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 65/100
deniscerri/ytdlnis#1430 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
[Bug] Lock owned by another client (e.g. Text app) cannot be unlocked from the appCó thể đã có người làm @falkloewert đã nhận hôm nay. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
Maintainer thường phản hồi trong vòng 1 ngày
-
[Submission] 悠悠有品Đang mởsubmit-adaption submit-adaption-pre
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 75/100
BetterAndroid/android-notification-icon-project#763 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
simplex-chat/simplex-chat#7755 ·
Maintainer thường phản hồi trong vòng 1 ngày