| 873 | } |
| 874 | |
| 875 | void llama_model_loader::load_data_for(struct ggml_tensor * cur) const { |
| 876 | const auto & w = require_weight(ggml_get_name(cur)); |
| 877 | |
| 878 | if (use_mmap) { |
| 879 | const auto & mapping = mappings.at(w.idx); |
| 880 | if (cur->data == nullptr) { |
| 881 | cur->data = (uint8_t *)mapping->addr() + w.offs; |
| 882 | } else { |
| 883 | memcpy(cur->data, (uint8_t *)mapping->addr() + w.offs, ggml_nbytes(cur)); |
| 884 | } |
| 885 | } else { |
| 886 | GGML_ASSERT(cur->data != nullptr); |
| 887 | GGML_ASSERT(w.idx < files.size()); |
| 888 | const auto & file = files.at(w.idx); |
| 889 | file->seek(w.offs, SEEK_SET); |
| 890 | file->read_raw(cur->data, ggml_nbytes(cur)); |
| 891 | } |
| 892 | |
| 893 | if (check_tensors && !ggml_validate_row_data(cur->type, cur->data, ggml_nbytes(cur))) { |
| 894 | throw std::runtime_error(format("tensor '%s' has invalid data", ggml_get_name(cur))); |
| 895 | } |
| 896 | } |
| 897 | |
| 898 | bool llama_model_loader::load_all_data( |
| 899 | struct ggml_context * ctx, |
no test coverage detected