mirror of
https://github.com/ggerganov/llama.cpp.git
synced 2024-11-14 14:59:52 +00:00
llama : sanity checks for access to logits (#4274)
Co-authored-by: Georgi Gerganov <ggerganov@gmail.com>
This commit is contained in:
parent
88ae8952b6
commit
8a5be3bd58
22
llama.cpp
22
llama.cpp
@ -1505,6 +1505,10 @@ struct llama_context {
|
|||||||
|
|
||||||
// decode output (2-dimensional array: [n_tokens][n_vocab])
|
// decode output (2-dimensional array: [n_tokens][n_vocab])
|
||||||
std::vector<float> logits;
|
std::vector<float> logits;
|
||||||
|
#ifndef NDEBUG
|
||||||
|
// guard against access to unset logits
|
||||||
|
std::vector<bool> logits_valid;
|
||||||
|
#endif
|
||||||
bool logits_all = false;
|
bool logits_all = false;
|
||||||
|
|
||||||
// input embedding (1-dimensional array: [n_embd])
|
// input embedding (1-dimensional array: [n_embd])
|
||||||
@ -6150,6 +6154,14 @@ static int llama_decode_internal(
|
|||||||
{
|
{
|
||||||
auto & logits_out = lctx.logits;
|
auto & logits_out = lctx.logits;
|
||||||
|
|
||||||
|
#ifndef NDEBUG
|
||||||
|
auto & logits_valid = lctx.logits_valid;
|
||||||
|
logits_valid.clear();
|
||||||
|
logits_valid.resize(n_tokens);
|
||||||
|
|
||||||
|
logits_out.clear();
|
||||||
|
#endif
|
||||||
|
|
||||||
if (batch.logits) {
|
if (batch.logits) {
|
||||||
logits_out.resize(n_vocab * n_tokens);
|
logits_out.resize(n_vocab * n_tokens);
|
||||||
for (uint32_t i = 0; i < n_tokens; i++) {
|
for (uint32_t i = 0; i < n_tokens; i++) {
|
||||||
@ -6157,13 +6169,22 @@ static int llama_decode_internal(
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
memcpy(logits_out.data() + (n_vocab*i), (float *) ggml_get_data(res) + (n_vocab*i), sizeof(float)*n_vocab);
|
memcpy(logits_out.data() + (n_vocab*i), (float *) ggml_get_data(res) + (n_vocab*i), sizeof(float)*n_vocab);
|
||||||
|
#ifndef NDEBUG
|
||||||
|
logits_valid[i] = true;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
} else if (lctx.logits_all) {
|
} else if (lctx.logits_all) {
|
||||||
logits_out.resize(n_vocab * n_tokens);
|
logits_out.resize(n_vocab * n_tokens);
|
||||||
memcpy(logits_out.data(), (float *) ggml_get_data(res), sizeof(float)*n_vocab*n_tokens);
|
memcpy(logits_out.data(), (float *) ggml_get_data(res), sizeof(float)*n_vocab*n_tokens);
|
||||||
|
#ifndef NDEBUG
|
||||||
|
std::fill(logits_valid.begin(), logits_valid.end(), true);
|
||||||
|
#endif
|
||||||
} else {
|
} else {
|
||||||
logits_out.resize(n_vocab);
|
logits_out.resize(n_vocab);
|
||||||
memcpy(logits_out.data(), (float *) ggml_get_data(res) + (n_vocab*(n_tokens - 1)), sizeof(float)*n_vocab);
|
memcpy(logits_out.data(), (float *) ggml_get_data(res) + (n_vocab*(n_tokens - 1)), sizeof(float)*n_vocab);
|
||||||
|
#ifndef NDEBUG
|
||||||
|
logits_valid[n_tokens - 1] = true;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -10052,6 +10073,7 @@ float * llama_get_logits(struct llama_context * ctx) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
float * llama_get_logits_ith(struct llama_context * ctx, int32_t i) {
|
float * llama_get_logits_ith(struct llama_context * ctx, int32_t i) {
|
||||||
|
assert(ctx->logits_valid.at(i));
|
||||||
return ctx->logits.data() + i*ctx->model.hparams.n_vocab;
|
return ctx->logits.data() + i*ctx->model.hparams.n_vocab;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user