| 1906 | struct ggml_context * ctx_meta = NULL; |
| 1907 | |
| 1908 | llama_model_loader(const std::string & fname, bool use_mmap) : file(fname.c_str(), "rb") { |
| 1909 | struct gguf_init_params params = { |
| 1910 | /*.no_alloc = */ true, |
| 1911 | /*.ctx = */ &ctx_meta, |
| 1912 | }; |
| 1913 | |
| 1914 | ctx_gguf = gguf_init_from_file(fname.c_str(), params); |
| 1915 | if (!ctx_gguf) { |
| 1916 | throw std::runtime_error(format("%s: failed to load model from %s\n", __func__, fname.c_str())); |
| 1917 | } |
| 1918 | |
| 1919 | n_kv = gguf_get_n_kv(ctx_gguf); |
| 1920 | n_tensors = gguf_get_n_tensors(ctx_gguf); |
| 1921 | sparse_deriv = gguf_get_sparse_deriv(ctx_gguf); |
| 1922 | fver = (enum llama_fver ) gguf_get_version(ctx_gguf); |
| 1923 | |
| 1924 | for (int i = 0; i < n_tensors; i++) { |
| 1925 | const char * name = gguf_get_tensor_name(ctx_gguf, i); |
| 1926 | struct ggml_tensor * t = ggml_get_tensor(ctx_meta, name); |
| 1927 | n_elements += ggml_nelements(t); |
| 1928 | n_bytes += ggml_nbytes(t); |
| 1929 | } |
| 1930 | |
| 1931 | LLAMA_LOG_INFO("%s: loaded meta data with %d key-value pairs and %d tensors from %s (version %s)\n", |
| 1932 | __func__, n_kv, n_tensors, fname.c_str(), llama_file_version_name(fver)); |
| 1933 | |
| 1934 | // determine file type based on the number of tensors for each quantization and print meta data |
| 1935 | // TODO: make optional |
| 1936 | { |
| 1937 | std::map<enum ggml_type, uint32_t> n_type; |
| 1938 | |
| 1939 | uint32_t n_type_max = 0; |
| 1940 | enum ggml_type type_max = GGML_TYPE_F32; |
| 1941 | |
| 1942 | for (int i = 0; i < n_tensors; i++) { |
| 1943 | const char * name = gguf_get_tensor_name(ctx_gguf, i); |
| 1944 | struct ggml_tensor * meta = ggml_get_tensor(ctx_meta, name); |
| 1945 | |
| 1946 | n_type[meta->type]++; |
| 1947 | |
| 1948 | if (n_type_max < n_type[meta->type]) { |
| 1949 | n_type_max = n_type[meta->type]; |
| 1950 | type_max = meta->type; |
| 1951 | } |
| 1952 | |
| 1953 | LLAMA_LOG_INFO("%s: - tensor %4d: %32s %-8s [ %s ]\n", __func__, i, name, ggml_type_name(meta->type), llama_format_tensor_shape(meta).c_str()); |
| 1954 | } |
| 1955 | |
| 1956 | switch (type_max) { |
| 1957 | case GGML_TYPE_F32: ftype = LLAMA_FTYPE_ALL_F32; break; |
| 1958 | case GGML_TYPE_F16: ftype = LLAMA_FTYPE_MOSTLY_F16; break; |
| 1959 | case GGML_TYPE_Q4_0: ftype = LLAMA_FTYPE_MOSTLY_Q4_0; break; |
| 1960 | case GGML_TYPE_Q4_1: ftype = LLAMA_FTYPE_MOSTLY_Q4_1; break; |
| 1961 | case GGML_TYPE_Q5_0: ftype = LLAMA_FTYPE_MOSTLY_Q5_0; break; |
| 1962 | case GGML_TYPE_Q5_1: ftype = LLAMA_FTYPE_MOSTLY_Q5_1; break; |
| 1963 | case GGML_TYPE_Q8_0: ftype = LLAMA_FTYPE_MOSTLY_Q8_0; break; |
| 1964 | case GGML_TYPE_Q2_K: ftype = LLAMA_FTYPE_MOSTLY_Q2_K; break; |
| 1965 | case GGML_TYPE_Q3_K: ftype = LLAMA_FTYPE_MOSTLY_Q3_K_M; break; |
nothing calls this directly
no test coverage detected