mirror of
				https://github.com/ggml-org/llama.cpp.git
				synced 2025-10-30 08:42:00 +00:00 
			
		
		
		
	ggml: check if non-native endian model is being loaded (#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:
		| @@ -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
	 Aaron Teo
					Aaron Teo