diff options
author | Georgi Gerganov <ggerganov@gmail.com> | 2024-02-13 15:14:22 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-02-13 15:14:22 +0200 |
commit | cf45252a7cfcb998bade46a886e20477cecc538a (patch) | |
tree | 89400db2102fb39809b61af13a7534e49ec5c27e /tests/test-tokenizer-1-llama.cpp | |
parent | 03bf161eb6dea6400ee49c6dc6b69bdcfa9fd3fc (diff) |
tests : multi-thread the tokenizer tests (#5474)
* tests : multi-thread the tokenizer tests
ggml-ci
* unicode : fix data race for unidentified codepoints
ggml-ci
* unicode : minor style fixes
ggml-ci
Diffstat (limited to 'tests/test-tokenizer-1-llama.cpp')
-rw-r--r-- | tests/test-tokenizer-1-llama.cpp | 51 |
1 files changed, 29 insertions, 22 deletions
diff --git a/tests/test-tokenizer-1-llama.cpp b/tests/test-tokenizer-1-llama.cpp index 4b58fe49..b0d814a4 100644 --- a/tests/test-tokenizer-1-llama.cpp +++ b/tests/test-tokenizer-1-llama.cpp @@ -4,13 +4,13 @@ #include "console.h" #include <cassert> +#include <codecvt> #include <cstdio> #include <cstring> +#include <locale> #include <string> -#include <codecvt> -#include <map> +#include <thread> #include <vector> -#include <locale> int main(int argc, char **argv) { if (argc < 2) { @@ -72,26 +72,33 @@ int main(int argc, char **argv) { } } - for (uint32_t cp = 0x0000; cp < 0xffff; ++cp) { - if (cp < 0xd800 || cp > 0xdfff) { - std::string str = codepoint_to_utf8(cp); - std::vector<llama_token> tokens = llama_tokenize(ctx, str, false); - std::string check = llama_detokenize_spm(ctx, tokens); - if (cp != 9601 && str != check) { - fprintf(stderr, "%s : error: codepoint %d detokenizes to '%s'(%zu) instead of '%s'(%zu)\n", - __func__, cp, check.c_str(), check.length(), str.c_str(), str.length()); - return 3; - } + // unicode + { + const int nthread = std::thread::hardware_concurrency(); + + std::vector<std::thread> threads(nthread); + + for (int i = 0; i < nthread; ++i) { + threads[i] = std::thread([i, nthread, ctx]() { + for (uint32_t cp = i; cp < 0x0010ffff; cp += nthread) { + if (cp >= 0xd800 && cp <= 0xdfff) { + continue; + } + + std::string str = codepoint_to_utf8(cp); + std::vector<llama_token> tokens = llama_tokenize(ctx, str, false); + std::string check = llama_detokenize_spm(ctx, tokens); + if (cp != 9601 && str != check) { + fprintf(stderr, "error: codepoint %x detokenizes to '%s'(%zu) instead of '%s'(%zu)\n", + cp, check.c_str(), check.length(), str.c_str(), str.length()); + std::exit(3); + } + } + }); } - } - for (uint32_t cp = 0x10000; cp < 0x0010ffff; ++cp) { - std::string str = codepoint_to_utf8(cp); - std::vector<llama_token> tokens = llama_tokenize(ctx, str, false); - std::string check = llama_detokenize_spm(ctx, tokens); - if (str != check) { - fprintf(stderr, "%s : error: codepoint %d detokenizes to '%s'(%zu) instead of '%s'(%zu)\n", - __func__, cp, check.c_str(), check.length(), str.c_str(), str.length()); - return 4; + + for (auto & t : threads) { + t.join(); } } |