🔖
llama.cpp GGUF での tokenizer 情報のメモ
GGUF で tokenizer の情報はどう保存されるんや...
GGUF
最近流行り?の safetensors とだいたい同じ感じ.
GGUF 自体は key-value でデータを保存する. tokenizer 固有のフォーマットはないので, tokenizer の情報(BPE とか, vocab とか...)は,
適当に string の配列などにしてシリアライズ, ローダー側で復元, という形になっている
たとえば llama.cpp (の llama.cpp
ファイル)では以下のような感じになっている.
// read bpe merges and populate bpe ranks
const int merges_keyidx = gguf_find_key(ctx, kv(LLM_KV_TOKENIZER_MERGES).c_str());
if (merges_keyidx == -1) {
throw std::runtime_error("cannot find tokenizer merges in model file\n");
}
const int n_merges = gguf_get_arr_n(ctx, merges_keyidx);
for (int i = 0; i < n_merges; i++) {
const std::string word = gguf_get_arr_str(ctx, merges_keyidx, i);
...
キーの名前はある程度 predefiend されてはいる.
preview
huggingface にアップされているのは preview でキー一覧を見ることができる.
standalone の GUI はないっぽい模様.
とりあえずは gguf-dump.py で確認でしょうか.
tokenizer.json
huggingface LLM model にある merges.txt のメモ
FastTokenizer で使われる tokenizer.json
はその JSON 文字列自体を GGUF にシリアライズ
ただ, 2024/10 時点では, llama.cpp にはこのキー(tokenizer.json)を使うコードは無い.
将来的には llama.cpp(GGUF)でも tokenizer.json
を使うのが推奨になる気もする... カモ.
Discussion