mirror of
https://github.com/ggerganov/whisper.cpp.git
synced 2025-06-21 07:58:17 +00:00
ggml: check if non-native endian model is being loaded (llama/13943)
* gguf: prevent non-native endian models from being loaded Signed-off-by: Aaron Teo <aaron.teo1@ibm.com> * gguf: update error message Signed-off-by: Aaron Teo <aaron.teo1@ibm.com> * gguf: make the non-native endian check more verbose Signed-off-by: Aaron Teo <aaron.teo1@ibm.com> * ggml: move ggml_assert location Signed-off-by: Aaron Teo <aaron.teo1@ibm.com> * ggml: reword the endianness check error message Signed-off-by: Aaron Teo <aaron.teo1@ibm.com> --------- Signed-off-by: Aaron Teo <aaron.teo1@ibm.com>
This commit is contained in:
committed by
Georgi Gerganov
parent
b933d17c30
commit
20f913d119
@ -347,6 +347,20 @@ struct gguf_context * gguf_init_from_file_impl(FILE * file, struct gguf_init_par
|
|||||||
int64_t n_tensors = 0;
|
int64_t n_tensors = 0;
|
||||||
|
|
||||||
if (ok && gr.read(ctx->version)) {
|
if (ok && gr.read(ctx->version)) {
|
||||||
|
/*
|
||||||
|
* bit layout is different when reading non-native endian models.
|
||||||
|
* assuming that the GGUF version is 3, the non-native endian model
|
||||||
|
* would read it as 0x30000000. we can use the AND operation against
|
||||||
|
* the last 4 hexadecimal digits to check if the model is the same
|
||||||
|
* endianness as the host system.
|
||||||
|
*/
|
||||||
|
if ((ctx->version & 0x0000FFFF) == 0x00000000) {
|
||||||
|
GGML_LOG_ERROR("%s: failed to load model: this GGUF file version %" PRIu32 " is extremely large, is there a mismatch between the host and model endianness?\n", __func__, ctx->version);
|
||||||
|
gguf_free(ctx);
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
GGML_ASSERT(ctx->version > 0 && ctx->version <= 65535);
|
||||||
if (ctx->version == 1) {
|
if (ctx->version == 1) {
|
||||||
GGML_LOG_ERROR("%s: GGUFv1 is no longer supported, please use a more up-to-date version\n", __func__);
|
GGML_LOG_ERROR("%s: GGUFv1 is no longer supported, please use a more up-to-date version\n", __func__);
|
||||||
ok = false;
|
ok = false;
|
||||||
|
Reference in New Issue
Block a user