| 946 | } |
| 947 | |
| 948 | void llama_model_loader::load_data_for(struct ggml_tensor * cur) const { |
| 949 | const auto & w = require_weight(ggml_get_name(cur)); |
| 950 | |
| 951 | if (use_mmap) { |
| 952 | const auto & mapping = mappings.at(w.idx); |
| 953 | if (cur->data == nullptr) { |
| 954 | cur->data = (uint8_t *)mapping->addr() + w.offs; |
| 955 | } else { |
| 956 | memcpy(cur->data, (uint8_t *)mapping->addr() + w.offs, ggml_nbytes(cur)); |
| 957 | } |
| 958 | } else { |
| 959 | GGML_ASSERT(cur->data != nullptr); |
| 960 | GGML_ASSERT(w.idx < files.size()); |
| 961 | const auto & file = files.at(w.idx); |
| 962 | file->seek(w.offs, SEEK_SET); |
| 963 | file->read_raw(cur->data, ggml_nbytes(cur)); |
| 964 | } |
| 965 | |
| 966 | if (check_tensors && !ggml_validate_row_data(cur->type, cur->data, ggml_nbytes(cur))) { |
| 967 | throw std::runtime_error(format("tensor '%s' has invalid data", ggml_get_name(cur))); |
| 968 | } |
| 969 | } |
| 970 | |
| 971 | bool llama_model_loader::load_all_data( |
| 972 | struct ggml_context * ctx, |
no test coverage detected