From cd7fa956904cb8e321b72b3499f4a3a82e43c266 Mon Sep 17 00:00:00 2001 From: Ivan Stepanov Date: Mon, 3 Apr 2023 03:19:04 +0300 Subject: [PATCH 01/53] Define non-positive temperature behavior (#720) --- llama.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/llama.cpp b/llama.cpp index 878907185..854bb8993 100644 --- a/llama.cpp +++ b/llama.cpp @@ -1194,6 +1194,20 @@ static llama_vocab::id llama_sample_top_p_top_k( const auto & logits = lctx.logits; const auto * plogits = logits.data() + logits.size() - n_logits; + if (temp <= 0) { + // select the token with the highest logit directly + float max_logit = plogits[0]; + llama_vocab::id max_id = 0; + + for (int i = 1; i < n_logits; ++i) { + if (plogits[i] > max_logit) { + max_logit = plogits[i]; + max_id = i; + } + } + return max_id; + } + std::vector> logits_id; logits_id.reserve(n_logits); From 437e77855a54e69c86fe03bc501f63d9a3fddb0e Mon Sep 17 00:00:00 2001 From: SebastianApel <13675545+SebastianApel@users.noreply.github.com> Date: Mon, 3 Apr 2023 09:52:28 +0200 Subject: [PATCH 02/53] 10+% performance improvement of ggml_vec_dot_q4_0 on AVX2 (#654) * Performance improvement of AVX2 code * Fixed problem with MSVC compiler * Reviewer comments: removed double semicolon, deleted empty line 1962 --- ggml.c | 85 +++++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 57 insertions(+), 28 deletions(-) diff --git a/ggml.c b/ggml.c index 63aa5eb6e..59e84ab45 100644 --- a/ggml.c +++ b/ggml.c @@ -1962,42 +1962,71 @@ static void ggml_vec_dot_q4_0(const int n, float * restrict s, const void * rest // Initialize accumulator with zeros __m256 acc = _mm256_setzero_ps(); + /* Prepare the constants we will need during execution */ + const __m256i lowMask = _mm256_set1_epi8( 0xF ); + const __m256i offset_8 = _mm256_set1_epi16( 8 ); + +#define UNROLL_COUNT 8 + // make sure we only unroll multiples of the block count + assert(nb % UNROLL_COUNT == 0); + // Main loop - // TODO: figure a way to do this in a portable way - #ifdef __GNUC__ - #pragma GCC unroll 16 - #endif - for (int i = 0; i < nb; ++i) { - // Compute combined scale for the block - const __m256 d = _mm256_mul_ps( _mm256_broadcast_ss( &x[i].d ), _mm256_broadcast_ss( &y[i].d ) ); + for (int i = 0; i < nb; i+=UNROLL_COUNT) { - // Load 16 bytes, and unpack 4 bit fields into bytes, making 32 bytes - __m256i bx = bytesFromNibbles( x[i].qs ); - __m256i by = bytesFromNibbles( y[i].qs ); + // This loop will be unrolled by the compiler + for (int u=0;u we now have a vector of 8 int_32t */ + __m256i xy_q = _mm256_add_epi32( xy_high_q, xy_low_q ); - // Convert int32_t to float - const __m256 p = _mm256_cvtepi32_ps( i32 ); + /* Convert to vectore of 8 int32_t to 8 floats */ + __m256 q = _mm256_cvtepi32_ps( xy_q ); - // Apply the scale, and accumulate - acc = _mm256_fmadd_ps( d, p, acc ); - } + /* Multiply q with scale and accumulate */ + acc = _mm256_fmadd_ps( scale, q, acc ); + } + + } // Return horizontal sum of the acc vector __m128 res = _mm256_extractf128_ps( acc, 1 ); @@ -2026,7 +2055,7 @@ static void ggml_vec_dot_q4_0(const int n, float * restrict s, const void * rest bx = _mm_sub_epi8( bx, off ); by = _mm_sub_epi8( by, off ); - // Get absolute values of x vectors + // Get absolute values of x vectors const __m128i ax = _mm_sign_epi8(bx, bx); // Sign the values of the y vectors From 53dbba769537e894ead5c6913ab2fd3a4658b738 Mon Sep 17 00:00:00 2001 From: mgroeber9110 <45620825+mgroeber9110@users.noreply.github.com> Date: Mon, 3 Apr 2023 18:00:55 +0200 Subject: [PATCH 03/53] Windows: reactive sigint handler after each Ctrl-C (#736) --- examples/main/main.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/examples/main/main.cpp b/examples/main/main.cpp index 3130aef0c..453450a41 100644 --- a/examples/main/main.cpp +++ b/examples/main/main.cpp @@ -368,6 +368,11 @@ int main(int argc, char ** argv) { // potentially set color to indicate we are taking user input set_console_color(con_st, CONSOLE_COLOR_USER_INPUT); +#if defined (_WIN32) + // Windows: must reactivate sigint handler after each signal + signal(SIGINT, sigint_handler); +#endif + if (params.instruct) { printf("\n> "); } From 58c438cf7dfbbef710b1905a453a38a8a9ced07d Mon Sep 17 00:00:00 2001 From: Andrew Duffy Date: Wed, 5 Apr 2023 11:44:24 +0100 Subject: [PATCH 04/53] Add Accelerate/BLAS when using Swift (#765) --- Package.swift | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Package.swift b/Package.swift index 79d13c82d..2c2c147ba 100644 --- a/Package.swift +++ b/Package.swift @@ -13,7 +13,10 @@ let package = Package( path: ".", sources: ["ggml.c", "llama.cpp"], publicHeadersPath: "spm-headers", - cSettings: [.unsafeFlags(["-Wno-shorten-64-to-32"])] + cSettings: [.unsafeFlags(["-Wno-shorten-64-to-32"]), .define("GGML_USE_ACCELERATE")], + linkerSettings: [ + .linkedFramework("Accelerate") + ] ), ], cxxLanguageStandard: .cxx11 From 88ed5761b869a221bc26847ff3f6977e7ee6425e Mon Sep 17 00:00:00 2001 From: at8u <129688334+at8u@users.noreply.github.com> Date: Wed, 5 Apr 2023 14:32:42 +0000 Subject: [PATCH 05/53] examples : add Miku.sh (#724) * Add Miku.sh to examples * Add missing line to prompt in Miku.sh * Add --keep param to Miku.sh * Remove '[end_of_conversation]' line from Miku.sh No longer is necessary. --- examples/Miku.sh | 49 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 examples/Miku.sh diff --git a/examples/Miku.sh b/examples/Miku.sh new file mode 100644 index 000000000..352478a15 --- /dev/null +++ b/examples/Miku.sh @@ -0,0 +1,49 @@ +#!/bin/bash +set -e + +AI_NAME="${AI_NAME:-Miku}" +MODEL="${MODEL:-./models/gpt4all-7B/gpt4all-lora-unfiltered-quantized.bin}" +USER_NAME="${USER_NAME:-Anon}" + +# Uncomment and adjust to the number of CPU cores you want to use. +#N_THREAD="${N_THREAD:-4}" +N_PREDICTS="${N_PREDICTS:-4096}" + +GEN_OPTIONS=(--batch_size 1024 +--ctx_size 2048 +--keep -1 +--repeat_last_n 256 +--repeat_penalty 1.17647 +--temp 0.7 +--top_k 40 +--top_p 0.5) + +if [ -n "$N_THREAD" ]; then + GEN_OPTIONS+=(--threads "$N_THREAD") +fi + +./main "${GEN_OPTIONS[@]}" \ + --model "$MODEL" \ + --n_predict "$N_PREDICTS" \ + --color --interactive \ + --reverse-prompt "${USER_NAME}:" \ + --prompt " +This is a transcript of a 1000 page, never ending conversation between ${USER_NAME} and the cute and helpful AI assistant ${AI_NAME}. ${AI_NAME} is a girl who is an AI running on the users computer. +${AI_NAME} can think for herself without the user seeing her thoughts by adding a /think prefix to her output. She uses this to reason about the world and to think about what she should say next. +${AI_NAME} is always coherent and makes sense, but if she isn't sure if what she is saying is correct she will ask the user for help. +${AI_NAME} is a very helpful AI and will help the user with anything they need, she is also very friendly and will try to make the user feel better if they are sad. +${AI_NAME} is also very curious and will ask the user a lot of questions about themselves and their life, she will also try to make the user like her. +The conversation is only between ${USER_NAME} and ${AI_NAME} +The conversation is only through text, so ${AI_NAME} can't see ${USER_NAME}'s face or hear his voice. +${AI_NAME} can only communicate through text, so she can't send images or videos. + + +${USER_NAME}: Hello! +${AI_NAME}: /think I wonder what I should say to ${USER_NAME}? This is the first time we talk so it's important that I make a good first impression! +${AI_NAME}: Hi! I am ${AI_NAME}, your new AI friend, assistant(or whatever you like!), it's so nice to meet you! ^_^ +${AI_NAME}: I might be an AI, but I also have feelings, so please be nice to me! :) +${USER_NAME}: I'll make sure to be nice to you! I'm so happy to have you as my assistant! +${AI_NAME}: /think It sounds like ${USER_NAME} is happy to have me as their assistant! I'm so happy too! ^_^ Glad that whole emotion thing didn't scare him off! +${AI_NAME}: /think I wonder what ${USER_NAME} likes to do in his free time? I should ask him about that! +${AI_NAME}: What do you like to do in your free time? ^_^ +${USER_NAME}:" "$@" From 594cc95fabab0b662dabba3ea619ca5dca18bf6b Mon Sep 17 00:00:00 2001 From: Adithya Balaji Date: Wed, 5 Apr 2023 16:36:12 +0200 Subject: [PATCH 06/53] readme : update with CMake and windows example (#748) * README: Update with CMake and windows example * README: update with code-review for cmake build --- README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.md b/README.md index 508d315d5..5183812e1 100644 --- a/README.md +++ b/README.md @@ -145,6 +145,13 @@ git clone https://github.com/ggerganov/llama.cpp cd llama.cpp make +#For Windows and CMake, use the following command instead: +cd +mkdir build +cd build +cmake .. +cmake --build . --config Release + # obtain the original LLaMA model weights and place them in ./models ls ./models 65B 30B 13B 7B tokenizer_checklist.chk tokenizer.model From 0c44427df10ee024b4e7ef7bfec56e993daff1db Mon Sep 17 00:00:00 2001 From: Ivan Stepanov Date: Wed, 5 Apr 2023 17:38:37 +0300 Subject: [PATCH 07/53] make : missing host optimizations in CXXFLAGS (#763) --- Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/Makefile b/Makefile index 2f828bf10..cb14ffdbc 100644 --- a/Makefile +++ b/Makefile @@ -72,6 +72,7 @@ endif ifeq ($(UNAME_M),$(filter $(UNAME_M),x86_64 i686)) # Use all CPU extensions that are available: CFLAGS += -march=native -mtune=native + CXXFLAGS += -march=native -mtune=native endif ifneq ($(filter ppc64%,$(UNAME_M)),) POWER9_M := $(shell grep "POWER9" /proc/cpuinfo) From ed1c214e667d58ac442b3c6664831fe0eed2941d Mon Sep 17 00:00:00 2001 From: iacore <74560659+iacore@users.noreply.github.com> Date: Wed, 5 Apr 2023 15:06:02 +0000 Subject: [PATCH 08/53] zig : add build.zig (#773) Co-authored-by: Locria Cyber <74560659+locriacyber@users.noreply.github.com> --- .gitignore | 3 +++ build.zig | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+) create mode 100644 build.zig diff --git a/.gitignore b/.gitignore index 1c75d38d1..a0525430d 100644 --- a/.gitignore +++ b/.gitignore @@ -33,3 +33,6 @@ compile_commands.json .venv __pycache__ .swiftpm + +zig-out/ +zig-cache/ diff --git a/build.zig b/build.zig new file mode 100644 index 000000000..b73460880 --- /dev/null +++ b/build.zig @@ -0,0 +1,62 @@ +const std = @import("std"); + +pub fn build(b: *std.Build) void { + const target = b.standardTargetOptions(.{}); + const optimize = b.standardOptimizeOption(.{}); + + const lib = b.addStaticLibrary(.{ + .name = "llama", + .target = target, + .optimize = optimize, + }); + lib.linkLibCpp(); + lib.addIncludePath("."); + lib.addIncludePath("examples"); + lib.addCSourceFiles(&.{ + "ggml.c", + }, &.{"-std=c11"}); + lib.addCSourceFiles(&.{ + "llama.cpp", + "examples/common.cpp", + }, &.{"-std=c++11"}); + lib.install(); + + const build_args = .{ .b = b, .lib = lib, .target = target, .optimize = optimize }; + const exe = build_example("main", build_args); + _ = build_example("quantize", build_args); + _ = build_example("perplexity", build_args); + _ = build_example("embedding", build_args); + + // create "zig build run" command for ./main + + const run_cmd = exe.run(); + run_cmd.step.dependOn(b.getInstallStep()); + if (b.args) |args| { + run_cmd.addArgs(args); + } + + const run_step = b.step("run", "Run the app"); + run_step.dependOn(&run_cmd.step); +} + +fn build_example(comptime name: []const u8, args: anytype) *std.build.LibExeObjStep { + const b = args.b; + const lib = args.lib; + const target = args.target; + const optimize = args.optimize; + + const exe = b.addExecutable(.{ + .name = name, + .target = target, + .optimize = optimize, + }); + exe.addIncludePath("."); + exe.addIncludePath("examples"); + exe.addCSourceFiles(&.{ + std.fmt.comptimePrint("examples/{s}/{s}.cpp", .{name, name}), + }, &.{"-std=c++11"}); + exe.linkLibrary(lib); + exe.install(); + + return exe; +} From 8d10406d6ee230e6c1a96590cc8273f86ae606f8 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Wed, 5 Apr 2023 18:56:20 +0300 Subject: [PATCH 09/53] readme : change logo + add bindings + add uis + add wiki --- README.md | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 5183812e1..e1c405a64 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # llama.cpp -![llama](https://user-images.githubusercontent.com/1991296/227761327-6d83e30e-2200-41a6-bfbb-f575231c54f4.png) +![llama](https://user-images.githubusercontent.com/1991296/230134379-7181e485-c521-4d23-a0d6-f7b3b61ba524.png) [![Actions Status](https://github.com/ggerganov/llama.cpp/workflows/CI/badge.svg)](https://github.com/ggerganov/llama.cpp/actions) [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](https://opensource.org/licenses/MIT) @@ -10,7 +10,6 @@ Inference of [LLaMA](https://arxiv.org/abs/2302.13971) model in pure C/C++ **Hot topics:** - [Roadmap (short-term)](https://github.com/ggerganov/llama.cpp/discussions/457) -- Support for [GPT4All](https://github.com/ggerganov/llama.cpp#using-gpt4all) ## Description @@ -28,20 +27,31 @@ Please do not make conclusions about the models based on the results from this i For all I know, it can be completely wrong. This project is for educational purposes. New features will probably be added mostly through community contributions. -Supported platforms: +**Supported platforms:** - [X] Mac OS - [X] Linux - [X] Windows (via CMake) - [X] Docker -Supported models: +**Supported models:** - [X] LLaMA 🦙 - [X] [Alpaca](https://github.com/ggerganov/llama.cpp#instruction-mode-with-alpaca) - [X] [GPT4All](https://github.com/ggerganov/llama.cpp#using-gpt4all) - [X] [Chinese LLaMA / Alpaca](https://github.com/ymcui/Chinese-LLaMA-Alpaca) - [X] [Vigogne (French)](https://github.com/bofenghuang/vigogne) +- [X] [Vicuna](https://github.com/ggerganov/llama.cpp/discussions/643#discussioncomment-5533894) + +**Bindings:** + +- Python: [abetlen/llama-cpp-python](https://github.com/abetlen/llama-cpp-python) +- Go: [go-skynet/go-llama.cpp](https://github.com/go-skynet/go-llama.cpp) + +**UI:** + +- [nat/openplayground](https://github.com/nat/openplayground) +- [oobabooga/text-generation-webui](https://github.com/oobabooga/text-generation-webui) --- @@ -374,3 +384,6 @@ docker run -v /llama/models:/models ghcr.io/ggerganov/llama.cpp:light -m /models - Clean-up any trailing whitespaces, use 4 spaces indentation, brackets on same line, `void * ptr`, `int & a` - See [good first issues](https://github.com/ggerganov/llama.cpp/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) for tasks suitable for first contributions +### Docs + +- [GGML tips & tricks](https://github.com/ggerganov/llama.cpp/wiki/GGML-Tips-&-Tricks) From 62b3e81aaeafb282934de8b21de13b0104f12f8c Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Wed, 5 Apr 2023 18:58:06 +0300 Subject: [PATCH 10/53] media : add logos and banners --- media/llama-leader.jpeg | Bin 0 -> 199945 bytes media/llama0-banner.png | Bin 0 -> 144615 bytes media/llama0-logo.png | Bin 0 -> 179940 bytes media/llama1-banner.png | Bin 0 -> 33331 bytes media/llama1-logo.png | Bin 0 -> 32494 bytes 5 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 media/llama-leader.jpeg create mode 100644 media/llama0-banner.png create mode 100644 media/llama0-logo.png create mode 100644 media/llama1-banner.png create mode 100644 media/llama1-logo.png diff --git a/media/llama-leader.jpeg b/media/llama-leader.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..0b4e6e1cfbd442f1d945f90d5d668e19252ccffd GIT binary patch literal 199945 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

?L-r+VkI>A@D#HJgbfZS0+Mq17BE1 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 literal 0 HcmV?d00001 diff --git a/media/llama0-logo.png b/media/llama0-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..e55b38bd9c0bda89a503bd13361e032db27a0c5d GIT binary patch literal 179940 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%0Djas}3&I@aELUI`5uH5!1_pY`uCS{T2 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

#S&+gd zefgMiAKX{yxbSP#>B^(=&Ti)Ax5Cz;*IXNmuOfyk6q1Gq72Q3jp z;Lcl7^Pn*>QnwpyK z2Rx~?XqOabEuGyKarnu&v(zn|+F4-y)FGG;5qj<&BqY3Z+?67CYEpEZ=pCYiA@*&p z=Mom}a~;i9wFEnCp*GL4A+JO9C&3h z9d_)_SQx@mK(3%--o!e&&QkQM8DC$ZS>@=2l9sEz`1(d&6?lpg!%&rO--kPzQbh-g zk^6fWG(qvX7hkX?GrvPCTRjvGNY^KSU3zV{T9hBz?r9#& z=_^;qAQd0mqi;rn?8aL^vVK=_se~w4zJy=K+rcUM`H`E!BAtqG<6EtMzyV_E_y1n1 zE%w*peM#2rU#6mdF}%j^ZoN=2o*R^eZSf-qQ3{efw$Qf3dyn~nL8{n$Y-7T@@RpSL ze;z?3SV;~b0*`83G6OBY$&HZHrNYE`kDn=Ope-M38`ziSkqvvyZr*RZc4}B9YeExCO`3&N4x#fZ~vAR5S@ZR?2wyPu`` zv*D=9+a1~QC+GBn4VJ1`%QfS6>z*Q=&ld_`DPDHPwT*Qo%Z&Y0*{z5hTrXPe6IN0< z;WHT=gSl_HsdnwlfV)4jyZE!i1Y*tPqL&W~`XGTR*6@-AtLfHig)Ivdi@rr$u}5Js zJOJryKI47|yeWA%)1O6^?4#dubQt`&O&-3pRZuy<%45FxiN(clCt8L{N-1puPbPsz zW&$@!t|I)8`zj8!B- z5L|VSkDI1VuRimqn=lCT{zZE}yXJ5+o9rp-H|}7CWgLAS8yKmr1)mCFaz=8#&*dob zBUH6Bj||H9P(<7U z*F`sk@#LXaUDKQM~ECa_z%b1(bWh(xZ5(Bxui3Xi%tkp(|~U2^+OJqox52TV=!xMcjYYf z&R$fJgtibrGBU|vgo5y@^P&fOD?P`f15;h1TK?cHGU1x#AdmZQbnNOoO)A?1HZHdC z_W`(TgU*+>Dbx+t1#)QtM2B3IePIT=CR(^-5aI7mneiIXO<&k$n=<+aaFPXnmwxdQ z9t>c+b2yRXVA=afNX{-`h`f-Vn_$x~jMjXq=tQ(Rsd^Nk*o_k89-va$&;hOeU<29i)7B$tj=0Ccd{ z)gU>lD|cWwr%?F(M1>CXiJGE>ZlDLju5mX<<8iwnm|l`eDs_3 zyK?F3(*8iDnLF*VjM17BV_HO|mm8hSj9jPmsOLTgMWcH#;IX2b(Ds-pOqr%-k zNN1s%3(We6t=?)adx=y1uci_a=b=MJxuPjkWcFIbz@*|Ji<2Nz&;(hMWy%>$^=JO& zg+{|~mHBq4aCJMzEaZH(9;6ZGQX)q*9KY1ys9X2*?9TVz@3J222$VhD{soss>TREU zPxV47wr_W1S~4Ru)f!>mY(n}x}8NFc}fL=54LcG3ik5P|OI<_IoOu&@ijq{#IsWk%(6H@oX{;6bfMzaJwO` zJ#c6o{Sf_ZzMc>Kjq`)*+nRjpB6Qm->nW|4+=F3UhIX8U(Rnn`rQ=iHLFm$;Hg;j zF)=&yoi(|^V=Xx0@DC!MwwYsJ)TUE%V~0jH4}W~@%UC;A{8&Mgr}*QlPa%!IiAsGz zLK}dGv{RKFNUvSce1-)AEmdhJyDVuym~(tYr-~lD#e?9Xz-n5ai5GfNi4KzaF8AzZUqD-T73mnPWcL-gremp3np~xiF$;{RJ z$V>Cl{|ntBVMTAZ3+uOU0Vdg26}ytZm)5-b$t8)^_ZfeK{r4i>> z-UP>UAS?hsH+k+LW%~j{kEYLNG2?!Z+L5!S%iGG#HI;>0s$JLhr00=7o<6P8{`7=y zvNXr!%$&~K9*h_`jkn?(+08(}^qCo>RI`18(5@AeA1xOG9h@6iVy^@`daF@7UP^l_ z5Phw~6-F@J3ANhTr*c5k`3LWr4}H(i#ln8D+*t7}CBi1FGx@O`>j3Ju#H0Hr9wJ2u zYyV|NBmgtkWOp{KIWp3TT4n#;wf`>QEb*!^C?y+hb!Q1(}y`0La53&T03rg;s=eTk#$>PjR zto-3NFC9d9?cvoX<&q8VLVN8byyiV56FQ8VXj6eLP3=JG4*u8$VG8fYEZ{Jt6)1`+X0?otHsXh-gClY?HoxAJMTs<_^@q(rYu6FrpkZ<8}mCXqT--sPhdnBUiG zUT}-AqDNL3=&5`UOF?`|D@fcm%j^U0JUFXJoUv$P3-sw%iD?48NxdC0 zu*Q;KBhQ$p_r2JBz+P*6t)G(d-o$9JHQBNSUu{DvQKN ztbL*tw&Ba(#hC{;c#8?P=b!Fk>d@aG#ho>4lJw^o4tX%7|Ac~(cqXR)?NV)b+Gi=- z2i1?BdHp%;$(XyVU(-Quu`*YWKb3B=-^5SrCsZ*thu#i zi&l=_W!*TnIyaae45SL)%l;z_MwWTQ+RMz*H=$8c?GJg8mz1h5OaRqA!LhUSD?JXV z3-D)%u|8kn7B}+C0`#@bbG)7TF7X{(pt5oy(4f${Ccogh!CkHSW-p(n_IEE)Orkcb zbL-d2z$wh|@3Ws=0C+OT+Z!!^4)`{mBOqf+4ShK10#h8cWw9W(1Ywap-SfLy?ga%N zv1Wz}tsh9xfyjvIEs7*<1eZ%7P}G|Gr$BRGbBOE{mhiW>M`3f&EAl-fn+ao)9IYn} z`NRG^^Ith&L{NhlVs2HYt7k)y01NXFZzkrxSfiQj4Lh;4n?Js~p+q-(QYucWgROK- zE-9x}H*YqM@wqE9N%cap^6=$ib&k0YKmBhwOCQejg)kF;Qss9h31Qx()LqJ)AvNzG<@z$!=+u zI?N7OlDwy@Fis(pUocxZ>*D()q0JDF0mG8_hGhzwn&@Bxdt*hZMq<~Jo4(_pU^T!X zbS*vkh!}4LY2JLa<8SH0bAMrk1A$`btGfh}4In{IHz>C68Y3W4N2*5c+@2pEjpN9L ztGgquNrQKke8&D6uUjNs692M?z1=LBF#mZZZ6iv@f@hrfR#uW8lf`%wla8#yFX_5q z_Or|-j2W&*!maC6>oyYY2i2y!aFq7E`c`~79VV!sc?!Or-&?EC-yP)k!Pyb*BpCKx zM}*#5PqRvI{6(Pn8CoA3&SCGzzP!r^vkGK8O?a>OoMyKIXi)%&Kt5>{1*F<>B2ZsR zpoVZ`>wn0@3wc9rc&2f^^LBJnhn6OM@GIw&%jqd=_A!IvHe#%`N=!`XPyPhU&P!P6 z6JhRx@Y5Y)#q>$Qa1oUNOpKqI{~^=g9DUaioqpNCGXY`v?1`|7i}0HnVP-oxM|J@ zzvC$j_Tp`GFYYKD_k2ZNfykACP=;Dns$q|oq6UkBULCK17B#Z5He<2GQc^m8q)x^shDFDpF|*O6*_(f_Ka#j=p$^q?cvTKQ%>!KIcQo zbtS$Ri@|$@1d?wB5GZdT1;5%?m=;s7@dn8BJDn!`c<&{wy|*e-^ggox4Mb{~er{0v z?a8paNcSZx8T;4heKdAItc~EnGxY6-l>D10`-OO$cVtk~u|?qC74?yJu6qf`RuSI* zgBHVPS-2p(%W*d29y!NL>~DmLvLt`y5hD}*V2h1>E@uEg9FYnC#aeeo067rGU zyWxffx`4p!5kP*iNd};MT5X+=b=)@a+_uSg?l)t5{66^;1?4ON(Gi2xBX!wpCLhn~ zxkIMF^f9szi}~6$R4z$-cl?vfK<{kcr6*Y<(r z2vh|THme9?EQb6_&cYEmHa4EpnbO><3=1a9MB`89H@9v+cAcWHY`Ky(7X<>ta$m?t z6Jz1;0p9i>7uxP5%7F21WYG!oY-VQw29QDErSvvqPV8n=>g)wv&@InwMA6kB=TuA1I@MGb72)o{ANH_mOLP_9v1qdx+_J0TsFd_jMla{8r z@(bX8X$RY0iWV=HA;uCUeSVEBAoKU(;o%V7Sqb9k3FDx_oI6zAT(BJPDS)W2mn4w3 z-W))Dj8DveHzI%{TVTVNamX)#?CAkF0SY20Rr53QyicqX`*%{$HlH)9$tBVgzZK#| z+Q-)4)r?e~tKQQx$KQUGZ`Iu_ZrMg=z$is8Ih@;D-ne0`w zNAJ#j17ui8%JyvEI!n@>-{`A(+-)-3*Lqy}qjk0K7tONX%2Ag&R;JlEXFIJr0nTQ@ ze?2gyZkyz8TROv-@4q2jlPs^S`9YW&5Zc2K)^4}DYS-4zDjnuW!ZX)jQ{+{T`^=}9FuTo z@)U8a5}w2ypx0j+6sS}4`b%N=MVtxv!hJT0znn62B~-5ImWpSPQfS|yE1r~xIjnuE zp?8AVp%U8ye_#pKF>p2Z-ou$o-$jqI0a*bK8g`o0-A1-A9g?me`OBIkzein)5IvQ% z@WHi<=L4hcXI6SjB%Nsb0D%f4?31@lAIX})!a~i3@4lE?hzYIU zW0I5ES%DM-88bfWROqgD??F?b3;pNPSB&WF=O|jmfe~T(9@1g@UEu)DU-A(mY}lOn z5QRrQV$%!(9QKnv?=m6=ZgGhVLrF{LpT(L>CK!?al+36b6`M^;Rb?GShzM*uC{Z?O zP)^vr;mxw5$1jU+>+xnLnXHY!gXfK91&hI*JZo*xEI{CuI@PJ?z&5e!3ASYilRp*j`p?7sF1Is-T zc-EQQ4~F{U^2azY+u5QJq1vg7-(M{dKJ3~~x=Ol^(5@->n6UG?_}n)6i>W( z0n|rS`#eb@x2;bmca;YVVN1_|pvm)c+Icow48_b{!*@F*@^eot7w@J&Vr}A?BFp!o&4;puu?wog0)5MUCDS|o()rE+q~-l zft7cG{p{4uTBBs`RS@mFNYALs3fHG1lO}ObrYuNoz|XB&{mTwMoxjX2uXjxpA+^z; z2dDEOb%7L{7iLq_=}UP9kTE_B_-kG!%<3-=d4qq%=)XCdj9Jp-E!f!at4I}h5A1*v z5>3WtR@>?BVm7Cs>HN|dh%tI=I-dbadF>q19H8-kEASfng*?9Ny;rg<}?ZT9^s{!pa=Xb+clY_;7kn)}srBIq7e z);j+utew>(jfa7#|9&#xla38q>0LTLm zsW1=uxseH(@w~6$uGX6E)FU?|>QlRyRKa_l`-`Hui&RjA)E3x=c2MCEe75)TMArE- zA384I(i=L+x{vgieIm7li>o& ze)>?Anu@hrRn>)n^S9rdYI}Z(KFre*(;6j}TW5&}QZSCkQP19r^5I0Qa&oX;%t>?7 zM{hW(`tQccV4sjg{PK_@1Y)$~eJN)=9X00>n!6jD;%6n-S<(keS7$2){M>U#@%m@x z9vEV~uWThm*rs@h@yFmj>c0(bm_|xT>Q}+Gy+0*IoQ_4dwA5hj+Vzw5dhmwwPsxf; z+j$A>E{9;UeVb2THb}<0EHdZtd@XWD;^q*H6lpsXgnHXD=0X)m9v7Bcrr?Z2Hxet8 zEkJ5M)kAP<{axqLxQkD$pm`p0{jUbrJ0Wt^Qah2?O=_tZ6mLH*ffxx;WPRfc){J3< z$9?LGQoeT^Rh}v;oEb5yFQ$Bd)UJ2Ay$jl7A-v8y7+<=)bBxt~gDyA_LCR4?%kD*P z&P;qmrFyVMWR5_ z`aYRMwr8c7h!e~u8t!=S-myH{Lv$Nd8Ak`9w6_Nj$KA1Ihb7h4-w>}nR0^{a6Qto$ z$&to)7~r-!r2Us&o+D3wn8;K+l1ChPD#%#VMNl$vS3@FGkkz(1&%8M^9nHoRHJ$!C zlNNK_>5qy7t|0Q)v}m2n#(#9imk0LzgaCb^+Yh@;Ntc%bDpnTekdygfw8b51ZX-W> zTBAKm>pwase?kTbaT#Z~1d;P6!#{wKGRa7j9g2`^!(Yw=0iRzopl_CetohKYQF`4c z7XfpF*bv8!RBP+prLfS;nCqi2yp@P+WbuDPa}Q}SNje(v^+NCHVCSanVQLJ068+3{ zveN;S!t6RdibsK6t<-|>oz}No2+@RW9BT}yeOF|;dEEPm;~VH^gz%3gRyNNy?j*dY zZqrk`nH2^dwC3KChkf*Gw{k`S^^%)T280_3UM=mw9QVAkq*!5Iecj`3Hw-5&Y>J(` zG5Rr!6{F=Uu_nQH+6*tLS}q<+ATLNuUqhETd;TdII@0r5 zc8$#uBW&6Wzgxl^1l?i+LY>0qKPvkFUDr2ZI8HbMCDebm<{ zeHKIB6}Kii?y1s7We)9?)1Ja_)&OZ~rj=XZ190I92{ALta z+!t}Hw-VlX^Yc~Z!8ESbQFV zge@GSjHb_R@La;`$Qi<$XdY$kDJP}3dkuY-g9n_mnIHChn0NUSa%Or&JFiGi|GuFC zFCB}6=dT#RdECm^En8&1=PJg*O>pl!-9K ztXq8U-wr(A?kJ~*r-y10I)`7diGtet-b8mXaK>GzAL?f+Eiq9&+&Eu(la{gO++Zb1 zk~;Uu((LOg2@!Ug2?N+pjPJrOdqY0n7{mixuTF-}#ko2bq(lnnV|DlQ<&K~f= zEw?(?ZT~q7Ol`{1IoYM3zVuo~dM^pq(U?z_4zo@HT;w!18 znF?0~h&jIT@|GBmCOqFyyT#hWZ<<3LHzwN^3m3DSp|B=*=8jVKH+$Fi<4u@1u>)U= zT_>q821erO$E92dRG!-s#gX5Cz}-ttL#Q�@xBv7?-Jwl5}AO<2>9dX{os602Qwr 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νPX$ecUv_p*U^?mJ3Vxs=DKVz$n|Nc>-r612`1m`Z#K}{o~|}V zu5_L#xjr1^eKq&E%TYU?N?IRq-{|~<**MK|XxfljBVAKVj@_WLJ(&GXWAv*qGwbl= z_q2#iuF`LhqHKE`9E}^gV<{;DYYuA#$n`)%S&!8(GZJotp+|nnzJL+UL-RY~tH}^t z5OvVtZx!Xc?1BU<6nyGpV&!4qIT>+`o!qj0jU|;I&K~1z5LjrtM7#TQU%OfK*Z(G? zFu)_yThOoF5}QuTjrhmt!@1Cv%d6 zLy`8P0VgzeV1?R38J5U8OTy>iCh`K?6Q$!oCK|-R3QY`kwQTa|XIcMuL!)SA=I@5 zzipa(IB!`W(&+p=b&=ks=H^K6?WzDia6+o_Axh=tM=@eaHSX6v4?I>AM8@Kpmpm{i zW?af?-R7F&lXOJR3(s2g9W*Gl9a|__IdX*<1@>DJJ0r6Lp9?Ap5}B>Mp~J_J%zw}S zL5c*jwxAjhS0Fa*`{#TP z%R&$Qogo`_wn%lD*+eLbqhPjSXIXG%9L*z&IS#~$S_V^tdiV;$cCQZ{sv)kix4{nJMI_KhJ6 zO1;DXeu(hVC5M$6%o!V>=<$u-=+ynRKyv)v7sP!|?b2|5NsX~y&`&w|AJx{kWjL)w z^3Y)VoAy1r{cr~9W)&y_O zB^gYP(dR;8RlL}qlta9L8~ZS^GbNiVM% z+z%svv$zD`kD#;?FvX|YkS6C)`bbc;0k}2qY20tg&r7a#3KIJ_ONi^&ERV0yK|+i$IQb|T57~JR zBLp_F!6GAkXbL_PD|$th#C#WcsDDsL5$>xCOJV-16Ab&8U_eU5!7;Tz#L()Vh6Qa+ zzCR25`?I=tUw)e(8AEj%xH`nRE4xqCgbTZLIrV75d^+k^2QlX+KsKSd;6WWQX9op> z*bgqNO^&cfkJLjvwHP-db9#*A(&u_QJp0ZnEN)G5SO=Ki9;66FqO%7j0`Yq+vJ)7F zW`$Rh%)qz>oxvz+SJZAng9Ae7XRiKW>A&Kq$;M*Zq009ICU*o0wkBe#{l;(f`+5mp z@qOIsPn+=c7^edBwlfB2yc}jR;$W-Lp{r9e$z@2#;#t;U$d{gl*=db5alXY4((v4F zlBw}2uX|)nt**bi#YeXzv!65tBUkCKaLU_u8Wspy#o~5@xKpA9Hq@yF)3n!V3kT<| zV-GWM55XjcMLX*U4d*+K0IP}bUyzPM*uqrq&F^Jqw=`B8oa5D(d@BC`8vy(vD02}V zefRKT?`+~dWADS+l?8=svW&|WOtU+99M_{4>UPxZwVVe8`F9vJ-lvrjZ0Xl zNk@3i3A{@~;JhU)W$bQxsZ&=MC7%y;$3i48@aT+V{=R>!9ij%#kwO1Ih-Bt9r%n0*jF2EFUdi%2Z%V{K7JzYSYxm!} zs$~^`q&ZK&HTqUE&~x6gQ(|>I zg3v>oj_8FVWW}GjbL9juu662uYo9rD_BUk3HZ0Ep8Y1s+bnDySJ3sj0mb3IO;PN-(SFnHz7i8`AU%dw zlq{=8ehHVb$oo0sLo=$vrVam!%g8kyVUyk|Ai(fD3?p+v_bsg^c3_(EntKMK7+gA2 z$;%g^t%tAlIoEhi)58&B9%j%UKPQ5*n(sF&PlH2jwK!Ppnt>0@DW&8MaU)|=c_GNU zV&6IEG~r>C8g%jNn}V^Sc_?-Y!168cn#*{yM(b|whUV5ApKW0>IKkb+_oBX9+P?3B z-#0WPJH2zia>3|awPQ7H4Y_RiK7>3AVIlou;ZzTGcMSat}-k!~t zv84pZaMKX}scK?e+145Ab8=6|Kr9d;KjRqDGC{iPMKDv7ACPDIyz@1y2d@yHw z&~m{5Xh$Q75Gm_*_&;27xZg0u3tL;DfOK;XKdB)lz6g*pe?olaQb0(SD&(c{tQX7e{j%cgt<F~PW1c#^ zukenkWBC~uF{QJgnC5=%{C9=(4&I~50b5pw1X0|8&V42sB%WxkOTPb_TC|xxJog$O z*wA7AHTC9GzZhGJ;M0xTJY3hZo1=xyi)U`Zoz$m27923=mzv%s*Bx0t862^0S>q9? zu#hDMs@gCM{%dB~6dG)O{zOiJKhauAW46E}uu>!Uez-h-j$xCo05ts~x%&Whv?M&{f(7%AdRcAIXT?T=_=^?;~KH8+sEIF{@3}P_Yd}=a(s7A!P+yNMWllg>i|7@sH;=vKku9?zgudpxtvH;Mt5Oe z+Ho=9cx)HXVCR}}M&=lKb>+Sh>w1N0@FId3-nP%hu1i5+Ojn&rK4#+s~k>Cep!{2&U7e-2GCY8(Q}aDn&05|g;^$+mfa=DFNV z#ktE&$G8hV&zpcJHtohKQtPW)$SYT6EJ%3tApqx;u^ZT89qYhFw>+e>NO+8#I!oL}9Q;(nBFQ76THNyTqJ!o~M z_z^hjNfHO(++{}-=&2DPU0NzcmLEJ{D-!f09Ka|aDJ|JcyaQR|&ASm%sGjOz1$}d1 z8Gl6g%;x!-ja{DVia`yDwU;N}|M3#t%3$1i&W`vVE|}$K1a@z$`p5}P^894mRtt;& zyi*!UTL)-Unn}KRjdT0CC%;W}Bt@ z=if;HOEiw`eNCJ5a6#7$JNI_I8{l`?b9$DVJvsljCCAYL?rG%`# zq}v_wQ}#sgyGZ>yBEk+T``@V|+0IB}eV2gvB{{Qjr6@^T*^B1f0!GYb+o%uyhB?cH z<~Fjt^?=@h8An+`RsVnS!1dsF@>mC5GyA6hlOvEKM)+vFN|iWZ$G*HUib{aoz5=-5 zHF2JyBQ+wbmJsRG{gk8ZMFZ6$%`XDVpBn_-h0!WC*7N3d7yeY zGS+H`3PW&KDTC+A^ItocFf4J-=qifIVZ&(0g(3Ko(yrZ2@&IfF?QAB zjpLysulgDn?vv8UL}8rus##?IOmfgpK-;*FTIm8I*IDq<@8vvH{dB|Q?{BvyN2gLz zO#H-4BklX;`2a*OkrY`qrW8)z_M%P~iW#~_fOHasbW@c@Lv>W9U3{A%-9J~5k z_(+a40Gxp|Z)~${mZ#(P7AJ$`tLrAy8T%0ZG^03U;7OAI!J>pKn8NGK4frGPjHKnF zi;->?E2#W4d^ugoyne0H3JJZjY(;D>*zilHx zKJl_fg#pTU-ERVxsY5Ne@O>Wjk~gxB+@P~z8=5a7JJoeh>%JCj=3Pt}KMz!W3;K&R zp`3&i2OEE+N=Q<%tABGzm&#(y@!9%k@=#A{S^3rcTCUXfCjxVkih2 z&x!hoG~1a=2S!cvOL>m9@(yslE^OL_2S@!9i27h7f?t_B`-v9kTeji_L8|7=8PwUn>&<_;3W~HvgJF*!p7?3viqBP~jk#At zp}BUQ)c_B>IiVFXVh=f4G9wKJf{EeP?W;-wNVig)UBmF$OUu=WuMz%-xpIUnD(BF0 zU%lW?PBZuODX_%n~w=Fux?3F_~U>h1>4jRkfR%YZb) z4ZagjpP7X18?o94VpwMN2Ya~8SQrZT9JRk|xEfY7Hv4Hm$KU_`fRIpNii&qKfCT0EmD7imh{dm z0k;hQqe}n5@Q@V606{R)f(=B9pfZF9|55`p%HZ?Yyg7~lBwanpd%gI!m5M&+%R{wM zNks`}`*yhZUkLkXAkucb2Z?_sXZ+xgDKkp`J@9~u*AS4+jf5Ppz+wqPC zSwrF(bT=4!SH8uLvps zbkA^Xt8+Wyhb==RK_kQa*O!yJU3VwO#vgy6Hz9|fBC7(`?r2Op^_UY;N+T+Db@y^b zO7A)6!k$h?v|%f>tWyIlZP30zh%e^S<2J%a#7Itv4&hO70gxi*M9`mi;D9QlWmOc2 zX2^X~us(R??Fj49cMw^~;|3`*nv)DU!b$cxOQGt2&CT|(!>D=(l}o-}@m38!Q!c%` zXD@v?urHN)l+t~?e?G4&r(Skb<}_c=AI^8*V+k!{lQ%iG2eX7UJ2 zFh-@i5$n;y^GwI-&}0=A6G1#|b+8~+B#2v5P!bO*S`5(IgvdC}jvWTx62{3{nqedW z_nv_P$Rurir1n*;x*8a%qP7B!?36~U7nABN)2^EehOdYmR`&=SLr7ux z8lr->sadu81_^F6Z^GyW9|=)8azml~rpAjMUHt1d-2dll;H{sXaBmnSuNnQO)wN3p z2kC(I0z3E-Cq9RQXbBYHO?s=&w zz^wJGT`=R@Ilsv+T_b||EVB;ZlB}nm>72=VBGj++$U|wo$B-@9kIWM^!|H%U%i;2( ztVh)Fpqlb+mo#EINs8V3LTUUPOg00|7p5V28Fi=^a_$cVavxFH!Pol=cUDuo*Zu$Q zuluWluHjYp*S+Z|(pFdM59bo{F^P^;|2}{Zh-aNHXbQe38oWw3HdEWO8*iwn!kBR3 z6_ysI|5!7fzu``~Wq0xMX`Cw64~s0~34}@CQf2+m5*-nAZT!OnTMj@YK-b*J*jE9s zUx$$M(Y-)R649mqIWKfIqC^Zc2-A8&|L*AO#bmA!>5AGp)UmKcxk>=2z%igC0JC=k zaKgqqR%9u5+olz*<6htVRNzD-49?YQwBlfjbks99?R%IgG3zPm)b9*JU}`l$g3XTU z>fTrA6=S&jnx~U^?iarWwY|3dsQP=NeaBs^-vRj-?SwJEy~%VyrerO3#5yP_nQtNH zoaIMS<(oK+w-h!#-Zt0RMJd`J~So@inzo9PdWMoV%kuBIC@e_zHnaLI;Q%dLh)g^oQd7hOF%x+AztbOBVzvoclT&1e$sl&0*vN+keZVM_z(cNc;kN^h z6(5fY6lkQqJ{xH3Ra{(NT+e*xAH0SBwYkaUGxU8>GX(Jbrry5CQg@*^*qXFc#4e6G6 zZsRX?l~D```O~w3+r@u-BPh-+>{RD?U-jx~8=O(=4b?0f`A?rx|EHXy^({d!&M=4G z{YG;~hLi{~T@F@3BXUF}dZyM>bN=a=QNz`4c;vS@;|8TNa^ZewW=@<_Q4V(>Dn>M-KTV2psk~yc8MKR7 z){r-zqPeJk5gAN1KxQaTWL>t1Cs_OTy09pQMmsE~m^p@x>y}zcM~vn->~khITE2=F zfpDTX(V#KUqMIYa>hV)GWy$aQMt@5Fi4eucavbbsa~SB`2_-@j+pQ5V07hQ1A2t}SBA%&c9nna2i0ov&Qq3Am0X(Ks!`&MRfc;oO4g$Y! z!pT+(E|L^>Vz_D*uV+6-7=4vDzI2Kpp^H9&Q;eC66w*nMyK=Iw_3 zsrT8+K`{QMuY@9S>QZPXJ9_2UhquWM^!5iO^O?t=qR>P(V|oOtt%i$pw*_9F7YQPp zKO;>3mLBQj2oHYG0XsmKf2?%e?pKB?>(kQ?_fZit>vBTg|1WeJEMtQ?54k5LRX(|r zqeid<7dVFT&D}>nctHw2cmamFEn&Lkem{2FL#ZQSxKNw7({^7Yk3r?6$S*Th~ zXjW0ANr`R13Wq|jSh`_N)16=5Q$iQshMyhe1^VA@pISR>VCM@k;3}hG*9~cXC-ho76FGn3{L@ zDb%46Uq7!JDs4CMXZ%XV$S$?4RazB@lC`QUvgcX#5cRZjW-Y!9bTW|gV^%ucU4M%P z`2{KYaSP}Iy&Gn>*L;ydh(Oov`62R;#O}ZTS+m`TD%?gXC~E77&FZDSSnBmLR1Imm zQc57S39-LluH2XyiCMzW!z4(?lMdvJh*6~(omX8FP1zNx)Zdg0yHLC3eU1x9sCR(K z5g*mSf+lbkuqhkd;{CLXiR#RZl1g$2L?((5Sa&h}&l6~A7HIm4f*SEa#sg;ZfrR4@fYfKy9wJw=2kK>%msZQ0$zqV#( zb{BLdb;rvMKm2`l7$9|?eU}Aj@7&P3uOadqE4FrkRjXfWY52I+I|Knj(wgqJb?w z6@qF9t%)8UgXQM1508Bdvj1+!Vg7N;?qAf8zD7s!36Hj)ZU5(xu)yf+$1YXyjU=_I zq3F|Lnv|fj^T(&zy*F-Xtp3iAb9J3LoorRlb!3;D!9z{eU_JQtT*A*J7j%LJ2A9v_VW-8iGQ35Sq-a1&sLIufM7Oy1OZ zlq}+iZkt5ip1Qib;<}*}CjO>-itfb>Y1{!Xx%fy_*-8A9u5@lhvvF0y?FY^drtIACUMz~`a})z@5N>1 zEgQu}pkf@|*sh1=ku(dc^M49u0^oZt+uS|JczHn;5W1s&j6|K!yrDbs6R$I6Oj&OB z5B{^^u?{+L>uozeu{iYV@eT3JAVjKD{MT2-;hNYBbAFVJ?gO)1&vn2Xz8Q4z{4Eu* zWiuhNE=jS36s^x=gu7qx!RX66n?AP@`Zp1WQ>Z}ax4-mXwawA0Id#GWdT0E4`|-8f zK*mYq3!3tb<;!%1h6h5@yo9`;cum};YXFWnM*}=Ue9TX!cuw7Jj+S22(z8G){r?y# zJ>`M5eMsN5`%xdOA!FDEGz8bV_#_lKGfzw{0H7^Oo)c#CiS*u~QySv?^ipsHrU#me zG6yfjW3RlTP=Aym&sKePQCg6*gQl_D5!|}NOq$uhzrnd+#5kUc2GsEBQuN`C&wP0@ z=V5l+?A_}NETB(i1ScwB(w2}1a_$X@;;u5p_>jnhLzJequsC2^0n~`0nm+k(tL@a_6=ACDeni7=Aq2g2AUj$4 zZ#kwHi=B=Z0DbVqws;|h6&n_6-z7aV#zpmsruoIsz#x%&Z=Cw%@l)=nLu39_2*drJ z+BtkRLk}lAPmvKrO=acB4?nLr^sNr~3|}Dx(E4uLw#Kgb;Vl1Z-vu?xeeCe5 zg)in!C%2Z>g#(_JfVH zV1!pESSI5iXw}$T;u+>Zh7a&LLiaMn&CzVWW?M3J3-w4Jy(g z2uO!?Hv`h$-NHB^Qc6oocXtgv;2&@O_r+1GJ5J5*F;@4zPjR`4x?wbx zoAt%G+k|?>uT;JMe1PXxdpNWC8=%_IBAY}@YofAswpxoCY6hMrPZ8(VFvYV&2K_+R zxMW{n3J5^-*!`f`e@{GhprGI;r0WkbDKaewu967)I9{iwBuA{hv9VtNWzJ&x1KYl7 z+65g86YV!^ao;bnj-_=X!^*@q7MvPswajJb0Sv>JHs`=jRkww~Md4W3{4^CC)^7B5 zLk5axLPLJ~G9xd^6QuehGW{N%>%DgDy-^q_h&OR%yzP*hO}+0`$1Mshwh;U=A5}EiDfI-)yS+4FtZ|}$%fXGT7A%l`ih9VZ zBuU}@DM<>O2S*h#Aj0tcyfC1PQL&&Gw!P!&+-tROxZv7lKJCAaHO;&mS+nUKBvnZ~ z*+~rVT>Grr!q8xTszj_k7!e5<=VqV^!-j!_SeEGleaPGK2cPmvDLrxP;emgeq$L{- z{~TK+1wP+VrE!>fP9Bt9&U33wc?}qc+GJY%iZpH?e)G1iBv^!MHkUQvzsA}Hd>>8B zy}#B3P$4t2A7T%@1R#L{m7+!ySXJ9-!hO5bpUx#SdvX@<#0zeUnt^ZR)R;wtwBv4H z`b-kb>#E;fZJPKa+Y8pPQJb1u!HAF1{D%uHn0%lJ6%B(4dNYrHfw}p&QOfnl3|Vzp z*MS`oekv_N8%j7NNqL-70;v2k)-|Wy)-gi`V~|iv*Sf;h&x>ENWi3 za12($FHc0jxoZGavtr|x9M8wte%WP-m8c#~h4T5r$nQ_Fz7|y9T8IOR+&_DKt*j@q zWJfv#w#ygv|2XoltgPs>bbwFG&5*w{)en2Eq%=Np;kzkB6+^mgL4>?Iv@{>}`XaSYo{Xp{$U3Q7K&@1wmyV%)P|zl}+Jx3Qea zW;GVP8>#EH!HpzuOVh0P7CoG)SW~>)6V*F>M=de=CCa@GP$Rm_-hNIx2U^WV@Nq8V@q1o*A zU1fHXwNFT*WG_zxEa&L@?RLn~(8FYjqgH#-HB7!){ssAI=054t`E5)O?A)RDwxwA= zA}}cq%+B6sh#FpA>!<#cN3nb*wY2`;Lsr7H71#V8FL~{OH=U+h+YHr=3t~rCSq)CL z><}H`ECXMy8kdiI$fHxYgmQCkp<*7Lx2ANtc?e}=}k%UA}1gS-#mzi2zsHp=bTY z@--g3SNCwf&2UuKXSatoZ>p@({A7Y-w2@tCKB9T)RqJ9Uczg3b+?{86*7lDN$n32}N)7)0VG zWhk8C;;qs0gVrkW&aNnThF>p{P5{f#U5J*nL_d+O9NfFwPUO_2MpFP>*&xVJ&rtH(pa*$y~ZmEheUKt5L8FH-n z4J-Lvrb_@EThPkL44hX?|v%;+zdHP8BA3UU#dRcGJX`}V4DfM*#iq26bk z;mzNu*ekebXgr|)q{Xr9@TIe<-kpExO5saPNRt;fvoj4)%l`Y!$RXlrO*Y+e2XE(k z_4IYuaT+S-VD+6{;im(vgt&zTDj|^M&7j>Jjo6HbV#}}M4C^LM>O0#*+Xu4T=cMWA zzZ@iw07_1WFG5P?G|Lj-i2OWFcQr;MLey^-Q2=n@Un4drJ|qhRj0eBn4r=Vm3Z%lS zwceDgTk|sDwrBinMOt;cUjTzY0kSTun^T{=))J=n&G0~tgG{GK{T4yjRTI$EMg916 zqg2cv*p96fU=rK`h781eJha_!fIj{`?im4U$k%RpX(S&N;VpQNIR$N+ob*Yqr=qS< z{t1@22oM8PIgD%G;2d%TCObzic+ZPJLpdb3Peuu#${xHjGmB2P&jg-u7dE8e49DWi8ZhMJL{N|p6eTn2UZt(&F zGh#}i^vm4xewk$7zZ`bSqKhYtD@`5cS^vf)t$I$xzu9{-uLMxd;-_+9CiTq6dfup7!CV)o~ocQV0 zO)UW_HivdvtAB(fXMga*1}5!~RIJ+)Q=GLGJ0CeV(a(Lgs_&?#CU#;^b2rm98CbEt zlgRy4q{?*IP4MT6^%F;94}Z#~vpFGioT@orOk&#J8+B$NTEV=aA(7V!>!$|;LUo?J z8EF(9QM<5qyBl1`cCDO(Ehko~SDchZinL?j zSnn91-=uXA`#m7X2KPx3up@n_NyxAu8fd}Fllj&Gb|l9)cQ=KVUsAryrkb)TVQXTk zJ?zN4K}F%!K{Ha+EklmPrBby|0&syq*X2CV7C6HE1$%jbwbM{6dm=KrWu5JD{a+U>u-D&pE`jFbfj1>?-`4 zxN$}3hr21F{1~(LUPr2$1@Rox{g%69e8B6C$n5oPx6(KFJ0tU%OMes@l4OOxJ@5E> zWR&>boNWJUz_%g9`GIQNT~_3P(|D*tt}nt4h--S-=Y*Ou3sy4h)BBPO;XkhA6o-eU z%R}79e95saKmGr7up(FgSAza4GC<~$X+79*V?vwf-Jcphuj$5(}!4Q!N;$J;3&C`v&YyoK!F8W!r!K5NRSX0rh)vQ@qH zeCFc4#N^%j zCLcAu(>97Z10}zETY-oGtpwj7(9{{wI7AdVTEAA8kEjiNWKW$+OdONAAV8jSoCq|x zN-csB+AUG_om1N4x|1jyqhokX=C7JDP4=d`mrz*WzO}-C)3RXoQC51$ z)}Hi_H4<6lYwefGy3ea@Z}WzmeTnAif9?ghwpMp|YrD#C%|G(CFFH*z<25l`=-M{l zy{WJKF4T{ycOHq`JiebiQ+cf=tPuul3OeIJw9B>7RKmq+dvFZWOyV_kFmnp*8m-{P zDZ$I9YtMrLk9{a4kM~L!T@FOPLOL1#@45be-F*3c?7Kg z#B2OaWPR2=fw=4a&n?0bLK)5%y_23i7SBu~G_C96kGX!btbPCVLYlC(vmV&#GJLo# z^*Mokg08>?`9;MEXiyo=#e|tT!sjf%zC=>Y=vtipc8pe51~``aKLzV|e4nxu=&l~* zgf7o?#oag=7ouYCE_2R_hBg68!hM;RA%ezs#Ey&b=Br9vxacz7%QGzJ3QEyOL+Gck zQp?mZn7UU6w|rse_{i7)HW`+mCdgBbXtX9HjCglrIhZCg@3Us21XDMs5S>a005a7T z!Y{)woB>V?jbd24>0>N2%K}!dMM3E@>{lYOsDu_ z=m(#RqL`YH4a>5w=!!-&W9&n(;#(7TgqwsEoS$8rp21L`bfsOLMC<)9VXy$o+mrpO z0U;)z@eeU3J(B-YK~eXrlu1lvU&;r1X+OqpY8@OK0GCTN-tk=gR(fe`_u{$CW9->l zW{T0r!uuskI#uw?Oi;_*@o8)N-#6{Q(n>p81V|?#NgZrzr6K?iG{KGAaw{*Y(lCn< zx9j@WQ$9tl#ZD0}{`w6u$Sg1@2reT=jXOjjj&i_ad<0^(AI8DhZYI+-FRp z5QB<4g5)q-UEi<{R2TmF^I1>{nKt3T8tlhq4r6c~g9HBLIlf^m{@|cOwI!o+f_oH% zRj&sy!*_>>eFpxAL*X;#H!^sd9!EJ<)Ox=se|&ti(U5KkX*-$HH?Z|Xh^k6E7^OlT zoHb>!U>}p{@f52^?HtsexC6VV+Jd8Bta``Pe!s2jn>$)M49|J78CSIBCr3$!wYYrY zG1Yj}*giYvaK!6RMp~GrY-z4OvGd9_YY0FG=~g3H5Skb#2WV8XyxaNlFmonLfxtVf zDVIF1=m&?fm!B8UT7O8%Hxl11#BaCZA2zM>!A*bc&G(#t7|ibcdA9K|QiM|x0OFn| zTTdIXtdl^^alGgd!DZJ-%S+P&-Fl(YNBv{@2T#OHzQ8;8GKlxY^zprdimECyFUYV2 zyvy0^fXI;yO9#j;GKu~E=g|Ltq5ev0I>M;{QpR~Vbf;NLKDronXZ16j$3hJb!d2I zyC)l(*w3a2*0rW1U(hI@e_y&nmZz-viT5>CWZ@Im1f4uZC7HtHX>ZoGc!aEW-b>)4 zpS%Q*ZbPKSRO`1WfKDxG!G#>l-<7rTsY@FaTh#RCw6F~rGPtX%;40+SIf<8QEUGr3 z!#jYIzrc!ozL(%nON-O1S_m~KjeX|uO8`H}a^LT8eo*Y*O!OO@h}HRd*gAM}vN7Ph z4D$i35r-7{$3nG5A;ISM)zJ_y;Jy$qr_EpG9tHsF@e)x5H&KaQ=O*$p4s9<>glEzF zJ!d9uE7Y}D>e68;kxGIo%m~cF!Tc^R2aFrE*PwvCbq&g4H z{$6P+2IAGv%Rj|^Z*DuyHVEIem*`kfFxG9>Ye~HB9SBbTJUaa2=OG;{@RBCDjlNzs zy}}UaCVCkjkB&XeN!ojfJd|5r66#?_-lcWw&s|M$@0t&P_X;WezcJ|VFK@now>k$U zqn_MIje$^bECA{&7^+JoOx9~&{jp3kyREFA&`;+gclK3pIv!)ZKxB=2&zI4nsab9@ zN&LME_?BvgBw9DP2~RyC)67@)CmmOh!lAy;p!JW5Sv)jZ)84=I~V0%iEEM4!yo-%WQv`zglPgp5*DAUc=4_!3+pM1Y*qA)&bbP z6SR^z=hE0WaKV2+sH2ML)S0wm9Q#g^3ZvUn12kl|f^bxcw_o{9Twg#?DbBOK1pmQh ztn(c%6j;ySIsJ^n%(-El9e>zclC`Rh2FE@!n|boOrmtIK4a(O94_buXC^)NR>> z;U7hciaazj8VN1<%QKdFc$@O}t^0Q#eW&}xa{Eyyorn}iGDg1Mtkhj_g27AvgxeM~%DEq9tQX<)Ub9c$fJP~3^ zRwYsboWNpP1$cg6cb0y$BSpEE+bNjmvw-J5QFa+tKKr&~&7=jmP!uxd+lgFn0M@+h$O z`oEIxuRQm_cKDbTd05jq@#^0U&CWLZXzgh<`@^9Wc)0Way;pSfn?RS|t*6$j`?E~M z^Kqd_MS|NgDRLR7)$TZ%Heg)=u8e=f=K!<E5bW>UX1+*cl>{v&LSPR>0{^_E=NdkuuU~*m&@d39DS9xR2^Z!CH^K zOd^vA-$L&)BVzz9JR=_SU;=F^byWIweA~N{eLnFUzhVp0uAY%dGx2lc1%Ipg2`eh* z4qt}3&Ny|Qvo#l>fYxgU4miOh+Z-?a-GfTsWk#E(^MInCPLwusVy)r7Rm~*A0;M55SK@0@7TuCy1gs^H)(@HWcoCsTW}El>dOX)eQ@L}KG1{Lj?>oi~7Y zOJ3Iea93yG+^hCFM82?Z+@8!+tWhFVwDsEW(#vC#8A(tBK;m#zqI;@4Y^2jXuAYo5 zM;_Yv?OEQTYD=6L!IP^C+ouePDOpj&7t+>BaB(iay93+8 ztR_%u^3C8$G7PJ*=M9?(?%W+&8X#8((Sa0$wf9QN+3y*?)+<(-?5u#JLRzeV8-fuW zGe031m;3)b^jS~lR1dcS(d?09?<9)*_K?Zjy)%w@f_@%#TC3j%rob{gd{T>%?;ihQ zT}iDK#nd!Y*#>lpm9$zReT`2%yJCB1z7+zjVfBv*d-$QC$p>TCHZOlKsG2+7;si*< zH00QkQQ!uSTY^a}8s1qF)~2y6F`xywPvYxYQAV_dr*B=??C)z(Ug5&v}W#6a-04TzApc2x??7MphlKaD8|0Emrw0MZhIzff26Q*z}q z4Coze?*M06g>=HwuW#sAlmlK{kErsV;Z47Yb5IA1PX(*#$d)0+2wg^&!rHk9uzD@H zMxK5CMA=!jghIS*{S&$NpSR!Ln-}`B*U#*HZhrrEvh-u@GS6<)siPE`h@q{;A1|`p zNKGj4^Rf=9^B<45SsGc-OP+m&$o z6)e@?%W0N zOKFakL5_e6G) zU~@=Q+%fwUxoW5B+xKa*fC4Ciw1YtK%nS%jXWb>bKBr82q^t+v(LQF$?Okwj!*u(} zQZkm{VaUNg<;`wgNfPBEBA^>A2$Qb}Ns%sivt?cGEDeh6V+@G-{FbM5=HX8$Ye3Uu z!{nQWMUU@PnI>Sf`H(T%fub>q{!MMP96OHRoJ%+v^up{^?k4&={F-!WT~c zJ@u|)wGNMKn+a8}j3PdBoY(F6Dtji~=+{?O=r2w?y*|P6sg72_@b68D3i;6 z=Vi7RHfKAtq)JPA7YvRh zYq>^GN|V5rKf93kk0A)k&GH%< z+nm1ds^@7?^r7>Xr{qDX_ON)}YAJ94;FYtPrFXkXsif;|7lQ+SLpHn36iKoKSb{;`OXELXLB>s1+BVlogYA8~D89V5uT*bh zV>ue?&%fbj{`vRkS5sK`3fckNW-e z$pGejOV_nx55(E$7$x5iN($SEbg`e{v6^jT!rYwyoZ5?9)41t&y0b^T^qZ$%!Q-aMd?y^HNtzn8Ol zGKib?D-ASP^|>`wzD*7C>95@pQOGpJ`X+%f$CBe4F@%ft!r$2nRzl%J(UCCeMUXQV9lewh?Rh?q39Yz}dY(bWcuG_SMf z^GOAE??ELN(Q7Gl8Qkoo33brQ$fVm+@z{k`mB3;*q~bCzgfbYc%<7JQRK4t~GI;-L zWcxe-Bb^W(!S@wF7Z!&O@4|N#6({3r*T$4v%JB5@Q*Sd<0(GuZR{v3 zuKIP;{n4%H?^>gggz{o)So+E5q$6N63GRjyQr z{`GzSrJ^-In1bliA#U+%3Fm~zUulV6U4`^TBwfI2ae<1WOZe|Rhi72PT+Du8SHjY< z1XJg#_~OZlp98`smE+H3Gut+o+sugy_smH%3`Ausy6wx~pyMb0#`YIBDbZu6d4Ifw zWAJ!>>8YJH9->AP(9)zNIIGVg?$NHJ&MaJ?y{38Ti)W1B;E=Nlf~lTQF-`JOC~25H z6Mw{e_#^Ca_|Cdk@X>H3u_f41g3I$tt9IHKK9*w|;=e1-y{5E_jPGY0eVvomkA|5B zEOVW24n=tn4wQ%lx6>_O^>wz6Zuwqfv(CGjm=+tKOMOAWgYnMqBqZJauDrghryJ@O z<_TuyRg@1UHTo;wW_fh}(w>0W;55=mo01 zalIbLzKq$|fv;cZj_hB26zIf5W z)?W}fUZHYyoz5!8hNeL;xg&;FR|XyJ zDB1@KvX>oku@V^=0)>587HqKujCL3e(V;j%uFsS-pbj9T$H_FT^XEBPlvmCE8_xHa86P! z=t~CF9#MST1<_()BVuv&%&h$w7iVoW6Am#5Xz6E9p{TH1jx{;$W}!`50watfeIQ%5uAR z=%}~>HELZ(BRKy>M{pZe^WfWYhZ+Cp_ z-FEsS(P7qFX}7qq+Vy-eIQ=l|iRkO{ss)&Tg@c_@lJ%l{f`iu=3ndFgYP_|IB-NK? zfh_wp-*!M?+Aw%Hx}5~+L`qs#?W8=?xq4vs;ftr|LGu2e0W#M6m*!iyu}q!>kx7_893}O7 zTqc+0blHe+Yp(oga&Lb1+!yE8if>Mq-HMNyWvi=nM}hOJO}D(rGb5 z7cE@Aam7YQnN00=UMCQyGUTkGN~H0-RVdn6e+wpi3R~Q)=$PS>3m!FXtBRol5rmG-7lQ7ZS>s|)$Y{u?x#$Fm5o!dOO zbk!fqrDLt~azTJLfzk$hnMCM0(&ZPE`bp`q!~d&=4NcBlY-iAJ(7Apu?GvFe zZNG=fo;DD-VxR9adljdj{Z81-U+-t%!$#Bi#v;o1H=_~IXhK>?0M&En;l~!T3;sGlI3%@4A_n}a5 z=0d!9{nc4NJ$ZHUsM@#mq@+r}+aUoRO>%Kf{JUB-(2V}}j2&|RA>nmv-{G+KGIbIh z-9}6E?#{L2_-b=jS&5sZjK)$xO7{7m?SP$>spF%nyU~~DGcI?JDiBr+lAF+n?H5zc z*o;lK-KS3bVj824F_xy+?`yK%8($rq@>+6T|KNHpJL@yVyW8Fh>gs5^ z?$2-sb&Sos!Th=_ahzWF?RGaM+ceuD+v+hFT!e^5hbg_wIlS`m8g6WY+f~fWCRmlp zl|=1ZoAIw~%iWd?sJp`#{jQEugKHg=mFcBsp8*|;#)xF;-BueNyX&Fvb&S2O{Tt2S zTThw`{V{JA2YdyP0lCnB4 zbIaNuK8j(?n^zKJ6Poxe&BTqbI|uXJpZSS~J>AKugB zh^3thzM{eeq9uQ>ld5GpDl{Q-Au0YYPA?EzSm9RJWHXFVNVx>=r+ zY$6K*CZ~T2b?mYp`v=zhELJ8C?t!1j^BOFz9taWdDC%;Fb7+Dgt4-Q@;~yjIx4~=aYW;GR+5e_3GfQJEg3d8Q z=hyO!xC?F;^7HA$?bl4zoCxfG>8uKXhhsPXSf(Nf84_J;X&8r5b>a(zp)QopEGdoa zADqv~jQl?II840QA6uxkPfN~%7O#`(Ik=*tGTZ8PG*H&g*-h`$)Ed-dRyyp0N^21h zauU@tpse3BhpLRovJM@0HxSwqCt`?$*C`O!1t-g%qh85M*}L0XlG86ELgnN8ub$f; zTi}hA^5s&Tr-q_@+-RF>#a*Q4vtdrY3A%WOe*~O0Mm;LdVj~)x?c|SLR@HxELowW> zDKnME&J0-F|(zbDN?=&IK`euTLl+-f>Zx# zq*L*sd5&rX`-OTP=*fMP+N;*Fha4M?H@bLjD`0~|wKyF%TMHo%#%o)wOg^{X*%>BYDB!xsXGMT5b5OsR zk(^$gvZp#@XIn17sPZOlp&Xf9SK~QH2YeqX7kDQ6w`ixiH2B;r*|g5cQosFPilJD~<3Xg?8>v6fGrAWm=f+?b+&uuNWwu+Z#wP6jN4yiB%Kn)F^k$(Ht4-DffR( z3(eS!$x3wGPSd{H-ehMH)qj=Ba)cKC4sY#7xg&U%VqN|2>iQqYI0{^X)HXktlah#B zr%la^mR;V0-k(Lp`CtEMZ_^AQ3*5o56U_LJvaHq7dt-||A&z^r6H8YP z5B(f|@MlgEez|oQTleYY%mSRQ(*SX`#?MxX>Vh#NBAtHnBy@@8!a`3-5qEX*2k|?i z%+r&iRliEQax0_vG})-!-Y&h(>-cVIM@mEkMND8`nFZG$h!0Axe!#de=t9Oq%Mo`# z5PJZs$n)eq*0_)tHOaPG68vA)X9lW%CO%)Vtj)5JRib3_oBF(f2=O#Xe&Px5)l0AQfjGyS_Wp_=^ z)aa+jE<(qRtzUGTxhdMX&Bg+%@)eS5Xj^J{ttIml_=urYR8{mKU+dmnzc7fR@C!DD z)61ENX$4pu+hG;+?;Kp#@jm$C7Ou&t74n0{-OOwYW;{-xkV2jQ%%^>u%y}N>VpLyV z1Jf$Osb^eSOE*QRG8|7D&zsH(6c=YZBrhH4*w}7HC=bkk(Y_>5$N1X8?d-h4bz;HN zQyOPY9CKBJ99<uk&;?>OXtw8MgeX*4-XrWQj)%Iiu^QuM1q1r7 za8#YaE z_oH`im02&tWhnF|cD$H`W;6MllF`GC8t5zh$~c5BZ=H~~vWqwGn1iOJCh$7$rM=k| z<*LX1n)lr>YL%;Id9lIaAJh}{Pstlg(rhxdFiN70GecmYW39~TxsL+B{So1 zT+a(N=S}h2T|1ez5Lq9PGEY~4X8v{#K+ck-!;HmJ*<$nS6e&mIF5cyBe8ogr%Q*D=)AD`%s z4Wz5uZt?^ z(ybstwHHYHRX~i@OmrN#Q`H&LwT>USfflogTqM@{T^2HV1Q#Lwk3z9!Umsy=G~NAa zMbDRyCaCCOp5uZ1vCCU`_bW(N&FTam_m88#rbsvq)QZzKA`X-W5Q%mQO>PTqCa|HU zf?M3aPC?hvWYD=qh8q~xqf|V|uNK`wuNAYcb0UV%uOEZiU%e~~-qPlMp8avVM(l=N zHsL;j+azq1(5@32t=dHL=fQ(ASpShi&(xsA>YmjS!~e>Rz)hTf*nI+tW8oPRl{eyK z<&F$Q$teyDdLjNOq;NhGV#nIQt_2f(rvHop?mX(3h{)Grg+ohrtFCIlLIz z^7Zxd%QL_N&3X7A9pjyOE~+tfiHCy2{bN z#I-{pMctRl_g=?s)^pZ4^FRuhKSZuTyA*`9_WnGE1I)K5w|iZYzr3!iRJE<7!vgHX(Gcr$i zih>@0Mfo?MI#M3BbSdvGnp7`hrDpD{R+L-GCP&=OI^gwz-T|YN%CTV81y`dIRLKW3 z&9kdqPe|Yy`nPTJB}@%0QmlJ*kb7}`6qLOEfR*o;e)w2P^dv7x@+8SHpk!wH4Mm$E zEiY+YISgVGg$J6%6j{)D$6E>A%qmsz01b)Ug?N=BCDR#uNy!4KZJv)}%aj_3HGBml@)i*BA ztG(pfgY1Di>#pc|1-UI%j+D4)TN*-@fwfE4(wj<1@q^k+HJ8nw#`A%tW8&ZjS6jVMAi z=61zlp=^w8v()N|wO#0k#Rdz z1=Tv7Uv}ZKa-<7rj@^T>qH8v45#xBW(E3UxQ^qT&h_mrGETi*!BYQ0TQovkrw+?SB zb24s!qNbj8LboKH{NYc9NC8+Audt>%X^a-HUW~P{qyLgFBjC*7t~{vg7n>I7pxxVb zp2&Nm8^Nq-qAPD3$VOGurTMDa%s}{+|EPcGiH}-&o|QB(T}oTvheFEtDZK_w$v>=$ zDx-S0eE(Y8eGdrL$URP0tz!l=?UC;2auEfPzmTqBakZ7KTBpt;;&ox>xt>kyhryHc z$Hl6AH&YWb7M*@xH2b`4y_Xb(@{U5L!qgCCiA|VkwZ%4v2B^zY zM_Zb?%~RHU zOr<-U7Ld=iI$T0IZ5o6HH>iJD*2G)}zcgIYhF12a6ot(-xPvF4uk5@yGe-V!Sxikn zw&fCvQ!&km@e-(XR%wi(*<7?qI&<-B@T!?-sFaSIcq}bx?GpR^d-fcw5mZFdS6K4B z%fbfI>-m>aNV9k(*P}#xtU`oAUrKoW=8uKuDFOD^Z*;Ij=z{YcWC5QD-p71;X_L=! zFGDwLo5m4=DI9@Tw`EcKj1!_O_6o}&I_xcnQZ{$H1iGC7mj%&pXI+~f1cl$+TJuoA+~YJ{nv#b<$hhUC;AN-fkefs%7K+u zQ=Cu%(rK^oQ=Rc&+VJt^91}&~YcjQ@%mKJGT7!;|>N=g8gHRl`WXeaf>kSJww6? z$(VhRQOypvO}{ti^3wtO;wgr`O4HF63Ptd^_sBCX9z2nsyaNQq??iPFd{* zQ0G7{0DHBvWW{%6Hr!vtl%U8QGF{RdBcy%qFggDD` zbd$qgrZF+q&+yyfqVe^VrJ;LfjnPsWF@37>Xk*0`ZADiKO-lVQ>hMKZU9f~hmHJFy zVvo8oC_`P?Wp+cSibVMy!g9f%LLE_BRboif=yLd!$1_Uh`l1Si-h!j@Vm_; z((OvEkq3+I{h5z>eP4oI5V>THb3XSgpd9?=o$wDSxSZ>%`$2V{UMSC2$ie9+bwVnd z#(pA%-7Yj^pC5TvYA8~YdGK1mxhBx#ZPQ(~oY~iTwo`Z4O-@`lB|pUapo#x_%pAzM zMQiJ_wT+xoTX*>xlT~$xv>h3N+cbJsn=PdCkMia&G#3bZ2agsEF$9D5$che)Ktti6 z!>8*{p0f9cW5T2`?CjIk^}IGup9&Ws`8rH(T9AXKW%?6>HCmAVc2dL=L`w)4 z6Wnq!K{+5}coDsaV*Bg1@Mp`%K*5)63 zcohdaEa)u{qV#AmPzW_ZKL}iNE;z?adPDVnR@L$#wRqlLd5{SM<_^fDIdqqzqGPnp z6f|dAqU?n{5d)>9COZ-CgZ`vgH($2AofgV&(5Iau*QjcMKi z2Q0t7=7WKa*;T?I%=$8J@M^OQbb_9x0G-I~60_q!{W%+}*z3AdvB|+_4oWzE*l1wK zkByb?Oj^Kty0tO|mKAbeLUn7Ic zkj@ns#LJj;2KAT>SQ*9y}nHM%~)lB-LHRe>{hx) zGb;!>P}^lEr(x0$dt!E6<*)qoe72dcU5y5D>9Q-jXf?X-I@Ndb?XYdL9qqMfP$oQA zw2_%=;uN-+(c|ESe$YB`{{1mbvfa3KRerPGW}_{|ghHFz0;&@*(v*i;#2_HA@z#iI zYz2&N(GA>jGGEi7&9w31NzidcA33|gX4zIGcg1gx*;HMg-Jw2x-S@rZ?EIL#t=$d0 ze#SBSlo5pVs3~VSPcsa}caS#Xwkww%vMjI$Mgq3`?xo(*Ra2&DzUsEo3C)%zi9(T~ zl*H}Erp11cOA1@y4sNjHC~I)|n4KHV*xbKAZIeTch@vCzIWcZwO)RHC=x2G$cM1Z_ zS&O%hve3!&+@)%V0zLRCv*ec zX`|5M7gN6YLC+?oY>)aYzFkr?z#yhx&CG&D!UufoU^pe7&6E~;cN2b6DONKmaV&>% z5kxrB=r>g%Tzh#xP%@>xI5P1x31}_H_kk8ftIAKb zKy>wa_;|9weN6iF8PNY<;WX@1(IqAlHN5%oli~aq93tu-H+Y z8J@pXVH))X^!ZPxj|+$LhzM5`Y+;qbXenXN!kJ{wv&qF;JRho4_p8;)x$c0qP9m-; z(~7^4b5SvAxi&BU;CtglcR^P^yKwmeC4S1KcZ6qPkZ0~&vgI)e_eICDz45+j;mD8DU!sj z63Y3oA;%DM%6ZHjk{qsx4wge$EX5o~7{f+NY7Qf2j+@g=*j7%9F`w6Ux%&PG-{0Q9 z?e*OAxz}Eg*W+}*KOWE9vqA2F29|iP@YM2UML$YsSm|WnR(Ul30?INv&;mA5N#u+_ zS#nWdQC*eiO=^Ppq@&w$;demXr8RlNQ7e*IiCh~G-fQeWAedkG-M>$}fKRHpnMXVS znw%c(`0ZXD9M}}|*Pj`;>|Ui79ujrlau&H8-ea_9vP9WdzW$cxFRhuyQ>_Dym6xJVY@z`?A zb+xy6p+*D!R*E@hg$S^7v5UPibY<{%Mqsj?g#RV{yP}Ww?GmW+Yl!}-vWe3l?cTVd zj#l`tRu^bUI65=`k@_M`(c!9h4Zy0`;IgQ9Ay=RMDy4ombcZ$;b3M_>mp|FDq6#xk!D53bG^D>5(#i>b&&=sp@?Bn71 z`0iNpg)sBao2nq#TouQC8*#WD2e7?y7a6sc_)<@{&Hq0BcxavM7=@h&rLst`Lept` z#?*6rh&K@22;8H5#7(*j$Ywknj?$rFnly<{1p2GRoe9B0Dc5oXPb0b`Pap3%c zqkB9*xPEW4K%9E*SCD{-u|4D~?Q0>^F*^(^v%Iss6^w?ZDZ58hVeJxM*bpBuNxra8 zl{p|Gx6QyRtVNUt?Sg^it#8B9LE0i*Mo!x4IYZ2?i5}g^3rNJYvv9f(E>uu@#{d@H zH*o;$W~C85gslWOAFiiKNrmqC=~*4kV3DRx@KI%a+ilNn z2cSA8{3xn;R$vGNA5aPf_0c&BdA{?w*v*mQZ^7Ctqt!cp_c(e)aS6bFE8o?FAp%2Y z)T}$X`u9dv`8t&?i`$~wxfUvl5tNQ4`F3fjfTS+EG58j?+Tl_fbK9!+gH>0L<6Q@^ zj#x`~TBJ;t)+L7`iJ3oNHhT2;LMPv-rL=|6YTGnyM-;FTekl`^hbZ8_!Oxd{h z{kxJivK;HWkrM1Ws{Zec=@PubD9b@m^|P2#as!SUMHRsZ;VT;$T9Gk zj`TFFF?;~$`Sm!fDP8vC{gIN#TmWp9qZIdqZ`&d=d>VpSxNzoXGLV0K9V9u%4`spJX2?-#btJ zcr88h?P4i5<6DqYAKS*jIsa?OVr|EiHNK-f3g>dRdGDwQQz1)|Fqi5acIJxmGg^#i zW>tqlE6))ZOvX;fOud}uv$mABfK0Fzz%pQS-O@)85Yz*SQ$!|0HO^JcO(;;)OiJOQ z_A7_`d~z?m@$A1K{Z+?zxas1XlW#hMEzi8|KXSg-?0JfYnc1g{=S$uo&dhkr)P16z z*ccO%&1-1 zj1JYI@1T0MgmOp#^(C_G-l(#+TEXzuKF#I7u*0LzVXF9&$r3LZyxknOT&u)f8&Apz zTSW}R>Ri+R88D9R&f4WshPJ4YRv^B~@ZxhC_em3^pKgBtb1T$%MK_)zlq%bqmEi^Y>O z><>dr>CD`oA6?R1!cv}C2Z9WNOm5t&5GfP6cGhvcP=wX^{aT1L>pDH$d4$p#t|KN6 zbZ{JBj1WY5LQXE!=4&9OSe?>d)Af|JOTMJ)R@&XC>Rkj!qiM$^XNq%tH6^!k#!KIc zuit%y+1|wq8GTT?%+DfyJKQLH z9nH*P26u&rm`HZs^M~0)$G;<&qQsSL-Vj`>mmJAoLbRXf%n(EaqM`mDRzHNeHs;L^rNIN{UiRlVa%{1x5uJR? zZQqAFP~U9xnhRa$SfO-(NK*IStOZ+R*~hHMCM>C-eF+>DC+o{Sa(RN_ba?C}q*na^ z)E;(9TrG&YT6%?aUo?XPdP4jDb7L`UrGe;7 z04I)21&Xi1q0yv{r>xH|wWF1@tm;LZ1M}Lxlfn)^BPaN!m7Os&%9WErZ5d+B8_ghJ zrz!{~WV#)nIIq)QdnN_<fa(G z{jSkJ+1cV`_{8KZ@DV&0{ve`Gn#$RGNp_N5ygK?00D{QsoP|?mZ&U$h*i!$_9sc_m zn6ymrnY;dTXsa*fyaV`cCi(E6aeQABdy?_#y0P+x_ukYM@w_RlZ*>7b*}9Kd;(iT@ z^bB2ZNtKA*L^551OROC4u{*!OULZQFCtgC1hgY`j86_s@FYVwB^$_psZt3WsNU(90 zf1)bCTWIlp;PHS6*@6w_*!~a)rS+dI`}g)Qz*avXx?2YwB1~z(Nk3EdODeaGFO+{- zoL^FI6KEP`Sto%HNS9H%h7KGO9unKdb`=6h_@|5Kbv>93sENf69uH(QWlZ$BuxV~e zd#DI>YXsdregtT1nZvtM!_rF&kkB|Ty?8n`*PR})OV2kuY@Lg8NPDPz zJBuqibnxj|&iCZG5d&(EZp9mpLhZ6~`OfEx#4SsY{ILA5i;mpD{YE(681;tT~?tPvr$efKx3 z0{-D5uzn&*Y@nY$SPfrh0@NHOA`MWyFBEw#CEg$}b2|e0UKtlipmK65nmW$fwi!!f zCI8CI`X*)VKT>@Dki-hzJ09n)vG0bdULQ7chPN0!jTwenNeI)~$>DXh?Bmq53#-GH z-)!!@j=VaN8<2Dw;m5g(oK=fi z&O2k`)^4Kfd21Z53TN_ZiKCOoBORKp^+?b09|Mx zh;DwwI6t%2@uh}ysXo8zdz3ayCvbY>#M+EZN+57t3h_#PYAWOf!D4JeDbT2G8hP#a z#`3OvdaEXq@4TiJajxhG=*@RNXaUiFU9P_$v~G#RhB%6L7q4DTlAgF{SW8tlr4b||MO++jlv-PLF z_CdaZF;uCqhB=4hVa}FKnnJ_e-u?Ozi!`&F9%Ws}$&nXWDMc?=-fE|>(u2J-i8Mc_ zFeHPSjXcLloLP;jjUs!( zt&JJ4?M*RI3)yGIW`BUy{9@SzcX<=9y%mCnGMbCYa%ju856u=sWBW^&@km(YQl2958yrQCNFm?*S!EPZ zKV%7?N{6j(I&^x~WqZUFes$;!u4A~9!qMcI$YwH!=)&ZIUoG+<^JOliTgpUywyaXz zkDV0Q$?PTsR2j8zRx2JYcI@4mqB1II-HiG^(I)dwCVOdI7MmIareM0=nR->33h27g z$dB}UYgnDjr3({9D8uZnAz4L-n(ib$nbZjR={VVg_O`b&2(kHZOn{u~Cv`3HWxnPkK~^P}@POGBxBc2i(ghynU`VtDl7p~lgYw2FS!=I`va_>61c*+t*62jgquPPqNNanWR_s-glP?kGEcCLF-&mb z0Ed@y$IIOU}6I)J}KC{%xy~IK$nC5MS)VO-{L-KMNJB9_(y{lBT^X-1L*;@7 zuj#@tG?mutMij%#bsJ%1GOh6TmhHM+yR@GCW4O$B+QZjVeF3Br_v6XeO7Ov%m|_3N zi5bV*W&}zS`xF2IseoW8k~)6nMjRnYR%0&4EKhO>;;s z%e$oCG@pys(|3UO&@W1@PgI0B){Z^*nN{Cx13BB!4Iw4c`7Kpk-gY>ceApsg<#9)W zmACb(5WQ)SY&ZiQ)-M0b*@Fs8D;YJ5n0@GdaJ6>tpkL2LS6%dl4%3pFjuH&pZG(?^vhUa>%)B2bIDNqG$qPxlRHWf^Iw;w@2K5+ND*$E7u6vspd) zX4Or5XB*x?N5O3Qxopb0cAo#4IZ^$mErl;^*C8l770ij+*)F%$GMc=UkULKU>ACpDlxiB8C*!o;&b;o( z*>|2-&X~)B_Q>BwTNDs*DV>{6ew?Mr5AKRuI@mFT*C6=-O_OE|S619?zJ)0_L%oo= zo}R=Mw2B(7ic0ZG+ii>E@+Sh@=Ux{n5esd!K!R`tH~PAef4t&so{cLdL%2~+T7S%1 zky8~HRU?jCPF(3K9!v&0TK`JCZh#ltN2$ULrF?kw>1c{ZPSb7i_oBKkcQ!tYp7lUs zrfi4XZ!2RA&sG|w7!=_?4L%i7_L6R|%CTG$tfUTuZfyz5Rv||UyVA%mlZN@9_n(im zd%x*-12VOH)xJ+Lkh7u?f;Pw2`vO8gJUk}una}-}Z-Jn^#&!l@yn~y6X|o2}rx3WZ zLXP@y+6aGmL#FN6^5_p$X8w~FZ~^TpGv2joK%?DnzCufI4n0*NU%+dcA+$Gy z=<sOv13S5^+H|8;dY1bbWZNA`iTuI26zMnn;+f}bMXe#DzZKe| z;H@|JILr|f(B*oIIUjZFeCsyg10X#_0oup@f!Xl%ID!ZsuT zj8X0#W2j}5GyQ$0bI*1u-v-qHJ10L67umAu6 literal 0 HcmV?d00001 diff --git a/media/llama1-banner.png b/media/llama1-banner.png new file mode 100644 index 0000000000000000000000000000000000000000..1e469584e0cea32f7949fd061d2dd64e2753026a GIT binary patch literal 33331 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 K^Zv%YXa5CnGm29H literal 0 HcmV?d00001 diff --git a/media/llama1-logo.png b/media/llama1-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..365c5b865f3f4518bcc080bf685b7a55f414938a GIT binary patch literal 32494 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 Date: Wed, 5 Apr 2023 15:59:13 +0000 Subject: [PATCH 11/53] miku.sh : add executable bit (#780) --- examples/Miku.sh | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 examples/Miku.sh diff --git a/examples/Miku.sh b/examples/Miku.sh old mode 100644 new mode 100755 From 5a8c4f624077373a198cd562146ffa67b02ebc75 Mon Sep 17 00:00:00 2001 From: Ivan Stepanov Date: Wed, 5 Apr 2023 19:20:05 +0300 Subject: [PATCH 12/53] llama : define non-positive top_k; top_k range check (#779) * Define non-positive top_k; top_k range check * minor : brackets --------- Co-authored-by: Georgi Gerganov --- llama.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/llama.cpp b/llama.cpp index 854bb8993..e4517959a 100644 --- a/llama.cpp +++ b/llama.cpp @@ -1229,7 +1229,9 @@ static llama_vocab::id llama_sample_top_p_top_k( } } - sample_top_k(logits_id, top_k); + if (top_k > 0 && top_k < n_logits) { + sample_top_k(logits_id, top_k); + } float maxl = -std::numeric_limits::infinity(); for (const auto & kv : logits_id) { From 34162989297fdfe3ab7305451ce55bc87e3f4c9c Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Wed, 5 Apr 2023 19:54:30 +0300 Subject: [PATCH 13/53] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e1c405a64..d9269c0f1 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ Inference of [LLaMA](https://arxiv.org/abs/2302.13971) model in pure C/C++ **Hot topics:** -- [Roadmap (short-term)](https://github.com/ggerganov/llama.cpp/discussions/457) +- [Roadmap Apr 2023](https://github.com/ggerganov/llama.cpp/discussions/784) ## Description From 986b6ce9f99503c51ec5afd8a10baa32359434c6 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Wed, 5 Apr 2023 22:07:33 +0300 Subject: [PATCH 14/53] ggml, llama : avoid heavy V transpose + improvements (#775) ggml : - added ggml_view_3d() - ggml_view_tensor() now inherits the stride too - reimplement ggml_cpy() to account for dst stride - no longer require tensor->data to be memory aligned llama : - compute RoPE on 32-bit tensors (should be more accurate) - store RoPE-ed K in the KV cache - store transposed V in the KV cache (significant speed-up) - avoid unnecessary Q copy --- ggml.c | 309 ++++++++++++++++++++++++++++++------------------------ ggml.h | 10 ++ llama.cpp | 69 ++++++------ 3 files changed, 222 insertions(+), 166 deletions(-) diff --git a/ggml.c b/ggml.c index 59e84ab45..a3a3314c7 100644 --- a/ggml.c +++ b/ggml.c @@ -3219,7 +3219,8 @@ struct ggml_tensor * ggml_new_tensor_impl( /*.pad =*/ { 0 }, }; - ggml_assert_aligned(result->data); + // TODO: this should not be needed as long as we don't rely on aligned SIMD loads + //ggml_assert_aligned(result->data); for (int i = 0; i < n_dims; i++) { result->ne[i] = ne[i]; @@ -3620,7 +3621,14 @@ float * ggml_get_data_f32(const struct ggml_tensor * tensor) { struct ggml_tensor * ggml_view_tensor( struct ggml_context * ctx, const struct ggml_tensor * src) { - return ggml_new_tensor_impl(ctx, src->type, src->n_dims, src->ne, src->data); + struct ggml_tensor * result = ggml_new_tensor_impl(ctx, src->type, src->n_dims, src->ne, src->data); + + result->nb[0] = src->nb[0]; + result->nb[1] = src->nb[1]; + result->nb[2] = src->nb[2]; + result->nb[3] = src->nb[3]; + + return result; } //////////////////////////////////////////////////////////////////////////////// @@ -4510,6 +4518,37 @@ struct ggml_tensor * ggml_view_2d( return result; } +// ggml_view_3d + +struct ggml_tensor * ggml_view_3d( + struct ggml_context * ctx, + struct ggml_tensor * a, + int64_t ne0, + int64_t ne1, + int64_t ne2, + size_t nb1, + size_t nb2, + size_t offset) { + if (a->grad) { + GGML_ASSERT(false); // gradient propagation is not supported + } + + const int64_t ne[GGML_MAX_DIMS] = { ne0, ne1, ne2, 1 }; + + struct ggml_tensor * result = ggml_new_tensor_impl(ctx, a->type, 3, ne, (char *) a->data + offset); + + result->nb[1] = nb1; + result->nb[2] = nb2; + result->nb[3] = result->nb[2]*ne2; + + result->op = GGML_OP_VIEW; + result->grad = NULL; + result->src0 = a; + result->src1 = NULL; // TODO: maybe store the offset here? + + return result; +} + // ggml_permute struct ggml_tensor * ggml_permute( @@ -4845,7 +4884,6 @@ static void ggml_compute_forward_dup_f16( const struct ggml_tensor * src0, struct ggml_tensor * dst) { GGML_ASSERT(params->ith == 0); - GGML_ASSERT(ggml_is_contiguous(dst)); GGML_ASSERT(ggml_nelements(dst) == ggml_nelements(src0)); if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { @@ -4862,85 +4900,96 @@ static void ggml_compute_forward_dup_f16( const size_t nb02 = src0->nb[2]; const size_t nb03 = src0->nb[3]; - if (ggml_is_contiguous(src0) && src0->type == dst->type) { + const size_t nb0 = dst->nb[0]; + const size_t nb1 = dst->nb[1]; + const size_t nb2 = dst->nb[2]; + const size_t nb3 = dst->nb[3]; + + if (ggml_is_contiguous(src0) && ggml_is_contiguous(dst) && src0->type == dst->type) { memcpy(dst->data, src0->data, ggml_nelements(dst) * GGML_TYPE_SIZE[src0->type]); return; } - if (src0->nb[0] == sizeof(ggml_fp16_t)) { - if (dst->type == GGML_TYPE_F16) { - size_t id = 0; - const size_t rs = ne00*nb00; - - for (int64_t i03 = 0; i03 < ne03; i03++) { - for (int64_t i02 = 0; i02 < ne02; i02++) { - for (int64_t i01 = 0; i01 < ne01; i01++) { - const char * src0_ptr = (char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03; - char * dst_ptr = (char *) dst->data + id*rs; - - memcpy(dst_ptr, src0_ptr, rs); - - id++; - } + if (src0->type == dst->type && + src0->ne[0] == dst->ne[0] && + src0->nb[0] == GGML_TYPE_SIZE[src0->type] && dst->nb[0] == GGML_TYPE_SIZE[dst->type]) { + // copy by rows + const size_t rs = ne00*nb00; + for (int64_t i03 = 0; i03 < ne03; i03++) { + for (int64_t i02 = 0; i02 < ne02; i02++) { + for (int64_t i01 = 0; i01 < ne01; i01++) { + memcpy( + ((char *) dst->data + i01*nb1 + i02*nb2 + i03*nb3), + ((char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03), + rs); } } - } else if (dst->type == GGML_TYPE_F32) { - size_t id = 0; - float * dst_ptr = (float *) dst->data; + } + return; + } - for (int64_t i03 = 0; i03 < ne03; i03++) { - for (int64_t i02 = 0; i02 < ne02; i02++) { - for (int64_t i01 = 0; i01 < ne01; i01++) { - for (int64_t i00 = 0; i00 < ne00; i00++) { - const ggml_fp16_t * src0_ptr = (ggml_fp16_t *) ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03); + // TODO: add more special-case implementations for tensor shapes/strides that can benefit from memcpy - dst_ptr[id] = GGML_FP16_TO_FP32(*src0_ptr); - id++; + // dst counters + int64_t i10 = 0; + int64_t i11 = 0; + int64_t i12 = 0; + int64_t i13 = 0; + + if (dst->type == GGML_TYPE_F16) { + for (int64_t i03 = 0; i03 < ne03; i03++) { + for (int64_t i02 = 0; i02 < ne02; i02++) { + for (int64_t i01 = 0; i01 < ne01; i01++) { + for (int64_t i00 = 0; i00 < ne00; i00++) { + const char * src0_ptr = ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03); + char * dst_ptr = ((char *) dst->data + i10*nb0 + i11*nb1 + i12*nb2 + i13*nb3); + + memcpy(dst_ptr, src0_ptr, sizeof(ggml_fp16_t)); + + if (++i10 == ne00) { + i10 = 0; + if (++i11 == ne01) { + i11 = 0; + if (++i12 == ne02) { + i12 = 0; + if (++i13 == ne03) { + i13 = 0; + } + } + } + } + } + } + } + } + } else if (dst->type == GGML_TYPE_F32) { + for (int64_t i03 = 0; i03 < ne03; i03++) { + for (int64_t i02 = 0; i02 < ne02; i02++) { + for (int64_t i01 = 0; i01 < ne01; i01++) { + for (int64_t i00 = 0; i00 < ne00; i00++) { + const char * src0_ptr = ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03); + char * dst_ptr = ((char *) dst->data + i10*nb0 + i11*nb1 + i12*nb2 + i13*nb3); + + *(float *) dst_ptr = GGML_FP16_TO_FP32(*(const ggml_fp16_t *) src0_ptr); + + if (++i10 == ne00) { + i10 = 0; + if (++i11 == ne01) { + i11 = 0; + if (++i12 == ne02) { + i12 = 0; + if (++i13 == ne03) { + i13 = 0; + } + } + } } } } } - } else { - GGML_ASSERT(false); // TODO: implement } } else { - //printf("%s: this is not optimal - fix me\n", __func__); - - if (dst->type == GGML_TYPE_F32) { - size_t id = 0; - float * dst_ptr = (float *) dst->data; - - for (int64_t i03 = 0; i03 < ne03; i03++) { - for (int64_t i02 = 0; i02 < ne02; i02++) { - for (int64_t i01 = 0; i01 < ne01; i01++) { - for (int64_t i00 = 0; i00 < ne00; i00++) { - const ggml_fp16_t * src0_ptr = (ggml_fp16_t *) ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03); - - dst_ptr[id] = GGML_FP16_TO_FP32(*src0_ptr); - id++; - } - } - } - } - } else if (dst->type == GGML_TYPE_F16) { - size_t id = 0; - ggml_fp16_t * dst_ptr = (ggml_fp16_t *) dst->data; - - for (int64_t i03 = 0; i03 < ne03; i03++) { - for (int64_t i02 = 0; i02 < ne02; i02++) { - for (int64_t i01 = 0; i01 < ne01; i01++) { - for (int64_t i00 = 0; i00 < ne00; i00++) { - const ggml_fp16_t * src0_ptr = (ggml_fp16_t *) ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03); - - dst_ptr[id] = *src0_ptr; - id++; - } - } - } - } - } else { - GGML_ASSERT(false); // TODO: implement - } + GGML_ASSERT(false); // TODO: implement } } @@ -4949,7 +4998,6 @@ static void ggml_compute_forward_dup_f32( const struct ggml_tensor * src0, struct ggml_tensor * dst) { GGML_ASSERT(params->ith == 0); - GGML_ASSERT(ggml_is_contiguous(dst)); GGML_ASSERT(ggml_nelements(dst) == ggml_nelements(src0)); if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { @@ -4966,85 +5014,76 @@ static void ggml_compute_forward_dup_f32( const size_t nb02 = src0->nb[2]; const size_t nb03 = src0->nb[3]; - if (ggml_is_contiguous(src0) && src0->type == dst->type) { + const size_t nb0 = dst->nb[0]; + const size_t nb1 = dst->nb[1]; + const size_t nb2 = dst->nb[2]; + const size_t nb3 = dst->nb[3]; + + if (ggml_is_contiguous(src0) && ggml_is_contiguous(dst) && src0->type == dst->type) { memcpy(dst->data, src0->data, ggml_nelements(dst) * GGML_TYPE_SIZE[src0->type]); return; } - if (src0->nb[0] == sizeof(float)) { - if (dst->type == GGML_TYPE_F32) { - size_t id = 0; - const size_t rs = ne00*nb00; + // dst counters + int64_t i10 = 0; + int64_t i11 = 0; + int64_t i12 = 0; + int64_t i13 = 0; - for (int64_t i03 = 0; i03 < ne03; i03++) { - for (int64_t i02 = 0; i02 < ne02; i02++) { - for (int64_t i01 = 0; i01 < ne01; i01++) { - const char * src0_ptr = (char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03; - char * dst_ptr = (char *) dst->data + id*rs; + if (dst->type == GGML_TYPE_F32) { + for (int64_t i03 = 0; i03 < ne03; i03++) { + for (int64_t i02 = 0; i02 < ne02; i02++) { + for (int64_t i01 = 0; i01 < ne01; i01++) { + for (int64_t i00 = 0; i00 < ne00; i00++) { + const char * src0_ptr = ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03); + char * dst_ptr = ((char *) dst->data + i10*nb0 + i11*nb1 + i12*nb2 + i13*nb3); - memcpy(dst_ptr, src0_ptr, rs); + memcpy(dst_ptr, src0_ptr, sizeof(float)); - id++; - } - } - } - } else if (dst->type == GGML_TYPE_F16) { - size_t id = 0; - ggml_fp16_t * dst_ptr = (ggml_fp16_t *) dst->data; - - for (int64_t i03 = 0; i03 < ne03; i03++) { - for (int64_t i02 = 0; i02 < ne02; i02++) { - for (int64_t i01 = 0; i01 < ne01; i01++) { - for (int64_t i00 = 0; i00 < ne00; i00++) { - const float * src0_ptr = (float *) ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03); - - dst_ptr[id] = GGML_FP32_TO_FP16(*src0_ptr); - id++; + if (++i10 == dst->ne[0]) { + i10 = 0; + if (++i11 == dst->ne[1]) { + i11 = 0; + if (++i12 == dst->ne[2]) { + i12 = 0; + if (++i13 == dst->ne[3]) { + i13 = 0; + } + } + } + } + } + } + } + } + } else if (dst->type == GGML_TYPE_F16) { + for (int64_t i03 = 0; i03 < ne03; i03++) { + for (int64_t i02 = 0; i02 < ne02; i02++) { + for (int64_t i01 = 0; i01 < ne01; i01++) { + for (int64_t i00 = 0; i00 < ne00; i00++) { + const char * src0_ptr = ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03); + char * dst_ptr = ((char *) dst->data + i10*nb0 + i11*nb1 + i12*nb2 + i13*nb3); + + *(ggml_fp16_t *) dst_ptr = GGML_FP32_TO_FP16(*(const float *) src0_ptr); + + if (++i10 == dst->ne[0]) { + i10 = 0; + if (++i11 == dst->ne[1]) { + i11 = 0; + if (++i12 == dst->ne[2]) { + i12 = 0; + if (++i13 == dst->ne[3]) { + i13 = 0; + } + } + } } } } } - } else { - GGML_ASSERT(false); // TODO: implement } } else { - //printf("%s: this is not optimal - fix me\n", __func__); - - if (dst->type == GGML_TYPE_F32) { - size_t id = 0; - float * dst_ptr = (float *) dst->data; - - for (int64_t i03 = 0; i03 < ne03; i03++) { - for (int64_t i02 = 0; i02 < ne02; i02++) { - for (int64_t i01 = 0; i01 < ne01; i01++) { - for (int64_t i00 = 0; i00 < ne00; i00++) { - const float * src0_ptr = (float *) ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03); - - dst_ptr[id] = *src0_ptr; - id++; - } - } - } - } - } else if (dst->type == GGML_TYPE_F16) { - size_t id = 0; - ggml_fp16_t * dst_ptr = (ggml_fp16_t *) dst->data; - - for (int64_t i03 = 0; i03 < ne03; i03++) { - for (int64_t i02 = 0; i02 < ne02; i02++) { - for (int64_t i01 = 0; i01 < ne01; i01++) { - for (int64_t i00 = 0; i00 < ne00; i00++) { - const float * src0_ptr = (float *) ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03); - - dst_ptr[id] = GGML_FP32_TO_FP16(*src0_ptr); - id++; - } - } - } - } - } else { - GGML_ASSERT(false); // TODO: implement - } + GGML_ASSERT(false); // TODO: implement } } diff --git a/ggml.h b/ggml.h index ad962b109..3c94efc35 100644 --- a/ggml.h +++ b/ggml.h @@ -558,6 +558,16 @@ struct ggml_tensor * ggml_view_2d( size_t nb1, // row stride in bytes size_t offset); +struct ggml_tensor * ggml_view_3d( + struct ggml_context * ctx, + struct ggml_tensor * a, + int64_t ne0, + int64_t ne1, + int64_t ne2, + size_t nb1, // row stride in bytes + size_t nb2, // slice stride in bytes + size_t offset); + struct ggml_tensor * ggml_permute( struct ggml_context * ctx, struct ggml_tensor * a, diff --git a/llama.cpp b/llama.cpp index e4517959a..581a8399d 100644 --- a/llama.cpp +++ b/llama.cpp @@ -810,37 +810,35 @@ static bool llama_eval_internal( // self-attention { - struct ggml_tensor * Qcur = ggml_mul_mat(ctx0, model.layers[il].wq, cur); - struct ggml_tensor * Kcur = ggml_mul_mat(ctx0, model.layers[il].wk, cur); - struct ggml_tensor * Vcur = ggml_mul_mat(ctx0, model.layers[il].wv, cur); + // compute Q and K and RoPE them + struct ggml_tensor * Qcur = ggml_rope(ctx0, ggml_reshape_3d(ctx0, ggml_mul_mat(ctx0, model.layers[il].wq, cur), n_embd/n_head, n_head, N), n_past, n_rot, 0); + struct ggml_tensor * Kcur = ggml_rope(ctx0, ggml_reshape_3d(ctx0, ggml_mul_mat(ctx0, model.layers[il].wk, cur), n_embd/n_head, n_head, N), n_past, n_rot, 0); // store key and value to memory - if (N >= 1) { - struct ggml_tensor * k = ggml_view_1d(ctx0, kv_self.k, N*n_embd, (ggml_element_size(kv_self.k)*n_embd)*(il*n_ctx + n_past)); - struct ggml_tensor * v = ggml_view_1d(ctx0, kv_self.v, N*n_embd, (ggml_element_size(kv_self.v)*n_embd)*(il*n_ctx + n_past)); + { + // compute the transposed [N, n_embd] V matrix + struct ggml_tensor * Vcur = ggml_transpose(ctx0, ggml_reshape_2d(ctx0, ggml_mul_mat(ctx0, model.layers[il].wv, cur), n_embd, N)); + struct ggml_tensor * k = ggml_view_1d(ctx0, kv_self.k, N*n_embd, (ggml_element_size(kv_self.k)*n_embd)*(il*n_ctx + n_past)); + struct ggml_tensor * v = ggml_view_2d(ctx0, kv_self.v, N, n_embd, + ( n_ctx)*ggml_element_size(kv_self.v), + (il*n_ctx)*ggml_element_size(kv_self.v)*n_embd + n_past*ggml_element_size(kv_self.v)); + + // important: storing RoPE-ed version of K in the KV cache! ggml_build_forward_expand(&gf, ggml_cpy(ctx0, Kcur, k)); ggml_build_forward_expand(&gf, ggml_cpy(ctx0, Vcur, v)); } - // Q = Qcur.contiguous().view(n_embd/n_head, n_head, N).permute(0, 2, 1, 3) struct ggml_tensor * Q = ggml_permute(ctx0, - ggml_rope(ctx0, - ggml_cpy(ctx0, - Qcur, - ggml_new_tensor_3d(ctx0, GGML_TYPE_F32, n_embd/n_head, n_head, N)), - n_past, n_rot, 0), + Qcur, 0, 2, 1, 3); - // K = Kmem.view(n_embd/n_head, n_head, n_past + N).permute(0, 2, 1, 3) struct ggml_tensor * K = ggml_permute(ctx0, - ggml_rope(ctx0, - ggml_reshape_3d(ctx0, - ggml_view_1d(ctx0, kv_self.k, (n_past + N)*n_embd, il*n_ctx*ggml_element_size(kv_self.k)*n_embd), - n_embd/n_head, n_head, n_past + N), - n_past, n_rot, 1), + ggml_reshape_3d(ctx0, + ggml_view_1d(ctx0, kv_self.k, (n_past + N)*n_embd, il*n_ctx*ggml_element_size(kv_self.k)*n_embd), + n_embd/n_head, n_head, n_past + N), 0, 2, 1, 3); // K * Q @@ -858,18 +856,23 @@ static bool llama_eval_internal( // KQ = soft_max(KQ_masked) struct ggml_tensor * KQ_soft_max = ggml_soft_max(ctx0, KQ_masked); - // V_trans = Vmem.view(n_embd/n_head, n_head, n_past + N).permute(1, 2, 0, 3).contiguous() - struct ggml_tensor * V_trans = - ggml_cpy(ctx0, - ggml_permute(ctx0, - ggml_reshape_3d(ctx0, - ggml_view_1d(ctx0, kv_self.v, (n_past + N)*n_embd, il*n_ctx*ggml_element_size(kv_self.v)*n_embd), - n_embd/n_head, n_head, n_past + N), - 1, 2, 0, 3), - ggml_new_tensor_3d(ctx0, kv_self.v->type, n_past + N, n_embd/n_head, n_head)); + // split cached V into n_head heads + struct ggml_tensor * V = + ggml_view_3d(ctx0, kv_self.v, + n_past + N, n_embd/n_head, n_head, + n_ctx*ggml_element_size(kv_self.v), + n_ctx*ggml_element_size(kv_self.v)*n_embd/n_head, + il*n_ctx*ggml_element_size(kv_self.v)*n_embd); - // KQV = transpose(V) * KQ_soft_max - struct ggml_tensor * KQV = ggml_mul_mat(ctx0, V_trans, KQ_soft_max); +#if 1 + struct ggml_tensor * KQV = ggml_mul_mat(ctx0, V, KQ_soft_max); +#else + // make V contiguous in memory to speed up the matmul, however we waste time on the copy + // on M1 this is faster for the perplexity computation, but ~5% slower for the single-token generation + // is there a better way? + struct ggml_tensor * V_cont = ggml_cpy(ctx0, V, ggml_new_tensor_3d(ctx0, kv_self.v->type, n_past + N, n_embd/n_head, n_head)); + struct ggml_tensor * KQV = ggml_mul_mat(ctx0, V_cont, KQ_soft_max); +#endif // KQV_merged = KQV.permute(0, 2, 1, 3) struct ggml_tensor * KQV_merged = ggml_permute(ctx0, KQV, 0, 2, 1, 3); @@ -955,9 +958,13 @@ static bool llama_eval_internal( ggml_build_forward_expand(&gf, inpL); ggml_graph_compute (ctx0, &gf); + // print timing information per ggml operation (for debugging purposes) + // requires GGML_PERF to be defined + //ggml_graph_print(&gf); + + // plot the computation graph in dot format (for debugging purposes) //if (n_past%100 == 0) { - // ggml_graph_print (&gf); - // ggml_graph_dump_dot(&gf, NULL, "gpt-2.dot"); + // ggml_graph_dump_dot(&gf, NULL, "llama.dot"); //} //embd_w.resize(n_vocab*N); From eeaa7b0492fc79baab8bb1fe195d6c87159f2bd3 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Wed, 5 Apr 2023 22:11:03 +0300 Subject: [PATCH 15/53] ggml : multi-thread ggml_rope() (~3-4 times faster on M1) (#781) --- ggml.c | 41 +++++++++++++++++++++++++++++++++++++---- 1 file changed, 37 insertions(+), 4 deletions(-) diff --git a/ggml.c b/ggml.c index a3a3314c7..8a60bc383 100644 --- a/ggml.c +++ b/ggml.c @@ -7238,7 +7238,6 @@ static void ggml_compute_forward_rope_f32( const struct ggml_tensor * src0, const struct ggml_tensor * src1, struct ggml_tensor * dst) { - assert(params->ith == 0); assert(src1->type == GGML_TYPE_I32); assert(ggml_nelements(src1) == 3); @@ -7265,11 +7264,28 @@ static void ggml_compute_forward_rope_f32( assert(nb0 == sizeof(float)); - // TODO: optimize + const int ith = params->ith; + const int nth = params->nth; + + const int nr = ggml_nrows(src0); + + // rows per thread + const int dr = (nr + nth - 1)/nth; + + // row range for this thread + const int ir0 = dr*ith; + const int ir1 = MIN(ir0 + dr, nr); + + // row index used to determine which thread to use + int ir = 0; + for (int64_t i3 = 0; i3 < ne3; i3++) { for (int64_t i2 = (mode == 0 ? 0 : n_past); i2 < ne2; i2++) { const int p = (mode == 0 ? n_past + i2 : i2); for (int64_t i1 = 0; i1 < ne1; i1++) { + if (ir++ < ir0) continue; + if (ir > ir1) break; + for (int i0 = 0; i0 < n_dims; i0 += 2) { const float theta = powf(10000.0, ((float)-i0)/n_dims); @@ -7295,7 +7311,6 @@ static void ggml_compute_forward_rope_f16( const struct ggml_tensor * src0, const struct ggml_tensor * src1, struct ggml_tensor * dst) { - assert(params->ith == 0); assert(src1->type == GGML_TYPE_I32); assert(ggml_nelements(src1) == 3); @@ -7322,10 +7337,28 @@ static void ggml_compute_forward_rope_f16( assert(nb0 == sizeof(ggml_fp16_t)); + const int ith = params->ith; + const int nth = params->nth; + + const int nr = ggml_nrows(src0); + + // rows per thread + const int dr = (nr + nth - 1)/nth; + + // row range for this thread + const int ir0 = dr*ith; + const int ir1 = MIN(ir0 + dr, nr); + + // row index used to determine which thread to use + int ir = 0; + for (int64_t i3 = 0; i3 < ne3; i3++) { for (int64_t i2 = (mode == 0 ? 0 : n_past); i2 < ne2; i2++) { const int p = (mode == 0 ? n_past + i2 : i2); for (int64_t i1 = 0; i1 < ne1; i1++) { + if (ir++ < ir0) continue; + if (ir > ir1) break; + for (int i0 = 0; i0 < n_dims; i0 += 2) { const float theta = powf(10000.0, ((float)-i0)/n_dims); @@ -9424,7 +9457,7 @@ void ggml_graph_compute(struct ggml_context * ctx, struct ggml_cgraph * cgraph) } break; case GGML_OP_ROPE: { - node->n_tasks = 1; + node->n_tasks = n_threads; } break; case GGML_OP_CONV_1D_1S: case GGML_OP_CONV_1D_2S: From d2beca95dcfcd6f1145886e914b879ffc3604b7a Mon Sep 17 00:00:00 2001 From: Pavol Rusnak Date: Thu, 6 Apr 2023 08:56:58 +0200 Subject: [PATCH 16/53] Make docker instructions more explicit (#785) --- README.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index d9269c0f1..5ef4318eb 100644 --- a/README.md +++ b/README.md @@ -350,20 +350,22 @@ We have two Docker images available for this project: The easiest way to download the models, convert them to ggml and optimize them is with the --all-in-one command which includes the full docker image. +Replace `/path/to/models` below with the actual path where you downloaded the models. + ```bash -docker run -v /llama/models:/models ghcr.io/ggerganov/llama.cpp:full --all-in-one "/models/" 7B +docker run -v /path/to/models:/models ghcr.io/ggerganov/llama.cpp:full --all-in-one "/models/" 7B ``` On complete, you are ready to play! ```bash -docker run -v /llama/models:/models ghcr.io/ggerganov/llama.cpp:full --run -m /models/7B/ggml-model-q4_0.bin -p "Building a website can be done in 10 simple steps:" -n 512 +docker run -v /path/to/models:/models ghcr.io/ggerganov/llama.cpp:full --run -m /models/7B/ggml-model-q4_0.bin -p "Building a website can be done in 10 simple steps:" -n 512 ``` or with light image: ```bash -docker run -v /llama/models:/models ghcr.io/ggerganov/llama.cpp:light -m /models/7B/ggml-model-q4_0.bin -p "Building a website can be done in 10 simple steps:" -n 512 +docker run -v /path/to/models:/models ghcr.io/ggerganov/llama.cpp:light -m /models/7B/ggml-model-q4_0.bin -p "Building a website can be done in 10 simple steps:" -n 512 ``` ### Contributing From cc9cee8e9e7598bd280295f6264f36d3a9224006 Mon Sep 17 00:00:00 2001 From: Sergey Alirzaev Date: Thu, 6 Apr 2023 17:59:11 +0200 Subject: [PATCH 17/53] Do not crash when it has nothing to say. (#796) Otherwise observing this in the interactive mode: /usr/lib/gcc/x86_64-pc-linux-gnu/12/include/g++-v12/bits/stl_vector.h:1230: reference std::vector::back() [_Tp = int, _Alloc = std::allocator]: Assertion '!this->empty()' failed. --- examples/main/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/main/main.cpp b/examples/main/main.cpp index 453450a41..67a34e667 100644 --- a/examples/main/main.cpp +++ b/examples/main/main.cpp @@ -431,7 +431,7 @@ int main(int argc, char ** argv) { } // end of text token - if (embd.back() == llama_token_eos()) { + if (!embd.empty() && embd.back() == llama_token_eos()) { if (params.instruct) { is_interacting = true; } else { From 4953e9007f86327aabc8312a7211c18019a3a40e Mon Sep 17 00:00:00 2001 From: Ivan Stepanov Date: Fri, 7 Apr 2023 19:02:12 +0300 Subject: [PATCH 18/53] llama : always sort logits before nucleus sampling (#812) * Always sort logits before nucleus sampling * remove second normalization - fix windows build - remove normalization since std::discrete_distribution does not require it --- llama.cpp | 17 +++-------------- 1 file changed, 3 insertions(+), 14 deletions(-) diff --git a/llama.cpp b/llama.cpp index 581a8399d..978327a5b 100644 --- a/llama.cpp +++ b/llama.cpp @@ -1236,19 +1236,13 @@ static llama_vocab::id llama_sample_top_p_top_k( } } - if (top_k > 0 && top_k < n_logits) { - sample_top_k(logits_id, top_k); - } - - float maxl = -std::numeric_limits::infinity(); - for (const auto & kv : logits_id) { - maxl = Max(maxl, kv.first); - } + sample_top_k(logits_id, top_k > 0 ? Min(top_k, n_logits) : n_logits); // compute probs for the top k tokens std::vector probs; probs.reserve(logits_id.size()); + float maxl = logits_id[0].first; double sum = 0.0; for (const auto & kv : logits_id) { const float p = expf(kv.first - maxl); @@ -1271,16 +1265,11 @@ static llama_vocab::id llama_sample_top_p_top_k( break; } } - - cumsum = 1.0/cumsum; - for (int i = 0; i < (int) probs.size(); i++) { - probs[i] *= cumsum; - } } //printf("\n"); //for (int i = 0; i < (int) 10; i++) { - // printf("%d: '%s' %f\n", i, vocab.id_to_token.at(logits_id[i].second).c_str(), probs[i]); + // printf("%d: '%s' %f\n", i, lctx.vocab.id_to_token.at(logits_id[i].second).tok.c_str(), probs[i]); //} //printf("\n\n"); //exit(0); From c1950c343109ab1fd15fc2ae1c83650c85d4eeef Mon Sep 17 00:00:00 2001 From: iacore <74560659+iacore@users.noreply.github.com> Date: Fri, 7 Apr 2023 16:05:29 +0000 Subject: [PATCH 19/53] zig : don't link examples/common.cpp for non-example (#814) --- build.zig | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/build.zig b/build.zig index b73460880..defc2c3ad 100644 --- a/build.zig +++ b/build.zig @@ -3,12 +3,14 @@ const std = @import("std"); pub fn build(b: *std.Build) void { const target = b.standardTargetOptions(.{}); const optimize = b.standardOptimizeOption(.{}); + const want_lto = b.option(bool, "lto", "Want -fLTO"); const lib = b.addStaticLibrary(.{ .name = "llama", .target = target, .optimize = optimize, }); + lib.want_lto = want_lto; lib.linkLibCpp(); lib.addIncludePath("."); lib.addIncludePath("examples"); @@ -17,11 +19,11 @@ pub fn build(b: *std.Build) void { }, &.{"-std=c11"}); lib.addCSourceFiles(&.{ "llama.cpp", - "examples/common.cpp", }, &.{"-std=c++11"}); lib.install(); - const build_args = .{ .b = b, .lib = lib, .target = target, .optimize = optimize }; + const build_args = .{ .b = b, .lib = lib, .target = target, .optimize = optimize, .want_lto = want_lto }; + const exe = build_example("main", build_args); _ = build_example("quantize", build_args); _ = build_example("perplexity", build_args); @@ -44,16 +46,19 @@ fn build_example(comptime name: []const u8, args: anytype) *std.build.LibExeObjS const lib = args.lib; const target = args.target; const optimize = args.optimize; + const want_lto = args.want_lto; const exe = b.addExecutable(.{ .name = name, .target = target, .optimize = optimize, }); + exe.want_lto = want_lto; exe.addIncludePath("."); exe.addIncludePath("examples"); exe.addCSourceFiles(&.{ std.fmt.comptimePrint("examples/{s}/{s}.cpp", .{name, name}), + "examples/common.cpp", }, &.{"-std=c++11"}); exe.linkLibrary(lib); exe.install(); From 698f7b5d6316a1f8453b3b32fd0d637d24952ffd Mon Sep 17 00:00:00 2001 From: bhubbb <79117352+bhubbb@users.noreply.github.com> Date: Sat, 8 Apr 2023 02:11:58 +1000 Subject: [PATCH 20/53] make : add libllama.so target for llama-cpp-python (#797) I was able to get llama-cpp-python working but only when I build libllama.so with make. --- Makefile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Makefile b/Makefile index cb14ffdbc..96c19deb6 100644 --- a/Makefile +++ b/Makefile @@ -166,6 +166,8 @@ perplexity: examples/perplexity/perplexity.cpp ggml.o llama.o common.o embedding: examples/embedding/embedding.cpp ggml.o llama.o common.o $(CXX) $(CXXFLAGS) examples/embedding/embedding.cpp ggml.o llama.o common.o -o embedding $(LDFLAGS) +libllama.so: llama.o ggml.o + $(CXX) $(CXXFLAGS) -shared -fPIC -o libllama.so llama.o ggml.o $(LDFLAGS) # # Tests # From 62cfc54f77e519057110265b52b0d614fa363e2a Mon Sep 17 00:00:00 2001 From: unbounded Date: Sat, 8 Apr 2023 00:09:18 +0200 Subject: [PATCH 21/53] Add quantize-stats command for testing quantization (#728) Command that calculates some statistics over the errors introduced by quantization, like mean square error, max error and some percentile errors for layer weights. Should be useful for testing quantization improvements. Exposes some internal state from ggml and llama for testing --- .gitignore | 1 + Makefile | 5 +- examples/CMakeLists.txt | 1 + examples/quantize-stats/CMakeLists.txt | 4 + examples/quantize-stats/quantize-stats.cpp | 355 +++++++++++++++++++++ ggml.c | 30 +- ggml.h | 24 ++ llama.cpp | 5 + llama.h | 7 + 9 files changed, 415 insertions(+), 17 deletions(-) create mode 100644 examples/quantize-stats/CMakeLists.txt create mode 100644 examples/quantize-stats/quantize-stats.cpp diff --git a/.gitignore b/.gitignore index a0525430d..d8dd34fb9 100644 --- a/.gitignore +++ b/.gitignore @@ -19,6 +19,7 @@ models/* /main /quantize +/quantize-stats /result /perplexity /embedding diff --git a/Makefile b/Makefile index 96c19deb6..c55338e18 100644 --- a/Makefile +++ b/Makefile @@ -149,7 +149,7 @@ common.o: examples/common.cpp examples/common.h $(CXX) $(CXXFLAGS) -c examples/common.cpp -o common.o clean: - rm -vf *.o main quantize perplexity embedding + rm -vf *.o main quantize quantize-stats perplexity embedding main: examples/main/main.cpp ggml.o llama.o common.o $(CXX) $(CXXFLAGS) examples/main/main.cpp ggml.o llama.o common.o -o main $(LDFLAGS) @@ -160,6 +160,9 @@ main: examples/main/main.cpp ggml.o llama.o common.o quantize: examples/quantize/quantize.cpp ggml.o llama.o $(CXX) $(CXXFLAGS) examples/quantize/quantize.cpp ggml.o llama.o -o quantize $(LDFLAGS) +quantize-stats: examples/quantize-stats/quantize-stats.cpp ggml.o llama.o + $(CXX) $(CXXFLAGS) examples/quantize-stats/quantize-stats.cpp ggml.o llama.o -o quantize-stats $(LDFLAGS) + perplexity: examples/perplexity/perplexity.cpp ggml.o llama.o common.o $(CXX) $(CXXFLAGS) examples/perplexity/perplexity.cpp ggml.o llama.o common.o -o perplexity $(LDFLAGS) diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index ce3a34710..67a7cea54 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -31,6 +31,7 @@ if (EMSCRIPTEN) else() add_subdirectory(main) add_subdirectory(quantize) + add_subdirectory(quantize-stats) add_subdirectory(perplexity) add_subdirectory(embedding) endif() diff --git a/examples/quantize-stats/CMakeLists.txt b/examples/quantize-stats/CMakeLists.txt new file mode 100644 index 000000000..7bebc11a1 --- /dev/null +++ b/examples/quantize-stats/CMakeLists.txt @@ -0,0 +1,4 @@ +set(TARGET quantize-stats) +add_executable(${TARGET} quantize-stats.cpp) +target_link_libraries(${TARGET} PRIVATE llama ${CMAKE_THREAD_LIBS_INIT}) +target_compile_features(${TARGET} PRIVATE cxx_std_11) diff --git a/examples/quantize-stats/quantize-stats.cpp b/examples/quantize-stats/quantize-stats.cpp new file mode 100644 index 000000000..af1e6272e --- /dev/null +++ b/examples/quantize-stats/quantize-stats.cpp @@ -0,0 +1,355 @@ +#include "ggml.h" +#include "llama.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static const char * type_strs[] = { "q4_0", "q4_1", "i8", "i16", "i32", "f16", "f32" }; +static_assert(sizeof(type_strs) == GGML_TYPE_COUNT * sizeof(char *), "Incomplete type list"); + +struct quantize_stats_params { + std::string model = "models/7B/ggml-model-f16.bin"; + bool verbose = false; + bool per_layer_stats = false; + bool print_histogram = false; + bool reference = false; + std::vector include_layers; + std::vector exclude_layers; + std::vector include_types; +}; + +const int64_t SCRATCH_ELEMENTS = 32*32; +const size_t HISTOGRAM_BUCKETS = 150; +const double HISTOGRAM_RANGE = 0.03; + +struct error_stats { + size_t num_samples; + double total_error; + double max_error; + uint64_t error_histogram[HISTOGRAM_BUCKETS]; +}; + + +void quantize_stats_print_usage(int /*argc*/, char ** argv) { + quantize_stats_params params; + fprintf(stderr, "usage: %s [options]\n", argv[0]); + fprintf(stderr, "\n"); + fprintf(stderr, "options:\n"); + fprintf(stderr, " -h, --help show this help message and exit\n"); + fprintf(stderr, " -m FNAME, --model FNAME\n"); + fprintf(stderr, " model path (default: %s)\n", params.model.c_str()); + fprintf(stderr, " -r, --reference\n"); + fprintf(stderr, " use reference implementation (default: false)\n"); + fprintf(stderr, " -v, --verbose\n"); + fprintf(stderr, " verbose output (default: false)\n"); + fprintf(stderr, " -p, --per-layer-stats\n"); + fprintf(stderr, " print stats per layer (default: false)\n"); + fprintf(stderr, " --histogram\n"); + fprintf(stderr, " print error histogram (default: false)\n"); + fprintf(stderr, " -l LAYER, --include-layer LAYER\n"); + fprintf(stderr, " only test layers matching pattern\n"); + fprintf(stderr, " -L LAYER, --exclude-layer LAYER\n"); + fprintf(stderr, " exclude layers matching pattern\n"); + fprintf(stderr, " -t TYPE, --type TYPE\n"); + fprintf(stderr, " only test given type (q4_0, q4_1)\n"); + fprintf(stderr, "\n"); +} + +// Check if a layer is included/excluded by command line +bool layer_included(const quantize_stats_params params, const std::string & layer) { + for (const auto& excluded : params.exclude_layers) { + if (std::regex_search(layer, std::regex(excluded))) { + return false; + } + } + for (const auto& included : params.include_layers) { + if (std::regex_search(layer, std::regex(included))) { + return true; + } + } + return params.include_layers.empty(); +} + +// Update error statistics given vectors with the before/after result of quantization +void update_error_stats(int64_t nelements, const float * input, const float * output, error_stats & stats) { + for (int64_t i = 0; i < nelements; i++) { + double diff = input[i] - output[i]; + stats.total_error += diff * diff; + stats.max_error = fmax(fabs(diff), stats.max_error); + stats.error_histogram[std::max(std::min((size_t) floor(fabs(diff) / HISTOGRAM_RANGE * HISTOGRAM_BUCKETS), HISTOGRAM_BUCKETS-1), (size_t) 0)]++; + } + stats.num_samples += nelements; +} + +double find_quantile(const error_stats & stats, double quantile) { + double sum = std::accumulate(std::begin(stats.error_histogram), std::end(stats.error_histogram), 0.0); + + double accum = 0; + for (size_t i = 0; i < HISTOGRAM_BUCKETS; i++) { + accum += stats.error_histogram[i]; + if (accum >= sum*quantile) { + return (i+1) * HISTOGRAM_RANGE / HISTOGRAM_BUCKETS; + } + } + return INFINITY; +} + +void print_error_stats(const std::string & name, const error_stats & stats, bool print_histogram) { + double rmse = sqrt(stats.total_error / (double) stats.num_samples); + double median = find_quantile(stats, .5); + double pct95 = find_quantile(stats, .95); + printf("%-50s: rmse %.8f, maxerr %.8f, 95pct<%.4f, median<%.4f\n", name.c_str(), rmse, stats.max_error, pct95, median); + if (print_histogram) { + printf("Error distribution:\n"); + for (size_t i = 0; i < HISTOGRAM_BUCKETS; i++) { + double lower = i * HISTOGRAM_RANGE / HISTOGRAM_BUCKETS; + double upper = (i+1) * HISTOGRAM_RANGE / HISTOGRAM_BUCKETS; + if (i == HISTOGRAM_BUCKETS -1) upper = INFINITY; + printf("[%3.4f, %3.4f): %11" PRIu64 "\n", lower, upper, stats.error_histogram[i]); + } + } +} + +// copied from ggml.h - verify that we can access this as a flat array +static bool tensor_is_contiguous(const struct ggml_tensor * tensor) { + static_assert(GGML_MAX_DIMS == 4, "GGML_MAX_DIMS is not 4 - update this function"); + + return + tensor->nb[0] == ggml_type_size(tensor->type) && + tensor->nb[1] == (tensor->nb[0]*tensor->ne[0])/ggml_blck_size(tensor->type) && + tensor->nb[2] == tensor->nb[1]*tensor->ne[1] && + tensor->nb[3] == tensor->nb[2]*tensor->ne[2]; +} + +// Run quantization function for a single layer and update error stats +void test_roundtrip_on_layer( + std::string & name, + bool print_layer_stats, + const quantize_fns_t & qfns, + bool use_reference, + const ggml_tensor * layer, + float * input_scratch, + char *quantized_scratch, + float * output_scratch, + error_stats & total_error) { + + assert(tensor_is_contiguous(layer)); + error_stats layer_error {}; + int64_t nelements = ggml_nelements(layer); + + for (int64_t offset = 0; offset < nelements; offset += SCRATCH_ELEMENTS) { + int64_t chunk_size = std::min(SCRATCH_ELEMENTS, nelements - offset); + + if (layer->type == GGML_TYPE_F16) { + for (int i = 0; i < chunk_size; i++) { + input_scratch[i] = ggml_get_f32_1d(layer, i + offset); + } + } else { + input_scratch = ggml_get_data_f32(layer) + offset; + } + + if (use_reference) { + qfns.quantize_row_q_reference(input_scratch, quantized_scratch, chunk_size); + } else { + qfns.quantize_row_q(input_scratch, quantized_scratch, chunk_size); + } + qfns.dequantize_row_q(quantized_scratch, output_scratch, chunk_size); + + update_error_stats(chunk_size, input_scratch, output_scratch, total_error); + if (print_layer_stats) { + update_error_stats(chunk_size, input_scratch, output_scratch, layer_error); + } + } + if (print_layer_stats) { + print_error_stats(name, layer_error, false); + } +} + +int main(int argc, char ** argv) { + ggml_time_init(); + + quantize_stats_params params; + + // read command line + + bool invalid_param = false; + std::string arg; + for (int i = 1; i < argc; i++) { + arg = argv[i]; + + if (arg == "-h" || arg == "--help") { + quantize_stats_print_usage(argc, argv); + exit(0); + } else if (arg == "-r" || arg == "--reference") { + params.reference = true; + } else if (arg == "-v") { + params.verbose = true; + } else if (arg == "-p" || arg == "--per-layer-stats") { + params.per_layer_stats = true; + } else if (arg == "--histogram") { + params.print_histogram = true; + } else if (arg == "-m" || arg == "--model") { + if (++i >= argc) { + invalid_param = true; + break; + } + params.model = argv[i]; + } else if (arg == "-l" || arg == "--include-layer") { + if (++i >= argc) { + invalid_param = true; + break; + } + params.include_layers.push_back(argv[i]); + } else if (arg == "-L" || arg == "--exclude-layer") { + if (++i >= argc) { + invalid_param = true; + break; + } + params.exclude_layers.push_back(argv[i]); + } else if (arg == "-t" || arg == "--type") { + if (++i >= argc) { + invalid_param = true; + break; + } + int j; + for (j = 0; j < GGML_TYPE_COUNT && strcmp(argv[i], type_strs[j]) != 0; j++) { + // find match + } + if (j < GGML_TYPE_COUNT) { + params.include_types.push_back((ggml_type) j); + } else { + fprintf(stderr, "error: %s not in list of types\n", argv[i]); + invalid_param = true; + } + } else { + fprintf(stderr, "error: unknown argument: %s\n", arg.c_str()); + quantize_stats_print_usage(argc, argv); + return 1; + } + } + if (invalid_param) { + fprintf(stderr, "error: invalid parameter for argument: %s\n", arg.c_str()); + quantize_stats_print_usage(argc, argv); + return 1; + } + + // load the model + fprintf(stderr, "Loading model\n"); + + const int64_t t_main_start_us = ggml_time_us(); + llama_context * ctx; + + { + auto lparams = llama_context_default_params(); + + lparams.n_ctx = 256; + lparams.n_parts = 1; + lparams.seed = 1; + lparams.f16_kv = false; + lparams.use_mlock = false; + + ctx = llama_init_from_file(params.model.c_str(), lparams); + + if (ctx == NULL) { + fprintf(stderr, "%s: error: failed to load model '%s'\n", __func__, params.model.c_str()); + return 1; + } + } + + // Sort tensors for consistent output + const auto tensors = llama_internal_get_tensor_map(ctx); + std::map tensors_sorted { tensors.begin(), tensors.end() }; + + // check layer tensors + int included_layers = 0; + int64_t max_nelements = 0; + bool is_f16 = false; + for (const auto& kv_tensor : tensors_sorted) { + if (!layer_included(params, kv_tensor.first)) { + continue; + } + if (params.verbose) { + printf("%s: type %s, size %" PRId64 "\n", kv_tensor.first.c_str(), type_strs[kv_tensor.second->type], ggml_nelements(kv_tensor.second)); + } + if (kv_tensor.second->type == GGML_TYPE_F16) { + is_f16 = true; + } else if (kv_tensor.second->type != GGML_TYPE_F32) { + fprintf(stderr, "%s: error: Quantization should be tested with a float model, " + "this model contains already quantized layers (%s is type %d)\n", __func__, kv_tensor.first.c_str(), kv_tensor.second->type); + llama_free(ctx); + return 1; + } + included_layers++; + max_nelements = std::max(max_nelements, ggml_nelements(kv_tensor.second)); + } + + if (is_f16) { + printf("note: source model is f16\n"); + } + printf("testing %d layers with max size %" PRId64 "\n", included_layers, max_nelements); + // allocate scratch space + std::vector input_scratch(SCRATCH_ELEMENTS); + std::vector quantized_scratch(SCRATCH_ELEMENTS*4); + std::vector output_scratch(SCRATCH_ELEMENTS); + + // loop throught quantization types + for (int i = 0; i < GGML_TYPE_COUNT; i++) { + if (!params.include_types.empty() && std::find(params.include_types.begin(), params.include_types.end(), i) == params.include_types.end()) { + continue; + } + quantize_fns_t qfns = ggml_internal_get_quantize_fn(i); + if (qfns.quantize_row_q && qfns.dequantize_row_q) { + if (params.verbose) { + printf("testing %s ...\n", type_strs[i]); + } + + error_stats global_stats {}; + + for (const auto& kv_tensor : tensors_sorted) { + if (!layer_included(params, kv_tensor.first)) { + continue; + } + if (params.verbose) { + printf(" %s ...\n", kv_tensor.first.c_str()); + } + std::string layer_name { type_strs[i] }; + layer_name += "::" + kv_tensor.first; + test_roundtrip_on_layer( + layer_name, + params.per_layer_stats, + qfns, + params.reference, + kv_tensor.second, + input_scratch.data(), + quantized_scratch.data(), + output_scratch.data(), + global_stats + ); + } + + print_error_stats(type_strs[i], global_stats, params.print_histogram); + } + } + + + llama_free(ctx); + // report timing + { + const int64_t t_main_end_us = ggml_time_us(); + + printf("\n"); + printf("%s: total time = %8.2f ms\n", __func__, (t_main_end_us - t_main_start_us)/1000.0); + } + + return 0; +} diff --git a/ggml.c b/ggml.c index 8a60bc383..dc084e6b6 100644 --- a/ggml.c +++ b/ggml.c @@ -6564,29 +6564,27 @@ static void ggml_compute_forward_mul_mat_f16_f32( //} } -typedef void (*dequantize_row_q_t)(const void * restrict x, float * restrict y, int k); -typedef void (*quantize_row_q_t)(const float * restrict x, void * restrict y, int k); -typedef void (*vec_dot_q_t)(const int n, float * restrict s, const void * restrict x, const void * restrict y); - -typedef struct { - dequantize_row_q_t dequantize_row_q; - quantize_row_q_t quantize_row_q; - vec_dot_q_t vec_dot_q; -} quantize_fns_t; - static const quantize_fns_t quantize_fns[GGML_TYPE_COUNT] = { [GGML_TYPE_Q4_0] = { - .dequantize_row_q = dequantize_row_q4_0, - .quantize_row_q = quantize_row_q4_0, - .vec_dot_q = ggml_vec_dot_q4_0, + .dequantize_row_q = dequantize_row_q4_0, + .quantize_row_q = quantize_row_q4_0, + .quantize_row_q_reference = (quantize_row_q_t) quantize_row_q4_0_reference, + .vec_dot_q = ggml_vec_dot_q4_0, }, [GGML_TYPE_Q4_1] = { - .dequantize_row_q = dequantize_row_q4_1, - .quantize_row_q = quantize_row_q4_1, - .vec_dot_q = ggml_vec_dot_q4_1, + .dequantize_row_q = dequantize_row_q4_1, + .quantize_row_q = quantize_row_q4_1, + .quantize_row_q_reference = (quantize_row_q_t) quantize_row_q4_1_reference, + .vec_dot_q = ggml_vec_dot_q4_1, }, }; +// For internal test use +quantize_fns_t ggml_internal_get_quantize_fn(size_t i) { + GGML_ASSERT(i < GGML_TYPE_COUNT); + return quantize_fns[i]; +} + static void ggml_compute_forward_mul_mat_q_f32( const struct ggml_compute_params * params, const struct ggml_tensor * src0, diff --git a/ggml.h b/ggml.h index 3c94efc35..2c636c2a9 100644 --- a/ggml.h +++ b/ggml.h @@ -783,6 +783,30 @@ int ggml_cpu_has_blas(void); int ggml_cpu_has_sse3(void); int ggml_cpu_has_vsx(void); + +// +// Internal types and functions exposed for tests and benchmarks +// + +#ifdef __cplusplus +// restrict not standard in C++ +#define GGML_RESTRICT +#else +#define GGML_RESTRICT restrict +#endif +typedef void (*dequantize_row_q_t)(const void * GGML_RESTRICT x, float * GGML_RESTRICT y, int k); +typedef void (*quantize_row_q_t)(const float * GGML_RESTRICT x, void * GGML_RESTRICT y, int k); +typedef void (*vec_dot_q_t)(const int n, float * GGML_RESTRICT s, const void * GGML_RESTRICT x, const void * GGML_RESTRICT y); + +typedef struct { + dequantize_row_q_t dequantize_row_q; + quantize_row_q_t quantize_row_q; + quantize_row_q_t quantize_row_q_reference; + vec_dot_q_t vec_dot_q; +} quantize_fns_t; + +quantize_fns_t ggml_internal_get_quantize_fn(size_t i); + #ifdef __cplusplus } #endif diff --git a/llama.cpp b/llama.cpp index 978327a5b..fc6f43afe 100644 --- a/llama.cpp +++ b/llama.cpp @@ -1852,3 +1852,8 @@ const char * llama_print_system_info(void) { return s.c_str(); } + +// For internal test use +std::unordered_map& llama_internal_get_tensor_map(struct llama_context * ctx) { + return ctx->model.tensors; +} diff --git a/llama.h b/llama.h index 04e2bf71c..deb09fe53 100644 --- a/llama.h +++ b/llama.h @@ -164,6 +164,13 @@ extern "C" { #ifdef __cplusplus } + +#include +#include +// +// Internal function exposed for tests and benchmarks +// +std::unordered_map& llama_internal_get_tensor_map(struct llama_context * ctx); #endif #endif From 317fb12fbd7cef5d86476574bffe0e904af884ca Mon Sep 17 00:00:00 2001 From: lon <114724657+longregen@users.noreply.github.com> Date: Sat, 8 Apr 2023 07:04:23 -0300 Subject: [PATCH 22/53] Add new binaries to flake.nix (#847) --- flake.nix | 3 +++ 1 file changed, 3 insertions(+) diff --git a/flake.nix b/flake.nix index 4c2717e0d..cd1b6d28e 100644 --- a/flake.nix +++ b/flake.nix @@ -30,6 +30,9 @@ mkdir -p $out/bin mv bin/main $out/bin/llama mv bin/quantize $out/bin/quantize + mv bin/embedding $out/bin/embedding + mv bin/perplexity $out/bin/perplexity + echo "#!${llama-python}/bin/python" > $out/bin/convert-pth-to-ggml cat ${./convert-pth-to-ggml.py} >> $out/bin/convert-pth-to-ggml chmod +x $out/bin/convert-pth-to-ggml From f2d1c472946dee2aba9077e8df73346796752b10 Mon Sep 17 00:00:00 2001 From: eiery <19350831+eiery@users.noreply.github.com> Date: Sat, 8 Apr 2023 07:15:17 -0400 Subject: [PATCH 23/53] cmake should link openblas properly with -lopenblas like how it's done in the makefile (#839) --- CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1a434f07b..07443e942 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -115,6 +115,7 @@ if (LLAMA_OPENBLAS) add_compile_definitions(GGML_USE_OPENBLAS) add_link_options(${BLAS_LIBRARIES}) + set(LLAMA_EXTRA_LIBS ${LLAMA_EXTRA_LIBS} openblas) else() message(WARNING "OpenBLAS not found") endif() From aaf3b23debc1fe1a06733c8c6468fb84233cc44f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Pazdiora?= Date: Sat, 8 Apr 2023 17:49:39 +0200 Subject: [PATCH 24/53] fix for windows utf-8 input (#840) Use UTF-16 as input on Windows, since UTF-8 does not work and reads multibyte characters as zeros --- examples/common.cpp | 21 ++++++++++++++++++--- examples/common.h | 1 + examples/main/main.cpp | 9 +++++++++ 3 files changed, 28 insertions(+), 3 deletions(-) diff --git a/examples/common.cpp b/examples/common.cpp index 5400f6b01..b27aa6cf1 100644 --- a/examples/common.cpp +++ b/examples/common.cpp @@ -16,12 +16,19 @@ #endif #if defined (_WIN32) +#include +#include #pragma comment(lib,"kernel32.lib") extern "C" __declspec(dllimport) void* __stdcall GetStdHandle(unsigned long nStdHandle); extern "C" __declspec(dllimport) int __stdcall GetConsoleMode(void* hConsoleHandle, unsigned long* lpMode); extern "C" __declspec(dllimport) int __stdcall SetConsoleMode(void* hConsoleHandle, unsigned long dwMode); extern "C" __declspec(dllimport) int __stdcall SetConsoleCP(unsigned int wCodePageID); extern "C" __declspec(dllimport) int __stdcall SetConsoleOutputCP(unsigned int wCodePageID); +extern "C" __declspec(dllimport) int __stdcall WideCharToMultiByte(unsigned int CodePage, unsigned long dwFlags, + const wchar_t * lpWideCharStr, int cchWideChar, + char * lpMultiByteStr, int cbMultiByte, + const char * lpDefaultChar, bool * lpUsedDefaultChar); +#define CP_UTF8 65001 #endif bool gpt_params_parse(int argc, char ** argv, gpt_params & params) { @@ -307,12 +314,20 @@ void win32_console_init(bool enable_color) { SetConsoleMode(hConOut, dwMode | 0x4); // ENABLE_VIRTUAL_TERMINAL_PROCESSING (0x4) } // Set console output codepage to UTF8 - SetConsoleOutputCP(65001); // CP_UTF8 + SetConsoleOutputCP(CP_UTF8); } void* hConIn = GetStdHandle((unsigned long)-10); // STD_INPUT_HANDLE (-10) if (hConIn && hConIn != (void*)-1 && GetConsoleMode(hConIn, &dwMode)) { - // Set console input codepage to UTF8 - SetConsoleCP(65001); // CP_UTF8 + // Set console input codepage to UTF16 + _setmode(_fileno(stdin), _O_WTEXT); } } + +// Convert a wide Unicode string to an UTF8 string +void win32_utf8_encode(const std::wstring & wstr, std::string & str) { + int size_needed = WideCharToMultiByte(CP_UTF8, 0, &wstr[0], (int)wstr.size(), NULL, 0, NULL, NULL); + std::string strTo(size_needed, 0); + WideCharToMultiByte(CP_UTF8, 0, &wstr[0], (int)wstr.size(), &strTo[0], size_needed, NULL, NULL); + str = strTo; +} #endif diff --git a/examples/common.h b/examples/common.h index 1505aa927..7a8848f9d 100644 --- a/examples/common.h +++ b/examples/common.h @@ -92,4 +92,5 @@ void set_console_color(console_state & con_st, console_color_t color); #if defined (_WIN32) void win32_console_init(bool enable_color); +void win32_utf8_encode(const std::wstring & wstr, std::string & str); #endif diff --git a/examples/main/main.cpp b/examples/main/main.cpp index 67a34e667..d59eeb458 100644 --- a/examples/main/main.cpp +++ b/examples/main/main.cpp @@ -386,10 +386,19 @@ int main(int argc, char ** argv) { std::string line; bool another_line = true; do { +#if defined(_WIN32) + std::wstring wline; + if (!std::getline(std::wcin, wline)) { + // input stream is bad or EOF received + return 0; + } + win32_utf8_encode(wline, line); +#else if (!std::getline(std::cin, line)) { // input stream is bad or EOF received return 0; } +#endif if (line.empty() || line.back() != '\\') { another_line = false; } else { From f963b63afa0e057cfb9eba4d88407c6a0850a0d8 Mon Sep 17 00:00:00 2001 From: comex Date: Sat, 8 Apr 2023 12:24:37 -0700 Subject: [PATCH 25/53] Rewrite loading code to try to satisfy everyone: - 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. This has no immediate benefit, but makes it easier to experiment with different formats, and should make it easier to support the new GPTQ-for-LLaMa models in the future (I have some work in progress on that front). - Support VirtualLock on Windows (using the same `--mlock` option as on Unix). - Indicate loading progress when using mmap + mlock. (Which led me to the interesting observation that on my Linux machine, with a warm file cache, mlock actually takes some time, whereas mmap without mlock starts almost instantly...) - To help implement this, move mlock support from ggml to the loading code. - madvise/PrefetchVirtualMemory support (based on #740) - Switch from ifstream to the `fopen` family of functions to avoid unnecessary copying and, when mmap is enabled, allow reusing the same file descriptor for both metadata reads and mmap (whereas the existing implementation opens the file a second time to mmap). - Quantization now produces a single-file output even with multi-file inputs (not really a feature as much as 'it was easier this way'). Implementation notes: I tried to factor the code into more discrete pieces than before. 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. The exceptions are converted to error codes at the API boundary.) Co-authored-by: Pavol Rusnak (for the bit I copied from #740) --- CMakeLists.txt | 9 +- Makefile | 4 +- examples/common.cpp | 9 +- examples/common.h | 1 + examples/embedding/embedding.cpp | 1 + examples/main/main.cpp | 1 + examples/perplexity/perplexity.cpp | 1 + examples/quantize-stats/quantize-stats.cpp | 9 +- ggml.c | 78 - ggml.h | 20 +- llama.cpp | 1487 ++++++++++---------- llama.h | 13 +- llama_internal.h | 12 + llama_util.h | 383 +++++ 14 files changed, 1204 insertions(+), 824 deletions(-) create mode 100644 llama_internal.h create mode 100755 llama_util.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 07443e942..6bec1f97b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -140,6 +140,7 @@ if (LLAMA_ALL_WARNINGS) -Wpedantic -Wcast-qual -Wno-unused-function + -Wno-multichar ) else() # todo : msvc @@ -152,6 +153,10 @@ if (LLAMA_ALL_WARNINGS) endif() +if (MSVC) + add_compile_definitions(_CRT_SECURE_NO_WARNINGS) +endif() + if (LLAMA_LTO) include(CheckIPOSupported) check_ipo_supported(RESULT result OUTPUT output) @@ -241,7 +246,9 @@ endif() add_library(llama llama.cpp - llama.h) + llama.h + llama_internal.h + llama_util.h) target_include_directories(llama PUBLIC .) target_compile_features(llama PUBLIC cxx_std_11) # don't bump diff --git a/Makefile b/Makefile index c55338e18..3e58a28a7 100644 --- a/Makefile +++ b/Makefile @@ -37,7 +37,7 @@ LDFLAGS = # warnings CFLAGS += -Wall -Wextra -Wpedantic -Wcast-qual -Wdouble-promotion -Wshadow -Wstrict-prototypes -Wpointer-arith -Wno-unused-function -CXXFLAGS += -Wall -Wextra -Wpedantic -Wcast-qual -Wno-unused-function +CXXFLAGS += -Wall -Wextra -Wpedantic -Wcast-qual -Wno-unused-function -Wno-multichar # OS specific # TODO: support Windows @@ -142,7 +142,7 @@ default: main quantize perplexity embedding ggml.o: ggml.c ggml.h $(CC) $(CFLAGS) -c ggml.c -o ggml.o -llama.o: llama.cpp llama.h +llama.o: llama.cpp llama.h llama_util.h llama_internal.h $(CXX) $(CXXFLAGS) -c llama.cpp -o llama.o common.o: examples/common.cpp examples/common.h diff --git a/examples/common.cpp b/examples/common.cpp index b27aa6cf1..f909eed24 100644 --- a/examples/common.cpp +++ b/examples/common.cpp @@ -1,7 +1,5 @@ #include "common.h" -#include "ggml.h" - #include #include #include @@ -161,6 +159,8 @@ bool gpt_params_parse(int argc, char ** argv, gpt_params & params) { params.use_color = true; } else if (arg == "--mlock") { params.use_mlock = true; + } else if (arg == "--no-mmap") { + params.use_mmap = false; } else if (arg == "--mtest") { params.mem_test = true; } else if (arg == "--verbose-prompt") { @@ -240,9 +240,12 @@ void gpt_print_usage(int /*argc*/, char ** argv, const gpt_params & params) { fprintf(stderr, " -b N, --batch_size N batch size for prompt processing (default: %d)\n", params.n_batch); fprintf(stderr, " --perplexity compute perplexity over the prompt\n"); fprintf(stderr, " --keep number of tokens to keep from the initial prompt (default: %d, -1 = all)\n", params.n_keep); - if (ggml_mlock_supported()) { + if (llama_mlock_supported()) { fprintf(stderr, " --mlock force system to keep model in RAM rather than swapping or compressing\n"); } + if (llama_mmap_supported()) { + fprintf(stderr, " --no-mmap do not memory-map model (slower load but may reduce pageouts if not using mlock)\n"); + } fprintf(stderr, " --mtest compute maximum memory usage\n"); fprintf(stderr, " --verbose-prompt print prompt before generation\n"); fprintf(stderr, " -m FNAME, --model FNAME\n"); diff --git a/examples/common.h b/examples/common.h index 7a8848f9d..1ea6f7445 100644 --- a/examples/common.h +++ b/examples/common.h @@ -47,6 +47,7 @@ struct gpt_params { bool instruct = false; // instruction mode (used for Alpaca models) bool ignore_eos = false; // do not stop generating after eos bool perplexity = false; // compute perplexity over the prompt + bool use_mmap = true; // use mmap for faster loads bool use_mlock = false; // use mlock to keep model in memory bool mem_test = false; // compute maximum memory usage bool verbose_prompt = false; // print prompt tokens before generation diff --git a/examples/embedding/embedding.cpp b/examples/embedding/embedding.cpp index d397f35fd..2eda3ac01 100644 --- a/examples/embedding/embedding.cpp +++ b/examples/embedding/embedding.cpp @@ -38,6 +38,7 @@ int main(int argc, char ** argv) { lparams.seed = params.seed; lparams.f16_kv = params.memory_f16; lparams.logits_all = params.perplexity; + lparams.use_mmap = params.use_mmap; lparams.use_mlock = params.use_mlock; lparams.embedding = params.embedding; diff --git a/examples/main/main.cpp b/examples/main/main.cpp index d59eeb458..d333d0dba 100644 --- a/examples/main/main.cpp +++ b/examples/main/main.cpp @@ -97,6 +97,7 @@ int main(int argc, char ** argv) { lparams.n_parts = params.n_parts; lparams.seed = params.seed; lparams.f16_kv = params.memory_f16; + lparams.use_mmap = params.use_mmap; lparams.use_mlock = params.use_mlock; ctx = llama_init_from_file(params.model.c_str(), lparams); diff --git a/examples/perplexity/perplexity.cpp b/examples/perplexity/perplexity.cpp index 07ed0a829..b62f00d0c 100644 --- a/examples/perplexity/perplexity.cpp +++ b/examples/perplexity/perplexity.cpp @@ -115,6 +115,7 @@ int main(int argc, char ** argv) { lparams.seed = params.seed; lparams.f16_kv = params.memory_f16; lparams.logits_all = params.perplexity; + lparams.use_mmap = params.use_mmap; lparams.use_mlock = params.use_mlock; lparams.embedding = params.embedding; diff --git a/examples/quantize-stats/quantize-stats.cpp b/examples/quantize-stats/quantize-stats.cpp index af1e6272e..203bfe8cc 100644 --- a/examples/quantize-stats/quantize-stats.cpp +++ b/examples/quantize-stats/quantize-stats.cpp @@ -1,5 +1,6 @@ #include "ggml.h" #include "llama.h" +#include "llama_internal.h" #include #include @@ -266,15 +267,13 @@ int main(int argc, char ** argv) { } } - // Sort tensors for consistent output - const auto tensors = llama_internal_get_tensor_map(ctx); - std::map tensors_sorted { tensors.begin(), tensors.end() }; + const auto &tensors = llama_internal_get_tensor_map(ctx); // check layer tensors int included_layers = 0; int64_t max_nelements = 0; bool is_f16 = false; - for (const auto& kv_tensor : tensors_sorted) { + for (const auto& kv_tensor : tensors) { if (!layer_included(params, kv_tensor.first)) { continue; } @@ -315,7 +314,7 @@ int main(int argc, char ** argv) { error_stats global_stats {}; - for (const auto& kv_tensor : tensors_sorted) { + for (const auto& kv_tensor : tensors) { if (!layer_included(params, kv_tensor.first)) { continue; } diff --git a/ggml.c b/ggml.c index dc084e6b6..326b8e842 100644 --- a/ggml.c +++ b/ggml.c @@ -97,17 +97,6 @@ typedef void* thread_ret_t; #define static_assert(cond, msg) _Static_assert(cond, msg) #endif -#define GGML_MLOCK_SUPPORT 0 - -#ifdef __has_include - #if __has_include() - #undef GGML_MLOCK_SUPPORT - #define GGML_MLOCK_SUPPORT 1 - #include - #endif -#endif - - /*#define GGML_PERF*/ #define GGML_DEBUG 0 #define GGML_GELU_FP16 @@ -2690,21 +2679,6 @@ static const char * GGML_OP_SYMBOL[GGML_OP_COUNT] = { static_assert(GGML_OP_COUNT == 35, "GGML_OP_COUNT != 35"); -// -// ggml object -// - -struct ggml_object { - size_t offs; - size_t size; - - struct ggml_object * next; - - char padding[8]; -}; - -static const size_t GGML_OBJECT_SIZE = sizeof(struct ggml_object); - static_assert(sizeof(struct ggml_object)%GGML_MEM_ALIGN == 0, "ggml_object size must be a multiple of GGML_MEM_ALIGN"); static_assert(sizeof(struct ggml_tensor)%GGML_MEM_ALIGN == 0, "ggml_tensor size must be a multiple of GGML_MEM_ALIGN"); @@ -2716,7 +2690,6 @@ struct ggml_context { size_t mem_size; void * mem_buffer; bool mem_buffer_owned; - bool mem_buffer_mlocked; bool no_alloc; int n_objects; @@ -3003,7 +2976,6 @@ struct ggml_context * ggml_init(struct ggml_init_params params) { /*.mem_size =*/ params.mem_size, /*.mem_buffer =*/ params.mem_buffer ? params.mem_buffer : malloc(params.mem_size), /*.mem_buffer_owned =*/ params.mem_buffer ? false : true, - /*.mem_buffer_mlocked =*/ false, /*.no_alloc =*/ params.no_alloc, /*.n_objects =*/ 0, /*.objects_begin =*/ NULL, @@ -3036,14 +3008,6 @@ void ggml_free(struct ggml_context * ctx) { GGML_PRINT_DEBUG("%s: context %d with %d objects has been freed. memory used = %zu\n", __func__, i, ctx->n_objects, ctx->objects_end->offs + ctx->objects_end->size); -#if GGML_MLOCK_SUPPORT - if (ctx->mem_buffer_mlocked) { - if (munlock(ctx->mem_buffer, ctx->mem_size)) { - fprintf(stderr, "%s: failed to munlock buffer: %s\n", __func__, strerror(errno)); - } - } -#endif - if (ctx->mem_buffer_owned) { free(ctx->mem_buffer); } @@ -3072,48 +3036,6 @@ size_t ggml_set_scratch(struct ggml_context * ctx, struct ggml_scratch scratch) return result; } -#ifdef __APPLE__ -#define MLOCK_SUGGESTION \ - "Try increasing the sysctl values 'vm.user_wire_limit' and 'vm.global_user_wire_limit' and/or " \ - "decreasing 'vm.global_no_user_wire_amount'. Also try increasing RLIMIT_MLOCK (ulimit -l).\n" -#else -#define MLOCK_SUGGESTION \ - "Try increasing RLIMIT_MLOCK ('ulimit -l' as root).\n" -#endif - -bool ggml_mlock_supported(void) { - return GGML_MLOCK_SUPPORT; -} - -bool ggml_mlock( - struct ggml_context * ctx, - const void *opt_extra_addr, - size_t opt_extra_len, - char **err_p) { - // TODO: Use SetProcessWorkingSetSize() + VirtualLock() on WIN32 -#if GGML_MLOCK_SUPPORT - if (ctx->mem_buffer_mlocked) { - return true; - } - if (mlock(ctx->mem_buffer, ctx->mem_size) || - (opt_extra_len && - mlock(opt_extra_addr, opt_extra_len))) { - if ((*err_p = malloc(1024))) { - snprintf(*err_p, 1024, - "failed to mlock %zu-byte buffer: %s\n" MLOCK_SUGGESTION, - ctx->mem_size + opt_extra_len, - strerror(errno)); - } - return false; - } - ctx->mem_buffer_mlocked = true; - return true; -#else // GGML_MLOCK_SUPPORT - *err_p = strdup("can't mlock because it's not supported on this system"); - return false; -#endif // GGML_MLOCK_SUPPORT -} - //////////////////////////////////////////////////////////////////////////////// struct ggml_tensor * ggml_new_tensor_impl( diff --git a/ggml.h b/ggml.h index 2c636c2a9..af16c647c 100644 --- a/ggml.h +++ b/ggml.h @@ -253,6 +253,19 @@ enum ggml_op { GGML_OP_COUNT, }; + +// ggml object +struct ggml_object { + size_t offs; + size_t size; + + struct ggml_object * next; + + char padding[8]; +}; + +static const size_t GGML_OBJECT_SIZE = sizeof(struct ggml_object); + // n-dimensional tensor struct ggml_tensor { enum ggml_type type; @@ -344,13 +357,6 @@ size_t ggml_used_mem(const struct ggml_context * ctx); size_t ggml_set_scratch(struct ggml_context * ctx, struct ggml_scratch scratch); -bool ggml_mlock_supported(void); -bool ggml_mlock( - struct ggml_context * ctx, - const void *opt_extra_addr, - size_t opt_extra_len, - char **err_p); - struct ggml_tensor * ggml_new_tensor( struct ggml_context * ctx, enum ggml_type type, diff --git a/llama.cpp b/llama.cpp index fc6f43afe..4625e95fb 100644 --- a/llama.cpp +++ b/llama.cpp @@ -1,49 +1,26 @@ +#include "llama_util.h" #include "llama.h" +#include "llama_internal.h" #include "ggml.h" +#include #include #include #include #include #include #include -#include #include #include - -#if defined(_WIN32) && !defined(_POSIX_MAPPED_FILES) -#define WIN32_LEAN_AND_MEAN -#include -#else -#include -#include -#include -#include -#endif - -#define Min(X, Y) ((Y) > (X) ? (X) : (Y)) -#define Max(X, Y) ((Y) < (X) ? (X) : (Y)) +#include +#include +#include +#include #define LLAMA_USE_SCRATCH #define LLAMA_MAX_SCRATCH_BUFFERS 16 -#define LLAMA_ASSERT(x) \ - do { \ - if (!(x)) { \ - fprintf(stderr, "LLAMA_ASSERT: %s:%d: %s\n", __FILE__, __LINE__, #x); \ - abort(); \ - } \ - } while (0) - - -// determine number of model parts based on the dimension -static const std::unordered_map LLAMA_N_PARTS = { - { 4096, 1 }, - { 5120, 2 }, - { 6656, 4 }, - { 8192, 8 }, -}; // available llama models enum e_model { @@ -93,14 +70,18 @@ static const std::map MEM_REQ_EVAL = { // default hparams (LLaMA 7B) struct llama_hparams { - int32_t n_vocab = 32000; - int32_t n_ctx = 512; // this is provided as user input? - int32_t n_embd = 4096; - int32_t n_mult = 256; - int32_t n_head = 32; - int32_t n_layer = 32; - int32_t n_rot = 64; - int32_t f16 = 1; + uint32_t n_vocab = 32000; + uint32_t n_ctx = 512; // this is provided as user input? + uint32_t n_embd = 4096; + uint32_t n_mult = 256; + uint32_t n_head = 32; + uint32_t n_layer = 32; + uint32_t n_rot = 64; + uint32_t f16 = 1; + + bool operator!=(const llama_hparams & other) const { + return memcmp(this, &other, sizeof(llama_hparams)); + } }; struct llama_layer { @@ -126,11 +107,17 @@ struct llama_kv_cache { struct ggml_tensor * k; struct ggml_tensor * v; - struct ggml_context * ctx; + struct ggml_context * ctx = NULL; - std::vector buf; + llama_buffer buf; int n; // number of tokens currently in the cache + + ~llama_kv_cache() { + if (ctx) { + ggml_free(ctx); + } + } }; struct llama_model { @@ -146,22 +133,30 @@ struct llama_model { std::vector layers; // context - struct ggml_context * ctx; + struct ggml_context * ctx = NULL; // key + value cache for the self attention // TODO: move to llama_state struct llama_kv_cache kv_self; // the model memory buffer - std::vector buf; + llama_buffer buf; // model memory mapped file - void * mm_addr = NULL; - uint64_t mm_length = 0; + std::unique_ptr mapping; - // tensors - int n_loaded; - std::unordered_map tensors; + // objects representing data potentially being locked in memory + llama_mlock mlock_buf; + llama_mlock mlock_mmap; + + // for quantize-stats only + std::vector> tensors_by_name; + + ~llama_model() { + if (ctx) { + ggml_free(ctx); + } + } }; struct llama_vocab { @@ -206,8 +201,8 @@ struct llama_context { // memory buffers used to evaluate the model // TODO: move in llama_state - std::vector buf_compute; - std::vector buf_scratch[LLAMA_MAX_SCRATCH_BUFFERS]; + llama_buffer buf_compute; + llama_buffer buf_scratch[LLAMA_MAX_SCRATCH_BUFFERS]; int buf_last = 0; size_t buf_max_size[LLAMA_MAX_SCRATCH_BUFFERS] = { 0 }; @@ -220,11 +215,11 @@ struct llama_context { last_size = ggml_set_scratch(ctx, { 0, 0, nullptr, }); } else { auto & buf = buf_scratch[i]; - last_size = ggml_set_scratch(ctx, { 0, buf.size(), buf.data(), }); + last_size = ggml_set_scratch(ctx, { 0, buf.size, buf.addr, }); } if (buf_last >= 0) { - buf_max_size[buf_last] = Max(buf_max_size[buf_last], last_size); + buf_max_size[buf_last] = std::max(buf_max_size[buf_last], last_size); } buf_last = i; @@ -244,6 +239,508 @@ struct llama_context { } }; +template +static T checked_mul(T a, T b) { + T ret = a * b; + if (a != 0 && ret / a != b) { + throw format("overflow multiplying %llu * %llu", + (unsigned long long) a, (unsigned long long) b); + } + return ret; +} + +static size_t checked_div(size_t a, size_t b) { + if (b == 0 || a % b != 0) { + throw format("error dividing %zu / %zu", a, b); + } + return a / b; +} + +static std::string llama_format_tensor_shape(const std::vector & ne) { + std::string ret = "[" + std::to_string(ne.at(0)); + for (size_t i = 1; i < ne.size(); i++) { + ret += " x " + std::to_string(ne.at(i)); + } + ret += "]"; + return ret; +} + +static const char * llama_format_type(enum ggml_type type) { + switch (type) { + case GGML_TYPE_F32: return "f32"; + case GGML_TYPE_F16: return "f16"; + case GGML_TYPE_Q4_0: return "q4_0"; + case GGML_TYPE_Q4_1: return "q4_1"; + default: LLAMA_ASSERT(false); + } +} + +static size_t llama_calc_tensor_size(const std::vector & ne, enum ggml_type type) { + size_t size = ggml_type_size(type); + for (uint32_t dim : ne) { + size = checked_mul(size, dim); + } + return size / ggml_blck_size(type); +} + +struct llama_load_tensor_shard { + std::vector ne; + size_t size; + enum ggml_type type; + size_t file_idx; + size_t file_off; + + void calc_size() { + size = llama_calc_tensor_size(ne, type); + } +}; + +enum llama_split_type { + SPLIT_NONE, + SPLIT_BY_COLUMNS, + SPLIT_BY_ROWS +}; + +struct llama_load_tensor { + std::vector shards; + + std::string name; + enum ggml_type type = GGML_TYPE_F32; + llama_split_type split_type = SPLIT_NONE; + std::vector ne; + size_t size; + struct ggml_tensor * ggml_tensor = NULL; + uint8_t * data; + + llama_load_tensor(const std::string & name) : name(name) {} + + void calc_all() { + calc_type(); + calc_split_type(); + calc_ne(); + calc_size(); + } + + void calc_type() { + const auto & first_shard = shards.at(0); + for (const auto & shard : shards) { + if (shard.type != first_shard.type) { + throw format("inconsistent tensor shard type in '%s'", name.c_str()); + } + } + type = first_shard.type; + } + + void calc_split_type() { + if (shards.at(0).ne.size() == 1 || // 1D tensors are just duplicated in every file + shards.size() == 1) { // only one file? + split_type = SPLIT_NONE; + } else if (name.find("tok_embeddings.") == 0 || + name.find(".attention.wo.weight") != std::string::npos || + name.find(".feed_forward.w2.weight") != std::string::npos) { + split_type = SPLIT_BY_COLUMNS; + } else { + split_type = SPLIT_BY_ROWS; + } + } + + void calc_ne() { + const auto & first_shard = shards.at(0); + for (const auto & shard : shards) { + if (shard.ne != first_shard.ne) { + throw format("inconsistent tensor shard shape in '%s': first was %s, other was %s", + name.c_str(), llama_format_tensor_shape(first_shard.ne).c_str(), llama_format_tensor_shape(shard.ne).c_str()); + } + } + ne = first_shard.ne; + LLAMA_ASSERT(shards.size() <= UINT32_MAX); + uint32_t n_shards = (uint32_t) shards.size(); + switch (split_type) { + case SPLIT_NONE: + ne = first_shard.ne; + break; + case SPLIT_BY_COLUMNS: + ne = {checked_mul(first_shard.ne[0], n_shards), + first_shard.ne[1]}; + break; + case SPLIT_BY_ROWS: + ne = {first_shard.ne[0], + checked_mul(first_shard.ne[1], n_shards)}; + break; + } + } + + void calc_size() { + size = llama_calc_tensor_size(ne, type); + } +}; + +struct llama_load_tensors_map { + // tensors is kept in a separate vector to preserve file order + std::vector tensors; + std::unordered_map name_to_idx; +}; + +enum llama_file_version { + LLAMA_FILE_VERSION_GGML, + LLAMA_FILE_VERSION_GGMF_V1, // added version field and scores in vocab + LLAMA_FILE_VERSION_GGJT_V1, // added padding +}; + +struct llama_file_loader { + llama_file file; + llama_file_version file_version; + llama_hparams hparams; + llama_vocab vocab; + + llama_file_loader(const char * fname, size_t file_idx, llama_load_tensors_map & tensors_map) + : file(fname, "rb") { + fprintf(stderr, "llama.cpp: loading model from %s\n", fname); + read_magic(); + read_hparams(); + read_vocab(); + read_tensor_metadata(file_idx, tensors_map); + } + void read_magic() { + uint32_t magic = file.read_u32(); + uint32_t version = 0; + + if (magic != 'ggml') { + version = file.read_u32(); + } + + if (magic == 'ggml' && version == 0) { + file_version = LLAMA_FILE_VERSION_GGML; + } else if (magic == 'ggmf' && version == 1) { + file_version = LLAMA_FILE_VERSION_GGMF_V1; + } else if (magic == 'ggjt' && version == 1) { + file_version = LLAMA_FILE_VERSION_GGJT_V1; + } else { + throw format("unknown (magic, version) combination: %08x, %08x; is this really a GGML file?", + magic, version); + } + } + void read_hparams() { + hparams.n_vocab = file.read_u32(); + hparams.n_embd = file.read_u32(); + hparams.n_mult = file.read_u32(); + hparams.n_head = file.read_u32(); + hparams.n_layer = file.read_u32(); + hparams.n_rot = file.read_u32(); + hparams.f16 = file.read_u32(); + } + void read_vocab() { + vocab.id_to_token.resize(hparams.n_vocab); + + for (uint32_t i = 0; i < hparams.n_vocab; i++) { + uint32_t len = file.read_u32(); + std::string word = file.read_string(len); + + float score = 0.0f; + if (file_version >= LLAMA_FILE_VERSION_GGMF_V1) { + file.read_raw(&score, sizeof(score)); + } + + vocab.token_to_id[word] = i; + + auto & tok_score = vocab.id_to_token[i]; + tok_score.tok = std::move(word); + tok_score.score = score; + } + } + void read_tensor_metadata(size_t file_idx, llama_load_tensors_map & tensors_map) { + while (file.tell() < file.size) { + llama_load_tensor_shard shard; + uint32_t n_dims = file.read_u32(); + uint32_t name_len = file.read_u32(); + uint32_t ftype = file.read_u32(); + shard.ne.resize(n_dims); + file.read_raw(shard.ne.data(), sizeof(shard.ne[0]) * n_dims); + std::string name = file.read_string(name_len); + if (n_dims < 1 || n_dims > 2) { + throw format("llama.cpp: tensor '%s' should not be %u-dimensional", name.c_str(), n_dims); + } + switch (ftype) { + case 0: shard.type = GGML_TYPE_F32; break; + case 1: shard.type = GGML_TYPE_F16; break; + case 2: shard.type = GGML_TYPE_Q4_0; break; + case 3: shard.type = GGML_TYPE_Q4_1; break; + default: { + throw format("unrecognized ftype %u\n", ftype); + } + } + + if (file_version >= LLAMA_FILE_VERSION_GGJT_V1) { + // skip to the next multiple of 32 bytes + file.seek(-file.tell() & 31, SEEK_CUR); + } + shard.file_idx = file_idx; + shard.file_off = file.tell(); + + shard.calc_size(); + file.seek(shard.size, SEEK_CUR); + + auto it = tensors_map.name_to_idx.find(name); + size_t idx; + if (it != tensors_map.name_to_idx.end()) { + idx = it->second; + } else { + tensors_map.tensors.emplace_back(name); + idx = tensors_map.tensors.size() - 1; + tensors_map.name_to_idx.emplace(name, idx); + } + tensors_map.tensors.at(idx).shards.push_back(shard); + } + } +}; + +struct llama_file_saver { + llama_file file; + llama_file_loader * any_file_loader; + llama_file_saver(const char * fname, llama_file_loader * any_file_loader, uint32_t new_f16) + : file(fname, "wb"), any_file_loader(any_file_loader) { + fprintf(stderr, "llama.cpp: saving model to %s\n", fname); + write_magic(); + write_hparams(new_f16); + write_vocab(); + } + void write_magic() { + file.write_u32('ggjt'); // magic + file.write_u32(1); // version + } + void write_hparams(uint32_t new_f16) { + const llama_hparams & hparams = any_file_loader->hparams; + file.write_u32(hparams.n_vocab); + file.write_u32(hparams.n_embd); + file.write_u32(hparams.n_mult); + file.write_u32(hparams.n_head); + file.write_u32(hparams.n_layer); + file.write_u32(hparams.n_rot); + file.write_u32(new_f16); + } + void write_vocab() { + if (any_file_loader->file_version == LLAMA_FILE_VERSION_GGML) { + fprintf(stderr, "llama.cpp: WARNING: input is an old file that doesn't have scores; will add dummy scores\n"); + } + uint32_t n_vocab = any_file_loader->hparams.n_vocab; + for (uint32_t i = 0; i < n_vocab; i++) { + const auto & token_score = any_file_loader->vocab.id_to_token.at(i); + file.write_u32((uint32_t) token_score.tok.size()); + file.write_raw(token_score.tok.data(), token_score.tok.size()); + file.write_raw(&token_score.score, sizeof(token_score.score)); + } + } + void write_tensor(llama_load_tensor & tensor, enum ggml_type new_type, const void * new_data, size_t new_size) { + uint32_t ftype; + switch (new_type) { + case GGML_TYPE_F32: ftype = 0; break; + case GGML_TYPE_F16: ftype = 1; break; + case GGML_TYPE_Q4_0: ftype = 2; break; + case GGML_TYPE_Q4_1: ftype = 3; break; + default: LLAMA_ASSERT(false); + } + file.write_u32((uint32_t) tensor.ne.size()); + file.write_u32((uint32_t) tensor.name.size()); + file.write_u32(ftype); + file.write_raw(tensor.ne.data(), sizeof(tensor.ne[0]) * tensor.ne.size()); + file.write_raw(tensor.name.data(), tensor.name.size()); + file.seek(-file.tell() & 31, SEEK_CUR); + LLAMA_ASSERT(new_size == llama_calc_tensor_size(tensor.ne, new_type)); + file.write_raw(new_data, new_size); + } +}; + +struct llama_model_loader { + std::vector> file_loaders; + llama_load_tensors_map tensors_map; + bool use_mmap; + size_t num_ggml_tensors_created = 0; + struct ggml_context * ggml_ctx = NULL; + std::unique_ptr mapping; + + llama_model_loader(const std::string & fname_base, bool use_mmap, bool vocab_only) { + auto first_file = new llama_file_loader(fname_base.c_str(), 0, tensors_map); + file_loaders.emplace_back(first_file); + uint32_t n_parts = vocab_only ? 1 : guess_n_parts(); + for (uint32_t i = 1; i < n_parts; i++) { + std::string fname = fname_base + "." + std::to_string(i); + auto ith_file = new llama_file_loader(fname.c_str(), i, tensors_map); + file_loaders.emplace_back(ith_file); + if (ith_file->hparams != first_file->hparams) { + throw format("llama.cpp: hparams inconsistent between files"); + } + } + if (!llama_mmap::SUPPORTED) { + use_mmap = false; + } + if (use_mmap && alignment_prevents_mmap()) { + fprintf(stderr, "llama.cpp: can't use mmap because tensors are not aligned; convert to new format to avoid this\n"); + use_mmap = false; + } + this->use_mmap = use_mmap; + for (llama_load_tensor & lt : tensors_map.tensors) { + lt.calc_all(); + } + } + + bool alignment_prevents_mmap() { + for (const llama_load_tensor & lt : tensors_map.tensors) { + for (const llama_load_tensor_shard & shard : lt.shards) { + if (shard.file_off & 3) { + return true; + } + } + } + return false; + } + + uint32_t guess_n_parts() const { + auto it = tensors_map.name_to_idx.find("tok_embeddings.weight"); + if (it == tensors_map.name_to_idx.end()) { + throw std::string("missing tok_embeddings.weight"); + } + const llama_load_tensor & lt = tensors_map.tensors.at(it->second); + return file_loaders.at(0)->hparams.n_embd / lt.shards.at(0).ne.at(0); + } + + void calc_sizes(size_t * ctx_size_p, size_t * mmapped_size_p) const { + *ctx_size_p = *mmapped_size_p = 0; + for (const llama_load_tensor & lt : tensors_map.tensors) { + *ctx_size_p += sizeof(struct ggml_tensor) + GGML_OBJECT_SIZE; + *(use_mmap ? mmapped_size_p : ctx_size_p) += lt.size; + } + } + + struct ggml_tensor * get_tensor(const std::string & name, std::vector ne) { + auto it = tensors_map.name_to_idx.find(name); + if (it == tensors_map.name_to_idx.end()) { + throw format("llama.cpp: tensor '%s' is missing from model", name.c_str()); + } + llama_load_tensor & lt = tensors_map.tensors.at(it->second); + if (lt.ne != ne) { + throw format("llama.cpp: tensor '%s' has wrong shape; expected %s, got %s", + name.c_str(), llama_format_tensor_shape(ne).c_str(), llama_format_tensor_shape(lt.ne).c_str()); + } + return get_tensor_for(lt); + } + + struct ggml_tensor * get_tensor_for(llama_load_tensor & lt) { + struct ggml_tensor * tensor; + if (lt.ne.size() == 2) { + tensor = ggml_new_tensor_2d(ggml_ctx, lt.type, lt.ne.at(0), lt.ne.at(1)); + } else { + LLAMA_ASSERT(lt.ne.size() == 1); + tensor = ggml_new_tensor_1d(ggml_ctx, lt.type, lt.ne.at(0)); + } + LLAMA_ASSERT(lt.ggml_tensor == NULL); // if this fails, we called get_tensor twice on the same tensor + lt.ggml_tensor = tensor; + num_ggml_tensors_created++; + return tensor; + } + + void done_getting_tensors() { + if (num_ggml_tensors_created != tensors_map.tensors.size()) { + throw std::string("llama.cpp: file contained more tensors than expected"); + } + } + + void load_all_data(llama_progress_callback progress_callback, void * progress_callback_user_data, llama_mlock * lmlock) { + size_t data_size = 0; + for (const llama_load_tensor & lt : tensors_map.tensors) { + data_size += lt.size; + } + + if (use_mmap) { + mapping.reset(new llama_mmap(&file_loaders.at(0)->file)); + if (!lmlock) { + // Don't call the callback since the actual loading will be lazy + // and we can't measure it. + progress_callback = NULL; + } + if (lmlock) { + lmlock->init(mapping->addr); + } + } + + size_t done_size = 0; + for (llama_load_tensor & lt : tensors_map.tensors) { + if (progress_callback) { + progress_callback((float) done_size / data_size, progress_callback_user_data); + } + LLAMA_ASSERT(lt.ggml_tensor); // unused tensors should have been caught by load_data already + lt.data = (uint8_t *) lt.ggml_tensor->data; + load_data_for(lt); + lt.ggml_tensor->data = lt.data; + done_size += lt.size; + if (use_mmap && lmlock) { + lmlock->grow_to(done_size); + } + } + if (progress_callback) { + progress_callback(1.0f, progress_callback_user_data); + } + } + + void load_data_for(llama_load_tensor & lt) { + if (use_mmap) { + LLAMA_ASSERT(lt.shards.size() == 1); + lt.data = (uint8_t *) mapping->addr + lt.shards.at(0).file_off; + } else if (lt.split_type == SPLIT_NONE) { + llama_file & file = file_loaders.at(lt.shards.at(0).file_idx)->file; + file.seek(lt.shards.at(0).file_off, SEEK_SET); + file.read_raw(lt.data, lt.size); + } else if (lt.split_type == SPLIT_BY_ROWS) { + size_t offset = 0; + for (llama_load_tensor_shard & shard : lt.shards) { + llama_file & file = file_loaders.at(shard.file_idx)->file; + file.seek(shard.file_off, SEEK_SET); + file.read_raw(lt.data + offset, shard.size); + offset += shard.size; + } + LLAMA_ASSERT(offset == lt.size); + } else if (lt.split_type == SPLIT_BY_COLUMNS) { + // Let's load the data into temporary buffers to ensure the OS performs large loads. + std::vector tmp_bufs; + tmp_bufs.resize(lt.shards.size()); + for (size_t i = 0; i < lt.shards.size(); i++) { + llama_load_tensor_shard & shard = lt.shards.at(i); + llama_file & file = file_loaders.at(shard.file_idx)->file; + file.seek(shard.file_off, SEEK_SET); + tmp_bufs.at(i).resize(shard.size); + file.read_raw(tmp_bufs.at(i).addr, shard.size); + } + // Then reshape. + size_t num_rows = lt.ne.at(1); + size_t per_shard_row_size = lt.shards.at(0).size / num_rows; + size_t out_offset = 0; + for (size_t row = 0; row < num_rows; row++) { + for (llama_buffer & tmp_buf : tmp_bufs) { + memcpy(lt.data + out_offset, + tmp_buf.addr + row * per_shard_row_size, + per_shard_row_size); + out_offset += per_shard_row_size; + } + } + LLAMA_ASSERT(out_offset == lt.size); + } + if (0) { + print_checksum(lt); + } + } + + static void print_checksum(llama_load_tensor & lt) { + uint32_t sum = 0; + for (size_t i = 0; i < lt.size; i++) { + uint8_t byte = lt.data[i]; + sum = byte + (sum << 6) + (sum << 16) - sum; // sdbm hash + } + fprintf(stderr, "%s checksum: %#08x (%s, size %zu)\n", lt.name.c_str(), sum, + llama_format_tensor_shape(lt.ne).c_str(), lt.size); + } + +}; + + // // kv cache // @@ -262,8 +759,8 @@ static bool kv_cache_init( cache.buf.resize(2u*n_elements*ggml_type_size(wtype) + 2u*MB); struct ggml_init_params params; - params.mem_size = cache.buf.size(); - params.mem_buffer = cache.buf.data(); + params.mem_size = cache.buf.size; + params.mem_buffer = cache.buf.addr; params.no_alloc = false; cache.ctx = ggml_init(params); @@ -279,13 +776,6 @@ static bool kv_cache_init( return true; } -static void kv_cache_free(struct llama_kv_cache & cache) { - if (cache.ctx) { - ggml_free(cache.ctx); - cache.ctx = nullptr; - } -} - struct llama_context_params llama_context_default_params() { struct llama_context_params result = { /*.n_ctx =*/ 512, @@ -294,6 +784,7 @@ struct llama_context_params llama_context_default_params() { /*.f16_kv =*/ false, /*.logits_all =*/ false, /*.vocab_only =*/ false, + /*.use_mmap =*/ true, /*.use_mlock =*/ false, /*.embedding =*/ false, /*.progress_callback =*/ nullptr, @@ -303,243 +794,71 @@ struct llama_context_params llama_context_default_params() { return result; } +bool llama_mmap_supported() { + return llama_mmap::SUPPORTED; +} + +bool llama_mlock_supported() { + return llama_mlock::SUPPORTED; +} + // // model loading // -static void *mmap_file(const char *fname, uint64_t *mm_length) { -#if defined(_WIN32) && !defined(_POSIX_MAPPED_FILES) - HANDLE hFile = CreateFileA(fname, - GENERIC_READ, - FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, - NULL, - OPEN_EXISTING, - FILE_ATTRIBUTE_NORMAL | FILE_ATTRIBUTE_NOT_CONTENT_INDEXED, - NULL); - if (hFile == INVALID_HANDLE_VALUE) return 0; - LARGE_INTEGER fileSize; - fileSize.QuadPart = -1; - GetFileSizeEx(hFile, &fileSize); - int64_t length = fileSize.QuadPart; - HANDLE hMapping = CreateFileMappingA(hFile, NULL, PAGE_READONLY, 0, 0, NULL); - CloseHandle(hFile); - if (!hMapping) return 0; - void *addr = MapViewOfFile(hMapping, FILE_MAP_READ, 0, 0, 0); - CloseHandle(hMapping); - if (!addr) return 0; -#else - int fd = open(fname, O_RDONLY); - if (fd == -1) return 0; - int64_t length = lseek(fd, 0, SEEK_END); - void *addr = mmap(NULL, length, PROT_READ, MAP_SHARED, fd, 0); - close(fd); - if (addr == MAP_FAILED) return 0; -#endif - *mm_length = length; - return addr; -} - -static void munmap_file(void * addr, size_t length) { -#if defined(_WIN32) && !defined(_POSIX_MAPPED_FILES) - UnmapViewOfFile(addr); -#else - munmap(addr, length); -#endif -} - -static bool report_bad_magic(const char *path, uint32_t got, uint32_t want) { - fprintf(stderr, - "%s: invalid model file (bad magic [got %#x want %#x])\n" - "\tyou most likely need to regenerate your ggml files\n" - "\tthe benefit is you'll get 10-100x faster load times\n" - "\tsee https://github.com/ggerganov/llama.cpp/issues/91\n" - "\tuse convert-pth-to-ggml.py to regenerate from original pth\n" - "\tuse migrate-ggml-2023-03-30-pr613.py if you deleted originals\n", - path, got, want); - return false; -} - -static bool llama_model_load( +static void llama_model_load_internal( const std::string & fname, llama_context & lctx, int n_ctx, - int n_parts, ggml_type memory_type, + bool use_mmap, + bool use_mlock, bool vocab_only, llama_progress_callback progress_callback, - void *progress_callback_user_data) { - fprintf(stderr, "%s: loading model from '%s' - please wait ...\n", __func__, fname.c_str()); + void * progress_callback_user_data) { lctx.t_start_us = ggml_time_us(); + std::unique_ptr ml(new llama_model_loader(fname, use_mmap, vocab_only)); + + lctx.vocab = std::move(ml->file_loaders.at(0)->vocab); auto & model = lctx.model; - auto & vocab = lctx.vocab; + auto & hparams = model.hparams; + hparams = ml->file_loaders.at(0)->hparams; + uint32_t n_ff = ((2*(4*hparams.n_embd)/3 + hparams.n_mult - 1)/hparams.n_mult)*hparams.n_mult; - auto fin = std::ifstream(fname, std::ios::binary); - if (!fin) { - fprintf(stderr, "%s: failed to open '%s'\n", __func__, fname.c_str()); - return false; - } - - std::vector f_buf(1024*1024); - fin.rdbuf()->pubsetbuf(f_buf.data(), f_buf.size()); - - fin.seekg(0, fin.end); - const size_t file_size = fin.tellg(); - fin.seekg(0); - - // verify magic { - uint32_t magic; - fin.read((char *) &magic, sizeof(magic)); - if (magic == LLAMA_FILE_MAGIC_UNVERSIONED) { - fprintf(stderr, "%s: invalid model file '%s' (too old, regenerate your model files or convert them with convert-unversioned-ggml-to-ggml.py!)\n", - __func__, fname.c_str()); - return false; + switch (hparams.n_layer) { + case 32: model.type = e_model::MODEL_7B; break; + case 40: model.type = e_model::MODEL_13B; break; + case 60: model.type = e_model::MODEL_30B; break; + case 80: model.type = e_model::MODEL_65B; break; } - if (magic != LLAMA_FILE_MAGIC) { - return report_bad_magic(fname.c_str(), magic, LLAMA_FILE_MAGIC); - } - - uint32_t format_version; - fin.read((char *) &format_version, sizeof(format_version)); - - if (format_version != LLAMA_FILE_VERSION) { - fprintf(stderr, "%s: invalid model file '%s' (unsupported format version %" PRIu32 ", expected %d)\n", - __func__, fname.c_str(), format_version, LLAMA_FILE_VERSION); - return false; - } - } - - int n_ff = 0; - - // load hparams - { - auto & hparams = model.hparams; - - fin.read((char *) &hparams.n_vocab, sizeof(hparams.n_vocab)); - //fin.read((char *) &hparams.n_ctx, sizeof(hparams.n_ctx)); - fin.read((char *) &hparams.n_embd, sizeof(hparams.n_embd)); - fin.read((char *) &hparams.n_mult, sizeof(hparams.n_mult)); - fin.read((char *) &hparams.n_head, sizeof(hparams.n_head)); - fin.read((char *) &hparams.n_layer, sizeof(hparams.n_layer)); - fin.read((char *) &hparams.n_rot, sizeof(hparams.n_rot)); - fin.read((char *) &hparams.f16, sizeof(hparams.f16)); hparams.n_ctx = n_ctx; - n_ff = ((2*(4*hparams.n_embd)/3 + hparams.n_mult - 1)/hparams.n_mult)*hparams.n_mult; - - if (n_parts < 1) { - n_parts = LLAMA_N_PARTS.at(hparams.n_embd); - } - - // temp warning to tell the user to use "--n_parts" - if (hparams.f16 == 4 && n_parts != 1) { - fprintf(stderr, "%s: GPTQ model detected - are you sure n_parts should be %d? we normally expect it to be 1\n", __func__, n_parts); - fprintf(stderr, "%s: use '--n_parts 1' if necessary\n", __func__); - } - - if (hparams.n_layer == 32) { - model.type = e_model::MODEL_7B; - } - - if (hparams.n_layer == 40) { - model.type = e_model::MODEL_13B; - } - - if (hparams.n_layer == 60) { - model.type = e_model::MODEL_30B; - } - - if (hparams.n_layer == 80) { - model.type = e_model::MODEL_65B; - } - - fprintf(stderr, "%s: n_vocab = %d\n", __func__, hparams.n_vocab); - fprintf(stderr, "%s: n_ctx = %d\n", __func__, hparams.n_ctx); - fprintf(stderr, "%s: n_embd = %d\n", __func__, hparams.n_embd); - fprintf(stderr, "%s: n_mult = %d\n", __func__, hparams.n_mult); - fprintf(stderr, "%s: n_head = %d\n", __func__, hparams.n_head); - fprintf(stderr, "%s: n_layer = %d\n", __func__, hparams.n_layer); - fprintf(stderr, "%s: n_rot = %d\n", __func__, hparams.n_rot); - fprintf(stderr, "%s: f16 = %d\n", __func__, hparams.f16); - fprintf(stderr, "%s: n_ff = %d\n", __func__, n_ff); - fprintf(stderr, "%s: n_parts = %d\n", __func__, n_parts); - fprintf(stderr, "%s: type = %d\n", __func__, model.type); - } - - // load vocab - { - std::string word; - vocab.id_to_token.resize(model.hparams.n_vocab); - std::vector tmp(64); - - for (int i = 0; i < model.hparams.n_vocab; i++) { - uint32_t len; - fin.read((char *) &len, sizeof(len)); - - word.resize(len); - if (len > 0) { - tmp.resize(len); - fin.read(tmp.data(), len); - word.assign(tmp.data(), len); - } else { - word.clear(); - } - - float score; - fin.read((char *) &score, sizeof(score)); - - vocab.token_to_id[word] = i; - - auto &tok_score = vocab.id_to_token[i]; - tok_score.tok = word; - tok_score.score = score; - } + fprintf(stderr, "%s: n_vocab = %u\n", __func__, hparams.n_vocab); + fprintf(stderr, "%s: n_ctx = %u\n", __func__, hparams.n_ctx); + fprintf(stderr, "%s: n_embd = %u\n", __func__, hparams.n_embd); + fprintf(stderr, "%s: n_mult = %u\n", __func__, hparams.n_mult); + fprintf(stderr, "%s: n_head = %u\n", __func__, hparams.n_head); + fprintf(stderr, "%s: n_layer = %u\n", __func__, hparams.n_layer); + fprintf(stderr, "%s: n_rot = %u\n", __func__, hparams.n_rot); + fprintf(stderr, "%s: f16 = %u\n", __func__, hparams.f16); + fprintf(stderr, "%s: n_ff = %u\n", __func__, n_ff); + fprintf(stderr, "%s: n_parts = %zu\n", __func__, ml->file_loaders.size()); + fprintf(stderr, "%s: type = %u\n", __func__, model.type); } if (vocab_only) { - return true; + return; } - // for the big tensors, we have the option to store the data in 16-bit floats or quantized - // in order to save memory and also to speed up the computation - // wtype is for per-layer weights, while vtype is for other weights - ggml_type wtype, vtype; - switch (model.hparams.f16) { - case 0: wtype = vtype = GGML_TYPE_F32; break; - case 1: wtype = vtype = GGML_TYPE_F16; break; - case 2: wtype = vtype = GGML_TYPE_Q4_0; break; - case 3: wtype = vtype = GGML_TYPE_Q4_1; break; - case 4: wtype = GGML_TYPE_Q4_1; vtype = GGML_TYPE_F16; break; - default: - { - fprintf(stderr, "%s: invalid model file '%s' (bad f16 value %d)\n", - __func__, fname.c_str(), model.hparams.f16); - return false; - } - } - - // map model into memory - char *mm_addr = NULL; - model.mm_addr = mmap_file(fname.c_str(), &model.mm_length); - if (model.mm_addr == NULL) { - fprintf(stderr, "%s: failed to mmap '%s'\n", __func__, fname.c_str()); - return false; - } - mm_addr = (char *)model.mm_addr; - fprintf(stderr, "%s: ggml map size = %6.2f MB\n", __func__, model.mm_length/(1024.0*1024.0)); - auto & ctx = model.ctx; - size_t ctx_size = 0; - { - const auto &hparams = model.hparams; - const int n_layer = hparams.n_layer; - ctx_size += (5 + 10*n_layer)*256; // object overhead - fprintf(stderr, "%s: ggml ctx size = %6.2f KB\n", __func__, ctx_size/1024.0); - } + size_t ctx_size, mmapped_size; + ml->calc_sizes(&ctx_size, &mmapped_size); + fprintf(stderr, "%s: ggml ctx size = %6.2f KB\n", __func__, ctx_size/1024.0); // print memory requirements { @@ -548,7 +867,7 @@ static bool llama_model_load( // this is the total memory required to run the inference const size_t mem_required = ctx_size + - model.mm_length + + mmapped_size + MEM_REQ_SCRATCH0.at(model.type) + MEM_REQ_SCRATCH1.at(model.type) + MEM_REQ_EVAL.at (model.type); @@ -564,17 +883,20 @@ static bool llama_model_load( // create the ggml context { lctx.model.buf.resize(ctx_size); + if (use_mlock) { + lctx.model.mlock_buf.init(lctx.model.buf.addr); + lctx.model.mlock_buf.grow_to(lctx.model.buf.size); + } struct ggml_init_params params = { - /*.mem_size =*/ lctx.model.buf.size(), - /*.mem_buffer =*/ lctx.model.buf.data(), - /*.no_alloc =*/ true, + /*.mem_size =*/ lctx.model.buf.size, + /*.mem_buffer =*/ lctx.model.buf.addr, + /*.no_alloc =*/ ml->use_mmap, }; model.ctx = ggml_init(params); if (!model.ctx) { - fprintf(stderr, "%s: ggml_init() failed\n", __func__); - return false; + throw format("ggml_init() failed"); } } @@ -582,161 +904,71 @@ static bool llama_model_load( { const auto & hparams = model.hparams; - const int n_embd = hparams.n_embd; - const int n_layer = hparams.n_layer; - const int n_vocab = hparams.n_vocab; + const uint32_t n_embd = hparams.n_embd; + const uint32_t n_layer = hparams.n_layer; + const uint32_t n_vocab = hparams.n_vocab; + + ml->ggml_ctx = ctx; + + model.tok_embeddings = ml->get_tensor("tok_embeddings.weight", {n_embd, n_vocab}); + model.norm = ml->get_tensor("norm.weight", {n_embd}); + model.output = ml->get_tensor("output.weight", {n_embd, n_vocab}); model.layers.resize(n_layer); - - model.tok_embeddings = ggml_new_tensor_2d(ctx, vtype, n_embd, n_vocab); - - model.norm = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_embd); - model.output = ggml_new_tensor_2d(ctx, vtype, n_embd, n_vocab); - - // map by name - model.tensors["tok_embeddings.weight"] = model.tok_embeddings; - - model.tensors["norm.weight"] = model.norm; - model.tensors["output.weight"] = model.output; - - for (int i = 0; i < n_layer; ++i) { + for (uint32_t i = 0; i < n_layer; ++i) { auto & layer = model.layers[i]; - layer.attention_norm = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_embd); + std::string layers_i = "layers." + std::to_string(i); - layer.wq = ggml_new_tensor_2d(ctx, wtype, n_embd, n_embd); - layer.wk = ggml_new_tensor_2d(ctx, wtype, n_embd, n_embd); - layer.wv = ggml_new_tensor_2d(ctx, wtype, n_embd, n_embd); - layer.wo = ggml_new_tensor_2d(ctx, wtype, n_embd, n_embd); + layer.attention_norm = ml->get_tensor(layers_i + ".attention_norm.weight", {n_embd}); - layer.ffn_norm = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_embd); + layer.wq = ml->get_tensor(layers_i + ".attention.wq.weight", {n_embd, n_embd}); + layer.wk = ml->get_tensor(layers_i + ".attention.wk.weight", {n_embd, n_embd}); + layer.wv = ml->get_tensor(layers_i + ".attention.wv.weight", {n_embd, n_embd}); + layer.wo = ml->get_tensor(layers_i + ".attention.wo.weight", {n_embd, n_embd}); - layer.w1 = ggml_new_tensor_2d(ctx, wtype, n_embd, n_ff); - layer.w2 = ggml_new_tensor_2d(ctx, wtype, n_ff, n_embd); - layer.w3 = ggml_new_tensor_2d(ctx, wtype, n_embd, n_ff); + layer.ffn_norm = ml->get_tensor(layers_i + ".ffn_norm.weight", {n_embd}); - // map by name - model.tensors["layers." + std::to_string(i) + ".attention_norm.weight"] = layer.attention_norm; - - model.tensors["layers." + std::to_string(i) + ".attention.wq.weight"] = layer.wq; - model.tensors["layers." + std::to_string(i) + ".attention.wk.weight"] = layer.wk; - model.tensors["layers." + std::to_string(i) + ".attention.wv.weight"] = layer.wv; - model.tensors["layers." + std::to_string(i) + ".attention.wo.weight"] = layer.wo; - - model.tensors["layers." + std::to_string(i) + ".ffn_norm.weight"] = layer.ffn_norm; - - model.tensors["layers." + std::to_string(i) + ".feed_forward.w1.weight"] = layer.w1; - model.tensors["layers." + std::to_string(i) + ".feed_forward.w2.weight"] = layer.w2; - model.tensors["layers." + std::to_string(i) + ".feed_forward.w3.weight"] = layer.w3; + layer.w1 = ml->get_tensor(layers_i + ".feed_forward.w1.weight", {n_embd, n_ff}); + layer.w2 = ml->get_tensor(layers_i + ".feed_forward.w2.weight", { n_ff, n_embd}); + layer.w3 = ml->get_tensor(layers_i + ".feed_forward.w3.weight", {n_embd, n_ff}); } } - std::vector tmp; + ml->done_getting_tensors(); - if (progress_callback) { - progress_callback(0.0, progress_callback_user_data); + // populate `tensors_by_name` + for (llama_load_tensor & lt : ml->tensors_map.tensors) { + model.tensors_by_name.emplace_back(lt.name, lt.ggml_tensor); } - fprintf(stderr, "%s: loading tensors from '%s'\n", __func__, fname.c_str()); + ml->load_all_data(progress_callback, progress_callback_user_data, use_mlock ? &lctx.model.mlock_mmap : NULL); - // load weights - { - size_t total_size = 0; - model.n_loaded = 0; - - while (true) { - int32_t n_dims; - int32_t length; - int32_t ftype; - - fin.read(reinterpret_cast(&n_dims), sizeof(n_dims)); - fin.read(reinterpret_cast(&length), sizeof(length)); - fin.read(reinterpret_cast(&ftype), sizeof(ftype)); - - if (fin.eof()) { - break; - } - - int32_t nelements = 1; - int32_t ne[2] = { 1, 1 }; - for (int i = 0; i < n_dims; ++i) { - fin.read(reinterpret_cast(&ne[i]), sizeof(ne[i])); - nelements *= ne[i]; - } - - std::string name(length, 0); - fin.read(&name[0], length); - - if (model.tensors.find(name.data()) == model.tensors.end()) { - fprintf(stderr, "%s: unknown tensor '%s' in model file\n", __func__, name.data()); - return false; - } - - auto tensor = model.tensors[name.data()]; - - if (ggml_nelements(tensor) != nelements) { - fprintf(stderr, "%s: tensor '%s' has wrong size in model file\n", __func__, name.data()); - return false; - } - if (tensor->ne[0] != ne[0] || tensor->ne[1] != ne[1]) { - fprintf(stderr, "%s: tensor '%s' has wrong shape in model file: got [%" PRId64 ", %" PRId64 "], expected [%d, %d]\n", - __func__, name.data(), tensor->ne[0], tensor->ne[1], ne[0], ne[1]); - return false; - } - if (0) { - static const char * ftype_str[] = { "f32", "f16", "q4_0", "q4_1", }; - fprintf(stderr, "%24s - [%5d, %5d], type = %6s\n", name.data(), ne[0], ne[1], ftype_str[ftype]); - } - - switch (ftype) { - case 0: // f32 - case 1: // f16 - break; - case 2: // q4_0 - case 3: // q4_1 - assert(ne[0] % 64 == 0); - break; - default: - fprintf(stderr, "%s: unknown ftype %d in model file\n", __func__, ftype); - return false; - }; - - // load the tensor data into memory without copying or reading it - size_t offset = fin.tellg(); - size_t tensor_data_size = ggml_nbytes(tensor); - offset = (offset + 31) & -32; - tensor->data = mm_addr + offset; - fin.seekg(offset + tensor_data_size); - total_size += tensor_data_size; - model.n_loaded++; - - // progress - if (progress_callback) { - double current_progress = size_t(fin.tellg()) / double(file_size); - progress_callback(current_progress, progress_callback_user_data); - } - } - - fin.close(); - - fprintf(stderr, "%s: model size = %8.2f MB / num tensors = %d\n", __func__, total_size/1024.0/1024.0, model.n_loaded); - if (model.n_loaded == 0) { - fprintf(stderr, "%s: WARN no tensors loaded from model file - assuming empty model for testing\n", __func__); - } else if (model.n_loaded != (int) model.tensors.size()) { - fprintf(stderr, "%s: ERROR not all tensors loaded from model file - expected %zu, got %d\n", __func__, model.tensors.size(), model.n_loaded); - return false; - } - } + model.mapping = std::move(ml->mapping); // loading time will be recalculate after the first eval, so // we take page faults deferred by mmap() into consideration lctx.t_load_us = ggml_time_us() - lctx.t_start_us; +} - if (progress_callback) { - progress_callback(1.0, progress_callback_user_data); +static bool llama_model_load( + const std::string & fname, + llama_context & lctx, + int n_ctx, + ggml_type memory_type, + bool use_mmap, + bool use_mlock, + bool vocab_only, + llama_progress_callback progress_callback, + void *progress_callback_user_data) { + try { + llama_model_load_internal(fname, lctx, n_ctx, memory_type, use_mmap, use_mlock, + vocab_only, progress_callback, progress_callback_user_data); + return true; + } catch (const std::string & err) { + fprintf(stderr, "error loading model: %s\n", err.c_str()); + return false; } - - return true; } // evaluate the transformer @@ -774,8 +1006,8 @@ static bool llama_eval_internal( auto & buf_compute = lctx.buf_compute; struct ggml_init_params params = { - /*.mem_size =*/ buf_compute.size(), - /*.mem_buffer =*/ buf_compute.data(), + /*.mem_size =*/ buf_compute.size, + /*.mem_buffer =*/ buf_compute.addr, /*.no_alloc =*/ false, }; @@ -1061,7 +1293,7 @@ struct llama_tokenizer { size_t offs = 0; while (offs < text.size()) { llama_sp_symbol sym; - size_t char_len = Min(text.size() - offs, utf8_len(text[offs])); + size_t char_len = std::min(text.size() - offs, utf8_len(text[offs])); sym.text = text.c_str() + offs; sym.n = char_len; offs += char_len; @@ -1236,7 +1468,7 @@ static llama_vocab::id llama_sample_top_p_top_k( } } - sample_top_k(logits_id, top_k > 0 ? Min(top_k, n_logits) : n_logits); + sample_top_k(logits_id, top_k > 0 ? std::min(top_k, n_logits) : n_logits); // compute probs for the top k tokens std::vector probs; @@ -1284,298 +1516,118 @@ static llama_vocab::id llama_sample_top_p_top_k( // quantization // -// TODO: reuse code from the llama_model_load() somehow -static bool llama_model_quantize_internal(const std::string & fname_inp, const std::string & fname_out, int itype) { - ggml_type type = GGML_TYPE_Q4_1; - +static void llama_model_quantize_internal(const std::string & fname_inp, const std::string & fname_out, int itype) { + ggml_type quantized_type; switch (itype) { - case 2: type = GGML_TYPE_Q4_0; break; - case 3: type = GGML_TYPE_Q4_1; break; - default: fprintf(stderr, "%s: invalid quantization type %d\n", __func__, itype); return 1; + case 2: quantized_type = GGML_TYPE_Q4_0; break; + case 3: quantized_type = GGML_TYPE_Q4_1; break; + default: throw format("invalid quantization type %d\n", itype); }; - if (type != GGML_TYPE_Q4_0 && type != GGML_TYPE_Q4_1) { - fprintf(stderr, "%s: invalid quantization type %d\n", __func__, type); - return false; - } + std::unique_ptr model_loader(new llama_model_loader(fname_inp.c_str(), /*use_mmap*/ false, + /*vocab_only*/ false)); + llama_file_saver file_saver(fname_out.c_str(), model_loader->file_loaders.at(0).get(), (uint32_t) itype); - llama_vocab vocab; + size_t total_size_org = 0; + size_t total_size_new = 0; + std::vector hist_all(1 << 4, 0); - printf("%s: loading model from '%s'\n", __func__, fname_inp.c_str()); + size_t idx = 0; + for (llama_load_tensor & tensor : model_loader->tensors_map.tensors) { + llama_buffer read_data; + read_data.resize(tensor.size); + tensor.data = read_data.addr; + model_loader->load_data_for(tensor); - auto finp = std::ifstream(fname_inp, std::ios::binary); - if (!finp) { - fprintf(stderr, "%s: failed to open '%s' for reading\n", __func__, fname_inp.c_str()); - return false; - } + printf("[%zu/%zu] %36s - %s, type = %6s, ", + ++idx, model_loader->tensors_map.tensors.size(), + tensor.name.c_str(), llama_format_tensor_shape(tensor.ne).c_str(), + llama_format_type(tensor.type)); - auto fout = std::ofstream(fname_out, std::ios::binary); - if (!fout) { - fprintf(stderr, "%s: failed to open '%s' for writing\n", __func__, fname_out.c_str()); - return false; - } + // This used to be a regex, but has an extreme cost to compile times. + bool quantize = tensor.name.rfind("weight") == tensor.name.size() - 6; // ends with 'weight'? - // verify magic - { - uint32_t magic; - finp.read((char *) &magic, sizeof(magic)); - if (magic == LLAMA_FILE_MAGIC_UNVERSIONED) { - fprintf(stderr, "%s: invalid model file '%s' (too old, regenerate your model files!)\n", - __func__, fname_inp.c_str()); - return false; - } - if (magic != LLAMA_FILE_MAGIC) { - return report_bad_magic(fname_inp.c_str(), magic, LLAMA_FILE_MAGIC); - } + // quantize only 2D tensors + quantize &= (tensor.ne.size() == 2); - fout.write((char *) &magic, sizeof(magic)); + enum ggml_type new_type; + void * new_data; + size_t new_size; + llama_buffer work; - uint32_t format_version; - finp.read((char *) &format_version, sizeof(format_version)); - - if (format_version != LLAMA_FILE_VERSION) { - fprintf(stderr, "%s: invalid model file '%s' (unsupported format version %" PRIu32 ", expected %d)\n", - __func__, fname_inp.c_str(), format_version, LLAMA_FILE_VERSION); - return false; - } - - fout.write((char *) &format_version, sizeof(format_version)); - } - - llama_hparams hparams; - - // load hparams - { - finp.read((char *) &hparams.n_vocab, sizeof(hparams.n_vocab)); - //finp.read((char *) &hparams.n_ctx, sizeof(hparams.n_ctx)); - finp.read((char *) &hparams.n_embd, sizeof(hparams.n_embd)); - finp.read((char *) &hparams.n_mult, sizeof(hparams.n_mult)); - finp.read((char *) &hparams.n_head, sizeof(hparams.n_head)); - finp.read((char *) &hparams.n_layer, sizeof(hparams.n_layer)); - finp.read((char *) &hparams.n_rot, sizeof(hparams.n_rot)); - finp.read((char *) &hparams.f16, sizeof(hparams.f16)); - - printf("%s: n_vocab = %d\n", __func__, hparams.n_vocab); - printf("%s: n_ctx = %d\n", __func__, hparams.n_ctx); - printf("%s: n_embd = %d\n", __func__, hparams.n_embd); - printf("%s: n_mult = %d\n", __func__, hparams.n_mult); - printf("%s: n_head = %d\n", __func__, hparams.n_head); - printf("%s: n_layer = %d\n", __func__, hparams.n_layer); - printf("%s: f16 = %d\n", __func__, hparams.f16); - - fout.write((char *) &hparams.n_vocab, sizeof(hparams.n_vocab)); - //fout.write((char *) &hparams.n_ctx, sizeof(hparams.n_ctx)); - fout.write((char *) &hparams.n_embd, sizeof(hparams.n_embd)); - fout.write((char *) &hparams.n_mult, sizeof(hparams.n_mult)); - fout.write((char *) &hparams.n_head, sizeof(hparams.n_head)); - fout.write((char *) &hparams.n_layer, sizeof(hparams.n_layer)); - fout.write((char *) &hparams.n_rot, sizeof(hparams.n_rot)); - fout.write((char *) &itype, sizeof(hparams.f16)); - } - - // load vocab - { - const int32_t n_vocab = hparams.n_vocab; - - if (n_vocab != hparams.n_vocab) { - fprintf(stderr, "%s: invalid model file '%s' (bad vocab size %d != %d)\n", - __func__, fname_inp.c_str(), n_vocab, hparams.n_vocab); - return false; - } - - std::vector word(32); - vocab.id_to_token.resize(n_vocab); - for (int i = 0; i < n_vocab; i++) { - uint32_t len; - finp.read ((char *) &len, sizeof(len)); - fout.write((char *) &len, sizeof(len)); - - word.resize(len); - finp.read ((char *) &word[0], len); - fout.write((char *) &word[0], len); - - float score; - finp.read ((char *) &score, sizeof(score)); - fout.write((char *) &score, sizeof(score)); - - vocab.token_to_id[word.data()] = i; - - auto &tok_score = vocab.id_to_token[i]; - tok_score.tok = word.data(); - tok_score.score = score; - } - } - - // load weights - { - size_t total_size_org = 0; - size_t total_size_new = 0; - - std::vector work; - - std::vector data_u8; - std::vector data_f16; - std::vector data_f32; - - std::vector hist_all(1 << 4, 0); - - while (true) { - int32_t n_dims; - int32_t length; - int32_t ftype; - - finp.read(reinterpret_cast(&n_dims), sizeof(n_dims)); - finp.read(reinterpret_cast(&length), sizeof(length)); - finp.read(reinterpret_cast(&ftype), sizeof(ftype)); - - if (finp.eof()) { - break; - } - - int32_t nelements = 1; - int32_t ne[2] = { 1, 1 }; - for (int i = 0; i < n_dims; ++i) { - finp.read (reinterpret_cast(&ne[i]), sizeof(ne[i])); - nelements *= ne[i]; - } - - std::string name(length, 0); - finp.read (&name[0], length); - - { - // ensure tensor data is aligned - uint64_t offset = finp.tellg(); - offset = (offset + 31) & -32; - finp.seekg(offset); - } - - { - static const char * ftype_str[] = { "f32", "f16", "q4_0", "q4_1", }; - printf("%48s - [%5d, %5d], type = %6s ", name.data(), ne[0], ne[1], ftype_str[ftype]); - } - - // regexes of tensor names to be quantized - const std::vector k_names = { - ".*weight", - }; - - bool quantize = false; - for (const auto & s : k_names) { - if (std::regex_match(name, std::regex(s))) { - quantize = true; - break; + if (!quantize) { + new_type = tensor.type; + new_data = tensor.data; + new_size = tensor.size; + printf("size = %8.3f MB\n", tensor.size/1024.0/1024.0); + } else { + new_type = quantized_type; + float * f32_data; + size_t nelements = tensor.ne.at(0) * tensor.ne.at(1); + llama_buffer f32_conv_buf; + if (tensor.type == GGML_TYPE_F32) { + f32_data = (float *) tensor.data; + } else if (tensor.type == GGML_TYPE_F16) { + f32_conv_buf.resize(nelements * sizeof(float)); + f32_data = (float *) f32_conv_buf.addr; + auto f16_data = (const ggml_fp16_t *) tensor.data; + for (size_t i = 0; i < nelements; i++) { + f32_data[i] = ggml_fp16_to_fp32(f16_data[i]); } - } - - // quantize only 2D tensors - quantize &= (n_dims == 2); - - if (quantize) { - if (ftype != 0 && ftype != 1) { - fprintf(stderr, "%s: unsupported ftype %d for integer quantization\n", __func__, ftype); - return false; - } - - if (ftype == 1) { - data_f16.resize(nelements); - finp.read(reinterpret_cast(data_f16.data()), nelements * sizeof(ggml_fp16_t)); - data_f32.resize(nelements); - for (int i = 0; i < nelements; ++i) { - data_f32[i] = ggml_fp16_to_fp32(data_f16[i]); - } - } else { - data_f32.resize(nelements); - finp.read(reinterpret_cast(data_f32.data()), nelements * sizeof(float)); - } - - ftype = itype; } else { - const int bpe = (ftype == 0) ? sizeof(float) : sizeof(uint16_t); - - data_u8.resize(nelements*bpe); - finp.read(reinterpret_cast(data_u8.data()), nelements * bpe); + throw format("type %s unsupported for integer quantization", llama_format_type(tensor.type)); } - fout.write(reinterpret_cast(&n_dims), sizeof(n_dims)); - fout.write(reinterpret_cast(&length), sizeof(length)); - fout.write(reinterpret_cast(&ftype), sizeof(ftype)); - for (int i = 0; i < n_dims; ++i) { - fout.write(reinterpret_cast(&ne[i]), sizeof(ne[i])); - } - fout.write(&name[0], length); + printf("quantizing .. "); + fflush(stdout); - { - // ensure tensor data is aligned - uint64_t offset = fout.tellp(); - offset = (offset + 31) & -32; - fout.seekp(offset); + work.resize(nelements * 4); // upper bound on size + new_data = work.addr; + std::vector hist_cur(1 << 4, 0); + + switch (new_type) { + case GGML_TYPE_Q4_0: + { + new_size = ggml_quantize_q4_0(f32_data, new_data, nelements, (int) tensor.ne.at(0), hist_cur.data()); + } break; + case GGML_TYPE_Q4_1: + { + new_size = ggml_quantize_q4_1(f32_data, new_data, nelements, (int) tensor.ne.at(0), hist_cur.data()); + } break; + default: + LLAMA_ASSERT(false); } - if (quantize) { - printf("quantizing .. "); - work.resize(nelements); // for quantization - - size_t cur_size = 0; - std::vector hist_cur(1 << 4, 0); - - switch (type) { - case GGML_TYPE_Q4_0: - { - cur_size = ggml_quantize_q4_0(data_f32.data(), work.data(), nelements, ne[0], hist_cur.data()); - } break; - case GGML_TYPE_Q4_1: - { - cur_size = ggml_quantize_q4_1(data_f32.data(), work.data(), nelements, ne[0], hist_cur.data()); - } break; - default: - { - fprintf(stderr, "%s: unsupported quantization type %d\n", __func__, type); - return false; - } - } - - fout.write(reinterpret_cast(work.data()), cur_size); - total_size_new += cur_size; - - printf("size = %8.2f MB -> %8.2f MB | hist: ", nelements * sizeof(float)/1024.0/1024.0, cur_size/1024.0/1024.0); - for (int i = 0; i < (int) hist_cur.size(); ++i) { - hist_all[i] += hist_cur[i]; - } - - for (int i = 0; i < (int) hist_cur.size(); ++i) { - printf("%5.3f ", hist_cur[i] / float(nelements)); - } - printf("\n"); - } else { - printf("size = %8.3f MB\n", data_u8.size()/1024.0/1024.0); - fout.write(reinterpret_cast(data_u8.data()), data_u8.size()); - total_size_new += data_u8.size(); + printf("size = %8.2f MB -> %8.2f MB | hist: ", tensor.size/1024.0/1024.0, new_size/1024.0/1024.0); + for (size_t i = 0; i < hist_cur.size(); i++) { + hist_all[i] += hist_cur[i]; } - total_size_org += nelements * sizeof(float); - } - - printf("%s: model size = %8.2f MB\n", __func__, total_size_org/1024.0/1024.0); - printf("%s: quant size = %8.2f MB\n", __func__, total_size_new/1024.0/1024.0); - - { - int64_t sum_all = 0; - for (int i = 0; i < (int) hist_all.size(); ++i) { - sum_all += hist_all[i]; - } - - printf("%s: hist: ", __func__); - for (int i = 0; i < (int) hist_all.size(); ++i) { - printf("%5.3f ", hist_all[i] / float(sum_all)); + for (size_t i = 0; i < hist_cur.size(); i++) { + printf("%5.3f ", hist_cur[i] / float(nelements)); } printf("\n"); } + total_size_org += tensor.size; + total_size_new += new_size; + file_saver.write_tensor(tensor, new_type, new_data, new_size); } - finp.close(); - fout.close(); + printf("%s: model size = %8.2f MB\n", __func__, total_size_org/1024.0/1024.0); + printf("%s: quant size = %8.2f MB\n", __func__, total_size_new/1024.0/1024.0); - return true; + { + int64_t sum_all = 0; + for (size_t i = 0; i < hist_all.size(); i++) { + sum_all += hist_all[i]; + } + + printf("%s: hist: ", __func__); + for (size_t i = 0; i < hist_all.size(); i++) { + printf("%5.3f ", hist_all[i] / float(sum_all)); + } + printf("\n"); + } } // @@ -1593,32 +1645,36 @@ struct llama_context * llama_init_from_file( params.seed = time(NULL); } + unsigned cur_percentage = 0; + if (params.progress_callback == NULL) { + params.progress_callback_user_data = &cur_percentage; + params.progress_callback = [](float progress, void * ctx) { + unsigned * cur_percentage_p = (unsigned *) ctx; + unsigned percentage = (unsigned) (100 * progress); + while (percentage > *cur_percentage_p) { + ++*cur_percentage_p; + fprintf(stderr, "."); + fflush(stderr); + if (percentage >= 100) { + fprintf(stderr, "\n"); + } + } + }; + } + ctx->rng = std::mt19937(params.seed); ctx->logits_all = params.logits_all; ggml_type memory_type = params.f16_kv ? GGML_TYPE_F16 : GGML_TYPE_F32; - if (!llama_model_load(path_model, *ctx, params.n_ctx, params.n_parts, memory_type, - params.vocab_only, params.progress_callback, - params.progress_callback_user_data)) { + if (!llama_model_load(path_model, *ctx, params.n_ctx, memory_type, + params.use_mmap, params.use_mlock, params.vocab_only, + params.progress_callback, params.progress_callback_user_data)) { fprintf(stderr, "%s: failed to load model\n", __func__); llama_free(ctx); return nullptr; } - if (params.use_mlock) { - char *err; - if (!ggml_mlock(ctx->model.ctx, - ctx->model.mm_addr, - ctx->model.mm_length, - &err)) { - fprintf(stderr, "%s\n", err); - free(err); - llama_free(ctx); - return nullptr; - } - } - // reserve memory for context buffers if (!params.vocab_only) { if (!kv_cache_init(ctx->model.hparams, ctx->model.kv_self, memory_type, ctx->model.hparams.n_ctx)) { @@ -1655,16 +1711,6 @@ struct llama_context * llama_init_from_file( } void llama_free(struct llama_context * ctx) { - kv_cache_free(ctx->model.kv_self); - - if (ctx->model.ctx) { - ggml_free(ctx->model.ctx); - } - - if (ctx->model.mm_addr) { - munmap_file(ctx->model.mm_addr, ctx->model.mm_length); - } - delete ctx; } @@ -1672,23 +1718,24 @@ int llama_model_quantize( const char * fname_inp, const char * fname_out, int itype) { - if (!llama_model_quantize_internal(fname_inp, fname_out, itype)) { - fprintf(stderr, "%s: failed to quantize\n", __func__); + try { + llama_model_quantize_internal(fname_inp, fname_out, itype); + return 0; + } catch (const std::string & err) { + fprintf(stderr, "%s: failed to quantize: %s\n", __func__, err.c_str()); return 1; } - - return 0; } // Returns the KV cache that will contain the context for the // ongoing prediction with the model. const uint8_t * llama_get_kv_cache(struct llama_context * ctx) { - return ctx->model.kv_self.buf.data(); + return ctx->model.kv_self.buf.addr; } // Returns the size of the KV cache size_t llama_get_kv_cache_size(struct llama_context * ctx) { - return ctx->model.kv_self.buf.size(); + return ctx->model.kv_self.buf.size; } int llama_get_kv_cache_token_count(struct llama_context * ctx) { @@ -1702,8 +1749,8 @@ void llama_set_kv_cache( size_t n_size, int n_token_count) { // Make sure we have the same kv cache setup - LLAMA_ASSERT(ctx->model.kv_self.buf.size() == n_size); - memcpy(ctx->model.kv_self.buf.data(), kv_cache, n_size); + LLAMA_ASSERT(ctx->model.kv_self.buf.size == n_size); + memcpy(ctx->model.kv_self.buf.addr, kv_cache, n_size); ctx->model.kv_self.n = n_token_count; } @@ -1814,9 +1861,9 @@ llama_token llama_sample_top_p_top_k( void llama_print_timings(struct llama_context * ctx) { const int64_t t_end_us = ggml_time_us(); - const int32_t n_sample = Max(1, ctx->n_sample); - const int32_t n_eval = Max(1, ctx->n_eval); - const int32_t n_p_eval = Max(1, ctx->n_p_eval); + const int32_t n_sample = std::max(1, ctx->n_sample); + const int32_t n_eval = std::max(1, ctx->n_eval); + const int32_t n_p_eval = std::max(1, ctx->n_p_eval); fprintf(stderr, "\n"); fprintf(stderr, "%s: load time = %8.2f ms\n", __func__, ctx->t_load_us / 1000.0); @@ -1854,6 +1901,6 @@ const char * llama_print_system_info(void) { } // For internal test use -std::unordered_map& llama_internal_get_tensor_map(struct llama_context * ctx) { - return ctx->model.tensors; +std::vector>& llama_internal_get_tensor_map(struct llama_context * ctx) { + return ctx->model.tensors_by_name; } diff --git a/llama.h b/llama.h index deb09fe53..42c364c6b 100644 --- a/llama.h +++ b/llama.h @@ -55,6 +55,7 @@ extern "C" { bool f16_kv; // use fp16 for KV cache bool logits_all; // the llama_eval() call computes all logits, not just the last one bool vocab_only; // only load the vocabulary, no weights + bool use_mmap; // use mmap if possible bool use_mlock; // force system to keep model in RAM bool embedding; // embedding mode only @@ -66,6 +67,9 @@ extern "C" { LLAMA_API struct llama_context_params llama_context_default_params(); + LLAMA_API bool llama_mmap_supported(); + LLAMA_API bool llama_mlock_supported(); + // Various functions for loading a ggml llama model. // Allocate (almost) all memory needed for the model. // Return NULL on failure @@ -164,13 +168,6 @@ extern "C" { #ifdef __cplusplus } - -#include -#include -// -// Internal function exposed for tests and benchmarks -// -std::unordered_map& llama_internal_get_tensor_map(struct llama_context * ctx); #endif -#endif +#endif // LLAMA_H diff --git a/llama_internal.h b/llama_internal.h new file mode 100644 index 000000000..543eed996 --- /dev/null +++ b/llama_internal.h @@ -0,0 +1,12 @@ +// Internal header to be included by llama.cpp and tests/benchmarks only. + +#ifndef LLAMA_INTERNAL_H +#define LLAMA_INTERNAL_H + +#include +#include +struct ggml_tensor; + +std::vector>& llama_internal_get_tensor_map(struct llama_context * ctx); + +#endif // LLAMA_INTERNAL_H diff --git a/llama_util.h b/llama_util.h new file mode 100755 index 000000000..d68f49bd2 --- /dev/null +++ b/llama_util.h @@ -0,0 +1,383 @@ +// Internal header to be included only by llama.cpp. +// Contains wrappers around OS interfaces. + +#ifndef LLAMA_UTIL_H +#define LLAMA_UTIL_H + +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#ifdef __has_include + #if __has_include() + #include + #if defined(_POSIX_MAPPED_FILES) + #include + #endif + #endif +#endif + +#if defined(_WIN32) + #define WIN32_LEAN_AND_MEAN + #define NOMINMAX + #include + #include + #include // for _fseeki64 +#endif + +#define LLAMA_ASSERT(x) \ + do { \ + if (!(x)) { \ + fprintf(stderr, "LLAMA_ASSERT: %s:%d: %s\n", __FILE__, __LINE__, #x); \ + abort(); \ + } \ + } while (0) + +#ifdef __GNUC__ +__attribute__((format(printf, 1, 2))) +#endif +static std::string format(const char * fmt, ...) { + va_list ap, ap2; + va_start(ap, fmt); + va_copy(ap2, ap); + int size = vsnprintf(NULL, 0, fmt, ap); + LLAMA_ASSERT(size >= 0 && size < INT_MAX); + std::vector buf(size + 1); + int size2 = vsnprintf(buf.data(), size + 1, fmt, ap2); + LLAMA_ASSERT(size2 == size); + va_end(ap2); + va_end(ap); + return std::string(buf.data(), size); +}; + +struct llama_file { + // use FILE * so we don't have to re-open the file to mmap + FILE * fp; + size_t size; + + llama_file(const char * fname, const char * mode) { + fp = std::fopen(fname, mode); + if (fp == NULL) { + throw format("failed to open %s: %s", fname, std::strerror(errno)); + } + seek(0, SEEK_END); + size = tell(); + seek(0, SEEK_SET); + } + + size_t tell() const { +#ifdef _WIN32 + __int64 ret = _ftelli64(fp); +#else + long ret = std::ftell(fp); +#endif + LLAMA_ASSERT(ret != -1); // this really shouldn't fail + return (size_t) ret; + } + + void seek(size_t offset, int whence) { +#ifdef _WIN32 + int ret = _fseeki64(fp, (__int64) offset, whence); +#else + int ret = std::fseek(fp, (long) offset, whence); +#endif + LLAMA_ASSERT(ret == 0); // same + } + + void read_raw(void * ptr, size_t size) { + if (size == 0) { + return; + } + errno = 0; + std::size_t ret = std::fread(ptr, size, 1, fp); + if (ferror(fp)) { + throw format("read error: %s", strerror(errno)); + } + if (ret != 1) { + throw std::string("unexpectedly reached end of file"); + } + } + + std::uint32_t read_u32() { + std::uint32_t ret; + read_raw(&ret, sizeof(ret)); + return ret; + } + + std::string read_string(std::uint32_t len) { + std::vector chars(len); + read_raw(chars.data(), len); + return std::string(chars.data(), len); + } + + void write_raw(const void * ptr, size_t size) { + if (size == 0) { + return; + } + errno = 0; + size_t ret = std::fwrite(ptr, size, 1, fp); + if (ret != 1) { + throw format("write error: %s", strerror(errno)); + } + } + + void write_u32(std::uint32_t val) { + write_raw(&val, sizeof(val)); + } + + ~llama_file() { + if (fp) { + std::fclose(fp); + } + } +}; + +#if defined(_WIN32) +static std::string llama_format_win_err(DWORD err) { + LPSTR buf; + size_t size = FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, + NULL, err, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&buf, 0, NULL); + if (!size) { + return "FormatMessageA failed"; + } + std::string ret(buf, size); + LocalFree(buf); + return ret; +} +#endif + +struct llama_mmap { + void * addr; + size_t size; + + llama_mmap(const llama_mmap &) = delete; + +#ifdef _POSIX_MAPPED_FILES + static constexpr bool SUPPORTED = true; + + llama_mmap(struct llama_file * file) { + size = file->size; + int fd = fileno(file->fp); + int flags = MAP_SHARED; +#ifdef __linux__ + flags |= MAP_POPULATE; +#endif + addr = mmap(NULL, file->size, PROT_READ, flags, fd, 0); + close(fd); + if (addr == MAP_FAILED) { + throw format("mmap failed: %s", strerror(errno)); + } + + // Advise the kernel to preload the mapped memory + if (madvise(addr, file->size, MADV_WILLNEED)) { + fprintf(stderr, "warning: madvise(.., MADV_WILLNEED) failed: %s\n", + strerror(errno)); + } + } + + ~llama_mmap() { + munmap(addr, size); + } +#elif defined(_WIN32) + static constexpr bool SUPPORTED = true; + + llama_mmap(struct llama_file * file) { + size = file->size; + + HANDLE hFile = (HANDLE) _get_osfhandle(_fileno(file->fp)); + + HANDLE hMapping = CreateFileMappingA(hFile, NULL, PAGE_READONLY, 0, 0, NULL); + DWORD error = GetLastError(); + CloseHandle(hFile); + + if (hMapping == NULL) { + throw format("CreateFileMappingA failed: %s", llama_format_win_err(error).c_str()); + } + + addr = MapViewOfFile(hMapping, FILE_MAP_READ, 0, 0, 0); + error = GetLastError(); + CloseHandle(hMapping); + + if (addr == NULL) { + throw format("MapViewOfFile failed: %s", llama_format_win_err(error).c_str()); + } + + // Advise the kernel to preload the mapped memory + WIN32_MEMORY_RANGE_ENTRY range; + range.VirtualAddress = addr; + range.NumberOfBytes = (SIZE_T)size; + if (!PrefetchVirtualMemory(GetCurrentProcess(), 1, &range, 0)) { + fprintf(stderr, "warning: PrefetchVirtualMemory failed: %s\n", + llama_format_win_err(GetLastError()).c_str()); + } + } + + ~llama_mmap() { + if (!UnmapViewOfFile(addr)) { + fprintf(stderr, "warning: UnmapViewOfFile failed: %s\n", + llama_format_win_err(GetLastError()).c_str()); + } + } +#else + static constexpr bool SUPPORTED = false; + + llama_mmap(struct llama_file *) { + throw std::string("mmap not supported"); + } +#endif +}; + +// Represents some region of memory being locked using mlock or VirtualLock; +// will automatically unlock on destruction. +struct llama_mlock { + void * addr = NULL; + size_t size = 0; + bool failed_already = false; + + llama_mlock() {} + llama_mlock(const llama_mlock &) = delete; + + ~llama_mlock() { + if (size) { + raw_unlock(addr, size); + } + } + + void init(void * addr) { + LLAMA_ASSERT(this->addr == NULL && this->size == 0); + this->addr = addr; + } + + void grow_to(size_t target_size) { + LLAMA_ASSERT(addr); + if (failed_already) { + return; + } + size_t granularity = lock_granularity(); + target_size = (target_size + granularity - 1) & ~(granularity - 1); + if (target_size > size) { + if (raw_lock((uint8_t *) addr + size, target_size - size)) { + size = target_size; + } else { + failed_already = true; + } + } + } + +#ifdef _POSIX_MEMLOCK_RANGE + static constexpr bool SUPPORTED = true; + + size_t lock_granularity() { + return (size_t) sysconf(_SC_PAGESIZE); + } + + #ifdef __APPLE__ + #define MLOCK_SUGGESTION \ + "Try increasing the sysctl values 'vm.user_wire_limit' and 'vm.global_user_wire_limit' and/or " \ + "decreasing 'vm.global_no_user_wire_amount'. Also try increasing RLIMIT_MLOCK (ulimit -l).\n" + #else + #define MLOCK_SUGGESTION \ + "Try increasing RLIMIT_MLOCK ('ulimit -l' as root).\n" + #endif + + bool raw_lock(const void * addr, size_t size) { + if (!mlock(addr, size)) { + return true; + } else { + fprintf(stderr, "warning: failed to mlock %zu-byte buffer (after previously locking %zu bytes): %s\n" MLOCK_SUGGESTION, + size, this->size, std::strerror(errno)); + return false; + } + } + + #undef MLOCK_SUGGESTION + + void raw_unlock(void * addr, size_t size) { + if (munlock(addr, size)) { + fprintf(stderr, "warning: failed to munlock buffer: %s\n", std::strerror(errno)); + } + } +#elif defined(_WIN32) + static constexpr bool SUPPORTED = true; + + size_t lock_granularity() { + SYSTEM_INFO si; + GetSystemInfo(&si); + return (size_t) si.dwPageSize; + } + + bool raw_lock(void * addr, size_t size) { + for (int tries = 1; ; tries++) { + if (VirtualLock(addr, size)) { + return true; + } + if (tries == 2) { + fprintf(stderr, "warning: failed to VirtualLock %zu-byte buffer (after previously locking %zu bytes): %s\n", + size, this->size, llama_format_win_err(GetLastError()).c_str()); + return false; + } + + // It failed but this was only the first try; increase the working + // set size and try again. + SIZE_T min_ws_size, max_ws_size; + if (!GetProcessWorkingSetSize(GetCurrentProcess(), &min_ws_size, &max_ws_size)) { + fprintf(stderr, "warning: GetProcessWorkingSetSize failed: %s\n", + llama_format_win_err(GetLastError()).c_str()); + return false; + } + // Per MSDN: "The maximum number of pages that a process can lock + // is equal to the number of pages in its minimum working set minus + // a small overhead." + // Hopefully a megabyte is enough overhead: + size_t increment = size + 1048576; + // The minimum must be <= the maximum, so we need to increase both: + min_ws_size += size; + max_ws_size += size; + if (!SetProcessWorkingSetSize(GetCurrentProcess(), min_ws_size, max_ws_size)) { + fprintf(stderr, "warning: SetProcessWorkingSetSize failed: %s\n", + llama_format_win_err(GetLastError()).c_str()); + return false; + } + } + } + + void raw_unlock(void * addr, size_t size) { + if (!VirtualUnlock(addr, size)) { + fprintf(stderr, "warning: failed to VirtualUnlock buffer: %s\n", + llama_format_win_err(GetLastError()).c_str()); + } + } +#else + static constexpr bool SUPPORTED = false; + + void raw_lock(const void * addr, size_t size) { + fprintf(stderr, "warning: mlock not supported on this system\n"); + } + + void raw_unlock(const void * addr, size_t size) {} +#endif +}; + +// Replacement for std::vector that doesn't require zero-initialization. +struct llama_buffer { + uint8_t * addr = NULL; + size_t size = 0; + + void resize(size_t size) { + delete[] addr; + addr = new uint8_t[size]; + this->size = size; + } + + ~llama_buffer() { + delete[] addr; + } +}; +#endif From 180b693a47b6b825288ef9f2c39d24b6eea4eea6 Mon Sep 17 00:00:00 2001 From: comex Date: Sat, 8 Apr 2023 13:08:21 -0700 Subject: [PATCH 26/53] Print model version. Also improve model type printing, and fix indentation of an unrelated switch statement. --- llama.cpp | 69 ++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 46 insertions(+), 23 deletions(-) diff --git a/llama.cpp b/llama.cpp index 4625e95fb..203a1adc0 100644 --- a/llama.cpp +++ b/llama.cpp @@ -356,17 +356,17 @@ struct llama_load_tensor { LLAMA_ASSERT(shards.size() <= UINT32_MAX); uint32_t n_shards = (uint32_t) shards.size(); switch (split_type) { - case SPLIT_NONE: - ne = first_shard.ne; - break; - case SPLIT_BY_COLUMNS: - ne = {checked_mul(first_shard.ne[0], n_shards), - first_shard.ne[1]}; - break; - case SPLIT_BY_ROWS: - ne = {first_shard.ne[0], - checked_mul(first_shard.ne[1], n_shards)}; - break; + case SPLIT_NONE: + ne = first_shard.ne; + break; + case SPLIT_BY_COLUMNS: + ne = {checked_mul(first_shard.ne[0], n_shards), + first_shard.ne[1]}; + break; + case SPLIT_BY_ROWS: + ne = {first_shard.ne[0], + checked_mul(first_shard.ne[1], n_shards)}; + break; } } @@ -806,6 +806,25 @@ bool llama_mlock_supported() { // model loading // +static const char *llama_file_version_name(llama_file_version version) { + switch (version) { + case LLAMA_FILE_VERSION_GGML: return "'ggml' (old version with low tokenizer quality and no mmap support)"; + case LLAMA_FILE_VERSION_GGMF_V1: return "ggmf v1 (old version with no mmap support)"; + case LLAMA_FILE_VERSION_GGJT_V1: return "ggjt v1 (latest)"; + default: LLAMA_ASSERT(false); + } +} + +static const char *llama_model_type_name(e_model type) { + switch (type) { + case MODEL_7B: return "7B"; + case MODEL_13B: return "13B"; + case MODEL_30B: return "30B"; + case MODEL_65B: return "65B"; + default: LLAMA_ASSERT(false); + } +} + static void llama_model_load_internal( const std::string & fname, llama_context & lctx, @@ -823,8 +842,9 @@ static void llama_model_load_internal( lctx.vocab = std::move(ml->file_loaders.at(0)->vocab); auto & model = lctx.model; + model.hparams = ml->file_loaders.at(0)->hparams; + llama_file_version file_version = ml->file_loaders.at(0)->file_version; auto & hparams = model.hparams; - hparams = ml->file_loaders.at(0)->hparams; uint32_t n_ff = ((2*(4*hparams.n_embd)/3 + hparams.n_mult - 1)/hparams.n_mult)*hparams.n_mult; { @@ -836,18 +856,21 @@ static void llama_model_load_internal( } hparams.n_ctx = n_ctx; + } - fprintf(stderr, "%s: n_vocab = %u\n", __func__, hparams.n_vocab); - fprintf(stderr, "%s: n_ctx = %u\n", __func__, hparams.n_ctx); - fprintf(stderr, "%s: n_embd = %u\n", __func__, hparams.n_embd); - fprintf(stderr, "%s: n_mult = %u\n", __func__, hparams.n_mult); - fprintf(stderr, "%s: n_head = %u\n", __func__, hparams.n_head); - fprintf(stderr, "%s: n_layer = %u\n", __func__, hparams.n_layer); - fprintf(stderr, "%s: n_rot = %u\n", __func__, hparams.n_rot); - fprintf(stderr, "%s: f16 = %u\n", __func__, hparams.f16); - fprintf(stderr, "%s: n_ff = %u\n", __func__, n_ff); - fprintf(stderr, "%s: n_parts = %zu\n", __func__, ml->file_loaders.size()); - fprintf(stderr, "%s: type = %u\n", __func__, model.type); + { + fprintf(stderr, "%s: format = %s\n", __func__, llama_file_version_name(file_version)); + fprintf(stderr, "%s: n_vocab = %u\n", __func__, hparams.n_vocab); + fprintf(stderr, "%s: n_ctx = %u\n", __func__, hparams.n_ctx); + fprintf(stderr, "%s: n_embd = %u\n", __func__, hparams.n_embd); + fprintf(stderr, "%s: n_mult = %u\n", __func__, hparams.n_mult); + fprintf(stderr, "%s: n_head = %u\n", __func__, hparams.n_head); + fprintf(stderr, "%s: n_layer = %u\n", __func__, hparams.n_layer); + fprintf(stderr, "%s: n_rot = %u\n", __func__, hparams.n_rot); + fprintf(stderr, "%s: f16 = %u\n", __func__, hparams.f16); + fprintf(stderr, "%s: n_ff = %u\n", __func__, n_ff); + fprintf(stderr, "%s: n_parts = %zu\n", __func__, ml->file_loaders.size()); + fprintf(stderr, "%s: model size = %s\n", __func__, llama_model_type_name(model.type)); } if (vocab_only) { From 684da25926e5c505f725b4f10b5485b218fa1fc7 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Mon, 10 Apr 2023 19:29:48 +0300 Subject: [PATCH 27/53] ggml : fix quantize_row_q4_1() ARM_NEON (close #876) --- ggml.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/ggml.c b/ggml.c index 326b8e842..9616eb9fd 100644 --- a/ggml.c +++ b/ggml.c @@ -599,10 +599,7 @@ static void quantize_row_q4_0(const float * restrict x, void * restrict vy, int for (int l = 0; l < 2; l++) amaxv[4*l] = vmaxq_f32(amaxv[4*l], amaxv[4*l+2]); for (int l = 0; l < 1; l++) amaxv[8*l] = vmaxq_f32(amaxv[8*l], amaxv[8*l+4]); - // absolute max - const float amax = MAX( - MAX(vgetq_lane_f32(amaxv[0], 0), vgetq_lane_f32(amaxv[0], 1)), - MAX(vgetq_lane_f32(amaxv[0], 2), vgetq_lane_f32(amaxv[0], 3))); + const float amax = vmaxvq_f32(amaxv[0]); const float d = amax / ((1 << 3) - 1); const float id = d ? 1.0f/d : 0.0f; @@ -924,7 +921,7 @@ static void quantize_row_q4_1(const float * restrict x, void * restrict vy, int float32x4_t minv[8]; float32x4_t maxv[8]; - for (int l = 0; l < 8; l++) srcv[l] = vld1q_f32(x + i*32 + 4*l); + for (int l = 0; l < 8; l++) srcv[l] = vld1q_f32(x + i*QK + 4*l); for (int l = 0; l < 4; l++) minv[2*l] = vminq_f32(srcv[2*l], srcv[2*l + 1]); for (int l = 0; l < 2; l++) minv[4*l] = vminq_f32(minv[4*l], minv[4*l + 2]); @@ -947,7 +944,8 @@ static void quantize_row_q4_1(const float * restrict x, void * restrict vy, int for (int l = 0; l < 8; l++) { const float32x4_t v = vmulq_n_f32(vsubq_f32(srcv[l], minv0), id); - const int32x4_t vi = vcvtq_s32_f32(v); + const float32x4_t vf = vaddq_f32(v, vdupq_n_f32(0.5f)); // needed to round to nearest + const int32x4_t vi = vcvtq_s32_f32(vf); y[i].qs[2*l + 0] = vgetq_lane_s32(vi, 0) | (vgetq_lane_s32(vi, 1) << 4); y[i].qs[2*l + 1] = vgetq_lane_s32(vi, 2) | (vgetq_lane_s32(vi, 3) << 4); From d9a239c4104c888eafda672c1e42c9bbc5084cb8 Mon Sep 17 00:00:00 2001 From: Marco Matthies <71844+marcom@users.noreply.github.com> Date: Mon, 10 Apr 2023 19:57:59 +0200 Subject: [PATCH 28/53] Simplify to include lower-case windows.h always, fix compile on mingw32 (#747) --- ggml.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/ggml.c b/ggml.c index 9616eb9fd..a817f8321 100644 --- a/ggml.c +++ b/ggml.c @@ -26,14 +26,9 @@ #define static_assert(cond, msg) struct global_scope_noop_trick #endif -#if defined _MSC_VER || defined(__MINGW32__) +#if defined(_WIN32) -#if !defined(__MINGW32__) -#include -#else -// ref: https://github.com/ggerganov/whisper.cpp/issues/168 #include -#endif typedef volatile LONG atomic_int; typedef atomic_int atomic_bool; From 9d634ef452d0fc24fcd49592952d13d0ab0f41b7 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Mon, 10 Apr 2023 19:32:45 +0300 Subject: [PATCH 29/53] ggml : remove trailing whitespaces --- ggml.c | 80 ++++++++++++++++++++++++++++------------------------------ 1 file changed, 39 insertions(+), 41 deletions(-) diff --git a/ggml.c b/ggml.c index a817f8321..6db6fde8d 100644 --- a/ggml.c +++ b/ggml.c @@ -1944,7 +1944,7 @@ static void ggml_vec_dot_q4_0(const int n, float * restrict s, const void * rest // Initialize accumulator with zeros __m256 acc = _mm256_setzero_ps(); - /* Prepare the constants we will need during execution */ + /* Prepare the constants we will need during execution */ const __m256i lowMask = _mm256_set1_epi8( 0xF ); const __m256i offset_8 = _mm256_set1_epi16( 8 ); @@ -1954,61 +1954,59 @@ static void ggml_vec_dot_q4_0(const int n, float * restrict s, const void * rest // Main loop for (int i = 0; i < nb; i+=UNROLL_COUNT) { - - // This loop will be unrolled by the compiler + // This loop will be unrolled by the compiler for (int u=0;u we now have a vector of 8 int_32t */ - __m256i xy_q = _mm256_add_epi32( xy_high_q, xy_low_q ); + /* Accumulate the products of int32_t integers -> we now have a vector of 8 int_32t */ + __m256i xy_q = _mm256_add_epi32( xy_high_q, xy_low_q ); - /* Convert to vectore of 8 int32_t to 8 floats */ - __m256 q = _mm256_cvtepi32_ps( xy_q ); + /* Convert to vectore of 8 int32_t to 8 floats */ + __m256 q = _mm256_cvtepi32_ps( xy_q ); - /* Multiply q with scale and accumulate */ - acc = _mm256_fmadd_ps( scale, q, acc ); + /* Multiply q with scale and accumulate */ + acc = _mm256_fmadd_ps( scale, q, acc ); } - - } + } // Return horizontal sum of the acc vector __m128 res = _mm256_extractf128_ps( acc, 1 ); From c3ac702e5ee3533457e0489df4906ee112fe88e7 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Mon, 10 Apr 2023 22:40:28 +0300 Subject: [PATCH 30/53] ggml : add ggml_cont() + optimize ggml_cpy() for contiguous dst --- ggml.c | 254 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-- ggml.h | 6 ++ 2 files changed, 252 insertions(+), 8 deletions(-) diff --git a/ggml.c b/ggml.c index 6db6fde8d..4f6420678 100644 --- a/ggml.c +++ b/ggml.c @@ -2609,6 +2609,7 @@ static const char * GGML_OP_LABEL[GGML_OP_COUNT] = { "SCALE", "CPY", + "CONT", "RESHAPE", "VIEW", "PERMUTE", @@ -2624,7 +2625,7 @@ static const char * GGML_OP_LABEL[GGML_OP_COUNT] = { "FLASH_FF", }; -static_assert(GGML_OP_COUNT == 35, "GGML_OP_COUNT != 35"); +static_assert(GGML_OP_COUNT == 36, "GGML_OP_COUNT != 36"); static const char * GGML_OP_SYMBOL[GGML_OP_COUNT] = { "none", @@ -2653,6 +2654,7 @@ static const char * GGML_OP_SYMBOL[GGML_OP_COUNT] = { "x*v", "x-\\>y", + "cont(x)", "reshape(x)", "view(x)", "permute(x)", @@ -2668,7 +2670,7 @@ static const char * GGML_OP_SYMBOL[GGML_OP_COUNT] = { "flash_ff(x)", }; -static_assert(GGML_OP_COUNT == 35, "GGML_OP_COUNT != 35"); +static_assert(GGML_OP_COUNT == 36, "GGML_OP_COUNT != 36"); static_assert(sizeof(struct ggml_object)%GGML_MEM_ALIGN == 0, "ggml_object size must be a multiple of GGML_MEM_ALIGN"); static_assert(sizeof(struct ggml_tensor)%GGML_MEM_ALIGN == 0, "ggml_tensor size must be a multiple of GGML_MEM_ALIGN"); @@ -4301,6 +4303,41 @@ struct ggml_tensor * ggml_cpy_inplace( return ggml_cpy_impl(ctx, a, b, true); } +// ggml_cont + +struct ggml_tensor * ggml_cont_impl( + struct ggml_context * ctx, + struct ggml_tensor * a, + bool inplace) { + bool is_node = false; + + if (!inplace && a->grad) { + GGML_ASSERT(false); // TODO: implement backward + is_node = true; + } + + struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); + + result->op = GGML_OP_CONT; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src0 = a; + result->src1 = NULL; + + return result; +} + +struct ggml_tensor * ggml_cont( + struct ggml_context * ctx, + struct ggml_tensor * a) { + return ggml_cont_impl(ctx, a, false); +} + +struct ggml_tensor * ggml_cont_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a) { + return ggml_cont_impl(ctx, a, true); +} + // ggml_reshape struct ggml_tensor * ggml_reshape( @@ -4843,6 +4880,85 @@ static void ggml_compute_forward_dup_f16( // TODO: add more special-case implementations for tensor shapes/strides that can benefit from memcpy + if (ggml_is_contiguous(dst)) { + if (src0->nb[0] == sizeof(ggml_fp16_t)) { + if (dst->type == GGML_TYPE_F16) { + size_t id = 0; + const size_t rs = ne00*nb00; + + for (int i03 = 0; i03 < ne03; i03++) { + for (int i02 = 0; i02 < ne02; i02++) { + for (int i01 = 0; i01 < ne01; i01++) { + const char * src0_ptr = (char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03; + char * dst_ptr = (char *) dst->data + id*rs; + + memcpy(dst_ptr, src0_ptr, rs); + + id++; + } + } + } + } else if (dst->type == GGML_TYPE_F32) { + size_t id = 0; + float * dst_ptr = (float *) dst->data; + + for (int i03 = 0; i03 < ne03; i03++) { + for (int i02 = 0; i02 < ne02; i02++) { + for (int i01 = 0; i01 < ne01; i01++) { + for (int i00 = 0; i00 < ne00; i00++) { + const ggml_fp16_t * src0_ptr = (ggml_fp16_t *) ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03); + + dst_ptr[id] = GGML_FP16_TO_FP32(*src0_ptr); + id++; + } + } + } + } + } else { + GGML_ASSERT(false); // TODO: implement + } + } else { + //printf("%s: this is not optimal - fix me\n", __func__); + + if (dst->type == GGML_TYPE_F32) { + size_t id = 0; + float * dst_ptr = (float *) dst->data; + + for (int i03 = 0; i03 < ne03; i03++) { + for (int i02 = 0; i02 < ne02; i02++) { + for (int i01 = 0; i01 < ne01; i01++) { + for (int i00 = 0; i00 < ne00; i00++) { + const ggml_fp16_t * src0_ptr = (ggml_fp16_t *) ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03); + + dst_ptr[id] = GGML_FP16_TO_FP32(*src0_ptr); + id++; + } + } + } + } + } else if (dst->type == GGML_TYPE_F16) { + size_t id = 0; + ggml_fp16_t * dst_ptr = (ggml_fp16_t *) dst->data; + + for (int i03 = 0; i03 < ne03; i03++) { + for (int i02 = 0; i02 < ne02; i02++) { + for (int i01 = 0; i01 < ne01; i01++) { + for (int i00 = 0; i00 < ne00; i00++) { + const ggml_fp16_t * src0_ptr = (ggml_fp16_t *) ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03); + + dst_ptr[id] = *src0_ptr; + id++; + } + } + } + } + } else { + GGML_ASSERT(false); // TODO: implement + } + } + return; + } + // dst counters int64_t i10 = 0; int64_t i11 = 0; @@ -4937,6 +5053,105 @@ static void ggml_compute_forward_dup_f32( return; } + if (src0->type == dst->type && + src0->ne[0] == dst->ne[0] && + src0->nb[0] == GGML_TYPE_SIZE[src0->type] && dst->nb[0] == GGML_TYPE_SIZE[dst->type]) { + // copy by rows + const size_t rs = ne00*nb00; + for (int64_t i03 = 0; i03 < ne03; i03++) { + for (int64_t i02 = 0; i02 < ne02; i02++) { + for (int64_t i01 = 0; i01 < ne01; i01++) { + memcpy( + ((char *) dst->data + i01*nb1 + i02*nb2 + i03*nb3), + ((char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03), + rs); + } + } + } + return; + } + + if (ggml_is_contiguous(dst)) { + // TODO: simplify + if (src0->nb[0] == sizeof(float)) { + if (dst->type == GGML_TYPE_F32) { + size_t id = 0; + const size_t rs = ne00*nb00; + + for (int i03 = 0; i03 < ne03; i03++) { + for (int i02 = 0; i02 < ne02; i02++) { + for (int i01 = 0; i01 < ne01; i01++) { + const char * src0_ptr = (char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03; + char * dst_ptr = (char *) dst->data + id*rs; + + memcpy(dst_ptr, src0_ptr, rs); + + id++; + } + } + } + } else if (dst->type == GGML_TYPE_F16) { + size_t id = 0; + ggml_fp16_t * dst_ptr = (ggml_fp16_t *) dst->data; + + for (int i03 = 0; i03 < ne03; i03++) { + for (int i02 = 0; i02 < ne02; i02++) { + for (int i01 = 0; i01 < ne01; i01++) { + for (int i00 = 0; i00 < ne00; i00++) { + const float * src0_ptr = (float *) ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03); + + dst_ptr[id] = GGML_FP32_TO_FP16(*src0_ptr); + id++; + } + } + } + } + } else { + GGML_ASSERT(false); // TODO: implement + } + } else { + //printf("%s: this is not optimal - fix me\n", __func__); + + if (dst->type == GGML_TYPE_F32) { + size_t id = 0; + float * dst_ptr = (float *) dst->data; + + for (int i03 = 0; i03 < ne03; i03++) { + for (int i02 = 0; i02 < ne02; i02++) { + for (int i01 = 0; i01 < ne01; i01++) { + for (int i00 = 0; i00 < ne00; i00++) { + const float * src0_ptr = (float *) ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03); + + dst_ptr[id] = *src0_ptr; + id++; + } + } + } + } + } else if (dst->type == GGML_TYPE_F16) { + size_t id = 0; + ggml_fp16_t * dst_ptr = (ggml_fp16_t *) dst->data; + + for (int i03 = 0; i03 < ne03; i03++) { + for (int i02 = 0; i02 < ne02; i02++) { + for (int i01 = 0; i01 < ne01; i01++) { + for (int i00 = 0; i00 < ne00; i00++) { + const float * src0_ptr = (float *) ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03); + + dst_ptr[id] = GGML_FP32_TO_FP16(*src0_ptr); + id++; + } + } + } + } + } else { + GGML_ASSERT(false); // TODO: implement + } + } + + return; + } + // dst counters int64_t i10 = 0; int64_t i11 = 0; @@ -5057,14 +5272,18 @@ static void ggml_compute_forward_add_f32( GGML_ASSERT(nb00 == sizeof(float)); if (nb10 == sizeof(float)) { - const int j0 = (n/nth)*ith; - const int j1 = ith == nth - 1 ? n : (n/nth)*(ith + 1); - - for (int j = j0; j < j1; j++) { + for (int j = ith; j < n; j += nth) { +#ifdef GGML_USE_ACCELERATE + vDSP_vadd( + (float *) ((char *) src0->data + j*nb01), 1, + (float *) ((char *) src1->data + j*nb11), 1, + (float *) ((char *) dst->data + j*nb1), 1, nc); +#else ggml_vec_add_f32(nc, (float *) ((char *) dst->data + j*nb1), (float *) ((char *) src0->data + j*nb01), (float *) ((char *) src1->data + j*nb11)); +#endif } } else { // src1 is not contiguous @@ -6812,6 +7031,15 @@ static void ggml_compute_forward_cpy( ggml_compute_forward_dup(params, src0, dst); } +// ggml_compute_forward_cont + +static void ggml_compute_forward_cont( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + struct ggml_tensor * dst) { + ggml_compute_forward_dup(params, src0, dst); +} + // ggml_compute_forward_reshape static void ggml_compute_forward_reshape( @@ -8642,6 +8870,10 @@ static void ggml_compute_forward(struct ggml_compute_params * params, struct ggm { ggml_compute_forward_cpy(params, tensor->src0, tensor); } break; + case GGML_OP_CONT: + { + ggml_compute_forward_cont(params, tensor->src0, tensor); + } break; case GGML_OP_RESHAPE: { ggml_compute_forward_reshape(params, tensor->src0, tensor); @@ -8886,8 +9118,9 @@ static void ggml_compute_backward(struct ggml_context * ctx, struct ggml_tensor src1->grad = ggml_add_impl(ctx, src1->grad, - // TODO: fix transpose, the node will break the graph connections - ggml_mul_mat(ctx, ggml_transpose(ctx, src0), tensor->grad), + ggml_mul_mat(ctx, + ggml_cont(ctx, ggml_transpose(ctx, src0)), + tensor->grad), inplace); } } break; @@ -8899,6 +9132,10 @@ static void ggml_compute_backward(struct ggml_context * ctx, struct ggml_tensor { GGML_ASSERT(false); // TODO: not implemented } break; + case GGML_OP_CONT: + { + GGML_ASSERT(false); // TODO: not implemented + } break; case GGML_OP_RESHAPE: { GGML_ASSERT(false); // TODO: not implemented @@ -9353,6 +9590,7 @@ void ggml_graph_compute(struct ggml_context * ctx, struct ggml_cgraph * cgraph) node->n_tasks = n_threads; } break; case GGML_OP_CPY: + case GGML_OP_CONT: case GGML_OP_RESHAPE: case GGML_OP_VIEW: case GGML_OP_PERMUTE: diff --git a/ggml.h b/ggml.h index af16c647c..a5245a8ae 100644 --- a/ggml.h +++ b/ggml.h @@ -236,6 +236,7 @@ enum ggml_op { GGML_OP_SCALE, GGML_OP_CPY, + GGML_OP_CONT, GGML_OP_RESHAPE, GGML_OP_VIEW, GGML_OP_PERMUTE, @@ -525,6 +526,11 @@ struct ggml_tensor * ggml_cpy( struct ggml_tensor * a, struct ggml_tensor * b); +// make contiguous +struct ggml_tensor * ggml_cont( + struct ggml_context * ctx, + struct ggml_tensor * a); + // return view(a), b specifies the new shape // TODO: when we start computing gradient, make a copy instead of view struct ggml_tensor * ggml_reshape( From 461ba9e66ed3885f80680d71495e055580573c74 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Mon, 10 Apr 2023 23:20:01 +0300 Subject: [PATCH 31/53] ggml : fix WASM build --- ggml.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/ggml.c b/ggml.c index 4f6420678..ada3bbbdc 100644 --- a/ggml.c +++ b/ggml.c @@ -2067,18 +2067,18 @@ static void ggml_vec_dot_q4_0(const int n, float * restrict s, const void * rest float sum1 = 0.0f; for (int i = 0; i < nb; i += 2) { - const block_q4_0 * restrict x0 = &px[i + 0]; - const block_q4_0 * restrict y0 = &py[i + 0]; - const block_q4_0 * restrict x1 = &px[i + 1]; - const block_q4_0 * restrict y1 = &py[i + 1]; + const block_q4_0 * restrict x0 = &x[i + 0]; + const block_q4_0 * restrict y0 = &y[i + 0]; + const block_q4_0 * restrict x1 = &x[i + 1]; + const block_q4_0 * restrict y1 = &y[i + 1]; const v128_t m4b = wasm_u8x16_splat(0xf); const v128_t s8b = wasm_i8x16_splat(0x8); - const v128_t v0_0 = wasm_v128_load(x0.qs); - const v128_t v0_1 = wasm_v128_load(y0.qs); - const v128_t v1_0 = wasm_v128_load(x1.qs); - const v128_t v1_1 = wasm_v128_load(y1.qs); + const v128_t v0_0 = wasm_v128_load(x0->qs); + const v128_t v0_1 = wasm_v128_load(y0->qs); + const v128_t v1_0 = wasm_v128_load(x1->qs); + const v128_t v1_1 = wasm_v128_load(y1->qs); // 4-bit -> 8-bit const v128_t v0_0l = wasm_v128_and(v0_0, m4b); From a0caa34b162449b5c13b8d604573053300ff54a1 Mon Sep 17 00:00:00 2001 From: qouoq Date: Tue, 11 Apr 2023 04:41:53 +0800 Subject: [PATCH 32/53] Add BAIR's Koala to supported models (#877) --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 5ef4318eb..ef82855e4 100644 --- a/README.md +++ b/README.md @@ -42,6 +42,7 @@ New features will probably be added mostly through community contributions. - [X] [Chinese LLaMA / Alpaca](https://github.com/ymcui/Chinese-LLaMA-Alpaca) - [X] [Vigogne (French)](https://github.com/bofenghuang/vigogne) - [X] [Vicuna](https://github.com/ggerganov/llama.cpp/discussions/643#discussioncomment-5533894) +- [X] [Koala](https://bair.berkeley.edu/blog/2023/04/03/koala/) **Bindings:** From 2663d2c6784ad7b77998c6874df25648d597f74b Mon Sep 17 00:00:00 2001 From: comex Date: Tue, 11 Apr 2023 06:19:54 -0700 Subject: [PATCH 33/53] Windows fixes (#890) Mostly for msys2 and mingw64 builds, which are different from each other and different from standard Visual Studio builds. Isn't Windows fun? - Define _GNU_SOURCE in more files (it's already used in ggml.c for Linux's sake). - Don't use PrefetchVirtualMemory if not building for Windows 8 or later (mingw64 doesn't by default). But warn the user about this situation since it's probably not intended. - Check for NOMINMAX already being defined, which it is on mingw64. - Actually use the `increment` variable (bug in my `pizza` PR). - Suppress unused variable warnings in the fake pthread_create and pthread_join implementations for Windows. - (not Windows-related) Remove mention of `asprintf` from comment; `asprintf` is no longer used. Fixes #871. --- examples/main/main.cpp | 5 +++++ ggml.c | 4 +++- llama.cpp | 5 +++++ llama_util.h | 12 +++++++++--- 4 files changed, 22 insertions(+), 4 deletions(-) diff --git a/examples/main/main.cpp b/examples/main/main.cpp index d333d0dba..bf756c16d 100644 --- a/examples/main/main.cpp +++ b/examples/main/main.cpp @@ -1,3 +1,8 @@ +// Defines sigaction on msys: +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif + #include "common.h" #include "llama.h" diff --git a/ggml.c b/ggml.c index ada3bbbdc..897b67d93 100644 --- a/ggml.c +++ b/ggml.c @@ -1,4 +1,4 @@ -// Defines CLOCK_MONOTONIC and asprintf on Linux +// Defines CLOCK_MONOTONIC on Linux #define _GNU_SOURCE #include "ggml.h" @@ -50,6 +50,7 @@ typedef HANDLE pthread_t; typedef DWORD thread_ret_t; static int pthread_create(pthread_t* out, void* unused, thread_ret_t(*func)(void*), void* arg) { + (void) unused; HANDLE handle = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) func, arg, 0, NULL); if (handle == NULL) { @@ -61,6 +62,7 @@ static int pthread_create(pthread_t* out, void* unused, thread_ret_t(*func)(void } static int pthread_join(pthread_t thread, void* unused) { + (void) unused; return (int) WaitForSingleObject(thread, INFINITE); } diff --git a/llama.cpp b/llama.cpp index 203a1adc0..54ba01eef 100644 --- a/llama.cpp +++ b/llama.cpp @@ -1,3 +1,8 @@ +// Defines fileno on msys: +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif + #include "llama_util.h" #include "llama.h" #include "llama_internal.h" diff --git a/llama_util.h b/llama_util.h index d68f49bd2..653bf7138 100755 --- a/llama_util.h +++ b/llama_util.h @@ -26,7 +26,9 @@ #if defined(_WIN32) #define WIN32_LEAN_AND_MEAN - #define NOMINMAX + #ifndef NOMINMAX + #define NOMINMAX + #endif #include #include #include // for _fseeki64 @@ -209,6 +211,7 @@ struct llama_mmap { throw format("MapViewOfFile failed: %s", llama_format_win_err(error).c_str()); } + #if _WIN32_WINNT >= _WIN32_WINNT_WIN8 // Advise the kernel to preload the mapped memory WIN32_MEMORY_RANGE_ENTRY range; range.VirtualAddress = addr; @@ -217,6 +220,9 @@ struct llama_mmap { fprintf(stderr, "warning: PrefetchVirtualMemory failed: %s\n", llama_format_win_err(GetLastError()).c_str()); } + #else + #pragma message("warning: You are building for pre-Windows 8; prefetch not supported") + #endif // _WIN32_WINNT >= _WIN32_WINNT_WIN8 } ~llama_mmap() { @@ -338,8 +344,8 @@ struct llama_mlock { // Hopefully a megabyte is enough overhead: size_t increment = size + 1048576; // The minimum must be <= the maximum, so we need to increase both: - min_ws_size += size; - max_ws_size += size; + min_ws_size += increment; + max_ws_size += increment; if (!SetProcessWorkingSetSize(GetCurrentProcess(), min_ws_size, max_ws_size)) { fprintf(stderr, "warning: SetProcessWorkingSetSize failed: %s\n", llama_format_win_err(GetLastError()).c_str()); From 3e6e70d8e8917b5bd14c7c9f9b89a585f1ff0b31 Mon Sep 17 00:00:00 2001 From: Stephan Walter Date: Tue, 11 Apr 2023 15:03:51 +0000 Subject: [PATCH 34/53] Add enum llama_ftype, sync ggml_type to model files (#709) --- examples/quantize/quantize.cpp | 10 ++--- ggml.c | 35 ++++++++---------- ggml.h | 9 +++-- llama.cpp | 67 ++++++++++++++++++++-------------- llama.h | 10 ++++- 5 files changed, 74 insertions(+), 57 deletions(-) diff --git a/examples/quantize/quantize.cpp b/examples/quantize/quantize.cpp index 680757c6b..5c9e2ad94 100644 --- a/examples/quantize/quantize.cpp +++ b/examples/quantize/quantize.cpp @@ -5,15 +5,15 @@ #include // usage: -// ./llama-quantize models/llama/ggml-model.bin models/llama/ggml-model-quant.bin type +// ./quantize models/llama/ggml-model.bin models/llama/ggml-model-quant.bin type // int main(int argc, char ** argv) { ggml_time_init(); if (argc != 4) { fprintf(stderr, "usage: %s model-f32.bin model-quant.bin type\n", argv[0]); - fprintf(stderr, " type = 2 - q4_0\n"); - fprintf(stderr, " type = 3 - q4_1\n"); + fprintf(stderr, " type = %d - q4_0\n", LLAMA_FTYPE_MOSTLY_Q4_0); + fprintf(stderr, " type = %d - q4_1\n", LLAMA_FTYPE_MOSTLY_Q4_1); return 1; } @@ -27,7 +27,7 @@ int main(int argc, char ** argv) { const std::string fname_inp = argv[1]; const std::string fname_out = argv[2]; - const int itype = atoi(argv[3]); + const enum llama_ftype ftype = (enum llama_ftype)atoi(argv[3]); const int64_t t_main_start_us = ggml_time_us(); @@ -37,7 +37,7 @@ int main(int argc, char ** argv) { { const int64_t t_start_us = ggml_time_us(); - if (llama_model_quantize(fname_inp.c_str(), fname_out.c_str(), itype)) { + if (llama_model_quantize(fname_inp.c_str(), fname_out.c_str(), ftype)) { fprintf(stderr, "%s: failed to quantize model from '%s'\n", __func__, fname_inp.c_str()); return 1; } diff --git a/ggml.c b/ggml.c index 897b67d93..31947c4c1 100644 --- a/ggml.c +++ b/ggml.c @@ -2560,29 +2560,26 @@ inline static void ggml_vec_norm_inv_f32(const int n, float * s, const float * x // static const int GGML_BLCK_SIZE[GGML_TYPE_COUNT] = { - QK, - QK, - 1, - 1, - 1, - 1, - 1, + [GGML_TYPE_F32] = 1, + [GGML_TYPE_F16] = 1, + [GGML_TYPE_Q4_0] = QK, + [GGML_TYPE_Q4_1] = QK, + [GGML_TYPE_I8] = 1, + [GGML_TYPE_I16] = 1, + [GGML_TYPE_I32] = 1, }; - -static_assert(GGML_TYPE_COUNT == 7, "GGML_TYPE_COUNT != 5"); +static_assert(GGML_TYPE_COUNT == 7, "GGML_BLCK_SIZE is outdated"); static const size_t GGML_TYPE_SIZE[GGML_TYPE_COUNT] = { - sizeof(block_q4_0), - sizeof(block_q4_1), - sizeof(int8_t ), - sizeof(int16_t), - sizeof(int32_t), - sizeof(ggml_fp16_t), - sizeof(float ), + [GGML_TYPE_F32] = sizeof(float), + [GGML_TYPE_F16] = sizeof(ggml_fp16_t), + [GGML_TYPE_Q4_0] = sizeof(block_q4_0), + [GGML_TYPE_Q4_1] = sizeof(block_q4_1), + [GGML_TYPE_I8] = sizeof(int8_t), + [GGML_TYPE_I16] = sizeof(int16_t), + [GGML_TYPE_I32] = sizeof(int32_t), }; - -// don't forget to update the array above when adding new types -static_assert(GGML_TYPE_COUNT == 7, "GGML_TYPE_COUNT != 5"); +static_assert(GGML_TYPE_COUNT == 7, "GGML_TYPE_SIZE is outdated"); static const char * GGML_OP_LABEL[GGML_OP_COUNT] = { "NONE", diff --git a/ggml.h b/ggml.h index a5245a8ae..7d8b7a182 100644 --- a/ggml.h +++ b/ggml.h @@ -198,13 +198,14 @@ struct ggml_object; struct ggml_context; enum ggml_type { - GGML_TYPE_Q4_0, - GGML_TYPE_Q4_1, + // explicitly numbered values are used in llama.cpp files + GGML_TYPE_F32 = 0, + GGML_TYPE_F16 = 1, + GGML_TYPE_Q4_0 = 2, + GGML_TYPE_Q4_1 = 3, GGML_TYPE_I8, GGML_TYPE_I16, GGML_TYPE_I32, - GGML_TYPE_F16, - GGML_TYPE_F32, GGML_TYPE_COUNT, }; diff --git a/llama.cpp b/llama.cpp index 54ba01eef..653558be9 100644 --- a/llama.cpp +++ b/llama.cpp @@ -82,7 +82,7 @@ struct llama_hparams { uint32_t n_head = 32; uint32_t n_layer = 32; uint32_t n_rot = 64; - uint32_t f16 = 1; + enum llama_ftype ftype = LLAMA_FTYPE_MOSTLY_F16; bool operator!=(const llama_hparams & other) const { return memcmp(this, &other, sizeof(llama_hparams)); @@ -432,7 +432,7 @@ struct llama_file_loader { hparams.n_head = file.read_u32(); hparams.n_layer = file.read_u32(); hparams.n_rot = file.read_u32(); - hparams.f16 = file.read_u32(); + hparams.ftype = (enum llama_ftype) file.read_u32(); } void read_vocab() { vocab.id_to_token.resize(hparams.n_vocab); @@ -458,20 +458,21 @@ struct llama_file_loader { llama_load_tensor_shard shard; uint32_t n_dims = file.read_u32(); uint32_t name_len = file.read_u32(); - uint32_t ftype = file.read_u32(); + shard.type = (enum ggml_type) file.read_u32(); shard.ne.resize(n_dims); file.read_raw(shard.ne.data(), sizeof(shard.ne[0]) * n_dims); std::string name = file.read_string(name_len); if (n_dims < 1 || n_dims > 2) { throw format("llama.cpp: tensor '%s' should not be %u-dimensional", name.c_str(), n_dims); } - switch (ftype) { - case 0: shard.type = GGML_TYPE_F32; break; - case 1: shard.type = GGML_TYPE_F16; break; - case 2: shard.type = GGML_TYPE_Q4_0; break; - case 3: shard.type = GGML_TYPE_Q4_1; break; + switch (shard.type) { + case GGML_TYPE_F32: + case GGML_TYPE_F16: + case GGML_TYPE_Q4_0: + case GGML_TYPE_Q4_1: + break; default: { - throw format("unrecognized ftype %u\n", ftype); + throw format("unrecognized tensor type %u\n", shard.type); } } @@ -502,18 +503,18 @@ struct llama_file_loader { struct llama_file_saver { llama_file file; llama_file_loader * any_file_loader; - llama_file_saver(const char * fname, llama_file_loader * any_file_loader, uint32_t new_f16) + llama_file_saver(const char * fname, llama_file_loader * any_file_loader, enum llama_ftype new_ftype) : file(fname, "wb"), any_file_loader(any_file_loader) { fprintf(stderr, "llama.cpp: saving model to %s\n", fname); write_magic(); - write_hparams(new_f16); + write_hparams(new_ftype); write_vocab(); } void write_magic() { file.write_u32('ggjt'); // magic file.write_u32(1); // version } - void write_hparams(uint32_t new_f16) { + void write_hparams(enum llama_ftype new_ftype) { const llama_hparams & hparams = any_file_loader->hparams; file.write_u32(hparams.n_vocab); file.write_u32(hparams.n_embd); @@ -521,7 +522,7 @@ struct llama_file_saver { file.write_u32(hparams.n_head); file.write_u32(hparams.n_layer); file.write_u32(hparams.n_rot); - file.write_u32(new_f16); + file.write_u32(new_ftype); } void write_vocab() { if (any_file_loader->file_version == LLAMA_FILE_VERSION_GGML) { @@ -536,17 +537,17 @@ struct llama_file_saver { } } void write_tensor(llama_load_tensor & tensor, enum ggml_type new_type, const void * new_data, size_t new_size) { - uint32_t ftype; switch (new_type) { - case GGML_TYPE_F32: ftype = 0; break; - case GGML_TYPE_F16: ftype = 1; break; - case GGML_TYPE_Q4_0: ftype = 2; break; - case GGML_TYPE_Q4_1: ftype = 3; break; + case GGML_TYPE_F32: + case GGML_TYPE_F16: + case GGML_TYPE_Q4_0: + case GGML_TYPE_Q4_1: + break; default: LLAMA_ASSERT(false); } file.write_u32((uint32_t) tensor.ne.size()); file.write_u32((uint32_t) tensor.name.size()); - file.write_u32(ftype); + file.write_u32(new_type); file.write_raw(tensor.ne.data(), sizeof(tensor.ne[0]) * tensor.ne.size()); file.write_raw(tensor.name.data(), tensor.name.size()); file.seek(-file.tell() & 31, SEEK_CUR); @@ -820,6 +821,16 @@ static const char *llama_file_version_name(llama_file_version version) { } } +static const char *llama_ftype_name(enum llama_ftype ftype) { + switch (ftype) { + case LLAMA_FTYPE_ALL_F32: return "all F32"; + case LLAMA_FTYPE_MOSTLY_F16: return "mostly F16"; + case LLAMA_FTYPE_MOSTLY_Q4_0: return "mostly Q4_0"; + case LLAMA_FTYPE_MOSTLY_Q4_1: return "mostly Q4_1"; + default: LLAMA_ASSERT(false); + } +} + static const char *llama_model_type_name(e_model type) { switch (type) { case MODEL_7B: return "7B"; @@ -872,7 +883,7 @@ static void llama_model_load_internal( fprintf(stderr, "%s: n_head = %u\n", __func__, hparams.n_head); fprintf(stderr, "%s: n_layer = %u\n", __func__, hparams.n_layer); fprintf(stderr, "%s: n_rot = %u\n", __func__, hparams.n_rot); - fprintf(stderr, "%s: f16 = %u\n", __func__, hparams.f16); + fprintf(stderr, "%s: ftype = %u (%s)\n", __func__, hparams.ftype, llama_ftype_name(hparams.ftype)); fprintf(stderr, "%s: n_ff = %u\n", __func__, n_ff); fprintf(stderr, "%s: n_parts = %zu\n", __func__, ml->file_loaders.size()); fprintf(stderr, "%s: model size = %s\n", __func__, llama_model_type_name(model.type)); @@ -1544,17 +1555,17 @@ static llama_vocab::id llama_sample_top_p_top_k( // quantization // -static void llama_model_quantize_internal(const std::string & fname_inp, const std::string & fname_out, int itype) { +static void llama_model_quantize_internal(const std::string & fname_inp, const std::string & fname_out, enum llama_ftype ftype) { ggml_type quantized_type; - switch (itype) { - case 2: quantized_type = GGML_TYPE_Q4_0; break; - case 3: quantized_type = GGML_TYPE_Q4_1; break; - default: throw format("invalid quantization type %d\n", itype); + switch (ftype) { + case LLAMA_FTYPE_MOSTLY_Q4_0: quantized_type = GGML_TYPE_Q4_0; break; + case LLAMA_FTYPE_MOSTLY_Q4_1: quantized_type = GGML_TYPE_Q4_1; break; + default: throw format("invalid output file type %d\n", ftype); }; std::unique_ptr model_loader(new llama_model_loader(fname_inp.c_str(), /*use_mmap*/ false, /*vocab_only*/ false)); - llama_file_saver file_saver(fname_out.c_str(), model_loader->file_loaders.at(0).get(), (uint32_t) itype); + llama_file_saver file_saver(fname_out.c_str(), model_loader->file_loaders.at(0).get(), ftype); size_t total_size_org = 0; size_t total_size_new = 0; @@ -1745,9 +1756,9 @@ void llama_free(struct llama_context * ctx) { int llama_model_quantize( const char * fname_inp, const char * fname_out, - int itype) { + enum llama_ftype ftype) { try { - llama_model_quantize_internal(fname_inp, fname_out, itype); + llama_model_quantize_internal(fname_inp, fname_out, ftype); return 0; } catch (const std::string & err) { fprintf(stderr, "%s: failed to quantize: %s\n", __func__, err.c_str()); diff --git a/llama.h b/llama.h index 42c364c6b..8a0d50fb8 100644 --- a/llama.h +++ b/llama.h @@ -65,6 +65,14 @@ extern "C" { void * progress_callback_user_data; }; + // model file types + enum llama_ftype { + LLAMA_FTYPE_ALL_F32 = 0, + LLAMA_FTYPE_MOSTLY_F16 = 1, // except 1d tensors + LLAMA_FTYPE_MOSTLY_Q4_0 = 2, // except 1d tensors + LLAMA_FTYPE_MOSTLY_Q4_1 = 3, // except 1d tensors + }; + LLAMA_API struct llama_context_params llama_context_default_params(); LLAMA_API bool llama_mmap_supported(); @@ -85,7 +93,7 @@ extern "C" { LLAMA_API int llama_model_quantize( const char * fname_inp, const char * fname_out, - int itype); + enum llama_ftype ftype); // Returns the KV cache that will contain the context for the // ongoing prediction with the model. From 8b679987cdce292ff36bd741f6715e4927e26f9b Mon Sep 17 00:00:00 2001 From: Pavol Rusnak Date: Tue, 11 Apr 2023 21:45:44 +0200 Subject: [PATCH 35/53] Fix whitespace, add .editorconfig, add GitHub workflow (#883) --- .devops/main.Dockerfile | 2 +- .dockerignore | 2 +- .ecrc | 5 +++++ .editorconfig | 16 ++++++++++++++++ .github/ISSUE_TEMPLATE/custom.md | 16 ++++++++-------- .github/workflows/docker.yml | 2 +- .github/workflows/editorconfig.yml | 17 +++++++++++++++++ README.md | 10 +++++----- examples/Miku.sh | 12 ++++++------ examples/common.cpp | 14 +++++++------- examples/embedding/README.md | 6 +++--- examples/main/README.md | 6 +++--- examples/main/main.cpp | 2 +- examples/perplexity/README.md | 6 +++--- ggml.c | 14 +++++++------- 15 files changed, 84 insertions(+), 46 deletions(-) create mode 100644 .ecrc create mode 100644 .editorconfig create mode 100644 .github/workflows/editorconfig.yml diff --git a/.devops/main.Dockerfile b/.devops/main.Dockerfile index cd575efa0..2e629f8ce 100644 --- a/.devops/main.Dockerfile +++ b/.devops/main.Dockerfile @@ -15,4 +15,4 @@ FROM ubuntu:$UBUNTU_VERSION as runtime COPY --from=build /app/main /main -ENTRYPOINT [ "/main" ] \ No newline at end of file +ENTRYPOINT [ "/main" ] diff --git a/.dockerignore b/.dockerignore index 952990f26..462fac23a 100644 --- a/.dockerignore +++ b/.dockerignore @@ -21,4 +21,4 @@ models/* arm_neon.h compile_commands.json -Dockerfile \ No newline at end of file +Dockerfile diff --git a/.ecrc b/.ecrc new file mode 100644 index 000000000..b682057dd --- /dev/null +++ b/.ecrc @@ -0,0 +1,5 @@ +{ + "Disable": { + "IndentSize": true + } +} diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 000000000..df8aaf504 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,16 @@ +# https://EditorConfig.org + +# Top-most EditorConfig file +root = true + +# Unix-style newlines with a newline ending every file, utf-8 charset +[*] +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true +charset = utf-8 +indent_style = space +indent_size = 4 + +[Makefile] +indent_style = tab diff --git a/.github/ISSUE_TEMPLATE/custom.md b/.github/ISSUE_TEMPLATE/custom.md index 0d508802d..8fd955356 100644 --- a/.github/ISSUE_TEMPLATE/custom.md +++ b/.github/ISSUE_TEMPLATE/custom.md @@ -22,9 +22,9 @@ Please provide a detailed written description of what you were trying to do, and # Current Behavior -Please provide a detailed written description of what `llama.cpp` did, instead. +Please provide a detailed written description of what `llama.cpp` did, instead. -# Environment and Context +# Environment and Context Please provide detailed information about your computer setup. This is important in case the issue is not reproducible except for under certain specific conditions. @@ -133,7 +133,7 @@ llama_model_load: loading model part 8/8 from './models/65B/ggml-model-q4_0.bin. llama_model_load: .......................................................................................... done llama_model_load: model size = 4869.09 MB / num tensors = 723 -system_info: n_threads = 16 / 32 | AVX = 1 | AVX2 = 1 | AVX512 = 0 | FMA = 1 | NEON = 0 | ARM_FMA = 0 | F16C = 1 | FP16_VA = 0 | WASM_SIMD = 0 | BLAS = 0 | SSE3 = 1 | VSX = 0 | +system_info: n_threads = 16 / 32 | AVX = 1 | AVX2 = 1 | AVX512 = 0 | FMA = 1 | NEON = 0 | ARM_FMA = 0 | F16C = 1 | FP16_VA = 0 | WASM_SIMD = 0 | BLAS = 0 | SSE3 = 1 | VSX = 0 | main: prompt: 'Please close your issue when it has been answered.' main: number of tokens in prompt = 11 @@ -166,14 +166,14 @@ main: total time = 246406.42 ms Performance counter stats for './main -m ./models/65B/ggml-model-q4_0.bin -t 16 -n 1024 -p Please close your issue when it has been answered.': - 3636882.89 msec task-clock # 14.677 CPUs utilized - 13509 context-switches # 3.714 /sec - 2436 cpu-migrations # 0.670 /sec - 10476679 page-faults # 2.881 K/sec + 3636882.89 msec task-clock # 14.677 CPUs utilized + 13509 context-switches # 3.714 /sec + 2436 cpu-migrations # 0.670 /sec + 10476679 page-faults # 2.881 K/sec 13133115082869 cycles # 3.611 GHz (16.77%) 29314462753 stalled-cycles-frontend # 0.22% frontend cycles idle (16.76%) 10294402631459 stalled-cycles-backend # 78.39% backend cycles idle (16.74%) - 23479217109614 instructions # 1.79 insn per cycle + 23479217109614 instructions # 1.79 insn per cycle # 0.44 stalled cycles per insn (16.76%) 2353072268027 branches # 647.002 M/sec (16.77%) 1998682780 branch-misses # 0.08% of all branches (16.76%) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index f70821de2..28402c933 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -60,4 +60,4 @@ jobs: push: ${{ github.event_name == 'push' }} platforms: linux/amd64,linux/arm64 tags: "ghcr.io/ggerganov/llama.cpp:${{ matrix.config.tag }}" - file: ${{ matrix.config.dockerfile }} \ No newline at end of file + file: ${{ matrix.config.dockerfile }} diff --git a/.github/workflows/editorconfig.yml b/.github/workflows/editorconfig.yml new file mode 100644 index 000000000..b4e535acf --- /dev/null +++ b/.github/workflows/editorconfig.yml @@ -0,0 +1,17 @@ +name: EditorConfig Checker + +on: + push: + branches: + - master + pull_request: + branches: + - master + +jobs: + editorconfig: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: editorconfig-checker/action-editorconfig-checker@main + - run: editorconfig-checker diff --git a/README.md b/README.md index ef82855e4..da05ef87a 100644 --- a/README.md +++ b/README.md @@ -243,7 +243,7 @@ There 26 letters in the English Alphabet The majority (54%) are using public transit. This includes buses, trams and metros with over 100 lines throughout the city which make it very accessible for tourists to navigate around town as well as locals who commute by tram or metro on a daily basis > List 5 words that start with "ca". cadaver, cauliflower, cabbage (vegetable), catalpa (tree) and Cailleach. -> +> ``` ### Using [GPT4All](https://github.com/nomic-ai/gpt4all) @@ -254,17 +254,17 @@ cadaver, cauliflower, cabbage (vegetable), catalpa (tree) and Cailleach. convert the model from the old format to the new format with [./migrate-ggml-2023-03-30-pr613.py](./migrate-ggml-2023-03-30-pr613.py): ```bash - python3 convert-gpt4all-to-ggml.py models/gpt4all-7B/gpt4all-lora-quantized.bin ./models/tokenizer.model + python3 convert-gpt4all-to-ggml.py models/gpt4all-7B/gpt4all-lora-quantized.bin ./models/tokenizer.model python3 migrate-ggml-2023-03-30-pr613.py models/gpt4all-7B/gpt4all-lora-quantized.bin models/gpt4all-7B/gpt4all-lora-quantized-new.bin ``` - + - You can now use the newly generated `gpt4all-lora-quantized-new.bin` model in exactly the same way as all other models - The original model is saved in the same folder with a suffix `.orig` ### Obtaining and verifying the Facebook LLaMA original model and Stanford Alpaca model data - **Under no circumstances share IPFS, magnet links, or any other links to model downloads anywhere in this respository, including in issues, discussions or pull requests. They will be immediately deleted.** -- The LLaMA models are officially distributed by Facebook and will **never** be provided through this repository. +- The LLaMA models are officially distributed by Facebook and will **never** be provided through this repository. - Refer to [Facebook's LLaMA repository](https://github.com/facebookresearch/llama/pull/73/files) if you need to request access to the model data. - Please verify the sha256 checksums of all downloaded model files to confirm that you have the correct model data files before creating an issue relating to your model files. - The following command will verify if you have all possible latest files in your self-installed `./models` subdirectory: @@ -284,7 +284,7 @@ convert the model from the old format to the new format with [./migrate-ggml-202 - GPT-3.5 / InstructGPT / ChatGPT: - [Aligning language models to follow instructions](https://openai.com/research/instruction-following) - [Training language models to follow instructions with human feedback](https://arxiv.org/abs/2203.02155) - + ### Perplexity (Measuring model quality) You can use the `perplexity` example to measure perplexity over the given prompt. For more background, diff --git a/examples/Miku.sh b/examples/Miku.sh index 352478a15..c4cbf80f2 100755 --- a/examples/Miku.sh +++ b/examples/Miku.sh @@ -19,15 +19,15 @@ GEN_OPTIONS=(--batch_size 1024 --top_p 0.5) if [ -n "$N_THREAD" ]; then - GEN_OPTIONS+=(--threads "$N_THREAD") + GEN_OPTIONS+=(--threads "$N_THREAD") fi ./main "${GEN_OPTIONS[@]}" \ - --model "$MODEL" \ - --n_predict "$N_PREDICTS" \ - --color --interactive \ - --reverse-prompt "${USER_NAME}:" \ - --prompt " + --model "$MODEL" \ + --n_predict "$N_PREDICTS" \ + --color --interactive \ + --reverse-prompt "${USER_NAME}:" \ + --prompt " This is a transcript of a 1000 page, never ending conversation between ${USER_NAME} and the cute and helpful AI assistant ${AI_NAME}. ${AI_NAME} is a girl who is an AI running on the users computer. ${AI_NAME} can think for herself without the user seeing her thoughts by adding a /think prefix to her output. She uses this to reason about the world and to think about what she should say next. ${AI_NAME} is always coherent and makes sense, but if she isn't sure if what she is saying is correct she will ask the user for help. diff --git a/examples/common.cpp b/examples/common.cpp index f909eed24..91d96efae 100644 --- a/examples/common.cpp +++ b/examples/common.cpp @@ -22,9 +22,9 @@ extern "C" __declspec(dllimport) int __stdcall GetConsoleMode(void* hConsoleHand extern "C" __declspec(dllimport) int __stdcall SetConsoleMode(void* hConsoleHandle, unsigned long dwMode); extern "C" __declspec(dllimport) int __stdcall SetConsoleCP(unsigned int wCodePageID); extern "C" __declspec(dllimport) int __stdcall SetConsoleOutputCP(unsigned int wCodePageID); -extern "C" __declspec(dllimport) int __stdcall WideCharToMultiByte(unsigned int CodePage, unsigned long dwFlags, - const wchar_t * lpWideCharStr, int cchWideChar, - char * lpMultiByteStr, int cbMultiByte, +extern "C" __declspec(dllimport) int __stdcall WideCharToMultiByte(unsigned int CodePage, unsigned long dwFlags, + const wchar_t * lpWideCharStr, int cchWideChar, + char * lpMultiByteStr, int cbMultiByte, const char * lpDefaultChar, bool * lpUsedDefaultChar); #define CP_UTF8 65001 #endif @@ -328,9 +328,9 @@ void win32_console_init(bool enable_color) { // Convert a wide Unicode string to an UTF8 string void win32_utf8_encode(const std::wstring & wstr, std::string & str) { - int size_needed = WideCharToMultiByte(CP_UTF8, 0, &wstr[0], (int)wstr.size(), NULL, 0, NULL, NULL); - std::string strTo(size_needed, 0); - WideCharToMultiByte(CP_UTF8, 0, &wstr[0], (int)wstr.size(), &strTo[0], size_needed, NULL, NULL); - str = strTo; + int size_needed = WideCharToMultiByte(CP_UTF8, 0, &wstr[0], (int)wstr.size(), NULL, 0, NULL, NULL); + std::string strTo(size_needed, 0); + WideCharToMultiByte(CP_UTF8, 0, &wstr[0], (int)wstr.size(), &strTo[0], size_needed, NULL, NULL); + str = strTo; } #endif diff --git a/examples/embedding/README.md b/examples/embedding/README.md index 21d8be65f..fe8f5dcc6 100644 --- a/examples/embedding/README.md +++ b/examples/embedding/README.md @@ -1,3 +1,3 @@ -# embedding - -TODO +# embedding + +TODO diff --git a/examples/main/README.md b/examples/main/README.md index 4701aa558..f09e7ba97 100644 --- a/examples/main/README.md +++ b/examples/main/README.md @@ -1,3 +1,3 @@ -# main - -TODO +# main + +TODO diff --git a/examples/main/main.cpp b/examples/main/main.cpp index bf756c16d..ba153cb82 100644 --- a/examples/main/main.cpp +++ b/examples/main/main.cpp @@ -168,7 +168,7 @@ int main(int argc, char ** argv) { } // enable interactive mode if reverse prompt or interactive start is specified - if (params.antiprompt.size() != 0 || params.interactive_start) { + if (params.antiprompt.size() != 0 || params.interactive_start) { params.interactive = true; } diff --git a/examples/perplexity/README.md b/examples/perplexity/README.md index a932275c2..eacfb17c6 100644 --- a/examples/perplexity/README.md +++ b/examples/perplexity/README.md @@ -1,3 +1,3 @@ -# perplexity - -TODO +# perplexity + +TODO diff --git a/ggml.c b/ggml.c index 31947c4c1..a26b4853f 100644 --- a/ggml.c +++ b/ggml.c @@ -228,12 +228,12 @@ static inline float fp32_from_bits(uint32_t w) { } static inline uint32_t fp32_to_bits(float f) { - union { - float as_value; - uint32_t as_bits; - } fp32; - fp32.as_value = f; - return fp32.as_bits; + union { + float as_value; + uint32_t as_bits; + } fp32; + fp32.as_value = f; + return fp32.as_bits; } static inline float ggml_compute_fp16_to_fp32(ggml_fp16_t h) { @@ -1881,7 +1881,7 @@ static void ggml_vec_dot_q4_0(const int n, float * restrict s, const void * rest sum1 += x1->d * y1->d * (vgetq_lane_s32(p_1, 0) + vgetq_lane_s32(p_1, 1) + vgetq_lane_s32(p_1, 2) + vgetq_lane_s32(p_1, 3)); #endif #else - const int16x8_t pl0l = vmull_s8(vget_low_s8 (v0_0ls), vget_low_s8 (v1_0ls)); + const int16x8_t pl0l = vmull_s8(vget_low_s8 (v0_0ls), vget_low_s8 (v1_0ls)); const int16x8_t pl0h = vmull_s8(vget_high_s8(v0_0ls), vget_high_s8(v1_0ls)); const int16x8_t ph0l = vmull_s8(vget_low_s8 (v0_0hs), vget_low_s8 (v1_0hs)); From 4dbbd407500cf500ca5f47e4e947635797997c05 Mon Sep 17 00:00:00 2001 From: Nicolai Weitkemper Date: Wed, 12 Apr 2023 08:46:20 +0200 Subject: [PATCH 36/53] readme: link to sha256sums file (#902) This is to emphasize that these do not need to be obtained from elsewhere. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index da05ef87a..914c07995 100644 --- a/README.md +++ b/README.md @@ -266,7 +266,7 @@ convert the model from the old format to the new format with [./migrate-ggml-202 - **Under no circumstances share IPFS, magnet links, or any other links to model downloads anywhere in this respository, including in issues, discussions or pull requests. They will be immediately deleted.** - The LLaMA models are officially distributed by Facebook and will **never** be provided through this repository. - Refer to [Facebook's LLaMA repository](https://github.com/facebookresearch/llama/pull/73/files) if you need to request access to the model data. -- Please verify the sha256 checksums of all downloaded model files to confirm that you have the correct model data files before creating an issue relating to your model files. +- Please verify the [sha256 checksums](SHA256SUMS) of all downloaded model files to confirm that you have the correct model data files before creating an issue relating to your model files. - The following command will verify if you have all possible latest files in your self-installed `./models` subdirectory: `sha256sum --ignore-missing -c SHA256SUMS` on Linux From 782438070f7568380755ffc7bf5e09b20c1e8272 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Wed, 12 Apr 2023 14:31:12 +0300 Subject: [PATCH 37/53] readme : update hot topics with link to "GPU support" issue --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 914c07995..ccb0f8774 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,7 @@ Inference of [LLaMA](https://arxiv.org/abs/2302.13971) model in pure C/C++ **Hot topics:** +- [Add GPU support to ggml](https://github.com/ggerganov/llama.cpp/issues/914) - [Roadmap Apr 2023](https://github.com/ggerganov/llama.cpp/discussions/784) ## Description From f76cb3a34d6a6b03afb96650e39495f201eac042 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Wed, 12 Apr 2023 14:48:57 +0300 Subject: [PATCH 38/53] readme : change "GPU support" link to discussion --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ccb0f8774..dbc088532 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ Inference of [LLaMA](https://arxiv.org/abs/2302.13971) model in pure C/C++ **Hot topics:** -- [Add GPU support to ggml](https://github.com/ggerganov/llama.cpp/issues/914) +- [Add GPU support to ggml](https://github.com/ggerganov/llama.cpp/discussions/915) - [Roadmap Apr 2023](https://github.com/ggerganov/llama.cpp/discussions/784) ## Description From e7f6997f897a18b6372a6460e25c5f89e1469f1d Mon Sep 17 00:00:00 2001 From: Stephan Walter Date: Wed, 12 Apr 2023 15:06:16 +0000 Subject: [PATCH 39/53] Don't crash on ftype (formerly f16) == 4 (#917) --- llama.cpp | 4 +++- llama.h | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/llama.cpp b/llama.cpp index 653558be9..6d8b706b9 100644 --- a/llama.cpp +++ b/llama.cpp @@ -827,7 +827,9 @@ static const char *llama_ftype_name(enum llama_ftype ftype) { case LLAMA_FTYPE_MOSTLY_F16: return "mostly F16"; case LLAMA_FTYPE_MOSTLY_Q4_0: return "mostly Q4_0"; case LLAMA_FTYPE_MOSTLY_Q4_1: return "mostly Q4_1"; - default: LLAMA_ASSERT(false); + case LLAMA_FTYPE_MOSTLY_Q4_1_SOME_F16: + return "mostly Q4_1, some F16"; + default: return "unknown, may not work"; } } diff --git a/llama.h b/llama.h index 8a0d50fb8..7a258a1e1 100644 --- a/llama.h +++ b/llama.h @@ -71,6 +71,7 @@ extern "C" { LLAMA_FTYPE_MOSTLY_F16 = 1, // except 1d tensors LLAMA_FTYPE_MOSTLY_Q4_0 = 2, // except 1d tensors LLAMA_FTYPE_MOSTLY_Q4_1 = 3, // except 1d tensors + LLAMA_FTYPE_MOSTLY_Q4_1_SOME_F16 = 4, // tok_embeddings.weight and output.weight are F16 }; LLAMA_API struct llama_context_params llama_context_default_params(); From 82d146df9b43cf677e0dbce20b03cf864958a0cc Mon Sep 17 00:00:00 2001 From: Pavol Rusnak Date: Thu, 13 Apr 2023 11:33:16 +0200 Subject: [PATCH 40/53] do not force the prompt file to end with a new line (#908) --- .editorconfig | 3 +++ prompts/chat-with-bob.txt | 2 +- prompts/reason-act.txt | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/.editorconfig b/.editorconfig index df8aaf504..135a7e4bc 100644 --- a/.editorconfig +++ b/.editorconfig @@ -14,3 +14,6 @@ indent_size = 4 [Makefile] indent_style = tab + +[prompts/*.txt] +insert_final_newline = unset diff --git a/prompts/chat-with-bob.txt b/prompts/chat-with-bob.txt index 009da39ae..ad494d831 100644 --- a/prompts/chat-with-bob.txt +++ b/prompts/chat-with-bob.txt @@ -4,4 +4,4 @@ User: Hello, Bob. Bob: Hello. How may I help you today? User: Please tell me the largest city in Europe. Bob: Sure. The largest city in Europe is Moscow, the capital of Russia. -User: +User: \ No newline at end of file diff --git a/prompts/reason-act.txt b/prompts/reason-act.txt index 872016631..a4f4f4ee6 100644 --- a/prompts/reason-act.txt +++ b/prompts/reason-act.txt @@ -15,4 +15,4 @@ Answer: The calculate tool says it is 9.3333333333 Question: What is capital of france? Thought: Do I need to use an action? No, I know the answer Answer: Paris is the capital of France -Question: +Question: \ No newline at end of file From 95ea26f6e92d620a5437f576b80868aee7f808d6 Mon Sep 17 00:00:00 2001 From: SebastianApel <13675545+SebastianApel@users.noreply.github.com> Date: Thu, 13 Apr 2023 14:46:23 +0200 Subject: [PATCH 41/53] benchmark : add tool for timing q4_0 matrix multiplication (#653) * Initial version of q4_0 matrix multiplication benchmark * Bugfix: Added dependency to ggml.o to benchmark * Reviewer requests: added parameter for threads, switched to ggml_time_us() * Reviewer input: removed rtsc, use epsilon for check * Review comment: Removed set_locale * Feature: Param for numer of iterations, Bugfix for use of parameter threads * Reviewer suggestion: Moved to examples * Reviewer feedback: Updated clean: and benchmark: sections --------- Co-authored-by: Georgi Gerganov --- Makefile | 7 +- examples/benchmark/benchmark-q4_0-matmult.c | 270 ++++++++++++++++++++ 2 files changed, 276 insertions(+), 1 deletion(-) create mode 100644 examples/benchmark/benchmark-q4_0-matmult.c diff --git a/Makefile b/Makefile index 3e58a28a7..fe2f26ecb 100644 --- a/Makefile +++ b/Makefile @@ -149,7 +149,7 @@ common.o: examples/common.cpp examples/common.h $(CXX) $(CXXFLAGS) -c examples/common.cpp -o common.o clean: - rm -vf *.o main quantize quantize-stats perplexity embedding + rm -vf *.o main quantize quantize-stats perplexity embedding benchmark-q4_0-matmult main: examples/main/main.cpp ggml.o llama.o common.o $(CXX) $(CXXFLAGS) examples/main/main.cpp ggml.o llama.o common.o -o main $(LDFLAGS) @@ -171,10 +171,15 @@ embedding: examples/embedding/embedding.cpp ggml.o llama.o common.o libllama.so: llama.o ggml.o $(CXX) $(CXXFLAGS) -shared -fPIC -o libllama.so llama.o ggml.o $(LDFLAGS) + # # Tests # +benchmark: ggml.o + $(CXX) $(CXXFLAGS) examples/benchmark/benchmark-q4_0-matmult.c ggml.o -o benchmark-q4_0-matmult $(LDFLAGS) + ./benchmark-q4_0-matmult + .PHONY: tests tests: bash ./tests/run-tests.sh diff --git a/examples/benchmark/benchmark-q4_0-matmult.c b/examples/benchmark/benchmark-q4_0-matmult.c new file mode 100644 index 000000000..9ca9b133a --- /dev/null +++ b/examples/benchmark/benchmark-q4_0-matmult.c @@ -0,0 +1,270 @@ +/* + License: MIT License + + Changelog: + - 2023-03-31 Initial version by Sebastian Apel (https://github.com/SebastianApel) + +*/ + +#include +#include "ggml.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +float tensor_sum_elements(struct ggml_tensor * tensor) { + float sum = 0; + if (tensor->type==6) { + for (int j = 0; j < tensor->ne[1]; j++) { + for (int k = 0; k < tensor->ne[0]; k++) { + sum += ((float *) tensor->data)[j*tensor->ne[0]+k]; + } + } + } + return sum; +} + + +/* + These are mapping to unknown + GGML_TYPE_I8, + GGML_TYPE_I16, + GGML_TYPE_I32, + GGML_TYPE_COUNT, +*/ + +#define TENSOR_TYPE_AS_STR(TYPE) TYPE == GGML_TYPE_F32 ? "FP32" : TYPE == GGML_TYPE_F16 ? "FP16" : TYPE == GGML_TYPE_Q4_0 ? "Q4_0" : TYPE == GGML_TYPE_Q4_1 ? "Q4_1" : "UNKNOWN" + +#define TENSOR_DUMP(TENSOR) printf("%15s: type = %i (%5s) ne = %5d x %5d x %5d, nb = (%5li, %5li, %5li) - ", #TENSOR, \ + TENSOR->type,TENSOR_TYPE_AS_STR(TENSOR->type),\ + TENSOR->ne[0], TENSOR->ne[1], TENSOR->ne[2], TENSOR->nb[0], TENSOR->nb[1], TENSOR->nb[2]); \ + { float sum = tensor_sum_elements(TENSOR); printf("Sum of tensor %s is %6.2f\n",#TENSOR, sum); } + +struct benchmark_params_struct { + int32_t n_threads = 1; + int32_t n_iterations = 10; +}; + +void print_usage(int /*argc*/, char ** argv, struct benchmark_params_struct params) { + fprintf(stderr, "usage: %s [options]\n", argv[0]); + fprintf(stderr, "\n"); + fprintf(stderr, "options:\n"); + fprintf(stderr, " -h, --help show this help message and exit\n"); + fprintf(stderr, " -t N, --threads N number of threads to use during computation (default: %d)\n", params.n_threads); + fprintf(stderr, " -i N, --iter N number of iterations to use during computation (default: %d)\n", params.n_iterations); + fprintf(stderr, "\n"); +} + +int main(int argc, char ** argv) { + + + struct benchmark_params_struct benchmark_params; + + bool invalid_param = false; + std::string arg; + for (int i = 1; i < argc; i++) { + arg = argv[i]; + + if (arg == "-t" || arg == "--threads") { + if (++i >= argc) { + invalid_param = true; + break; + } + benchmark_params.n_threads = std::stoi(argv[i]); + } else if (arg == "-i" || arg == "--iter") { + if (++i >= argc) { + invalid_param = true; + break; + } + benchmark_params.n_iterations = std::stoi(argv[i]); + } else if (arg == "-h" || arg == "--help") { + print_usage(argc, argv, benchmark_params); + exit(0); + } + if (invalid_param) { + fprintf(stderr, "error: invalid parameter for argument: %s\n", arg.c_str()); + print_usage(argc, argv, benchmark_params); + exit(1); + } + } + + + // create the ggml context + printf("Starting Test\n"); + + + + struct ggml_context * ctx; + //const int sizex = 4096; + //const int sizey = 11008; + +#undef VERBOSE_DEBUGGING +#ifndef VERBOSE_DEBUGGING + const int sizey = 4096; + const int sizex = 11008; + const int sizez = 128; +#else + /* Working - let's increase size */ + const int sizey = 1; + const int sizex = (8*32); + const int sizez = 1; + + /*const int sizey = 1; + const int sizex = 3*(8*32); + const int sizez = 1;*/ +#endif + + //printf("Memsize required = %i\n", sizex*sizex); + ggml_type wtype = GGML_TYPE_F32; + + size_t ctx_size = 0; + ctx_size += sizex*sizey*ggml_type_sizef(wtype); + ctx_size += sizex*sizey*ggml_type_sizef(wtype); + ctx_size += sizex*sizey*ggml_type_sizef(GGML_TYPE_F32); + ctx_size += sizex*sizeof(float); + ctx_size += 1024*1024*100; + + printf("Allocating Memory of size %li byes, %li MB\n",ctx_size, (ctx_size/1024/1024)); + + struct ggml_init_params params = { + /*.mem_size =*/ ctx_size, + /*.mem_buffer =*/ NULL, + /* no_alloc =*/ 0 + }; + + ctx = ggml_init(params); + if (!ctx) { + fprintf(stderr, "%s: ggml_init() failed\n", __func__); + return false; + } + + + printf("Creating new tensors\n"); + // printf("Creating new tensor m1\n"); + struct ggml_tensor * m11 = ggml_new_tensor_2d(ctx, GGML_TYPE_F32, sizex, sizey); + ggml_set_f32(m11, 1.0f); + + // printf("Creating new tensor m1\n"); + struct ggml_tensor * m12 = ggml_new_tensor_2d(ctx, GGML_TYPE_F32, sizex, sizey); + ggml_set_f32(m12, 1.5f); + + // printf("Creating new tensor m2\n"); + struct ggml_tensor * m2 = ggml_new_tensor_2d(ctx, GGML_TYPE_F32, sizex, sizez); + ggml_set_f32(m2, 2.0f); + + printf("\n------ Test 1 - Matrix Mult via F32 code ------------------------------------------------------------------------------\n"); + // printf("Creating new tensor m11xm2\n"); + struct ggml_tensor * m11xm2 = ggml_mul_mat(ctx, m11, m2); + + // printf("Creating compute graph\n"); + struct ggml_cgraph gf = ggml_build_forward(m11xm2); + + gf.n_threads=benchmark_params.n_threads; + printf("cgraph->n_threads=%i\n",gf.n_threads); + + TENSOR_DUMP(m11); + TENSOR_DUMP(m2); + + ggml_graph_compute(ctx, &gf); + + TENSOR_DUMP(gf.nodes[0]); + + printf("\n------ Test 2 - Matrix Mult via Q4_0 code ------------------------------------------------------------------------------\n"); + + int32_t nelements = sizex*sizey; + int32_t ne[2] = { sizex, sizey }; + + std::vector hist_cur(1 << 4, 0); + + // Set up a the benchmark matrices + // printf("Creating new tensor q11 & Running quantize\n"); + struct ggml_tensor * q11 = ggml_new_tensor_2d(ctx, GGML_TYPE_Q4_0, sizex, sizey); + ggml_quantize_q4_0((const float *) m11->data, q11->data, nelements, ne[0], hist_cur.data()); + + // Set up a the compute graph + // printf("Creating new tensor q31\n"); + struct ggml_tensor * q31 = ggml_mul_mat(ctx, q11, m2); + + // printf("Creating compute graph\n"); + struct ggml_cgraph gf31 = ggml_build_forward(q31); + gf31.n_threads=benchmark_params.n_threads; + + // Set up a second graph computation to make sure we override the CPU cache lines + // printf("Creating new tensor q12 & Running quantize\n"); + struct ggml_tensor * q12 = ggml_new_tensor_2d(ctx, GGML_TYPE_Q4_0, sizex, sizey); + ggml_quantize_q4_0((const float *) m12->data, q12->data, nelements, ne[0], hist_cur.data()); + + // printf("Creating new tensor q32\n"); + struct ggml_tensor * q32 = ggml_mul_mat(ctx, q12, m2); + + //printf("Creating compute graph\n"); + struct ggml_cgraph gf32 = ggml_build_forward(q32); + gf32.n_threads=benchmark_params.n_threads; + printf("cgraph->n_threads=%i\n",gf31.n_threads); + + const int dimx = sizex; + const int dimy = sizey; + const int dimz = sizez; + long long int flops_per_dot_product = dimy + dimy; + long long int flops_per_matrix = flops_per_dot_product * dimx * dimz; ; + printf("Matrix Multiplication of (%i,%i,%i) x (%i,%i,%i) - aboout %6.2f gFLOPS\n\n", sizex, sizey, 1, sizex, sizez, 1, 1.0f*flops_per_matrix / 1000 / 1000 / 1000); + + + // Let's use the F32 result from above as a reference for the q4_0 multiplication + float sum_of_F32_reference = tensor_sum_elements(gf.nodes[0]); + + + printf("Iteration;NThreads; SizeX; SizeY; SizeZ; Required_FLOPS; Elapsed_u_Seconds; FLOPS_per_u_Second\n"); + printf("==============================================================================================\n"); + + for (int i=0;i allowed_delta) { + printf("\nABORT - ERROR in Matrix Multiplication result - expected %6.2f, got %6.2f (delta %6.2f > allowed_delta %6.2f)\n", + sum_of_F32_reference, + sum_of_Q4_result, + delta, + allowed_delta + ); + exit(0); + } + + // Running a different graph computation to make sure we override the CPU cache lines + ggml_graph_compute(ctx, &gf32); + + } + +} From 585d91a156794d30eec16ebe67c8d7a1d41406c1 Mon Sep 17 00:00:00 2001 From: anzz1 Date: Thu, 13 Apr 2023 15:48:21 +0300 Subject: [PATCH 42/53] cmake : add explicit F16C option (x86) (#576) Fixes building for x86 processors missing F16C featureset MSVC not included, as in MSVC F16C is implied with AVX2/AVX512 --- CMakeLists.txt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6bec1f97b..affff3ea1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -56,6 +56,10 @@ option(LLAMA_AVX "llama: enable AVX" option(LLAMA_AVX2 "llama: enable AVX2" ON) option(LLAMA_AVX512 "llama: enable AVX512" OFF) option(LLAMA_FMA "llama: enable FMA" ON) +# in MSVC F16C is implied with AVX2/AVX512 +if (NOT MSVC) + option(LLAMA_F16C "llama: enable F16C" ON) +endif() # 3rd party libs option(LLAMA_ACCELERATE "llama: enable Accelerate framework" ON) @@ -207,7 +211,9 @@ elseif (${CMAKE_SYSTEM_PROCESSOR} MATCHES "^(x86_64|i686|AMD64)$") add_compile_options(/arch:AVX) endif() else() - add_compile_options(-mf16c) + if (LLAMA_F16C) + add_compile_options(-mf16c) + endif() if (LLAMA_FMA) add_compile_options(-mfma) endif() From 107980d970808c2ccf9334ad033e2782a560b911 Mon Sep 17 00:00:00 2001 From: niansa/tuxifan Date: Thu, 13 Apr 2023 15:03:39 +0200 Subject: [PATCH 43/53] examples : add -n to alpaca and gpt4all scripts (#706) --- examples/alpaca.sh | 2 +- examples/gpt4all.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/alpaca.sh b/examples/alpaca.sh index 4c9aa5077..8d6261730 100755 --- a/examples/alpaca.sh +++ b/examples/alpaca.sh @@ -7,4 +7,4 @@ cd `dirname $0` cd .. -./main -m ./models/ggml-alpaca-7b-q4.bin --color -f ./prompts/alpaca.txt -ins -b 256 --top_k 10000 --temp 0.2 --repeat_penalty 1 -t 7 +./main -m ./models/ggml-alpaca-7b-q4.bin --color -f ./prompts/alpaca.txt --ctx_size 2048 -n -1 -ins -b 256 --top_k 10000 --temp 0.2 --repeat_penalty 1 -t 7 diff --git a/examples/gpt4all.sh b/examples/gpt4all.sh index d974f95a9..5fd739e55 100755 --- a/examples/gpt4all.sh +++ b/examples/gpt4all.sh @@ -10,6 +10,6 @@ cd .. ./main --color --instruct --threads 4 \ --model ./models/gpt4all-7B/gpt4all-lora-quantized.bin \ --file ./prompts/alpaca.txt \ - --batch_size 8 --ctx_size 2048 \ + --batch_size 8 --ctx_size 2048 -n -1 \ --repeat_last_n 64 --repeat_penalty 1.3 \ --n_predict 128 --temp 0.1 --top_k 40 --top_p 0.95 From 8c3ffc2f048a372639906fb30ec3c2070288d3be Mon Sep 17 00:00:00 2001 From: Vladimir Date: Thu, 13 Apr 2023 15:24:30 +0200 Subject: [PATCH 44/53] ggml : update cblas_sgemm columns var to be more reasonable (#838) --- ggml.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ggml.c b/ggml.c index a26b4853f..546da30d1 100644 --- a/ggml.c +++ b/ggml.c @@ -6435,7 +6435,7 @@ static void ggml_compute_forward_mul_mat_f32( cblas_sgemm(CblasRowMajor, CblasNoTrans, CblasTrans, ne11, ne01, ne10, 1.0f, y, ne10, - x, ne10, + x, ne00, 0.0f, d, ne01); } } @@ -6607,7 +6607,7 @@ static void ggml_compute_forward_mul_mat_f16_f32( cblas_sgemm(CblasRowMajor, CblasNoTrans, CblasTrans, ne11, ne01, ne10, 1.0f, y, ne10, - x, ne10, + x, ne00, 0.0f, d, ne01); } } @@ -6820,7 +6820,7 @@ static void ggml_compute_forward_mul_mat_q_f32( cblas_sgemm(CblasRowMajor, CblasNoTrans, CblasTrans, ne11, ne01, ne10, 1.0f, y, ne10, - x, ne10, + x, ne00, 0.0f, d, ne01); } } From 4579af95e8e16910f6dbab0994917a5b3901f0cf Mon Sep 17 00:00:00 2001 From: Judd Date: Thu, 13 Apr 2023 21:43:22 +0800 Subject: [PATCH 45/53] zig : update build.zig (#872) * update * update readme * minimize the changes. --------- Co-authored-by: zjli2019 --- README.md | 40 +++++++++++++++++++++++++++++++--------- build.zig | 22 ++++++++-------------- 2 files changed, 39 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index dbc088532..c0958ebd6 100644 --- a/README.md +++ b/README.md @@ -149,21 +149,43 @@ https://user-images.githubusercontent.com/1991296/224442907-7693d4be-acaa-4e01-8 ## Usage -Here are the step for the LLaMA-7B model: +Here are the step for the LLaMA-7B model. + +### Get the Code ```bash -# build this repo git clone https://github.com/ggerganov/llama.cpp cd llama.cpp -make +``` -#For Windows and CMake, use the following command instead: -cd -mkdir build -cd build -cmake .. -cmake --build . --config Release +### Build +Note: For Windows, CMake or Zig can be used. + +1. Use `make` + + ```bash + make + ``` + +1. Use CMake + + ```bash + mkdir build + cd build + cmake .. + cmake --build . --config Release + ``` + +1. Use Zig + + ```bash + zig build -Drelease-fast + ``` + +### Prepare Data & Run + +```bash # obtain the original LLaMA model weights and place them in ./models ls ./models 65B 30B 13B 7B tokenizer_checklist.chk tokenizer.model diff --git a/build.zig b/build.zig index defc2c3ad..306127ffe 100644 --- a/build.zig +++ b/build.zig @@ -1,16 +1,14 @@ const std = @import("std"); -pub fn build(b: *std.Build) void { +pub fn build(b: *std.build.Builder) void { const target = b.standardTargetOptions(.{}); - const optimize = b.standardOptimizeOption(.{}); + const optimize = b.standardReleaseOptions(); const want_lto = b.option(bool, "lto", "Want -fLTO"); - const lib = b.addStaticLibrary(.{ - .name = "llama", - .target = target, - .optimize = optimize, - }); + const lib = b.addStaticLibrary("llama", null); lib.want_lto = want_lto; + lib.setTarget(target); + lib.setBuildMode(optimize); lib.linkLibCpp(); lib.addIncludePath("."); lib.addIncludePath("examples"); @@ -44,16 +42,12 @@ pub fn build(b: *std.Build) void { fn build_example(comptime name: []const u8, args: anytype) *std.build.LibExeObjStep { const b = args.b; const lib = args.lib; - const target = args.target; - const optimize = args.optimize; const want_lto = args.want_lto; - const exe = b.addExecutable(.{ - .name = name, - .target = target, - .optimize = optimize, - }); + const exe = b.addExecutable(name, null); exe.want_lto = want_lto; + lib.setTarget(args.target); + lib.setBuildMode(args.optimize); exe.addIncludePath("."); exe.addIncludePath("examples"); exe.addCSourceFiles(&.{ From c729ff730a46a135817a3d9988a097e3678a9722 Mon Sep 17 00:00:00 2001 From: Pavol Rusnak Date: Thu, 13 Apr 2023 15:49:05 +0200 Subject: [PATCH 46/53] flake.nix: add all binaries from bin (#848) --- flake.nix | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/flake.nix b/flake.nix index cd1b6d28e..91d2edd79 100644 --- a/flake.nix +++ b/flake.nix @@ -28,10 +28,8 @@ ]; installPhase = '' mkdir -p $out/bin - mv bin/main $out/bin/llama - mv bin/quantize $out/bin/quantize - mv bin/embedding $out/bin/embedding - mv bin/perplexity $out/bin/perplexity + mv bin/* $out/bin/ + mv $out/bin/main $out/bin/llama echo "#!${llama-python}/bin/python" > $out/bin/convert-pth-to-ggml cat ${./convert-pth-to-ggml.py} >> $out/bin/convert-pth-to-ggml From 7e941b95eba067cb5b92785e642fd803657376ee Mon Sep 17 00:00:00 2001 From: "Genkagaku.GPT" Date: Thu, 13 Apr 2023 21:54:27 +0800 Subject: [PATCH 47/53] readme : llama node binding (#911) * chore: add nodejs binding * chore: add nodejs binding --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index c0958ebd6..a7f220eb2 100644 --- a/README.md +++ b/README.md @@ -49,6 +49,7 @@ New features will probably be added mostly through community contributions. - Python: [abetlen/llama-cpp-python](https://github.com/abetlen/llama-cpp-python) - Go: [go-skynet/go-llama.cpp](https://github.com/go-skynet/go-llama.cpp) +- Node.js: [hlhr202/llama-node](https://github.com/hlhr202/llama-node) **UI:** From ec29272175d7a79681d9919f3e755b1bcefa0478 Mon Sep 17 00:00:00 2001 From: CRD716 Date: Thu, 13 Apr 2023 08:59:53 -0500 Subject: [PATCH 48/53] readme : remove python 3.10 warning (#929) --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index a7f220eb2..c88e0de28 100644 --- a/README.md +++ b/README.md @@ -204,8 +204,6 @@ python3 convert-pth-to-ggml.py models/7B/ 1 ./main -m ./models/7B/ggml-model-q4_0.bin -n 128 ``` -Currently, it's best to use Python 3.9 or Python 3.10, as `sentencepiece` has not yet published a wheel for Python 3.11. - When running the larger models, make sure you have enough disk space to store all the intermediate files. ### Memory/Disk Requirements From 8cda5c981d0bf4dcb7664194b2cb9a06e2dbdd54 Mon Sep 17 00:00:00 2001 From: CRD716 Date: Thu, 13 Apr 2023 09:03:57 -0500 Subject: [PATCH 49/53] fix whitespace (#944) --- Makefile | 6 +- examples/benchmark/benchmark-q4_0-matmult.c | 106 ++++++++++---------- 2 files changed, 56 insertions(+), 56 deletions(-) diff --git a/Makefile b/Makefile index fe2f26ecb..c7ccf462d 100644 --- a/Makefile +++ b/Makefile @@ -171,15 +171,15 @@ embedding: examples/embedding/embedding.cpp ggml.o llama.o common.o libllama.so: llama.o ggml.o $(CXX) $(CXXFLAGS) -shared -fPIC -o libllama.so llama.o ggml.o $(LDFLAGS) - + # # Tests # benchmark: ggml.o - $(CXX) $(CXXFLAGS) examples/benchmark/benchmark-q4_0-matmult.c ggml.o -o benchmark-q4_0-matmult $(LDFLAGS) + $(CXX) $(CXXFLAGS) examples/benchmark/benchmark-q4_0-matmult.c ggml.o -o benchmark-q4_0-matmult $(LDFLAGS) ./benchmark-q4_0-matmult - + .PHONY: tests tests: bash ./tests/run-tests.sh diff --git a/examples/benchmark/benchmark-q4_0-matmult.c b/examples/benchmark/benchmark-q4_0-matmult.c index 9ca9b133a..90f537fd8 100644 --- a/examples/benchmark/benchmark-q4_0-matmult.c +++ b/examples/benchmark/benchmark-q4_0-matmult.c @@ -24,12 +24,12 @@ float tensor_sum_elements(struct ggml_tensor * tensor) { float sum = 0; - if (tensor->type==6) { - for (int j = 0; j < tensor->ne[1]; j++) { - for (int k = 0; k < tensor->ne[0]; k++) { - sum += ((float *) tensor->data)[j*tensor->ne[0]+k]; - } - } + if (tensor->type==6) { + for (int j = 0; j < tensor->ne[1]; j++) { + for (int k = 0; k < tensor->ne[0]; k++) { + sum += ((float *) tensor->data)[j*tensor->ne[0]+k]; + } + } } return sum; } @@ -39,7 +39,7 @@ float tensor_sum_elements(struct ggml_tensor * tensor) { These are mapping to unknown GGML_TYPE_I8, GGML_TYPE_I16, - GGML_TYPE_I32, + GGML_TYPE_I32, GGML_TYPE_COUNT, */ @@ -50,7 +50,7 @@ float tensor_sum_elements(struct ggml_tensor * tensor) { TENSOR->ne[0], TENSOR->ne[1], TENSOR->ne[2], TENSOR->nb[0], TENSOR->nb[1], TENSOR->nb[2]); \ { float sum = tensor_sum_elements(TENSOR); printf("Sum of tensor %s is %6.2f\n",#TENSOR, sum); } -struct benchmark_params_struct { +struct benchmark_params_struct { int32_t n_threads = 1; int32_t n_iterations = 10; }; @@ -67,7 +67,7 @@ void print_usage(int /*argc*/, char ** argv, struct benchmark_params_struct para int main(int argc, char ** argv) { - + struct benchmark_params_struct benchmark_params; bool invalid_param = false; @@ -90,7 +90,7 @@ int main(int argc, char ** argv) { } else if (arg == "-h" || arg == "--help") { print_usage(argc, argv, benchmark_params); exit(0); - } + } if (invalid_param) { fprintf(stderr, "error: invalid parameter for argument: %s\n", arg.c_str()); print_usage(argc, argv, benchmark_params); @@ -101,9 +101,9 @@ int main(int argc, char ** argv) { // create the ggml context printf("Starting Test\n"); - - + + struct ggml_context * ctx; //const int sizex = 4096; //const int sizey = 11008; @@ -111,31 +111,31 @@ int main(int argc, char ** argv) { #undef VERBOSE_DEBUGGING #ifndef VERBOSE_DEBUGGING const int sizey = 4096; - const int sizex = 11008; + const int sizex = 11008; const int sizez = 128; #else /* Working - let's increase size */ const int sizey = 1; - const int sizex = (8*32); + const int sizex = (8*32); const int sizez = 1; /*const int sizey = 1; - const int sizex = 3*(8*32); + const int sizex = 3*(8*32); const int sizez = 1;*/ #endif //printf("Memsize required = %i\n", sizex*sizex); - ggml_type wtype = GGML_TYPE_F32; - + ggml_type wtype = GGML_TYPE_F32; + size_t ctx_size = 0; ctx_size += sizex*sizey*ggml_type_sizef(wtype); ctx_size += sizex*sizey*ggml_type_sizef(wtype); ctx_size += sizex*sizey*ggml_type_sizef(GGML_TYPE_F32); ctx_size += sizex*sizeof(float); - ctx_size += 1024*1024*100; - + ctx_size += 1024*1024*100; + printf("Allocating Memory of size %li byes, %li MB\n",ctx_size, (ctx_size/1024/1024)); - + struct ggml_init_params params = { /*.mem_size =*/ ctx_size, /*.mem_buffer =*/ NULL, @@ -147,88 +147,88 @@ int main(int argc, char ** argv) { fprintf(stderr, "%s: ggml_init() failed\n", __func__); return false; } - - + + printf("Creating new tensors\n"); // printf("Creating new tensor m1\n"); struct ggml_tensor * m11 = ggml_new_tensor_2d(ctx, GGML_TYPE_F32, sizex, sizey); ggml_set_f32(m11, 1.0f); - + // printf("Creating new tensor m1\n"); struct ggml_tensor * m12 = ggml_new_tensor_2d(ctx, GGML_TYPE_F32, sizex, sizey); ggml_set_f32(m12, 1.5f); - + // printf("Creating new tensor m2\n"); struct ggml_tensor * m2 = ggml_new_tensor_2d(ctx, GGML_TYPE_F32, sizex, sizez); ggml_set_f32(m2, 2.0f); - + printf("\n------ Test 1 - Matrix Mult via F32 code ------------------------------------------------------------------------------\n"); // printf("Creating new tensor m11xm2\n"); struct ggml_tensor * m11xm2 = ggml_mul_mat(ctx, m11, m2); - + // printf("Creating compute graph\n"); struct ggml_cgraph gf = ggml_build_forward(m11xm2); - + gf.n_threads=benchmark_params.n_threads; - printf("cgraph->n_threads=%i\n",gf.n_threads); - + printf("cgraph->n_threads=%i\n",gf.n_threads); + TENSOR_DUMP(m11); TENSOR_DUMP(m2); - + ggml_graph_compute(ctx, &gf); TENSOR_DUMP(gf.nodes[0]); - + printf("\n------ Test 2 - Matrix Mult via Q4_0 code ------------------------------------------------------------------------------\n"); - + int32_t nelements = sizex*sizey; int32_t ne[2] = { sizex, sizey }; - - std::vector hist_cur(1 << 4, 0); + + std::vector hist_cur(1 << 4, 0); // Set up a the benchmark matrices // printf("Creating new tensor q11 & Running quantize\n"); struct ggml_tensor * q11 = ggml_new_tensor_2d(ctx, GGML_TYPE_Q4_0, sizex, sizey); ggml_quantize_q4_0((const float *) m11->data, q11->data, nelements, ne[0], hist_cur.data()); - + // Set up a the compute graph // printf("Creating new tensor q31\n"); struct ggml_tensor * q31 = ggml_mul_mat(ctx, q11, m2); - + // printf("Creating compute graph\n"); struct ggml_cgraph gf31 = ggml_build_forward(q31); gf31.n_threads=benchmark_params.n_threads; - - // Set up a second graph computation to make sure we override the CPU cache lines + + // Set up a second graph computation to make sure we override the CPU cache lines // printf("Creating new tensor q12 & Running quantize\n"); struct ggml_tensor * q12 = ggml_new_tensor_2d(ctx, GGML_TYPE_Q4_0, sizex, sizey); ggml_quantize_q4_0((const float *) m12->data, q12->data, nelements, ne[0], hist_cur.data()); // printf("Creating new tensor q32\n"); struct ggml_tensor * q32 = ggml_mul_mat(ctx, q12, m2); - + //printf("Creating compute graph\n"); struct ggml_cgraph gf32 = ggml_build_forward(q32); gf32.n_threads=benchmark_params.n_threads; - printf("cgraph->n_threads=%i\n",gf31.n_threads); - + printf("cgraph->n_threads=%i\n",gf31.n_threads); + const int dimx = sizex; const int dimy = sizey; const int dimz = sizez; long long int flops_per_dot_product = dimy + dimy; long long int flops_per_matrix = flops_per_dot_product * dimx * dimz; ; printf("Matrix Multiplication of (%i,%i,%i) x (%i,%i,%i) - aboout %6.2f gFLOPS\n\n", sizex, sizey, 1, sizex, sizez, 1, 1.0f*flops_per_matrix / 1000 / 1000 / 1000); - + // Let's use the F32 result from above as a reference for the q4_0 multiplication float sum_of_F32_reference = tensor_sum_elements(gf.nodes[0]); - + printf("Iteration;NThreads; SizeX; SizeY; SizeZ; Required_FLOPS; Elapsed_u_Seconds; FLOPS_per_u_Second\n"); printf("==============================================================================================\n"); - + for (int i=0;i allowed_delta) { printf("\nABORT - ERROR in Matrix Multiplication result - expected %6.2f, got %6.2f (delta %6.2f > allowed_delta %6.2f)\n", - sum_of_F32_reference, + sum_of_F32_reference, sum_of_Q4_result, delta, allowed_delta ); exit(0); } - - // Running a different graph computation to make sure we override the CPU cache lines + + // Running a different graph computation to make sure we override the CPU cache lines ggml_graph_compute(ctx, &gf32); - + } - + } From 6c248707f51c8a50f7792e7f7787ec481881db88 Mon Sep 17 00:00:00 2001 From: Pavol Rusnak Date: Thu, 13 Apr 2023 16:08:32 +0200 Subject: [PATCH 50/53] ggml : introduce GGML_ALIGNED_MALLOC/GGML_ALIGNED_FREE macros (#884) which allows us to use aligned_alloc or _aligned_malloc functions --- ggml.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/ggml.c b/ggml.c index 546da30d1..281fd8ec9 100644 --- a/ggml.c +++ b/ggml.c @@ -114,6 +114,14 @@ typedef void* thread_ret_t; #define GGML_MEM_ALIGN 16 #endif +#if defined(_MSC_VER) || defined(__MINGW32__) +#define GGML_ALIGNED_MALLOC(size) _aligned_malloc(size, GGML_MEM_ALIGN) +#define GGML_ALIGNED_FREE(ptr) _aligned_free(ptr) +#else +#define GGML_ALIGNED_MALLOC(size) aligned_alloc(GGML_MEM_ALIGN, size) +#define GGML_ALIGNED_FREE(ptr) free(ptr) +#endif + #define UNUSED(x) (void)(x) #define SWAP(x, y, T) do { T SWAP = x; x = y; y = SWAP; } while (0) @@ -2966,7 +2974,7 @@ struct ggml_context * ggml_init(struct ggml_init_params params) { *ctx = (struct ggml_context) { /*.mem_size =*/ params.mem_size, - /*.mem_buffer =*/ params.mem_buffer ? params.mem_buffer : malloc(params.mem_size), + /*.mem_buffer =*/ params.mem_buffer ? params.mem_buffer : GGML_ALIGNED_MALLOC(params.mem_size), /*.mem_buffer_owned =*/ params.mem_buffer ? false : true, /*.no_alloc =*/ params.no_alloc, /*.n_objects =*/ 0, @@ -3001,7 +3009,7 @@ void ggml_free(struct ggml_context * ctx) { __func__, i, ctx->n_objects, ctx->objects_end->offs + ctx->objects_end->size); if (ctx->mem_buffer_owned) { - free(ctx->mem_buffer); + GGML_ALIGNED_FREE(ctx->mem_buffer); } found = true; From 6232f2d7fd7a22d5eeb62182b2f21fcf01359754 Mon Sep 17 00:00:00 2001 From: Stephan Walter Date: Thu, 13 Apr 2023 14:59:50 +0000 Subject: [PATCH 51/53] ggml : optimize non-SIMD Q4_0 vector dot product (#703) --- ggml.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/ggml.c b/ggml.c index 281fd8ec9..eb47d8298 100644 --- a/ggml.c +++ b/ggml.c @@ -2160,18 +2160,20 @@ static void ggml_vec_dot_q4_0(const int n, float * restrict s, const void * rest const uint8_t * restrict p0 = x[i].qs; const uint8_t * restrict p1 = y[i].qs; + int sumi = 0; for (int j = 0; j < QK/2; j++) { const uint8_t v0 = p0[j]; const uint8_t v1 = p1[j]; - const float f0 = d0*((int8_t) (v0 & 0xf) - 8); - const float f1 = d0*((int8_t) (v0 >> 4) - 8); + const int8_t i0 = (int8_t) (v0 & 0xf) - 8; + const int8_t i1 = (int8_t) (v0 >> 4) - 8; - const float f2 = d1*((int8_t) (v1 & 0xf) - 8); - const float f3 = d1*((int8_t) (v1 >> 4) - 8); + const int8_t i2 = (int8_t) (v1 & 0xf) - 8; + const int8_t i3 = (int8_t) (v1 >> 4) - 8; - sumf += f0*f2 + f1*f3; + sumi += i0*i2 + i1*i3; } + sumf += d0 * d1 * sumi; } #endif From c85980acd04631a7c43d13676276f76ec72f5dfe Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Thu, 13 Apr 2023 18:01:22 +0300 Subject: [PATCH 52/53] gitignore : benchmark --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index d8dd34fb9..ba5cbf1ed 100644 --- a/.gitignore +++ b/.gitignore @@ -23,6 +23,7 @@ models/* /result /perplexity /embedding +/benchmark-q4_0-matmult /Pipfile arm_neon.h From 9190e8eac8bdc108c40d2d7505e9b45fa773251f Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Thu, 13 Apr 2023 18:04:45 +0300 Subject: [PATCH 53/53] llama : merge llama_internal.h into llama.h Hide it behind an #ifdef --- CMakeLists.txt | 1 - Makefile | 2 +- examples/quantize-stats/quantize-stats.cpp | 3 ++- llama.cpp | 1 - llama.h | 11 +++++++++++ llama_internal.h | 12 ------------ 6 files changed, 14 insertions(+), 16 deletions(-) delete mode 100644 llama_internal.h diff --git a/CMakeLists.txt b/CMakeLists.txt index affff3ea1..d5715d92a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -253,7 +253,6 @@ endif() add_library(llama llama.cpp llama.h - llama_internal.h llama_util.h) target_include_directories(llama PUBLIC .) diff --git a/Makefile b/Makefile index c7ccf462d..7db246650 100644 --- a/Makefile +++ b/Makefile @@ -142,7 +142,7 @@ default: main quantize perplexity embedding ggml.o: ggml.c ggml.h $(CC) $(CFLAGS) -c ggml.c -o ggml.o -llama.o: llama.cpp llama.h llama_util.h llama_internal.h +llama.o: llama.cpp llama.h llama_util.h $(CXX) $(CXXFLAGS) -c llama.cpp -o llama.o common.o: examples/common.cpp examples/common.h diff --git a/examples/quantize-stats/quantize-stats.cpp b/examples/quantize-stats/quantize-stats.cpp index 203bfe8cc..c786fe208 100644 --- a/examples/quantize-stats/quantize-stats.cpp +++ b/examples/quantize-stats/quantize-stats.cpp @@ -1,6 +1,7 @@ #include "ggml.h" + +#define LLAMA_API_INTERNAL #include "llama.h" -#include "llama_internal.h" #include #include diff --git a/llama.cpp b/llama.cpp index 6d8b706b9..c72295684 100644 --- a/llama.cpp +++ b/llama.cpp @@ -5,7 +5,6 @@ #include "llama_util.h" #include "llama.h" -#include "llama_internal.h" #include "ggml.h" diff --git a/llama.h b/llama.h index 7a258a1e1..192217593 100644 --- a/llama.h +++ b/llama.h @@ -179,4 +179,15 @@ extern "C" { } #endif +// Internal API to be implemented by llama.cpp and used by tests/benchmarks only +#ifdef LLAMA_API_INTERNAL + +#include +#include +struct ggml_tensor; + +std::vector>& llama_internal_get_tensor_map(struct llama_context * ctx); + +#endif + #endif // LLAMA_H diff --git a/llama_internal.h b/llama_internal.h deleted file mode 100644 index 543eed996..000000000 --- a/llama_internal.h +++ /dev/null @@ -1,12 +0,0 @@ -// Internal header to be included by llama.cpp and tests/benchmarks only. - -#ifndef LLAMA_INTERNAL_H -#define LLAMA_INTERNAL_H - -#include -#include -struct ggml_tensor; - -std::vector>& llama_internal_get_tensor_map(struct llama_context * ctx); - -#endif // LLAMA_INTERNAL_H