@@ -2985,6 +2985,7 @@ struct llama_model_loader {
2985
2985
size_t n_bytes = 0;
2986
2986
2987
2987
bool use_mmap = false;
2988
+ bool check_tensors;
2988
2989
2989
2990
llama_files files;
2990
2991
llama_ftype ftype;
@@ -3014,7 +3015,7 @@ struct llama_model_loader {
3014
3015
std::string arch_name;
3015
3016
LLM_KV llm_kv = LLM_KV(LLM_ARCH_UNKNOWN);
3016
3017
3017
- llama_model_loader(const std::string & fname, bool use_mmap, const struct llama_model_kv_override * param_overrides_p) {
3018
+ llama_model_loader(const std::string & fname, bool use_mmap, bool check_tensors, const struct llama_model_kv_override * param_overrides_p) {
3018
3019
int trace = 0;
3019
3020
if (getenv("LLAMA_TRACE")) {
3020
3021
trace = atoi(getenv("LLAMA_TRACE"));
@@ -3218,6 +3219,7 @@ struct llama_model_loader {
3218
3219
}
3219
3220
3220
3221
this->use_mmap = use_mmap;
3222
+ this->check_tensors = check_tensors;
3221
3223
}
3222
3224
3223
3225
~llama_model_loader() {
@@ -3473,7 +3475,7 @@ struct llama_model_loader {
3473
3475
file->read_raw(cur->data, ggml_nbytes(cur));
3474
3476
}
3475
3477
3476
- if (!ggml_validate_row_data(cur->type, cur->data, ggml_nbytes(cur))) {
3478
+ if (check_tensors && !ggml_validate_row_data(cur->type, cur->data, ggml_nbytes(cur))) {
3477
3479
throw std::runtime_error(format("tensor '%s' has invalid data", ggml_get_name(cur)));
3478
3480
}
3479
3481
}
@@ -3514,7 +3516,7 @@ struct llama_model_loader {
3514
3516
buf_mmap = bufs_mmap.at(weight->idx);
3515
3517
}
3516
3518
3517
- if (!ggml_validate_row_data(cur->type, (uint8_t *) mapping->addr + weight->offs, n_size)) {
3519
+ if (check_tensors && !ggml_validate_row_data(cur->type, (uint8_t *) mapping->addr + weight->offs, n_size)) {
3518
3520
throw std::runtime_error(format("tensor '%s' has invalid data", ggml_get_name(cur)));
3519
3521
}
3520
3522
@@ -3538,15 +3540,15 @@ struct llama_model_loader {
3538
3540
if (ggml_backend_buffer_is_host(cur->buffer)) {
3539
3541
file->seek(weight->offs, SEEK_SET);
3540
3542
file->read_raw(cur->data, n_size);
3541
- if (!ggml_validate_row_data(cur->type, cur->data, n_size)) {
3543
+ if (check_tensors && !ggml_validate_row_data(cur->type, cur->data, n_size)) {
3542
3544
throw std::runtime_error(format("tensor '%s' has invalid data", ggml_get_name(cur)));
3543
3545
}
3544
3546
} else {
3545
3547
read_buf.resize(n_size);
3546
3548
file->seek(weight->offs, SEEK_SET);
3547
3549
file->read_raw(read_buf.data(), n_size);
3548
3550
ggml_backend_tensor_set(cur, read_buf.data(), 0, n_size);
3549
- if (!ggml_validate_row_data(cur->type, read_buf.data(), n_size)) {
3551
+ if (check_tensors && !ggml_validate_row_data(cur->type, read_buf.data(), n_size)) {
3550
3552
throw std::runtime_error(format("tensor '%s' has invalid data", ggml_get_name(cur)));
3551
3553
}
3552
3554
}
@@ -5981,7 +5983,7 @@ static bool llm_load_tensors(
5981
5983
// Returns 0 on success, -1 on error, and -2 on cancellation via llama_progress_callback
5982
5984
static int llama_model_load(const std::string & fname, llama_model & model, llama_model_params & params) {
5983
5985
try {
5984
- llama_model_loader ml(fname, params.use_mmap, params.kv_overrides);
5986
+ llama_model_loader ml(fname, params.use_mmap, params.check_tensors, params. kv_overrides);
5985
5987
5986
5988
model.hparams.vocab_only = params.vocab_only;
5987
5989
@@ -14459,7 +14461,7 @@ static void llama_model_quantize_internal(const std::string & fname_inp, const s
14459
14461
auto v = (std::vector<llama_model_kv_override>*)params->kv_overrides;
14460
14462
kv_overrides = v->data();
14461
14463
}
14462
- llama_model_loader ml(fname_inp, use_mmap, kv_overrides);
14464
+ llama_model_loader ml(fname_inp, use_mmap, /*check_tensors*/ true, kv_overrides);
14463
14465
ml.init_mappings(false); // no prefetching
14464
14466
14465
14467
llama_model model;
@@ -14780,7 +14782,7 @@ static int llama_apply_lora_from_file_internal(
14780
14782
std::unique_ptr<llama_model_loader> ml;
14781
14783
if (path_base_model) {
14782
14784
LLAMA_LOG_INFO("%s: loading base model from '%s'\n", __func__, path_base_model);
14783
- ml.reset(new llama_model_loader(path_base_model, /*use_mmap*/ true, /*kv_overrides*/ nullptr));
14785
+ ml.reset(new llama_model_loader(path_base_model, /*use_mmap*/ true, /*check_tensors*/ false, /* kv_overrides*/ nullptr));
14784
14786
ml->init_mappings(/*prefetch*/ false); // no prefetching
14785
14787
}
14786
14788
@@ -15039,6 +15041,7 @@ struct llama_model_params llama_model_default_params() {
15039
15041
/*.vocab_only =*/ false,
15040
15042
/*.use_mmap =*/ true,
15041
15043
/*.use_mlock =*/ false,
15044
+ /*.check_tensors =*/ false,
15042
15045
};
15043
15046
15044
15047
#ifdef GGML_USE_METAL
0 commit comments