You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Features:
- Support all three formats (ggml, ggmf, ggjt). (However, I didn't
include the hack needed to support GPT4All files without conversion.
Those can still be used after converting them with convert.py from my
other PR.)
- Support both mmap and read (mmap is used by default, but can be
disabled with `--no-mmap`, and is automatically disabled for pre-ggjt
files or on platforms where mmap is not supported).
- Support multi-file models like before, but automatically determine the
number of parts rather than requiring `--n_parts`.
- Improve validation and error checking.
- Stop using the per-file type field (f16) entirely in favor of just
relying on the per-tensor type/size fields (which improves
flexibility, and will make it easier to support the new GPTQ-for-LLaMa
models in the future).
- Support VirtualLock on Windows (using the same `--mlock` option as on
Unix).
- madvise/PrefetchVirtualMemory support (based on ggml-org#740)
- Quantization now produces a single-file output even with multi-file
inputs (not really a feature as much as 'it was easier this way').
Issues:
- I switched from fopen/fread instead of ifstream, both to avoid the need to open the
same file again to mmap it, and because I thought would be optimized to skip the buffer for large reads...
XXX
- VirtualLock does not work at all on the one Windows VM I tested it on
(it complains about quota). Todo: figure out why.
- Need to verify that fread actually is fast.
-
However, it doesn't work when I test it on my VM? Todo:
Figure out why.
Implementation notes:
I tried to across several functions to make it easier to modify/refactor the
code in the future.
Regarding code style: I tried to follow the code style, but I'm naughty and
used a few advanced C++ features repeatedly:
- Destructors to make it easier to ensure everything gets cleaned up.
- Exceptions. I don't even usually use exceptions when writing C++, and
I can remove them if desired... but here they make the loading code
much more succinct while still properly handling a variety of errors,
ranging from API calls failing to integer overflow and allocation
failure.
Co-authored-by: Pavol Rusnak <pavol@rusnak.io> (for the bit I copied from ggml-org#740)
0 commit comments