@@ -1556,23 +1556,30 @@ void llm_graph_context::build_pooling(
1556
1556
ggml_tensor * inp_cls = build_inp_cls ();
1557
1557
inp = ggml_get_rows (ctx0, inp, inp_cls);
1558
1558
1559
- if (cls != nullptr && cls_b != nullptr ) {
1559
+ if (cls) {
1560
1560
// classification head
1561
1561
// https://github.com/huggingface/transformers/blob/5af7d41e49bbfc8319f462eb45253dcb3863dfb7/src/transformers/models/roberta/modeling_roberta.py#L1566
1562
- cur = ggml_add (ctx0, ggml_mul_mat (ctx0, cls, inp), cls_b);
1562
+ cur = ggml_mul_mat (ctx0, cls, inp);
1563
+ if (cls_b) {
1564
+ cur = ggml_add (ctx0, cur, cls_b);
1565
+ }
1563
1566
cur = ggml_tanh (ctx0, cur);
1564
1567
1565
1568
// some models don't have `cls_out`, for example: https://huggingface.co/jinaai/jina-reranker-v1-tiny-en
1566
1569
// https://huggingface.co/jinaai/jina-reranker-v1-tiny-en/blob/cb5347e43979c3084a890e3f99491952603ae1b7/modeling_bert.py#L884-L896
1567
1570
if (cls_out) {
1568
- GGML_ASSERT (cls_out_b != nullptr );
1569
- cur = ggml_add (ctx0, ggml_mul_mat (ctx0, cls_out, cur), cls_out_b);
1571
+ cur = ggml_mul_mat (ctx0, cls_out, cur);
1572
+ if (cls_out_b) {
1573
+ cur = ggml_add (ctx0, cur, cls_out_b);
1574
+ }
1570
1575
}
1571
1576
} else if (cls_out) {
1572
1577
// Single layer classification head (direct projection)
1573
1578
// https://github.com/huggingface/transformers/blob/f4fc42216cd56ab6b68270bf80d811614d8d59e4/src/transformers/models/bert/modeling_bert.py#L1476
1574
- GGML_ASSERT (cls_out_b != nullptr );
1575
- cur = ggml_add (ctx0, ggml_mul_mat (ctx0, cls_out, inp), cls_out_b);
1579
+ cur = ggml_mul_mat (ctx0, cls_out, inp);
1580
+ if (cls_out_b) {
1581
+ cur = ggml_add (ctx0, cur, cls_out_b);
1582
+ }
1576
1583
} else {
1577
1584
GGML_ABORT (" RANK pooling requires either cls+cls_b or cls_out+cls_out_b" );
1578
1585
}
0 commit comments