From ad3a4ebc57f57a583fcac32ba9d231fc5c493172 Mon Sep 17 00:00:00 2001 From: saharNooby Date: Thu, 6 Apr 2023 20:26:31 +0400 Subject: [PATCH 01/11] Add missing labels and symbols for new operators --- ggml.c | 10 ++++++++++ ggml.h | 3 ++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/ggml.c b/ggml.c index 05304a80..6efd47ef 100644 --- a/ggml.c +++ b/ggml.c @@ -2477,9 +2477,14 @@ static const char * GGML_OP_LABEL[GGML_OP_COUNT] = { "ABS", "SGN", "NEG", + "EXP", + "1_MINUS_X", + "MAX", + "STEP", "RELU", "GELU", + "SIGMOID", "SILU", "NORM", "RMS_NORM", @@ -2521,9 +2526,14 @@ static const char * GGML_OP_SYMBOL[GGML_OP_COUNT] = { "abs(x)", "sgn(x)", "-x", + "e^x", + "1-x", + "max(x,y)", + "step(x)", "relu(x)", "gelu(x)", + "sigmoid(x)", "silu(x)", "norm(x)", "rms_norm(x)", diff --git a/ggml.h b/ggml.h index 0b7f9a32..9ca2fe8f 100644 --- a/ggml.h +++ b/ggml.h @@ -186,7 +186,8 @@ // - to `ggml_compute_forward` and call the forward dispatch function here. // - to `ggml_compute_backward` and add `GGML_ASSERT(false)` here. // - to `ggml_graph_compute` and add `node->n_tasks = 1` here. -// 6. Fix all assertions that check value of `GGML_OP_COUNT`: you've added 1 operator, so increment asserted value by one. +// 6. Add operator label to `GGML_OP_LABEL` array and operator symbol to `GGML_OP_SYMBOL` array. +// 7. Fix all assertions that check value of `GGML_OP_COUNT`: you've added 1 operator, so increment asserted value by one. // // When in doubt, consult the code of existing operators similar to that you're implementing. // Resulting operator would work for the forward pass, but will lack backward implementation and multi-threading support. From fa9ad13a3999016ef06a4ffd01fbd1b57349dbbd Mon Sep 17 00:00:00 2001 From: saharNooby Date: Wed, 5 Apr 2023 15:55:47 +0400 Subject: [PATCH 02/11] Free ggml context when model is garbage collected --- rwkv/rwkv_cpp_model.py | 37 +++++++++++++++++++++---------------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/rwkv/rwkv_cpp_model.py b/rwkv/rwkv_cpp_model.py index 4f089ad2..70c42585 100644 --- a/rwkv/rwkv_cpp_model.py +++ b/rwkv/rwkv_cpp_model.py @@ -32,14 +32,14 @@ def __init__( assert os.path.isfile(model_path), f'{model_path} is not a file' assert thread_count > 0, 'Thread count must be positive' - self.library = shared_library + self._library = shared_library - self.ctx = self.library.rwkv_init_from_file(model_path, thread_count) + self._ctx = self._library.rwkv_init_from_file(model_path, thread_count) - self.state_buffer_element_count = self.library.rwkv_get_state_buffer_element_count(self.ctx) - self.logits_buffer_element_count = self.library.rwkv_get_logits_buffer_element_count(self.ctx) + self._state_buffer_element_count = self._library.rwkv_get_state_buffer_element_count(self._ctx) + self._logits_buffer_element_count = self._library.rwkv_get_logits_buffer_element_count(self._ctx) - self.valid = True + self._valid = True def eval( self, @@ -69,7 +69,7 @@ def eval( Logits vector of shape (n_vocab); state for the next step. """ - assert self.valid, 'Model was freed' + assert self._valid, 'Model was freed' def validate_buffer(buf: torch.Tensor, name: str, size: int) -> None: assert buf.dtype == torch.float32, f'{name} is not of type float32' @@ -77,24 +77,24 @@ def validate_buffer(buf: torch.Tensor, name: str, size: int) -> None: assert buf.shape == (size,), f'{name} has invalid shape {buf.shape}, expected ({size})' if state_in is not None: - validate_buffer(state_in, 'state_in', self.state_buffer_element_count) + validate_buffer(state_in, 'state_in', self._state_buffer_element_count) state_in_ptr = state_in.storage().data_ptr() else: state_in_ptr = 0 if state_out is not None: - validate_buffer(state_out, 'state_out', self.state_buffer_element_count) + validate_buffer(state_out, 'state_out', self._state_buffer_element_count) else: - state_out = torch.zeros(self.state_buffer_element_count, dtype=torch.float32, device='cpu') + state_out = torch.zeros(self._state_buffer_element_count, dtype=torch.float32, device='cpu') if logits_out is not None: - validate_buffer(logits_out, 'logits_out', self.logits_buffer_element_count) + validate_buffer(logits_out, 'logits_out', self._logits_buffer_element_count) else: - logits_out = torch.zeros(self.logits_buffer_element_count, dtype=torch.float32, device='cpu') + logits_out = torch.zeros(self._logits_buffer_element_count, dtype=torch.float32, device='cpu') - self.library.rwkv_eval( - self.ctx, + self._library.rwkv_eval( + self._ctx, token, state_in_ptr, state_out.storage().data_ptr(), @@ -110,8 +110,13 @@ def free(self): The object must not be used anymore after calling this method. """ - assert self.valid, 'Already freed' + assert self._valid, 'Already freed' - self.valid = False + self._valid = False - self.library.rwkv_free(self.ctx) + self._library.rwkv_free(self._ctx) + + def __del__(self): + # Free the context on GC in case user forgot to call free() explicitly. + if self._valid: + self.free() From 058b5cd1e610c526e96df447c89c6e1f3bef8dff Mon Sep 17 00:00:00 2001 From: saharNooby Date: Tue, 4 Apr 2023 20:20:34 +0400 Subject: [PATCH 03/11] Show file compression ratio --- rwkv.cpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/rwkv.cpp b/rwkv.cpp index ede07915..208502c1 100644 --- a/rwkv.cpp +++ b/rwkv.cpp @@ -649,6 +649,14 @@ bool rwkv_quantize_model_file(const char * model_file_path_in, const char * mode "q4_1" }; printf("%48s - [%5d, %5d], type = %6s ", name.data(), ne[0], ne[1], parameter_data_type_str[parameter_data_type]); + + static const float parameter_data_type_size[] = { + 4.0F, + 2.0F, + 20.0F / 32.0F, + 24.0F / 32.0F + }; + total_size_orig += (size_t) (nelements * parameter_data_type_size[parameter_data_type]); } // Quantize only 2D tensors @@ -732,12 +740,11 @@ bool rwkv_quantize_model_file(const char * model_file_path_in, const char * mode fout.write(reinterpret_cast(data_u8.data()), data_u8.size()); total_size_new += data_u8.size(); } - - total_size_orig += nelements * sizeof(float); } - printf("model size = %8.2f MB\n", total_size_orig / 1024.0 / 1024.0); - printf("quant size = %8.2f MB\n", total_size_new / 1024.0 / 1024.0); + printf("original size = %8.2f MB\n", total_size_orig / 1024.0 / 1024.0); + printf("quantized size = %8.2f MB\n", total_size_new / 1024.0 / 1024.0); + printf("compression ratio = %8.2f%\n", 1.0 * total_size_orig / total_size_new); { int64_t sum_all = 0; From ec99bc1765e63fb00835d3a5f570c7a35e34eb5c Mon Sep 17 00:00:00 2001 From: saharNooby Date: Thu, 6 Apr 2023 16:26:18 +0400 Subject: [PATCH 04/11] Do not quantize head --- rwkv.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/rwkv.cpp b/rwkv.cpp index 208502c1..08b4ad30 100644 --- a/rwkv.cpp +++ b/rwkv.cpp @@ -650,6 +650,7 @@ bool rwkv_quantize_model_file(const char * model_file_path_in, const char * mode }; printf("%48s - [%5d, %5d], type = %6s ", name.data(), ne[0], ne[1], parameter_data_type_str[parameter_data_type]); + // TODO Should not be hardcoded here, but read from ggml static const float parameter_data_type_size[] = { 4.0F, 2.0F, @@ -659,8 +660,12 @@ bool rwkv_quantize_model_file(const char * model_file_path_in, const char * mode total_size_orig += (size_t) (nelements * parameter_data_type_size[parameter_data_type]); } - // Quantize only 2D tensors - bool quantize = n_dims == 2; + // Quantize only 2D tensors, except embedding and head matrices. + // Embedding and head take not too much space, especially in bigger models; + // but they significantly increase perplexity when quantized. + bool quantize = n_dims == 2 && + name != std::string("emb.weight") && + name != std::string("head.weight"); if (quantize) { if (parameter_data_type != 0 && parameter_data_type != 1) { From c40941d9d010a3e0cc3748705eac5d747e72451a Mon Sep 17 00:00:00 2001 From: saharNooby Date: Fri, 7 Apr 2023 09:55:39 +0400 Subject: [PATCH 05/11] Add Q4_1_O format --- ggml.c | 648 +++++++++++++++++- ggml.h | 5 + rwkv.cpp | 29 +- rwkv/compare_with_reference_implementation.py | 15 +- rwkv/quantize.py | 14 +- rwkv/rwkv_cpp_model.py | 2 +- 6 files changed, 659 insertions(+), 54 deletions(-) diff --git a/ggml.c b/ggml.c index 6efd47ef..7d75e2e1 100644 --- a/ggml.c +++ b/ggml.c @@ -25,6 +25,35 @@ #define static_assert(cond, msg) struct global_scope_noop_trick #endif +// https://gist.github.com/rygorous/2144712 +// Public domain, by Fabian "ryg" Giesen +inline static float ggml_half_to_float_reference(uint16_t value) { + union FP32 { + uint32_t u; + float f; + }; + + const union FP32 magic = { (254UL - 15UL) << 23 }; + const union FP32 was_inf_nan = { (127UL + 16UL) << 23 }; + + union FP32 out; + + // Exponent/mantissa bits + out.u = (value & 0x7FFFU) << 13; + // Exponent adjust + out.f *= magic.f; + + // Make sure Inf/NaN survive + if (out.f >= was_inf_nan.f) { + out.u |= 255UL << 23; + } + + // Sign bit + out.u |= (value & 0x8000UL) << 16; + + return out.f; +} + #if defined _MSC_VER || defined(__MINGW32__) #if !defined(__MINGW32__) @@ -326,42 +355,13 @@ static float table_f32_f16[1 << 16]; // This is also true for POWER9. #if !defined(GGML_FP16_TO_FP32) || !defined(GGML_FP32_TO_FP16) -// https://gist.github.com/rygorous/2144712 -// Public domain, by Fabian "ryg" Giesen -inline static float ggml_half_to_float(uint16_t value) { - union FP32 { - uint32_t u; - float f; - }; - - const union FP32 magic = { (254UL - 15UL) << 23 }; - const union FP32 was_inf_nan = { (127UL + 16UL) << 23 }; - - union FP32 out; - // Exponent/mantissa bits - out.u = (value & 0x7FFFU) << 13; - // Exponent adjust - out.f *= magic.f; - - // Make sure Inf/NaN survive - if (out.f >= was_inf_nan.f) { - out.u |= 255UL << 23; - } - - // Sign bit - out.u |= (value & 0x8000UL) << 16; - - return out.f; -} inline static float ggml_lookup_fp16_to_fp32(ggml_fp16_t f) { - // For some reason, lookup table does not work on my machine: - // - Windows SDK version 10.0.19041.0 - // - CMAKE_SYSTEM_PROCESSOR: AMD64 - // Replaced lookup with some conversion code found online. + // For some reason, lookup table does not work on my machine. + // Replaced lookup with working reference code. // TODO This must be properly debugged and fixed - return ggml_half_to_float(f); + return ggml_half_to_float_reference(f); } #define GGML_FP16_TO_FP32(x) ggml_lookup_fp16_to_fp32(x) @@ -514,6 +514,19 @@ typedef struct { } block_q4_1; static_assert(sizeof(block_q4_1) == sizeof(float) * 2 + QK / 2, "wrong q4_1 block size/padding"); +// Method 4 with better outlier handling. +typedef struct { + ggml_fp16_t d; + ggml_fp16_t m; + // We need only 5 bits for the in-block index, so 16 bits is overkill. + // TODO Optimize if possible + uint16_t outlier_index; + ggml_fp16_t outlier_value; + // Nibbles / quants. + uint8_t qs[QK / 2]; +} block_q4_1_o; +static_assert(sizeof(block_q4_1_o) == 8 + QK / 2, "wrong q4_1_o block size/padding"); + // reference implementation for deterministic creation of model files static void quantize_row_q4_0_reference(const float * restrict x, block_q4_0 * restrict y, int k) { assert(k % QK == 0); @@ -1118,6 +1131,208 @@ static void dequantize_row_q4_1(const void * restrict vx, float * restrict y, in #endif } +// Q4_1_O + +static inline void quantize_row_q4_1_o_reference_single_block(const float * restrict x, block_q4_1_o * restrict block) { + // An outlier is just the absmax element in the block. + // We store it separately and do not quantize it. + int outlier_index = -1; + float outlier_value = 0.0F; + + for (int l = 0; l < QK; l++) { + const float v = x[l]; + + if (fabsf(v) > fabsf(outlier_value)) { + outlier_index = l; + outlier_value = v; + } + } + + block->outlier_index = outlier_index; + block->outlier_value = GGML_COMPUTE_FP32_TO_FP16(outlier_value); + + float min = FLT_MAX; + float max = -FLT_MAX; + + for (int l = 0; l < QK; l++) { + if (l == outlier_index) { + // Ignore outlier when computing range. + continue; + } + + const float v = x[l]; + if (v < min) min = v; + if (v > max) max = v; + } + + const float d = (max - min) / ((1 << 4) - 1); + const float id = d ? 1.0F / d : 0.0F; + + block->d = GGML_COMPUTE_FP32_TO_FP16(d); + block->m = GGML_COMPUTE_FP32_TO_FP16(min); + + uint8_t pp[QK / 2]; + + for (int l = 0; l < QK; l += 2) { + float v0 = (x[l + 0] - min) * id; + float v1 = (x[l + 1] - min) * id; + + // Write some garbage but valid index for the outlier. + if (l + 0 == outlier_index) v0 = 0.0; + if (l + 1 == outlier_index) v1 = 0.0; + + const uint8_t vi0 = roundf(v0); + const uint8_t vi1 = roundf(v1); + + assert(vi0 >= 0 && vi0 < 16); + assert(vi1 >= 0 && vi1 < 16); + + pp[l/2] = vi0 | (vi1 << 4); + } + + memcpy(block->qs, pp, sizeof(pp)); +} + +static inline void dequantize_row_q4_1_o_reference_single_block(block_q4_1_o * restrict block, float * restrict y) { + const float d = ggml_half_to_float_reference(block->d); + const float m = ggml_half_to_float_reference(block->m); + + const uint8_t * restrict pp = block->qs; + + for (int l = 0; l < QK; l += 2) { + const uint8_t vi = pp[l / 2]; + + const int8_t vi0 = vi & 0xF; + const int8_t vi1 = vi >> 4; + + const float v0 = vi0 * d + m; + const float v1 = vi1 * d + m; + + y[l + 0] = v0; + y[l + 1] = v1; + + assert(!isnan(y[l + 0])); + assert(!isnan(y[l + 1])); + } + + // Restore the outlier + y[block->outlier_index] = ggml_half_to_float_reference(block->outlier_value); +} + +static void quantize_row_q4_1_o_reference(const float * restrict x, void * restrict vy, int k) { + assert(k % QK == 0); + const int nb = k / QK; + + block_q4_1_o * restrict y = vy; + + for (int i = 0; i < nb; i++) { + quantize_row_q4_1_o_reference_single_block(x + i * QK, y + i); + } +} + +static void quantize_row_q4_1_o(const float * restrict x, void * restrict vy, int k) { + quantize_row_q4_1_o_reference(x, vy, k); +} + +static void dequantize_row_q4_1_o(const void * restrict vx, float * restrict y, int k) { + assert(k % QK == 0); + const int nb = k / QK; + + const block_q4_1_o * restrict x = vx; + +#if defined(__AVX2__) + for (int i = 0; i < nb; i++) { + const float x_d = ggml_half_to_float_reference(x[i].d); + const float x_m = ggml_half_to_float_reference(x[i].m); + + const __m256 d_v = _mm256_broadcast_ss(&x_d); + const __m256 d_m = _mm256_broadcast_ss(&x_m); + + const uint8_t * restrict pp = x[i].qs; + + for (int l = 0; l < QK; l += 32) { + // Load 32x4-bit integers into 32x8-bit integers + __m256i vx8 = bytesFromNibbles(pp+l/2); + + // Convert to 16-bit int + const __m256i vx16_lo = _mm256_cvtepi8_epi16(_mm256_extracti128_si256(vx8, 0)); + const __m256i vx16_hi = _mm256_cvtepi8_epi16(_mm256_extracti128_si256(vx8, 1)); + + // Convert to 32-bit int -> float 32 + const __m256 vf[4] = { + _mm256_cvtepi32_ps(_mm256_cvtepi16_epi32(_mm256_extracti128_si256(vx16_lo, 0))), + _mm256_cvtepi32_ps(_mm256_cvtepi16_epi32(_mm256_extracti128_si256(vx16_lo, 1))), + _mm256_cvtepi32_ps(_mm256_cvtepi16_epi32(_mm256_extracti128_si256(vx16_hi, 0))), + _mm256_cvtepi32_ps(_mm256_cvtepi16_epi32(_mm256_extracti128_si256(vx16_hi, 1))) + }; + + // Scale, add m and store + for (int j = 0; j < 4; j++) { + const __m256 result = _mm256_add_ps(_mm256_mul_ps(vf[j], d_v), d_m); + _mm256_storeu_ps(y + i * QK + l + j*8, result); + } + } + + // Restore the outlier + y[i * QK + x[i].outlier_index] = ggml_half_to_float_reference(x[i].outlier_value); + } +#elif defined(__ARM_NEON) + for (int i = 0; i < nb; i++) { + const float x_d = ggml_half_to_float_reference(x[i].d); + const float x_m = ggml_half_to_float_reference(x[i].m); + + const float32x4_t vd = vdupq_n_f32(x_d); + const float32x4_t vm = vdupq_n_f32(x_m); + + const uint8_t * restrict pp = x[i].qs; + + for (int l = 0; l < QK; l += 16) { + // Load 16x4-bit integers into 8x8-bit integers + const uint8x8_t v8 = vld1_u8(pp + l/2); + + // Expand 4-bit qs to 8-bit bytes + const uint8x8_t v0 = vand_u8(v8, vdup_n_u8(0x0f)); + const uint8x8_t v1 = vshr_n_u8(v8, 4); + + // Interleave and combine + const uint8x8_t vx_0 = vzip1_u8(v0, v1); + const uint8x8_t vx_1 = vzip2_u8(v0, v1); + + const uint8x16_t vq = vcombine_u8(vx_0, vx_1); + + // convert to 2x uint16x8_t + const uint16x8_t vi_0 = vmovl_s8(vget_low_u8 (vq)); + const uint16x8_t vi_1 = vmovl_s8(vget_high_u8(vq)); + + // convert to 4x float32x4_t + const float32x4_t vf_0 = vcvtq_f32_u32(vmovl_u16(vget_low_u16 (vi_0))); + const float32x4_t vf_1 = vcvtq_f32_u32(vmovl_u16(vget_high_u16(vi_0))); + const float32x4_t vf_2 = vcvtq_f32_u32(vmovl_u16(vget_low_u16 (vi_1))); + const float32x4_t vf_3 = vcvtq_f32_u32(vmovl_u16(vget_high_u16(vi_1))); + + // multiply by d and add m + const float32x4_t r0 = vmlaq_f32(vm, vf_0, vd); + const float32x4_t r1 = vmlaq_f32(vm, vf_1, vd); + const float32x4_t r2 = vmlaq_f32(vm, vf_2, vd); + const float32x4_t r3 = vmlaq_f32(vm, vf_3, vd); + + // Store + vst1q_f32(y + i*QK + l + 0, r0); + vst1q_f32(y + i*QK + l + 4, r1); + vst1q_f32(y + i*QK + l + 8, r2); + vst1q_f32(y + i*QK + l + 12, r3); + } + + // Restore the outlier + y[i * QK + x[i].outlier_index] = ggml_half_to_float_reference(x[i].outlier_value); + } +#else + for (int i = 0; i < nb; i++) { + dequantize_row_q4_1_o_reference_single_block(x + i, y + i * QK); + } +#endif +} + // // simd mappings // @@ -2437,6 +2652,7 @@ 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, QK, 1, @@ -2446,11 +2662,12 @@ static const int GGML_BLCK_SIZE[GGML_TYPE_COUNT] = { 1, }; -static_assert(GGML_TYPE_COUNT == 7, "GGML_TYPE_COUNT != 5"); +static_assert(GGML_TYPE_COUNT == 8, "GGML_TYPE_COUNT != 8"); static const size_t GGML_TYPE_SIZE[GGML_TYPE_COUNT] = { sizeof(block_q4_0), sizeof(block_q4_1), + sizeof(block_q4_1_o), sizeof(int8_t ), sizeof(int16_t), sizeof(int32_t), @@ -2459,7 +2676,7 @@ static const size_t GGML_TYPE_SIZE[GGML_TYPE_COUNT] = { }; // 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 == 8, "GGML_TYPE_COUNT != 8"); static const char * GGML_OP_LABEL[GGML_OP_COUNT] = { "NONE", @@ -3196,6 +3413,10 @@ struct ggml_tensor * ggml_set_i32 (struct ggml_tensor * tensor, int32_t value) { { GGML_ASSERT(false); } break; + case GGML_TYPE_Q4_1_O: + { + GGML_ASSERT(false); + } break; case GGML_TYPE_I8: { assert(tensor->nb[0] == sizeof(int8_t)); @@ -3256,6 +3477,10 @@ struct ggml_tensor * ggml_set_f32(struct ggml_tensor * tensor, float value) { { GGML_ASSERT(false); } break; + case GGML_TYPE_Q4_1_O: + { + GGML_ASSERT(false); + } break; case GGML_TYPE_I8: { assert(tensor->nb[0] == sizeof(int8_t)); @@ -3310,6 +3535,10 @@ int32_t ggml_get_i32_1d(const struct ggml_tensor * tensor, int i) { { GGML_ASSERT(false); } break; + case GGML_TYPE_Q4_1_O: + { + GGML_ASSERT(false); + } break; case GGML_TYPE_I8: { GGML_ASSERT(tensor->nb[0] == sizeof(int8_t)); @@ -3354,6 +3583,10 @@ void ggml_set_i32_1d(const struct ggml_tensor * tensor, int i, int32_t value) { { GGML_ASSERT(false); } break; + case GGML_TYPE_Q4_1_O: + { + GGML_ASSERT(false); + } break; case GGML_TYPE_I8: { GGML_ASSERT(tensor->nb[0] == sizeof(int8_t)); @@ -3396,6 +3629,10 @@ float ggml_get_f32_1d(const struct ggml_tensor * tensor, int i) { { GGML_ASSERT(false); } break; + case GGML_TYPE_Q4_1_O: + { + GGML_ASSERT(false); + } break; case GGML_TYPE_I8: { GGML_ASSERT(tensor->nb[0] == sizeof(int8_t)); @@ -3440,6 +3677,10 @@ void ggml_set_f32_1d(const struct ggml_tensor * tensor, int i, float value) { { GGML_ASSERT(false); } break; + case GGML_TYPE_Q4_1_O: + { + GGML_ASSERT(false); + } break; case GGML_TYPE_I8: { GGML_ASSERT(tensor->nb[0] == sizeof(int8_t)); @@ -4990,6 +5231,7 @@ static void ggml_compute_forward_dup( } break; case GGML_TYPE_Q4_0: case GGML_TYPE_Q4_1: + case GGML_TYPE_Q4_1_O: case GGML_TYPE_I8: case GGML_TYPE_I16: case GGML_TYPE_I32: @@ -5067,6 +5309,7 @@ static void ggml_compute_forward_add( } break; case GGML_TYPE_Q4_0: case GGML_TYPE_Q4_1: + case GGML_TYPE_Q4_1_O: case GGML_TYPE_I8: case GGML_TYPE_I16: case GGML_TYPE_I32: @@ -5119,6 +5362,7 @@ static void ggml_compute_forward_sub( } break; case GGML_TYPE_Q4_0: case GGML_TYPE_Q4_1: + case GGML_TYPE_Q4_1_O: case GGML_TYPE_I8: case GGML_TYPE_I16: case GGML_TYPE_I32: @@ -5171,6 +5415,7 @@ static void ggml_compute_forward_mul( } break; case GGML_TYPE_Q4_0: case GGML_TYPE_Q4_1: + case GGML_TYPE_Q4_1_O: case GGML_TYPE_I8: case GGML_TYPE_I16: case GGML_TYPE_I32: @@ -5223,6 +5468,7 @@ static void ggml_compute_forward_div( } break; case GGML_TYPE_Q4_0: case GGML_TYPE_Q4_1: + case GGML_TYPE_Q4_1_O: case GGML_TYPE_I8: case GGML_TYPE_I16: case GGML_TYPE_I32: @@ -5271,6 +5517,7 @@ static void ggml_compute_forward_sqr( } break; case GGML_TYPE_Q4_0: case GGML_TYPE_Q4_1: + case GGML_TYPE_Q4_1_O: case GGML_TYPE_I8: case GGML_TYPE_I16: case GGML_TYPE_I32: @@ -5319,6 +5566,7 @@ static void ggml_compute_forward_sqrt( } break; case GGML_TYPE_Q4_0: case GGML_TYPE_Q4_1: + case GGML_TYPE_Q4_1_O: case GGML_TYPE_I8: case GGML_TYPE_I16: case GGML_TYPE_I32: @@ -5377,6 +5625,7 @@ static void ggml_compute_forward_sum( } break; case GGML_TYPE_Q4_0: case GGML_TYPE_Q4_1: + case GGML_TYPE_Q4_1_O: case GGML_TYPE_I8: case GGML_TYPE_I16: case GGML_TYPE_I32: @@ -5454,6 +5703,7 @@ static void ggml_compute_forward_mean( } break; case GGML_TYPE_Q4_0: case GGML_TYPE_Q4_1: + case GGML_TYPE_Q4_1_O: case GGML_TYPE_I8: case GGML_TYPE_I16: case GGML_TYPE_I32: @@ -5518,6 +5768,7 @@ static void ggml_compute_forward_repeat( } break; case GGML_TYPE_Q4_0: case GGML_TYPE_Q4_1: + case GGML_TYPE_Q4_1_O: case GGML_TYPE_I8: case GGML_TYPE_I16: case GGML_TYPE_I32: @@ -5566,6 +5817,7 @@ static void ggml_compute_forward_abs( } break; case GGML_TYPE_Q4_0: case GGML_TYPE_Q4_1: + case GGML_TYPE_Q4_1_O: case GGML_TYPE_I8: case GGML_TYPE_I16: case GGML_TYPE_I32: @@ -5614,6 +5866,7 @@ static void ggml_compute_forward_sgn( } break; case GGML_TYPE_Q4_0: case GGML_TYPE_Q4_1: + case GGML_TYPE_Q4_1_O: case GGML_TYPE_I8: case GGML_TYPE_I16: case GGML_TYPE_I32: @@ -5662,6 +5915,7 @@ static void ggml_compute_forward_neg( } break; case GGML_TYPE_Q4_0: case GGML_TYPE_Q4_1: + case GGML_TYPE_Q4_1_O: case GGML_TYPE_I8: case GGML_TYPE_I16: case GGML_TYPE_I32: @@ -5710,6 +5964,7 @@ static void ggml_compute_forward_exp( } break; case GGML_TYPE_Q4_0: case GGML_TYPE_Q4_1: + case GGML_TYPE_Q4_1_O: case GGML_TYPE_I8: case GGML_TYPE_I16: case GGML_TYPE_I32: @@ -5758,6 +6013,7 @@ static void ggml_compute_forward_1_minus_x( } break; case GGML_TYPE_Q4_0: case GGML_TYPE_Q4_1: + case GGML_TYPE_Q4_1_O: case GGML_TYPE_I8: case GGML_TYPE_I16: case GGML_TYPE_I32: @@ -5810,6 +6066,7 @@ static void ggml_compute_forward_max( } break; case GGML_TYPE_Q4_0: case GGML_TYPE_Q4_1: + case GGML_TYPE_Q4_1_O: case GGML_TYPE_I8: case GGML_TYPE_I16: case GGML_TYPE_I32: @@ -5858,6 +6115,7 @@ static void ggml_compute_forward_step( } break; case GGML_TYPE_Q4_0: case GGML_TYPE_Q4_1: + case GGML_TYPE_Q4_1_O: case GGML_TYPE_I8: case GGML_TYPE_I16: case GGML_TYPE_I32: @@ -5906,6 +6164,7 @@ static void ggml_compute_forward_relu( } break; case GGML_TYPE_Q4_0: case GGML_TYPE_Q4_1: + case GGML_TYPE_Q4_1_O: case GGML_TYPE_I8: case GGML_TYPE_I16: case GGML_TYPE_I32: @@ -5971,6 +6230,7 @@ static void ggml_compute_forward_gelu( } break; case GGML_TYPE_Q4_0: case GGML_TYPE_Q4_1: + case GGML_TYPE_Q4_1_O: case GGML_TYPE_I8: case GGML_TYPE_I16: case GGML_TYPE_I32: @@ -6021,6 +6281,7 @@ static void ggml_compute_forward_sigmoid( } break; case GGML_TYPE_Q4_0: case GGML_TYPE_Q4_1: + case GGML_TYPE_Q4_1_O: case GGML_TYPE_I8: case GGML_TYPE_I16: case GGML_TYPE_I32: @@ -6086,6 +6347,7 @@ static void ggml_compute_forward_silu( } break; case GGML_TYPE_Q4_0: case GGML_TYPE_Q4_1: + case GGML_TYPE_Q4_1_O: case GGML_TYPE_I8: case GGML_TYPE_I16: case GGML_TYPE_I32: @@ -6172,6 +6434,7 @@ static void ggml_compute_forward_norm( } break; case GGML_TYPE_Q4_0: case GGML_TYPE_Q4_1: + case GGML_TYPE_Q4_1_O: case GGML_TYPE_I8: case GGML_TYPE_I16: case GGML_TYPE_I32: @@ -6252,6 +6515,7 @@ static void ggml_compute_forward_rms_norm( } break; case GGML_TYPE_Q4_0: case GGML_TYPE_Q4_1: + case GGML_TYPE_Q4_1_O: case GGML_TYPE_I8: case GGML_TYPE_I16: case GGML_TYPE_I32: @@ -6669,6 +6933,11 @@ static const quantize_fns_t quantize_fns[GGML_TYPE_COUNT] = { .quantize_row_q = quantize_row_q4_1, .vec_dot_q = ggml_vec_dot_q4_1, }, + [GGML_TYPE_Q4_1_O] = { + .dequantize_row_q = dequantize_row_q4_1_o, + .quantize_row_q = quantize_row_q4_1_o, + .vec_dot_q = NULL, + }, }; static void ggml_compute_forward_mul_mat_q_f32( @@ -6859,6 +7128,273 @@ static void ggml_compute_forward_mul_mat_q_f32( //} } +static void ggml_compute_forward_mul_mat_q4_1_o_f32( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + struct ggml_tensor * dst) { + int64_t t0 = ggml_perf_time_us(); + UNUSED(t0); + + const int ne00 = src0->ne[0]; + const int ne01 = src0->ne[1]; + const int ne02 = src0->ne[2]; + const int ne03 = src0->ne[3]; + + const int ne10 = src1->ne[0]; + const int ne11 = src1->ne[1]; + const int ne12 = src1->ne[2]; + const int ne13 = src1->ne[3]; + + const int ne0 = dst->ne[0]; + const int ne1 = dst->ne[1]; + const int ne2 = dst->ne[2]; + const int ne3 = dst->ne[3]; + + const int nb00 = src0->nb[0]; + const int nb01 = src0->nb[1]; + const int nb02 = src0->nb[2]; + const int nb03 = src0->nb[3]; + + const int nb10 = src1->nb[0]; + const int nb11 = src1->nb[1]; + const int nb12 = src1->nb[2]; + const int nb13 = src1->nb[3]; + + const int nb0 = dst->nb[0]; + const int nb1 = dst->nb[1]; + const int nb2 = dst->nb[2]; + const int nb3 = dst->nb[3]; + + const int ith = params->ith; + const int nth = params->nth; + + GGML_ASSERT(ne02 == ne12); + GGML_ASSERT(ne03 == ne13); + GGML_ASSERT(ne2 == ne12); + GGML_ASSERT(ne3 == ne13); + + const enum ggml_type type = src0->type; + + // we don't support permuted src0 or src1 + GGML_ASSERT(nb00 == (int) GGML_TYPE_SIZE[type]); + GGML_ASSERT(nb10 == sizeof(float)); + + // dst cannot be transposed or permuted + GGML_ASSERT(nb0 == sizeof(float)); + GGML_ASSERT(nb0 <= nb1); + GGML_ASSERT(nb1 <= nb2); + GGML_ASSERT(nb2 <= nb3); + + GGML_ASSERT(ne0 == ne01); + GGML_ASSERT(ne1 == ne11); + GGML_ASSERT(ne2 == ne02); + GGML_ASSERT(ne3 == ne03); + + // nb01 >= nb00 - src0 is not transposed + // compute by src0 rows + +#if defined(GGML_USE_ACCELERATE) || defined(GGML_USE_OPENBLAS) + if (ggml_compute_forward_mul_mat_use_blas(src0, src1, dst)) { + if (params->ith != 0) { + return; + } + + if (params->type == GGML_TASK_INIT) { + return; + } + + if (params->type == GGML_TASK_FINALIZE) { + return; + } + + float * const wdata = params->wdata; + + for (int i03 = 0; i03 < ne03; i03++) { + for (int i02 = 0; i02 < ne02; i02++) { + { + size_t id = 0; + for (int i01 = 0; i01 < ne01; ++i01) { + dequantize_row_q4_1_o((char *) src0->data + i03*nb03 + i02*nb02 + i01*nb01, wdata + id, ne00); + id += ne00; + } + } + + const float * x = wdata; + const float * y = (float *) ((char *) src1->data + i02*nb12 + i03*nb13); + + float * d = (float *) ((char *) dst->data + i02*nb2 + i03*nb3); + + // zT = y * xT + cblas_sgemm(CblasRowMajor, CblasNoTrans, CblasTrans, + ne11, ne01, ne10, + 1.0f, y, ne10, + x, ne10, + 0.0f, d, ne01); + } + } + + //printf("CBLAS = %f ms, %d x %d x %d x %d\n", (ggml_perf_time_us() - t0)/1000.0, ne0, ne1, ne2, ne3); + + return; + } +#endif + + if (params->type == GGML_TASK_INIT) { + return; + } + + if (params->type == GGML_TASK_FINALIZE) { + return; + } + + // parallelize by src0 rows using ggml_vec_dot_f32 + + // total rows in src0 + const int nr = ne01*ne02*ne03; + + // 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); + +#if defined(__AVX2__) + float outlier_mask[QK]; + memset(outlier_mask, 0, QK * sizeof(float)); +#endif + + for (int ir = ir0; ir < ir1; ++ir) { + // src0 indices + const int i03 = ir/(ne02*ne01); + const int i02 = (ir - i03*ne02*ne01)/ne01; + const int i01 = (ir - i03*ne02*ne01 - i02*ne01); + +#if defined(__AVX2__) + for (int ic = 0; ic < ne11; ++ic) { + // src1 indices + const int i13 = i03; + const int i12 = i02; + const int i11 = ic; + + // dst indices + const int i0 = i01; + const int i1 = i11; + const int i2 = i02; + const int i3 = i03; + + const int block_count = ne00 / QK; + + const block_q4_1_o * row_blocks = (block_q4_1_o *) ((char *) src0->data + (i01 * nb01 + i02 * nb02 + i03 * nb03)); + + __m256 accum = _mm256_setzero_ps(); + + // Here we do fused dequantization and dot product. + for (int block_index = 0; block_index < block_count; block_index++) { + const float block_d = ggml_half_to_float_reference(row_blocks[block_index].d); + const float block_m = ggml_half_to_float_reference(row_blocks[block_index].m); + + // 0 .. 31 + const uint16_t outlier_index = row_blocks[block_index].outlier_index; + const float outlier_value = ggml_half_to_float_reference(row_blocks[block_index].outlier_value); + + const uint8_t * restrict quant_nibbles = row_blocks[block_index].qs; + + // --- + + // Broadcast values to 8x element float32 vectors + const __m256 broadcasted_d = _mm256_broadcast_ss(&block_d); + const __m256 broadcasted_m = _mm256_broadcast_ss(&block_m); + const __m256 broadcasted_outlier_value = _mm256_broadcast_ss(&outlier_value); + + // Load 32x4-bit integers into 32x8-bit integers + const __m256i quant_bytes = bytesFromNibbles(quant_nibbles); + + // Convert to 16-bit int + const __m256i quant_shorts_lo = _mm256_cvtepi8_epi16(_mm256_extracti128_si256(quant_bytes, 0)); + const __m256i quant_shorts_hi = _mm256_cvtepi8_epi16(_mm256_extracti128_si256(quant_bytes, 1)); + + // Convert to 32-bit int and then to 32-bit float + const __m256 quant_floats_0 = _mm256_cvtepi32_ps(_mm256_cvtepi16_epi32(_mm256_extracti128_si256(quant_shorts_lo, 0))); + const __m256 quant_floats_1 = _mm256_cvtepi32_ps(_mm256_cvtepi16_epi32(_mm256_extracti128_si256(quant_shorts_lo, 1))); + const __m256 quant_floats_2 = _mm256_cvtepi32_ps(_mm256_cvtepi16_epi32(_mm256_extracti128_si256(quant_shorts_hi, 0))); + const __m256 quant_floats_3 = _mm256_cvtepi32_ps(_mm256_cvtepi16_epi32(_mm256_extracti128_si256(quant_shorts_hi, 1))); + + // Dequantize to ~original weights + const __m256 weight_0 = _mm256_fmadd_ps(quant_floats_0, broadcasted_d, broadcasted_m); + const __m256 weight_1 = _mm256_fmadd_ps(quant_floats_1, broadcasted_d, broadcasted_m); + const __m256 weight_2 = _mm256_fmadd_ps(quant_floats_2, broadcasted_d, broadcasted_m); + const __m256 weight_3 = _mm256_fmadd_ps(quant_floats_3, broadcasted_d, broadcasted_m); + + // TODO This outlier handling is VERY slow + // Set outlier mask -- this should give 1 in the most significant bit + outlier_mask[outlier_index] = -1.0F; + // Load mask into vectors + const __m256 outlier_mask_0 = _mm256_load_ps(outlier_mask); + const __m256 outlier_mask_1 = _mm256_load_ps(outlier_mask + 8); + const __m256 outlier_mask_2 = _mm256_load_ps(outlier_mask + 16); + const __m256 outlier_mask_3 = _mm256_load_ps(outlier_mask + 24); + // Reset mask array to all zeroes for the next iteration + outlier_mask[outlier_index] = 0.0F; + + // Replace the weight at the index of the outlier + const __m256 weight_0_with_outlier = _mm256_blendv_ps(weight_0, broadcasted_outlier_value, outlier_mask_0); + const __m256 weight_1_with_outlier = _mm256_blendv_ps(weight_1, broadcasted_outlier_value, outlier_mask_1); + const __m256 weight_2_with_outlier = _mm256_blendv_ps(weight_2, broadcasted_outlier_value, outlier_mask_2); + const __m256 weight_3_with_outlier = _mm256_blendv_ps(weight_3, broadcasted_outlier_value, outlier_mask_3); + + // Load 32 floats of data of the second argument + const float * src1_data = (float *) ((char *) src1->data + (block_index * QK * nb10 + i11 * nb11 + i12 * nb12 + i13 * nb13)); + + const __m256 src1_0 = _mm256_load_ps(src1_data); + const __m256 src1_1 = _mm256_load_ps(src1_data + 8); + const __m256 src1_2 = _mm256_load_ps(src1_data + 16); + const __m256 src1_3 = _mm256_load_ps(src1_data + 24); + + // Multiply weights and values of the second argument element-wise; add to accumulator + accum = _mm256_fmadd_ps(src1_0, weight_0_with_outlier, accum); + accum = _mm256_fmadd_ps(src1_1, weight_1_with_outlier, accum); + accum = _mm256_fmadd_ps(src1_2, weight_2_with_outlier, accum); + accum = _mm256_fmadd_ps(src1_3, weight_3_with_outlier, accum); + } + + // Add elements of accumulator + __m128 res = _mm256_extractf128_ps(accum, 1); + res = _mm_add_ps(res, _mm256_castps256_ps128(accum)); + res = _mm_add_ps(res, _mm_movehl_ps(res, res )); + res = _mm_add_ss(res, _mm_movehdup_ps(res)); + + *((float *) ((char *) dst->data + (i0 * nb0 + i1 * nb1 + i2 * nb2 + i3 * nb3))) = _mm_cvtss_f32(res); + } +#else + float * const wdata = (float *) ((char *) params->wdata + (i01 * nb01 + i02 * nb02 + i03 * nb03)); + + dequantize_row_q4_1_o((char *) src0->data + (i01 * nb01 + i02 * nb02 + i03 * nb03), wdata, ne00); + + for (int ic = 0; ic < ne11; ++ic) { + // src1 indices + const int i13 = i03; + const int i12 = i02; + const int i11 = ic; + + // dst indices + const int i0 = i01; + const int i1 = i11; + const int i2 = i02; + const int i3 = i03; + + ggml_vec_dot_f32( + ne00, + (float *) ((char *) dst->data + (i0 * nb0 + i1 * nb1 + i2 * nb2 + i3 * nb3)), + wdata, + (float *) ((char *) src1->data + (i11 * nb11 + i12 * nb12 + i13 * nb13)) + ); + } +#endif + } +} + static void ggml_compute_forward_mul_mat( const struct ggml_compute_params * params, const struct ggml_tensor * src0, @@ -6870,6 +7406,10 @@ static void ggml_compute_forward_mul_mat( { ggml_compute_forward_mul_mat_q_f32(params, src0, src1, dst); } break; + case GGML_TYPE_Q4_1_O: + { + ggml_compute_forward_mul_mat_q4_1_o_f32(params, src0, src1, dst); + } break; case GGML_TYPE_F16: { ggml_compute_forward_mul_mat_f16_f32(params, src0, src1, dst); @@ -6965,6 +7505,7 @@ static void ggml_compute_forward_scale( } break; case GGML_TYPE_Q4_0: case GGML_TYPE_Q4_1: + case GGML_TYPE_Q4_1_O: case GGML_TYPE_I8: case GGML_TYPE_I16: case GGML_TYPE_I32: @@ -7121,6 +7662,7 @@ static void ggml_compute_forward_get_rows( switch (src0->type) { case GGML_TYPE_Q4_0: case GGML_TYPE_Q4_1: + case GGML_TYPE_Q4_1_O: { ggml_compute_forward_get_rows_q(params, src0, src1, dst); } break; @@ -7210,6 +7752,7 @@ static void ggml_compute_forward_diag_mask_inf( } break; case GGML_TYPE_Q4_0: case GGML_TYPE_Q4_1: + case GGML_TYPE_Q4_1_O: case GGML_TYPE_I8: case GGML_TYPE_I16: case GGML_TYPE_I32: @@ -7304,6 +7847,7 @@ static void ggml_compute_forward_soft_max( } break; case GGML_TYPE_Q4_0: case GGML_TYPE_Q4_1: + case GGML_TYPE_Q4_1_O: case GGML_TYPE_I8: case GGML_TYPE_I16: case GGML_TYPE_I32: @@ -7446,6 +7990,7 @@ static void ggml_compute_forward_rope( } break; case GGML_TYPE_Q4_0: case GGML_TYPE_Q4_1: + case GGML_TYPE_Q4_1_O: case GGML_TYPE_I8: case GGML_TYPE_I16: case GGML_TYPE_I32: @@ -7714,6 +8259,7 @@ static void ggml_compute_forward_conv_1d_1s( } break; case GGML_TYPE_Q4_0: case GGML_TYPE_Q4_1: + case GGML_TYPE_Q4_1_O: case GGML_TYPE_I8: case GGML_TYPE_I16: case GGML_TYPE_I32: @@ -7982,6 +8528,7 @@ static void ggml_compute_forward_conv_1d_2s( } break; case GGML_TYPE_Q4_0: case GGML_TYPE_Q4_1: + case GGML_TYPE_Q4_1_O: case GGML_TYPE_I8: case GGML_TYPE_I16: case GGML_TYPE_I32: @@ -8467,6 +9014,7 @@ static void ggml_compute_forward_flash_attn( } break; case GGML_TYPE_Q4_0: case GGML_TYPE_Q4_1: + case GGML_TYPE_Q4_1_O: case GGML_TYPE_I8: case GGML_TYPE_I16: case GGML_TYPE_I32: @@ -8678,6 +9226,7 @@ static void ggml_compute_forward_flash_ff( } break; case GGML_TYPE_Q4_0: case GGML_TYPE_Q4_1: + case GGML_TYPE_Q4_1_O: case GGML_TYPE_I8: case GGML_TYPE_I16: case GGML_TYPE_I32: @@ -9508,6 +10057,14 @@ void ggml_graph_compute(struct ggml_context * ctx, struct ggml_cgraph * cgraph) #endif } else if (node->src0->type == GGML_TYPE_F32 && node->src1->type == GGML_TYPE_F32) { cur = 0; + } else if (node->src0->type == GGML_TYPE_Q4_1_O && node->src1->type == GGML_TYPE_F32) { +#if defined(__AVX2__) + cur = 0; +#else + // Assuming that src1 is a vector + // TODO Not sure whether this is correct + cur = GGML_TYPE_SIZE[GGML_TYPE_F32] * ggml_nelements(node->src1); +#endif } else if (quantize_fns[node->src0->type].vec_dot_q && node->src1->type == GGML_TYPE_F32) { #if defined(GGML_USE_ACCELERATE) || defined(GGML_USE_OPENBLAS) if (ggml_compute_forward_mul_mat_use_blas(node->src0, node->src1, node)) { @@ -10729,6 +11286,29 @@ size_t ggml_quantize_q4_1(const float * src, void * dst, int n, int k, int64_t * return (n/QK*sizeof(block_q4_1)); } +size_t ggml_quantize_q4_1_o(const float * src, void * dst, int n, int k, int64_t * hist) { + assert(k % QK == 0); + const int nb = k / QK; + + for (int j = 0; j < n; j += k) { + block_q4_1_o * restrict y = (block_q4_1_o *) dst + j / QK; + + quantize_row_q4_1_o_reference(src + j, y, k); + + for (int i = 0; i < nb; i++) { + for (int l = 0; l < QK; l += 2) { + const uint8_t vi0 = y[i].qs[l / 2] & 0xF; + const uint8_t vi1 = y[i].qs[l / 2] >> 4; + + hist[vi0]++; + hist[vi1]++; + } + } + } + + return (n / QK * sizeof(block_q4_1_o)); +} + //////////////////////////////////////////////////////////////////////////////// int ggml_cpu_has_avx(void) { diff --git a/ggml.h b/ggml.h index 9ca2fe8f..03b33695 100644 --- a/ggml.h +++ b/ggml.h @@ -226,7 +226,11 @@ struct ggml_context; enum ggml_type { GGML_TYPE_Q4_0, + // Stores min and delta per block, does quantized matmul. GGML_TYPE_Q4_1, + // Same as Q4_1, but stores outliers separately, and matmul is done in FP32. + // An outlier is the single absmax element in the quantized block. + GGML_TYPE_Q4_1_O, GGML_TYPE_I8, GGML_TYPE_I16, GGML_TYPE_I32, @@ -807,6 +811,7 @@ enum ggml_opt_result ggml_opt( size_t ggml_quantize_q4_0(const float * src, void * dst, int n, int k, int64_t * hist); size_t ggml_quantize_q4_1(const float * src, void * dst, int n, int k, int64_t * hist); +size_t ggml_quantize_q4_1_o(const float * src, void * dst, int n, int k, int64_t * hist); // // system info diff --git a/rwkv.cpp b/rwkv.cpp index 08b4ad30..c7fd5717 100644 --- a/rwkv.cpp +++ b/rwkv.cpp @@ -160,7 +160,8 @@ struct rwkv_context * rwkv_init_from_file(const char * file_path, uint32_t n_thr model->data_type == 0 || model->data_type == 1 || model->data_type == 2 || - model->data_type == 3, + model->data_type == 3 || + model->data_type == 4, "Unsupported model data type %d", model->data_type ); @@ -216,7 +217,8 @@ struct rwkv_context * rwkv_init_from_file(const char * file_path, uint32_t n_thr data_type == 0 || data_type == 1 || data_type == 2 || - data_type == 3, + data_type == 3 || + data_type == 4, "Unsupported parameter data type %d", data_type ); @@ -228,6 +230,7 @@ struct rwkv_context * rwkv_init_from_file(const char * file_path, uint32_t n_thr case 1: ggml_data_type = GGML_TYPE_F16; break; case 2: ggml_data_type = GGML_TYPE_Q4_0; break; case 3: ggml_data_type = GGML_TYPE_Q4_1; break; + case 4: ggml_data_type = GGML_TYPE_Q4_1_O; break; default: return NULL; } @@ -553,18 +556,17 @@ void rwkv_free(struct rwkv_context * ctx) { } bool rwkv_quantize_model_file(const char * model_file_path_in, const char * model_file_path_out, uint32_t q_type) { - RWKV_ASSERT_FALSE(q_type == 2 || q_type == 3, "Unsupported quantization type %d", q_type); + RWKV_ASSERT_FALSE(q_type == 2 || q_type == 3 || q_type == 4, "Unsupported quantization type %d", q_type); ggml_type type; switch (q_type) { case 2: type = GGML_TYPE_Q4_0; break; case 3: type = GGML_TYPE_Q4_1; break; + case 4: type = GGML_TYPE_Q4_1_O; break; default: return false; }; - RWKV_ASSERT_FALSE(type == GGML_TYPE_Q4_0 || type == GGML_TYPE_Q4_1, "Unsupported data type %d", type); - printf("Loading model from '%s'\n", model_file_path_in); auto finp = std::ifstream(model_file_path_in, std::ios::binary); @@ -646,7 +648,8 @@ bool rwkv_quantize_model_file(const char * model_file_path_in, const char * mode "f32", "f16", "q4_0", - "q4_1" + "q4_1", + "q4_1_o" }; printf("%48s - [%5d, %5d], type = %6s ", name.data(), ne[0], ne[1], parameter_data_type_str[parameter_data_type]); @@ -655,6 +658,7 @@ bool rwkv_quantize_model_file(const char * model_file_path_in, const char * mode 4.0F, 2.0F, 20.0F / 32.0F, + 24.0F / 32.0F, 24.0F / 32.0F }; total_size_orig += (size_t) (nelements * parameter_data_type_size[parameter_data_type]); @@ -668,10 +672,11 @@ bool rwkv_quantize_model_file(const char * model_file_path_in, const char * mode name != std::string("head.weight"); if (quantize) { - if (parameter_data_type != 0 && parameter_data_type != 1) { - fprintf(stderr, "unsupported data type %d for integer quantization\n", parameter_data_type); - return false; - } + RWKV_ASSERT_FALSE( + parameter_data_type == 0 || parameter_data_type == 1, + "Unsupported parameter data type %d, only FP32 and FP16 can be quantized", + parameter_data_type + ); if (parameter_data_type == 1) { data_f16.resize(nelements); @@ -719,6 +724,10 @@ bool rwkv_quantize_model_file(const char * model_file_path_in, const char * mode { cur_size = ggml_quantize_q4_1(data_f32.data(), work.data(), nelements, ne[0], hist_cur.data()); } break; + case GGML_TYPE_Q4_1_O: + { + cur_size = ggml_quantize_q4_1_o(data_f32.data(), work.data(), nelements, ne[0], hist_cur.data()); + } break; default: { fprintf(stderr, "unsupported quantization type %d\n", type); diff --git a/rwkv/compare_with_reference_implementation.py b/rwkv/compare_with_reference_implementation.py index 69a58280..827dc064 100644 --- a/rwkv/compare_with_reference_implementation.py +++ b/rwkv/compare_with_reference_implementation.py @@ -37,7 +37,8 @@ def main() -> None: assert data_type == 0 or\ data_type == 1 or\ data_type == 2 or\ - data_type == 3, f'Unsupported model data type {data_type}' + data_type == 3 or\ + data_type == 4, f'Unsupported model data type {data_type}' if data_type == 0: # FP32, high precision @@ -46,12 +47,14 @@ def main() -> None: # FP16, lower precision, so higher threshold threshold = 0.0032 elif data_type == 2: - # INT4 quantized, even lower precision, so even higher threshold - # This threshold will let some bugs pass - threshold = 4.0 + # Q4_0 quantized, even lower precision, so even higher threshold + threshold = 0.4 elif data_type == 3: - # This format stores more data, so error would be lower - threshold = 1.2 + # Q4_1 + threshold = 1.21 + elif data_type == 4: + # Q4_1_O + threshold = 0.2 model = rwkv_cpp_model.RWKVModel(rwkv_cpp_shared_library.load_rwkv_shared_library(), args.ggml_model_path) diff --git a/rwkv/quantize.py b/rwkv/quantize.py index e798855a..243dc922 100644 --- a/rwkv/quantize.py +++ b/rwkv/quantize.py @@ -1,5 +1,5 @@ -# Quantizes rwkv.cpp model file from FP32 or FP16 to Q4_0 or Q4_1. -# Usage: python quantize.py bin\Release\rwkv.dll C:\rwkv.cpp-169M-float32.bin C:\rwkv.cpp-169M-q4_1.bin 3 +# Quantizes rwkv.cpp model file from FP32 or FP16 to Q4_0, Q4_1 or Q4_1_O (recommended). +# Usage: python quantize.py bin\Release\rwkv.dll C:\rwkv.cpp-169M-float32.bin C:\rwkv.cpp-169M-q4_1_o.bin 4 import argparse import rwkv_cpp_shared_library @@ -8,12 +8,20 @@ def parse_args(): parser = argparse.ArgumentParser(description='Quantize rwkv.cpp model file from FP32 or FP16 to Q4_0 or Q4_1') parser.add_argument('src_path', help='Path to FP32/FP16 checkpoint file') parser.add_argument('dest_path', help='Path to resulting checkpoint file, will be overwritten') - parser.add_argument('data_type', help='Data type, 2 (GGML_TYPE_Q4_0) or 3 (GGML_TYPE_Q4_1)', type=int, choices=[2, 3], default=3) + parser.add_argument('data_type', help='Data type, 2 (GGML_TYPE_Q4_0), 3 (GGML_TYPE_Q4_1) or 4 (GGML_TYPE_Q4_1_O)', type=int, choices=[2, 3, 4], default=4) return parser.parse_args() def main() -> None: args = parse_args() + if args.data_type == 2 or args.data_type == 3: + print() + print('WARNING!') + print('You are using Q4_0 or Q4_1 quantization; it will heavily degrade RWKV quality.') + print('For best quality preservation, it is recommended to use Q4_1_O.') + print('More info at https://github.com/saharNooby/rwkv.cpp/issues/12') + print() + library = rwkv_cpp_shared_library.load_rwkv_shared_library() library.rwkv_quantize_model_file( diff --git a/rwkv/rwkv_cpp_model.py b/rwkv/rwkv_cpp_model.py index 70c42585..f7bb32b0 100644 --- a/rwkv/rwkv_cpp_model.py +++ b/rwkv/rwkv_cpp_model.py @@ -118,5 +118,5 @@ def free(self): def __del__(self): # Free the context on GC in case user forgot to call free() explicitly. - if self._valid: + if hasattr(self, '_valid') and self._valid: self.free() From 18bf02fea465547c6a83cffaf351fcd927ef0584 Mon Sep 17 00:00:00 2001 From: saharNooby Date: Fri, 7 Apr 2023 10:01:04 +0400 Subject: [PATCH 06/11] Use ggml function for parameter size calculation --- rwkv.cpp | 48 ++++++++++++++++-------------------------------- 1 file changed, 16 insertions(+), 32 deletions(-) diff --git a/rwkv.cpp b/rwkv.cpp index c7fd5717..0c331c36 100644 --- a/rwkv.cpp +++ b/rwkv.cpp @@ -43,6 +43,14 @@ bool read_int32(FILE * file, int32_t * dest) { return true; } +static const ggml_type FORMAT_TYPE_TO_GGML_TYPE[5] = { + GGML_TYPE_F32, + GGML_TYPE_F16, + GGML_TYPE_Q4_0, + GGML_TYPE_Q4_1, + GGML_TYPE_Q4_1_O +}; + // --- Model definition and loading utilities --- struct rwkv_layer { @@ -223,16 +231,7 @@ struct rwkv_context * rwkv_init_from_file(const char * file_path, uint32_t n_thr data_type ); - ggml_type ggml_data_type; - - switch (data_type) { - case 0: ggml_data_type = GGML_TYPE_F32; break; - case 1: ggml_data_type = GGML_TYPE_F16; break; - case 2: ggml_data_type = GGML_TYPE_Q4_0; break; - case 3: ggml_data_type = GGML_TYPE_Q4_1; break; - case 4: ggml_data_type = GGML_TYPE_Q4_1_O; break; - default: return NULL; - } + ggml_type ggml_data_type = FORMAT_TYPE_TO_GGML_TYPE[data_type]; struct ggml_tensor * tensor; @@ -558,14 +557,7 @@ void rwkv_free(struct rwkv_context * ctx) { bool rwkv_quantize_model_file(const char * model_file_path_in, const char * model_file_path_out, uint32_t q_type) { RWKV_ASSERT_FALSE(q_type == 2 || q_type == 3 || q_type == 4, "Unsupported quantization type %d", q_type); - ggml_type type; - - switch (q_type) { - case 2: type = GGML_TYPE_Q4_0; break; - case 3: type = GGML_TYPE_Q4_1; break; - case 4: type = GGML_TYPE_Q4_1_O; break; - default: return false; - }; + ggml_type type = FORMAT_TYPE_TO_GGML_TYPE[q_type]; printf("Loading model from '%s'\n", model_file_path_in); @@ -645,23 +637,15 @@ bool rwkv_quantize_model_file(const char * model_file_path_in, const char * mode { static const char * parameter_data_type_str[] = { - "f32", - "f16", - "q4_0", - "q4_1", - "q4_1_o" + "F32", + "F16", + "Q4_0", + "Q4_1", + "Q4_1_O" }; printf("%48s - [%5d, %5d], type = %6s ", name.data(), ne[0], ne[1], parameter_data_type_str[parameter_data_type]); - // TODO Should not be hardcoded here, but read from ggml - static const float parameter_data_type_size[] = { - 4.0F, - 2.0F, - 20.0F / 32.0F, - 24.0F / 32.0F, - 24.0F / 32.0F - }; - total_size_orig += (size_t) (nelements * parameter_data_type_size[parameter_data_type]); + total_size_orig += (size_t) (nelements * ggml_type_sizef(FORMAT_TYPE_TO_GGML_TYPE[parameter_data_type])); } // Quantize only 2D tensors, except embedding and head matrices. From e26b408ea7ad22f0b5439b8fbd0ae31a65cafa3a Mon Sep 17 00:00:00 2001 From: saharNooby Date: Fri, 7 Apr 2023 10:12:19 +0400 Subject: [PATCH 07/11] Add Q4_1_O test --- ggml.c | 52 +++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 49 insertions(+), 3 deletions(-) diff --git a/ggml.c b/ggml.c index 7d75e2e1..6c946d0a 100644 --- a/ggml.c +++ b/ggml.c @@ -11427,7 +11427,6 @@ int ggml_cpu_has_vsx(void) { // Copied from https://github.com/ggerganov/llama.cpp/blob/6e7801d08d81c931a5427bae46f00763e993f54a/tests/test-quantize.c void ggml_test_quantization(void) { - #define QK 32 float src[QK]; uint8_t dst[24]; int64_t hist[16]; @@ -11437,7 +11436,7 @@ void ggml_test_quantization(void) { } size_t size = ggml_quantize_q4_0(src, dst, QK, QK, hist); - GGML_TEST_ASSERT(size == 20, "%d", size); + GGML_TEST_ASSERT(size == 20, "%zd", size); float max_result = ((float *) dst)[0]; float max_expected = src[31] / ((1 << 3) - 1); GGML_TEST_ASSERT(max_result == max_expected, "%f, %f", max_result, max_expected); @@ -11448,7 +11447,7 @@ void ggml_test_quantization(void) { } size = ggml_quantize_q4_1(src, dst, QK, QK, hist); - GGML_TEST_ASSERT(size == 24, "%d", size); + GGML_TEST_ASSERT(size == 24, "%zd", size); float delta_result = ((float *) dst)[0]; float delta_expected = (src[31] - src[0]) / ((1 << 4) - 1); GGML_TEST_ASSERT(delta_result == delta_expected, "%f, %f", delta_result, delta_expected); @@ -11462,8 +11461,55 @@ void ggml_test_quantization(void) { } } +void ggml_test_quantization_q4_1_o(void) { + float src[QK]; + uint8_t dst[24]; + int64_t hist[16]; + + for (int i = 0; i < QK; i++) { + src[i] = (float) (i + 1); + } + + size_t size = ggml_quantize_q4_1_o(src, dst, QK, QK, hist); + GGML_TEST_ASSERT(size == 24, "%zd", size); + + float delta_result = ggml_half_to_float_reference(((block_q4_1_o *) dst)->d); + float delta_expected = (src[30] - src[0]) / ((1 << 4) - 1); + GGML_TEST_ASSERT(delta_result == delta_expected, "%f, %f", delta_result, delta_expected); + + float min_result = ggml_half_to_float_reference(((block_q4_1_o *) dst)->m); + float min_expected = src[0]; + GGML_TEST_ASSERT(min_result == min_expected, "%f, %f", min_result, min_expected); + + uint16_t outlier_index = ((block_q4_1_o *) dst)->outlier_index; + uint16_t outlier_index_expected = 31; + GGML_TEST_ASSERT(outlier_index == outlier_index_expected, "%d, %d", outlier_index, outlier_index_expected); + + float outlier_value_result = ggml_half_to_float_reference(((block_q4_1_o *) dst)->outlier_value); + float outlier_value_expected = src[31]; + GGML_TEST_ASSERT(outlier_value_result == outlier_value_expected, "%f, %f", outlier_value_result, outlier_value_expected); + + for (int i = 0; i < QK - 1; i++) { + uint8_t q4_result = (i % 2) ? (dst[sizeof(float) * 2 + i / 2] >> 4) : (dst[sizeof(float) * 2 + i / 2] & 0xF); + uint8_t q4_expected = roundf((src[i] - min_expected) / delta_expected); + GGML_TEST_ASSERT(q4_result == q4_expected, "%d: %d, %d", i, q4_result, q4_expected); + } + + float dequantized[QK]; + dequantize_row_q4_1_o(dst, dequantized, QK); + + for (int i = 0; i < QK; i++) { + float actual = dequantized[i]; + float expected = src[i]; + float diff = fabsf(actual - expected); + // Difference looks huge, but the range is 0..31 -- compared to range, it is not that huge + GGML_TEST_ASSERT(diff <= 1.0F, "%d: %f, %f", i, actual, expected); + } +} + void ggml_run_test_suite(void) { ggml_test_quantization(); + ggml_test_quantization_q4_1_o(); struct ggml_init_params params; params.mem_size = 16 * 1024; From edd57a186cfec8c1bd1638172e4b3b6967acd2b2 Mon Sep 17 00:00:00 2001 From: saharNooby Date: Fri, 7 Apr 2023 10:16:12 +0400 Subject: [PATCH 08/11] Update README.md --- README.md | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index e2b8dc74..a3ed3319 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ This project provides [a C library rwkv.h](rwkv.h) and [a convinient Python wrap **TODO (contributions welcome!)**: -1. Measure latency and perplexity of different model sizes (169M to 14B) and data types (FP32, FP16, Q4_0, Q4_1) +1. Measure latency and perplexity of different model sizes (169M to 14B) and data types (FP32, FP16, Q4_0, Q4_1, Q4_1_O) 2. Test on Linux (including Colab) and MacOS 3. Make required memory calculation more robust (see #4) @@ -68,7 +68,7 @@ If everything went OK, `librwkv.so` (Linux) or `rwkv.o` (MacOS) file should appe ```commandline # Windows -python rwkv\convert_rwkv_to_ggml.py C:\RWKV-4-Pile-169M-20220807-8023.pth C:\rwkv.cpp-169M.bin float16 +python rwkv\convert_pytorch_to_ggml.py C:\RWKV-4-Pile-169M-20220807-8023.pth C:\rwkv.cpp-169M.bin float16 # Linux / MacOS python rwkv/convert_pytorch_to_ggml.py ~/Downloads/RWKV-4-Pile-169M-20220807-8023.pth ~/Downloads/rwkv.cpp-169M.bin float16 @@ -80,13 +80,17 @@ To convert the model into INT4 quantized format, run: ```commandline # Windows -python rwkv\quantize.py C:\rwkv.cpp-169M.bin C:\rwkv.cpp-169M-Q4_1.bin 3 +python rwkv\quantize.py C:\rwkv.cpp-169M.bin C:\rwkv.cpp-169M-Q4_1_O.bin 4 # Linux / MacOS -python rwkv/quantize.py ~/Downloads/rwkv.cpp-169M.bin ~/Downloads/rwkv.cpp-169M-Q4_1.bin 3 +python rwkv/quantize.py ~/Downloads/rwkv.cpp-169M.bin ~/Downloads/rwkv.cpp-169M-Q4_1_O.bin 4 ``` -Pass `2` for `Q4_0` format (smaller size, lower quality), `3` for `Q4_1` format (larger size, higher quality). +Formats available: + +- `4`: `Q4_1_O`, preserves outliers, best quality, very slow (as FP32). +- `3`: `Q4_1`, preserves range, poor quality, very fast (as FP16). +- `2`: `Q4_0`, worst quality, moderately fast (between FP16 and FP32). ### 4. Run the model @@ -98,20 +102,20 @@ To generate some text, run: ```commandline # Windows -python rwkv\generate_completions.py C:\rwkv.cpp-169M-Q4_1.bin +python rwkv\generate_completions.py C:\rwkv.cpp-169M-Q4_1_O.bin # Linux / MacOS -python rwkv/generate_completions.py ~/Downloads/rwkv.cpp-169M-Q4_1.bin +python rwkv/generate_completions.py ~/Downloads/rwkv.cpp-169M-Q4_1_O.bin ``` To chat with a bot, run: ```commandline # Windows -python rwkv\chat_with_bot.py C:\rwkv.cpp-169M-Q4_1.bin +python rwkv\chat_with_bot.py C:\rwkv.cpp-169M-Q4_1_O.bin # Linux / MacOS -python rwkv/chat_with_bot.py ~/Downloads/rwkv.cpp-169M-Q4_1.bin +python rwkv/chat_with_bot.py ~/Downloads/rwkv.cpp-169M-Q4_1_O.bin ``` Edit [generate_completions.py](rwkv%2Fgenerate_completions.py) or [chat_with_bot.py](rwkv%2Fchat_with_bot.py) to change prompts and sampling settings. From e04baa032c2863787aecebd15fa2a73fad621b6f Mon Sep 17 00:00:00 2001 From: saharNooby Date: Sat, 8 Apr 2023 10:01:29 +0400 Subject: [PATCH 09/11] Remove reference impl comparison test --- rwkv/compare_with_reference_implementation.py | 105 ------------------ ...ed_logits_169M_20220807_8023_98_tokens.bin | Bin 201108 -> 0 bytes rwkv/rwkv_cpp_shared_library.py | 6 +- 3 files changed, 5 insertions(+), 106 deletions(-) delete mode 100644 rwkv/compare_with_reference_implementation.py delete mode 100644 rwkv/expected_logits_169M_20220807_8023_98_tokens.bin diff --git a/rwkv/compare_with_reference_implementation.py b/rwkv/compare_with_reference_implementation.py deleted file mode 100644 index 827dc064..00000000 --- a/rwkv/compare_with_reference_implementation.py +++ /dev/null @@ -1,105 +0,0 @@ -# Compares logits from rwkv.cpp implementation of RWKV with logits from reference implementation of RWKV. -# Reference logits were generated with RWKV-4-Pile-169M-20220807-8023.pth model in PyTorch. -# Reference implementation code: https://github.com/BlinkDL/ChatRWKV/blob/0d0abf181356c6f27501274cad18bdf28c83a45b/RWKV_in_150_lines.py -# Usage: python compare_with_reference_implementation.py C:\rwkv.cpp-169M.bin - -import os -import struct -import argparse -import torch -import numpy as np -import rwkv_cpp_model -import rwkv_cpp_shared_library -from typing import List, Tuple, Any - -def parse_args(): - parser = argparse.ArgumentParser(description='Compare logits from rwkv.cpp implementation of RWKV with logits from reference implementation of RWKV') - parser.add_argument('ggml_model_path', help='Path to rwkv.cpp checkpoint file') - return parser.parse_args() - -def main() -> None: - args = parse_args() - - # Don't want to depend on tokenizer here. - tokens: List[int] = [4, 3631, 4420, 2412, 953, 432, 391, 30567, 87, 15, 14161, 7092, 273, 416, 27767, 55, 342, - 2412, 953, 432, 3806, 7092, 273, 416, 27767, 55, 15, 187, 4, 19039, 2412, 953, 497, 4561, - 342, 416, 27767, 55, 14, 21, 14, 49, 587, 14, 17809, 46, 14, 938, 14256, 28950, 14, 1438, - 1508, 15, 81, 394, 1566, 275, 8462, 22097, 348, 15, 187, 4, 43825, 27, 15548, 7277, 64, - 3113, 64, 14005, 64, 39595, 15, 4789, 10269, 61, 18992, 61, 7265, 64, 30217, 39297, 15, - 20963, 330, 27, 190, 30567, 87, 15, 14161, 14, 17809, 46, 15, 4805] - - threshold: float - - with open(args.ggml_model_path, 'rb') as model_file: - header: Tuple[Any] = struct.unpack('=iiiiii', model_file.read(6 * 4)) - data_type: int = header[5] - - assert data_type == 0 or\ - data_type == 1 or\ - data_type == 2 or\ - data_type == 3 or\ - data_type == 4, f'Unsupported model data type {data_type}' - - if data_type == 0: - # FP32, high precision - threshold = 0.000005 - elif data_type == 1: - # FP16, lower precision, so higher threshold - threshold = 0.0032 - elif data_type == 2: - # Q4_0 quantized, even lower precision, so even higher threshold - threshold = 0.4 - elif data_type == 3: - # Q4_1 - threshold = 1.21 - elif data_type == 4: - # Q4_1_O - threshold = 0.2 - - model = rwkv_cpp_model.RWKVModel(rwkv_cpp_shared_library.load_rwkv_shared_library(), args.ggml_model_path) - - def compare_logits(tokens_subset: List[int]) -> None: - token_count: int = len(tokens_subset) - - logits, state = None, None - - for i in range(token_count): - token: int = tokens_subset[i] - - if token_count <= 10 or i % (token_count // 10) == 0: - print(f'{i + 1}/{token_count}') - - logits, state = model.eval(token, state, state, logits) - - actual_logits = logits - - # --- - - expected_logits_path: str = f'expected_logits_169M_20220807_8023_{len(tokens_subset)}_tokens.bin' - - if not os.path.isfile(expected_logits_path): - expected_logits_path = 'rwkv/' + expected_logits_path - - with open(expected_logits_path, 'rb') as logits_file: - expected_logits = torch.tensor(np.frombuffer(logits_file.read(), dtype=np.single)) - - # --- - - difference: float = (torch.sum(expected_logits - actual_logits) / len(expected_logits)).item() - - print(f'Reference logits: {expected_logits}') - print(f'Actual logits: {actual_logits}') - print('Difference per token: %.8f' % (difference,)) - - assert abs(difference) <= threshold, 'Difference is too big' - - compare_logits(tokens) - - print() - print('Test passes') - - if model is not None: - model.free() - -if __name__ == "__main__": - main() diff --git a/rwkv/expected_logits_169M_20220807_8023_98_tokens.bin b/rwkv/expected_logits_169M_20220807_8023_98_tokens.bin deleted file mode 100644 index e0409d28ae14dd40ea5191198433ee64bebaeed2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 201108 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

+tIr6OKU<5=_l`uPRP_ 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

_`usmGdE>w+e^f)#i9}Wd_Tft?XhSyv!-VIO#on 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

&t1gya?LGMq|4W|14$7=~7z< zCB8F2$Hi{43D$wgUn}UH-Gt|1Hkf-q0C^%sv@1yfvwpAReu@|b166Qt^%D3DVSi8} z-xp4Ar+RO8qGpD|q~|NGrHOc!zKj@wJX=iOwTCFDULLt6 zR(Qtys&DVxXpa3$N}J||;6P#Y3NVu^Ob+hK_h?w;M3iet;goX+&H2_sGk6}eBlJE^ z$+5-E6y_lI`V zl=~_eSniF^GlnShmBmWo-{d1c9v`2wN7B#(S2@%1KxQ1oF6bg%L<_qLM&MPdJDlfk zLH$PVX-yVEQ{WSdjyOcS%kGoTw6U1fXO5X=M`?$zHx6SoA|nN`klo1_kMO+Y_8pSn zIzW?t+d_Q(N(4&hkwV`qy3IdtZ&Nj(!4Hui3~@b~ouquP6+0k`ZS6Pc`jo%)D$N=f zC6ZxPqlz5|i|JflB?XW4ES>t2d5MC1*-t<20@aRD=}c&<<=Ok6G|$~dUDy=#{A@Bidq*>xmKN|RKoWn-l0)bC#hZWhVwTYR9YV+qqx5`@;dW=HuGJg+yn8 z5ySU+u`i2os8kbI?i#|xSrU!M^2nRrXyqEC**jHEM|-UC?~f1sj+N2rv>kNpD*vuF zouJ#7&r;~wFqmzBL!IyKP_}9Zl#6tk|2hPj69w^V{c(E#p_zKkx6#b|mZ%+Th8Z&H zG--r2E|VXY9v_Aud7Sb2_kp&I5@Hvr2MU?BrDAlA0?L2V#uDARPb9Xmbs74rBCrTjX+Xz(5Rq!87e5>j1y(sSFdf|DC9dgSec+Nf@(@uUO0r~BCI%x;J883uy z8*K4iUjr+rtc1~!2I`#bh64q<$kM4Mt^2OX3HeA5qP9?!eoT-zg*O|98|zvOohlEscb7iagIguF+FIM-AzX!=#6gDL!Z!JfCXgQb8+CBQr}7@>N?QF-`!tqedaw*qU9RqSz##Nt@5@gkp3Q{4;%+ zzv6@bwLXZvAcmcM&r%OohuDNGrSmT8VBdc-$TqE~<9gX3XyD zpxwpHptMrJ`VM}!CO@U_jc%l?Jde%~=QGx41^8^^zO_RiMT%UaR4>jWc==$O56>G? zH6fMZz&@oKYFxP!&iuJIQ7cB|zX4jhfxX6#UrDRKl~Shhy!%KaeXv@L>AJkz&HF*i z{58?LpJ&j_;!yDZMBzn&xNztriG2S~iZOdp7yOo<6dt94+wL@uJ7M|bMUgA(h~q1+ z(VVX)(9n`XsHp>94RE)Ev|xUBBr6g1udSmN1+qh`B?5)641dP!kux^WUl%bv~Z&*2}PP7BkS(t)RdilNP^TO34<+ z_KBM@W_TB!IG_rf;+=HG=sVeVNh6^*2#&ojFn%`-!Bv+0o>Io6`e^bvErpO?d1$K_ zknf)v^fKZw%_($&lFd2VdNm$5?9-@&pXCGTE_k2TL^f;R((>pG8m-?-a?kiZr62=2 zazJasV!WzMCmmPbttW}2;Nf%HTfjZ~-iOpAcZRgpG%&ewBuuhZp}zVHMO7EkTG3Y& zD5(XTx97-%^Z#weZdi0r5nH9!(cP)uIO@er*u84V$(6vy&yn;}%^sDbCc-q)3vC;D zzjD9`$9+a(=WZ=b<(;NV%@49%(n*K=tI21qJ5@h5N3;iX(L3V!?yUtgNogeRS`6Jx zX-tqPA!E*F$({d5UmlLb$RT{EwVI5YPwe^`;*EXJ+>y`y=nS5tj?S;4`!7Z#&fAt} zr*_z}q>fxFIQQZoi~~jMXl0o&JAbUPdc`_^{b_Y}iAJioHwY#koVUMF?9K z&m+Cid}|mK#hNFW2IqixB1$Gkg;L>C#&~wdg&V-+0X9gcU~AaBsZbaxxK+CI@UOe1~ z12uBg-5x@*@8uzWRtf6Ns2E$Mia+ai(32%nc(T(6W%u+Uz@ME*tKOBqcNv49b-M6+ zERJkPqV|WL*z10^^aJ0CKJDse4*Ge@C=tQ)>{=>&`iWeP*-^vYfhH+-rx+K|_%|ky z%l$(KR`OguTb^?Lm6*S1h_^g1t=Bcg_e=9pKUx-PR{Ah5yh@F{7ydL*Lwd_xv5xn% z1@DvT_Yp@VaSzF4(JwN)=!AJ^t4metQlRG~gm}(D)TN0cF4G3mHr&y;&1`Rb6)1dv zM+Y=5@g>g&<}bz~QJs76y_{dy9EN5mp21rVlJfd-2su=U{j>DYBxH~2eU7kcl7VHo zCUgDFklDk&^1ww{GF=iYrI`^HZ;o4a(Gc4tfW%2=usGaDHdAtd}4>ivh&CItyI>7g>D`MDOz)b#XYdYK(jqxYO;>t=}7;pScL*6N1_14ui zm}UlpFDcm0E|->CcYIcN#wgLH$ohZB*=z$|>vmF}s|Bq2GwQl20?Cgh@jduFdCXPE zxyGR|Vz$D727m2Fb+oX0J~bS=1M5CV>Z&>=Oj?p zL@TPTF@rr$9^AXg5P3y)`?YbeXBWu^tj1y`&a6*lhRR<{SkL=RbM1NdecTC4qKhfD z$`pPJlpsCd0PNttElXK)loG8w#8bd-X22U5cVtlg@YAW{9_Eo{0lQD*DLJ|3MUrVBZSwkDyxjFEU zXX{(3Xjd|+v*#h|umXbD_#$+iH1aDYaQ{gm>07YpoihY4b_&3T*#ntspXhM7E501y z-QTTNa(+LXrvKcBj-Xo7;XkJFJ|)Iak~8(AkSftilWi2yw3;*a!`KJ7fmvMCNm;Wd zqU0#g#J63g$>XZXpnfMs$}8ZiZ6aDuM8M}l5~lETsjf;9DYJx;`&16IzpKGWl^rVO zpXgNN2skoVBO!A~sgd$18fK}B+xvFV?tS72?NdbR@M9#@%6=uwHj=u+?_hSG2|T|< zW2^ZND|46@E$~9+c`bfEe5RxeexNn_aQ^e2+RQR&{QUu%c1#+fCp2-~tesYVbArK4 zO?b4pqkEeptd_9-NTo|$9@PL9d}Xlx_C@`XN0_)O>`-ab7gi(++llCdZEb( z54Na5R8|0cU&v$8JKjeIZQ?V6C~jWkS+UF^#9w9K1JzJw!8Z8E6i}>83+>JEz?v`a z@Z0H*3nYp%@oK7V<-Wx^9cZ<+)8YdWs8g<|-z%9RFsKAC=8@dw+0Oh!g4nuwCjBw| zP3<0E$YaiU*uUwfs29wdC=q~+>;&AqD1#~HT3FAWiAe_csF$-6ON;zbI_?T}4q>Kq zizc2Wat^xi8|_|~kFGQmv~J!);&Y$VXU?lWzkY#S`?#C4mGjk{0}`pNrF`~CM&$GT z>Bt;B*~pA+=JFOVxbb}RIx$j+7Lvk%nKlY^*-4;0NO9)} z>3o+jYAlVhG(M3|bSYzH?JasVF#>)X%tmP%jyOICrg7$E@$zECy^z53)v|b`KNb;{ z<~VNWfQ68Pr<5-W`_&M0#hQ6WIn?QUlB~VmkWxDeBY!F3;i!W&HX?@I3{7+|foCFg znGV!xKyNAMtK#bE?W_54xqlmO3iEKw?gstdVu!}NGSF*hE}cm>b#DJivD5ZZa_3*# zxWxl{lht6OVT)V*K{OM(UaDn$jN*R^W70`!7*sr_F-OLul;_^Z+^n&ST?KNv21xTA zN3-e&DXUNn23H2Du*8X$mTRMS(<-DE^Y=xWJ0ETK@G%p?a78UBhmJtC?H$@O^B=7{ zIU0NCTQcK$IQFh>Cq;`7G+tsnnr!&4y5Aq(i#JhuqXsf4h4z;&9)|6Kl+u^8Rgz;pZ2 zXqItDs@edV-s2wmI$3N=h=ADv5yY68VWEmRtjCM0^l~NBI~G1ju1sUKd%5xpG!bA5}A-P{<$ldSt5L{hs2O%VLV&sEy=Nx)|s)#_Y~7q$S=+2tLD}+Z?*RVI+z#O~fw4Y&sGwf>#$UF-z?T z^`3OapJzO8(33*0bThSV_{F_w=IA=izlxovb}Yx!0+S9Z$Q-Q`rFn>{YZT zZT837U|Ivao|gvEtE41azuXw);sT9F^;9{vlWZQapMXD0;VJfTVpi1YB5`(T@LWn~ zHazx;K{jSTEfly%u~)xQmNn<#yFbv%sbhJkAqI>|B&XX$Fz=BSsa&8*84{A#wYi9ygsZ&r$ZYA}45hU&yjl(}o5qH)Od*^(m zkm_RYR@l*$)1~xaW;5lkj>XT#6A^V@4j-7)AKy`|LR!cFqv9mUrIW-w?l=PYOyXLEvq zoxuoj(ZJXcYuG5n;@PP#T0H+a)qUhHBy)WX*@5?h8E=Wp1);*{)7x)c5!dProx7>% z8>;tZ{IR*=fhq%z}b z8f|ik$~tc_Tl5X}J>ec6|L!1=x$RCTeB8Ti)N_>mCkvS2 z%b)-0mxK{H%M5SIEnx816`OBQf?SF?&oO$*rA`M!&90DY!7e&B)fQJZ2kC}Q196!a z85=mOz`u)m52qpR`fCb~iKqIEHmd)S3|B)rSX*2t@5P)Ei#0_ee?3>2RlKz86WNcl zM8o8{m|s0W3(fjzZa@&;yHACwha$%297V>RsR-F93gwqiX-d2+?0?BXd37Q7ESQGQ zmjPJ%LkW%iCCH5Aj{WaN6lqmVnr(tmp4Cld-QDau5X1ooErk4x0P$JqnPWS1#EH(` zv&MKZBV4zhE^7QB`(x=8&-_q%(RGk@>7wJMo>*GUnc1xU?3iQc{RbHgT93ry`M>Bt zb`i!c@Wq)q;kcj2EUK%@n2;yHz0_bn=f9!bj$*Jq$19moPitP8J&zt7z3aqVJ#7@HYG+No!3+ z`mTv6{*Xu(GS2YpWoA(;d&Ddsljhl2oD1?s5j&9Csw9)Mw zrSo}n@8Ll7Z2nF=ewaR?=t7Vq$dl3}Y8)5HU z(A6uAq{}R;k%QUGwwb##YQdWziQW0EzhCyAH<^;dQjor;)6}Yv9w+r)@wxR zXR|jvHV;8@fDsaUf|*18fF$Q=qpYl#q+f79(b*sF;mp#Ce@8vnS97Ld8(f;0Dcv^~ zT0X_dRC9;Vj8@9AmPG$+Z9FV>fRnc>cc>qe@C^39+PcG1P66uvS8zpRI?l~~Nb8yf z@#tL(6;%Es+k-A}yeNs|%#OLQag=_&dQY-}A1LD)dtCXs zGsln{!?X+5a(!gMbI#MGP6BjQ;D`R{+l@osnhLI`{F45rVBbmZ=_C>#y^i8)3TU@yBs!dAASNV%Uc(NW7{%W29$VO4NF@0fJ=~jDMRDvd z3b5^=;s1?8l0T@Sc`O#rKUr#$@r=aYG3Wc~7rL)K1(B0J(v1K!X#CZ{2+n0csf^}d z8W9v(E1`4V6I%A)X>u4?g(iM4Sa8QP`uaUm-Y^yMqC98Z?SVNCDdeW^4vU{Wdq4k& z^82S!C3kLSP7T9F-U;u>WNxUQ3Bp8m@jWkz!hAQ9UXB<_?#g4*j1c^m-3aNS21rky z&TbN8KGQc)P3Z?}+c!X)a;MXtb?Pv;vH~sFM(3a-(ubDO9A9%h`Sy^ma+a<5U^K#F z=b$Zz^|1}cu<7Di^=BzW)|=tM`mxx^eTvE}ng|`WnBL@?V$t&`3jSnBf42<7N);2d zWF%78dYh z&D1TRg_VyU?G?pDPD3cSo2N+aPo852uk@)B1u|EHJyNVw^Qt5FvVm( z$9!pJw&rYUNKN2Be=-W2xNkG+u>vY2Lr6Y~{p*u%(9Ug&NYfg@`~oSIC{0A_7GcDm zET+ z^W=0P$C=jn_l~Fzn1^YzoFFxf`6Xw2>EKj*IIiG*Ys4kW`p3Kv=XWIZawiR1^-#rC zHGB)60B3(!oZk?DQBOG&*=3C6iy3s&tDe%_dAAdxh_!pUD=YkpZY(o{Pw8?bE>J{s zmNa(nu*TS6F$_-gA9pX z_a9GDszM+=ST-87Zm2`ocmliGf-wHSCln`Z0iS70C@0<#6<)$voKQ_$t{9_k<46iS zdYTT1hr(Qd`JOKWk@0dOeQ23T8|$>8CH|EPPFoHW z*c&(mdxvmmY4{NI9MwY1$oCZ6Hwx9kBXFz676nVJ;CgO0?j(6)_pdN`jR;4>%&la% z<|k#R6{1#h2&N4+`yWT=9oF;yhVizPhW6e|d#SXwOGQdZQYkVb3E3ecJ0S`QA$w&M zJvZstBN-)?tV*Q_(eQh&-+$+v>s&~EKcDyedG7o5LK5et7ln#=YW(C5d;CazZuv>V zX4A23@(jFq?}>xWL$EZ!5u;sPuwWEBZtAX8)K!$zqK-u%{ZWY5bj2vI4r*2%f*HkW z^tzw#X3K1`akCoYIX|DL=z`gNCn=~nM*@4Lv69iy*(W%^Gixu(x3J4&fPG4y+USvG z&qCZ9vW(@q-c|>c32+}MO$3iLevtMaSLlg5qsO?H>VlZ($6V$~clW?~aT;c-)==ro zFXXdN17;~a-+bOpMp33Hd#;Xi_k|E~@&-v%`on096n3r`MyZkxWd9q2I|VLi8@n7q z8DgLY?he13jI_=$Dm~mrISVgS@8=-QEVRY4^-A>0g|nI?6>*FE5NTyb*kZGTWD=gz z5Cw6Rd3iu`rXYscNaDoP5S%oAM3y<-WX+$2s16+r?EXvE*&oR34s(gpgpide4&jIz z>O9m(S9uQMyWkW3jxVT?+9ia@F`ReiSyt|pf zb}*JaVonYB#v&JYQk|bU^O(Znxqo|w+vFHb$qD|idbs_4w zC&v5pO?rH;vx6Vc=3`)qj+_n0XVIGoE&A z-B061nc3i#1Sc>vs_7vq9MHlg{&U}WJPXVAuoqxLGILR~kUYr{w$jX$N?1v=TbNho zrwb2xZT5;W_jP+G-RAGhB;MnMEe}RUdK?|7H9@MkG=82k#KY6IG|!i3g;HuLseVZ6 ze-4nH@l14S@N;!SC~OiPkaDS!1P^VdRCWicOo&9((L8El|5OCCO{F5fk)lcweQ=0_ z9e-wmTP-lcG=(P5Zljg#kl89X4EFV(DKw9NZX?+%6(Wa&qq+Ne`5867lETOLH%Rt` z6{dvd(~;SZSU9VPwiXu9_K{8)q*CfzEX4hIVf^}ZkPfJ7qt|&Oc@IBM<%VCJ{i zcQq`yDh1zZ%BYgoMnvsutQdGg)4JVZ#hmp)4<*=t41)M??!E_VLZopKIk!u|(s?w} z_6|}ApUDf~j>Y{m3OJ#5k5ZSuq=h;U=mX#94IbPi`?osK-td{kPmRQ*r|g(aUVul+ zx2W#64Ez@|*OceSiv!+K;<++(J=4cmey@HPV{XVyMM$lvrIGAcPCoL0RG!7){B!nV za!)yFsXNBVM#Jxr9#(u1gZ7qEn&H0+FQ#cg4yw#YWX@!e7NX+JvF!M1@<0BIs+I>) ztz z$(H$gMbp?H)E5ic-ORd)8V130?G$~-4Y#TmVs1?o&ASpx5;tDc-@W{P+p-!luQO>W zGu>n}?^l>`7FC|lQ=QV|AoFDh#Z0Uw^DcXKy=;eflN9ogCnGXm5C4WGa33ZgNe7Ba zV4)4p{SAP!9-qIdxHcmmmb=!{5M~42a$b(r25tzMzY%KJ zBw*4K1y>tY7;Y7X@f1&~Wt1Y#B&XHlNZP!b?q2Sq@4QFvvG#!M zvIt0ByGIKi%2M9Y9(L{ipfW{I{<+A)lUjC3CUN)r>PWnfmc*13t|(4EM-5r*4;~YN z%HDMfroY;ptFR3UY?G)fxen zBVq7-0t)ARreo3XsA;$*BL#h#S!nRI!fN#D* zLf_eYdx`s1Bkk~n-Pn0iCul6Ylu!S$hjcmU=ITLO;h=`0+)Hpu=D$N`T*XMUkL7+W z6mOqWy{V%Yh4ZLtT9K_1MYuJJ4-W%{Gd8^YwB?q=$8RVbE6e@?hQm9&&u{kYoSv6 z6XhI!K$AUH(OS3NEV2!>;iqg#@?KhOyxoYx|h$`Tm#kNf|#o zZE^NLp3$EX!e@UeT>34DYn+$y4`(j($=5V(Q9NSf_fY@xKH7Nr2<0vQO>KueD0N{2 z6&mU>Pa>7`ag7u*#F`l%*6g&Eg!&!kqb(A_6c2M4NZR1`8(;iYK32V@o~T~ZSrLwGOAY2idt&uSHC%68 zPBM!`;n(7Tjku+cqD9Z~v7G}4B`fB?K_ zUS&7^Wzv``4zW`PSbFk1?cjO35Az)k?z~PW5g+OMnEjM~F$6u2Hqp}g?3QH4!AdPB zcpj)A&1!c@9!{hL%}Q!l+(%9?uh1OMpgFPcuA!FqNpV-13&gv>A)o2q$w*|@=-}5j z6$}%X!9;~}_!Vow&8MDjvn$HvlQBeh{G$tBwGqyHr#$Y{Ojo>5yMou#o0UIkm6Ie^ zNS0wO&lD5ZStHap3WIk$WwjeJIbI+FBCuW)DT+5Bh1N3^&VTWIsk5&*W9Hug@9wi@4X~r-a9x zNj_dN00P@jYN>9XlC{(+bRu$>tS@~SvpD5$SKYNty=Uz%@2qKsBdF-YeBuk5^ zErD5Ud-G}kI8U6puZ443{q#-92$6{@$k$9H-{7H?;8RAYjtSzU7T*tzRM-RGN7bCQ zv6%OgEWUN~eq=JP49MX)Gp2jLc|$G05AL5+$WFrvLJO+th7^0AdXLe$7D?DIXE#v4 z1Kxg9gqQPvTB5y~7CWR;p}G@=+@tNNVt@CPJGVYQ$lxyFWeQw2nbxY- zllENZ$E<20mC2HvRh2=+j4GZ>xT9!EF1ECGQ@E2YGe65Hj_;R~j?cjL6mvY8Z;ATP za=2=^p7J=CqQJAId+m;}b?P8r(IocMPQ`iay>xcmAX)IdN2G)If~AMGF7AwH$drjGd#bh2l>M96#2*#*ZbU2JTe2tt7H+-&zXnsq1ar!oQ${H!FeXL zV6q)h+Z+j#BgS~ko#AG_!{>5--85JPNt^7UAY#oq95*N|VE*+TX*`;5fT{8OX!Q1( z5SaFt6n^`lD4N~DLD#AIz;qmtbH>#HF>D;R5R2Fa;UJzvnT?;QEi-_+co(a2AsUz4 zcY28M4z=T}5**l1v1>WACyozN^~_^9;eCfvey89kpKmjmljfeKh6?UTWX@2>5QS8T za%MJ3iRXHW<1wzx9f6BClXz_)4SN`Yk&(k8QfmXfsGnq5n2JqV9>{q+8z%Q1(LetV z&A#@6@(x>|p>i|run@!~4L;MADkJopC;Bh(Syh(v*GbGo-E0dD&35V=Est|u4(NLR zh>ES1uv#Ms>;D|3*D4>$DK#E{rT=HU9I4E7M?k9phEz6E-3C*9vG7NWhA0;1O+{*K zEo~YAL}c$(05%GXdaj0ow)|i z(jU59=ER-yos=${1l0h(C(PeRVek0eJ^D16RL(&-&s-zhnkdlZ66xf0P?A;!-Eb|V zz5EWa^v_0NlpPA&)KS+tA5C*hXihut-;NK#qaZyzcpwV#=f;Q(O~P5PcjPQ)j3(iA zI3wu}r9WPXEY`)x`?}2ay-xq7v13y_31&guQ7g4Vu~#`YWE+t)=Z8mk%OjwgyW%@1 zFz1O~ptGd0Y$^L*G?*n<)k=eO6ySAwres^q>xTL^~H!s3UFM^T{vbIYiVinPG%jlxAWf8 zCIpT$i?AwZ0nM}-k3l(WL~R+M2ANg#g5S&Y`Cb2F4f8$HV<5eYyNzSHTNxmR<`Q>Y z=-EbpK87Qb_hz1cYiQWJIkfTaX#UKwXH{$@m3?K$Qz0n6I2osAXkp+I`z24TLbl;B z$jU_{&XBnWW?}!p#TzMO@vtfaqAOOW;{0q;2@_v;AJj*W`&J0OPjuN}}X^qD*F z(~#R}iGQzS5IZXxi9FjMe@h!e%sXiad_c=LGyA=c&y7y5Sj)XTAumUi%!z>X&2)%4 z$m2hLZk`L3z}-5|ZA8~lzNrJogqvb=>;P>lUWOQE33PBar06s62Cnk^w2FHb_h#}g zu!mMP%b{lD(Td5T+Rz_r3cH1?5%fp`Wt;=7JHP8yewm;W~WbOuVEU zyMvFurf3Z_Oy4DlHwQLR$@?|fWB8j2r5aqjnT_`1CY{#2On1c%+2f>$Ubl0U z!%X{;e`Miy@FTnHIZJ!q8^Lazky2#WjDsJnMCwRus~AmGI8P3ntZ60B=5%C}*(;TY zo!&R7Y?&Em8}Tg4*%W(T%HZ~bXB06(g}vWD>99Zsdy56IS8g;UY}pwS+gs6*oI#so zh9LONaLnayu@K3M?S?;EIk zULidx+(YRSmDCe|lFUv@p(`o~1)?*uYnr*soWcV6_gK$4 zVn23fEa)Y5BOQ3O>EJY3qj+(ZqcJCQ5Fd1v{bN%Q8z_ZGgUr5BeMXl} zED*DJG7RGV(X3&K`B}c`sx71NJoX5(6W8WS2s?W&(z`VeDcHS8Zc{sFPG;#D~4TUSpVUwu^l)U+Q z^Fb8{*zMDxbORG)$8%Td4jCI1AaRur7Oagz=2-rjyCQ{q3nUP~Ius|W)Irrc6l$Y^ z0|CP@n)?EimWiX1a|A}Nzp2W*k+g<;q2;9q_dFD_C`}YwCK}<);1qU4^JkCGIJ2aK zA@@QBzbw)qUoaJ$12!Vf-Uio9ci?O{yEjuFk=zoH!?B?}+9`Jzqwvm}`n=8A{+rLpvF5_}3c zyX!m@ZOn_*yUO|KIW<(tOn4QI9B6jxqsYt++9&qW!j#vvxt=-E3Kr0P`H$Ka{*wLF zZd!Rz5uqo1kt$~b=Qbs3GxNoUUOAlQdv!sj0n!gM`+9j6HQWhdX2o5~cxi{M(gWlq zIR#o*w$Q=3cIa$A$9|Ay^yV@0Zp=9dKj;~pBae4n8I=(po z2Aq8ySId4a=KcNR^V;zTS}2=s2CHuFnDTsc>ghUC-M601x3lF=9u*Gn-DhbZxe z6VCh9(bVBOJe#bies5c-kMAO(Q0{pA&Za$wRq$kB6g1-b`JnfMTBe(#Uic!N?=`@E z1y2Onc9Gc9Q&ceR13l0-N6quQwEnUN(q6`Ko_!9kO7f0IIXguI z<6<(&$Tl0#cBbOuX9Ktk>vK1|k8UjGyv!9_(6>-jIrF)uuZkQjr{k1n7YS78^KLQ> zozaSjSk5{8-RdZ1mhrF`nbgj_orCk7FmPW3`_60NUYRJi$%>+K>>0Y+>I}1F19&Sn zQ^|t>W+{as<+}!+7q~%;yItkKB_PV3sOOSmaCmKu1(Ma&EX+Jz{X4X3b`q`|Oh$c? zE>ebmub4DJ0~H^VF)K(Id7R@H;JM`7ukR>gR~ACI+C!WfwRXF>*DcFk9z_p0hvXuz zAq*9XJ~(ws4l|>bU|W()p~*@R;(moo)7^?*KF_4j5avvx7IgMs_dU9t*NApBSq!o=|Ps1>r=biQ5rMi6X9)VZcGcoUp5w19ULUgtg zp71X3laeMBeH~z+P)?C&m`j*p%WN?<=I@w6R8XDwm#w6=ivQc0Or$HBU{>Z@G-ywU z_S_~q#~n|v(;f8co)bhWMIad%j3>JKP|=+OInJHkU>~*l)p{x)u8BsK0h-}54t2b% zeBvyOSJUJv^12-^&B?+n^B$^nmf|j7Kb7%)@clU%=B)6!mCxCp2EMq>yD0NJcG%*3 zn=0SbP}+)FczaNl%xr#f4t4|zSBc}-C=GnM(n`ZK4Y2=!0xEcBp+1;JUYR_z-@J>8 z=WK*F?+Xj$(%E_-Q1me$vd_8!EdPGwJpwz8gOp5gr;kGVWFZ7?B_F2deJXZ zu3>*6Gtf0fTWCg>3f3C_B^{nC7ko*C*;9AOI0a*0QaMb89HGLjoQ02>g%&>!%J;S) zfA?5iew0JG%O~Q(ET#-iNC+;%r5BWevfb@j(inG+s{#$S*?So zfkAMZEr`q4FVOUe4tl)*D_P$?Lk2HWAm?a@pI2YgqUnxE|7io2!Zr76@N* zlcHy5k*{|=?60{XwJZYW`SV~d<-y)~*NR&yJa3r#k@99bV{80ad~FVcY4l_gR9u8R z)73F(xCYf(hsfH(261;db6a0X_Cu3N?r0ix3ir|$9X-C=2*P>+XXiK@Q?yMV(}Odq zBch-DD_>H}k?M+pqk?cY@#7wR0Hg)`=~DI)dta{+$H-~*CKz3qNFRSMfr+UI&pp&o6jDH{r$q4I zU!IqZ7>aA*%smP9R*`DBBFvRX1@wr>|dgZ@U@qHWn2wDdNR&@wwLcNJ$g_6jO| zLHey)N`T~F)-N*+V)B9q2S@4Yh^cXo5NWl3`Id>30QZV;Egicm7v)T$S zr=>Axge`o-vMI>&Asu~MPhC(h3_)_JtjLu-ixJbZT4;~3&w#W6KvCYNe=4; zF*uI-4)(|CoPY`Xt##lX5Q}M-?^A)sDqO4Kv;8$qL<$dsq-{6`+#WK&)(z&oEAkAB zsW^Up1(d5f*FNaX{yYh!@ZImb|5J+4yhn3x{vor^Kj`=cq8nH5lD*0%dgsrX$Unod zpYMN-x3p+r37b=QaUU;721_PQK<6Y4RB!xAOFA{7ug6{Xo(nXq;3)Ib*I}TO`=#r~ zV&C_Xxa;qQ#pj>UM$S7&GiSiaSq*T6rX8AZ(A%VUS-7(etl^PG`0 zW#xf9mm0?R;|%6dbH*@g>o2;={kG2DF_g#s`TzKwRmWbbxb$@}xEMzlebT6vzkU(r z_jD^+9zMO_sD*Rc`*YrqrRQcGXQoT!)qT{-`6SoVfv_x##jO;c@&5fvPEl46i(QSE zTRibMHxj-1%+a=spwn9gAQ+?stHmGbW0ouYzp(4q{66Ky4#y5=ml|9dj|=mdn;Tur zZfDLf&X@&<0$;S`ti?9|z9sQ4v7^Whs+LlvN6u7I#QUr4i0;u^iD zuAGZ>g4qmnKMmn*k}F=Hxk*+2l3~=J%$lLkD%f z^?+_t8S~V(qkp+3Hec|Cj&cxG$1-Cio9E|`&e4t(>Z|P9~UYa{+D1vvW zp=p9KluojrdzuJ>EbOpz)=JpE9s;i=y%bS577d(7E_PJmzQb@hL=MH`Zq7$PHABQ7 ze=OG1_HlrO#gAldeuW_${*rA z0H3$p=BiQK2|M;mnxMz$66N=2^Nx5W)m1&DFGpOl;d}(%UU*IZM(QZ~p^9AQfq%Ae zLcsyrF$DiU)lz3t#6%XG}6Fw&*nL7*ObEo6P_Z;pkJti;COdI&Qq2{M0x`J)-Y^6EY z+VHbTdyqc+*U}fOiOdeM!Hu745Tz=zeQA#Y&a96tVW-+PNi5*bZbK>m|MhlQ_;m$d zO3LAU-5Xl=ObVx;aleoqW;5AKBqw#9assZ9`EeUGmENu}6}H5F-$*no2*K-{B(}&I zVX>(w|9TlTX>Kw}Zrwu7Qr7t1yMT7hWUim27JN?gebH$ zz-J2nWx`Al3+QjmpuA-^cwPF1#urb+tUOTWK54k_FQ)Nnc1ZCP$J68Dm~YHEj$CFM z@a&_NJ7u1lns|Nh2^|dTrwraho1R%p)_>XIz<0rs?37Jg{DGq0^B#RfE)C2Lg5X_u zxXw9FpJ+3=Y-bO519wFZw$qmdsd)Hr2<*LIQ_a6A7`K;mO!Mtv5b2CboH;z}#k0M% zXtbTNM_4r9pLtfes?`_Q>XgxU-2&S#w336N2(mYFw?TXiq??MNa9@gjWydIl=fCSq z`)NA!D?)a2CdjRq;$-t_QkWlFnCH;@wVru%?x^xQLSJ2@FwOfWrT^=u1ED7=<8>0Y zF#Y^xF1kNvEL@kb3+H5*d-b?ONw6SufK2k{^Z&$X_wyBQLkGW1iw=BghNhLgx z93UMRIV_7(gSyvrm>V6akJFt1S4aWQ)3mSRJj0{)u3qe&im7;z~a`Ml$CY79fW zuvfraun}&#PE?FK+m4DKWe}e|E_2v(B>!|H0S%COgi2eOQK;L z^REuXV*&qt3=Z1CrQ!>jmb{_zrLj=6<{2o@?#c&}@GPa9W;{#aKhGRA%sfRGlzYf- znjk2L-?O%RssHRyn0mXgJC5CH54_Nzu^6k}ib><5H%{E1ge(=N)-&K1a@vM!?d1J@;z* zXq+;FXkBG&3BP0cGzPwiA>^t(N$*w?ADP+*_lF0NawB{?}wfZ9fi|h z1rh96NGjfO6d=esc9|3m&)h=&z8#eLc@Ac!v=;w;N(+oeo5p+k0b?FYG6sq~?lO)P5!u+pM-z`)oaAZoNjoZ#<;YVPW{r z_q~@Fow2qw1{t%xaAKSm^AEVQ(80MHbLO+g+e5;$g9>GtBzUV!Z~?7E8u+RmC;D(v4xY?4A}Ke#g9g1c=c@|$7ar4_njqy zIBAS7o(GGK?AUf>W+2bH0+``yq3(d8U(%_7^Ey56pU^L{=_t;chAEjf6!=CTSLVN@ z=}Hn1YlwpV_b0lQ2y!*d!$k^HGJLO*x{(cQPYsEN&;PK}=&XHkUCw z=%pE6>oa%mV+amvUZOOgW$N4N@WzNrw_lxj3Q2`zgFVl(w zXQ(K0@5k*U8D##Y=ge}d+I)=iMMmRM?{c0~^BjJ=5qBaE)04AnFmIXwa#f`fH=j9l z>=>QxJrS!<8N&Tp0QGYZD0KaH8f7`3q^KiBb)!e4^u=&^`CWgAkXOzN> ztk@V|oGj;=$;DtQivLk@$c1~`*`iomI0R$#qVP**1WZT!W9&BWZ_HQ3(2t97!+`tm zo}N%GZ6u{l`P7%Kg_4*)>Xay>RaRbT%rXpRI zeN`vV(8^X9cJVnP>Pa!v4C@nkX0zA=59|x+&Y__YQ&|QF zS$z!55I|l5cX73uM`f&o{jH|xR2N2b)?DZ;yiOr;%*i_NoRW4k_ubAMf_``D)>9K4 z{AmKWrchinV}9$$U(`IihdP53>Cx?B80{>J*5QK4zLY^q5gW<=K{iT`G}F9K4V2Q& z=bZUVAa+3*j}A6c%v}}iT$4j07ou>qVh9{A{UYbPL{;yKXqoa9=q+s~OXia9Nf?3g zlZN8Ymz@B*}#^cg&7})VshUNdhp#B7X}45*J_B!1MDKypNkcdWmvxD2fIZ^ z;M0|6DjM;WIm6PJ#ZF}R`H5IFmy`F&5>VS;#O`Ee+&d(P_$SOB$O*$`S@sZ5RfC)B zBdXikP8oSo2;Odj%ze{w|7kOI2+YR8ZOn?7;;-YtJS^dzzzfdj+?nu;xi_M)6%0hu zmZ!8@XF7%zeW#kxoLE}jV<<}O$!%QDtBaI+$D}@`gxF0OVd$_T0$w!EvR|9GY$$Cq&e}2;GJr>Lv z7Q{Ht-E27ep+dpp6z#JSg7#w0Y3nzU%B(>u5#c?xJo9+A{-M_*Hqh8+fvRyX%(*tj z)si*PJ0AvFNTX6^COI(oGcL&kxjmzC;Ikp3J}YCQ9rK}gh(U)tcspXpahFaX^*#Pb zIFJlaeRdqSM`6|ezjXIH&mHP#;Ys>FI<&}u9HLt2q$kf>MMhx<-yJ&(PE+}#G-S=a zMo0NP>M&dg$r9qc53}N|UkwR_e5lBX?VyvpIRnLKiDlP&X-fvr@K2k=q%0C0x_z`= zt%jZtSHLP6_EJAh#$ahUT=V-$djtEZ`{W_Anwd%hi%BE>5}k4wkKLtC=oHjOPIEf% zk@G22sgdprlu)#cATIvntmh?t+<0LQKi3@;!Th_Q-=t7|_a}YSxmq!P{1s+CsG-_Q z2CgP+(cZb4S^_y&{Ggg7{N-_Ktr_(j%HUl7cg_+$rKBuDNFV2J*~cxgo8gKRr#VkQ zUK=VpzQ`Ewij5y!PC+QGu}e zW`K6l=d>X_0GAWLP@c-ziZquEBrcE+m64YyFUka};k0z)Yb?w)}S#|@F5+kNXC_w9XxN@P)!LvoTu`7 zL<-8z7>MmATkd1mmvWauWCUbA9dJ?D2=B+Nq(yz*wEbok*$?U=y`hOJ76-u~teFOQ zAFy7J^Rq^ASkAxa!FRkfu}k9aAbV*pXH)9UVs^`ogpUFDG*1^(^rUSRlox=nn#{va zQ^Lu6>?voacFXt4>_uR{Lyr>nRD|Q-#466V`Lkn%`NS{z8Mti~RbI45aa}K^@Oz=k zi~E~`@2U5_5B6BDW(MG2I^3j#F?@&IamN$c9d6L?%Er6wE|TDP(_&422J&Z2EYJ=4 zueg)zX+j#myXcRkGcM`7K;a;t+f;LDP3vR2H$evbjRUc0P9*M4n22PBUK%#;4fQJg zq=DpaGM~(jqA5<0JIO2!mz&&)oC1NovB+wyBg1Y@!~`|bZ@Uyy>e0mR$Ce2A9)P_6 zm_?(eNIReNb0Sd#x(?P5onU}RihO2qSA!qtk{*~2$F1l5?boxu{U1~XV|r6 z*vFii!C&+?!5pLhdST7#SXw`65-sJp>73x&J?*jq-Kj5%+*bwbBxlLGh?Vr9oK$* zqs2%3`JFb7KC`R3>##gljG0g4vrVD$I*K+wJWHt>Dm)*}rA~bfoLiQJ3M{}t9nbvY z^9uloLQAJz=JceZgJL>hTxtWd!BkUdo|>HF*-lsfz)l~xSUNAB&U zZtbU@E6nV#Q-W8|Q24v(@z?)^a=6Q?a#0>bTmlezIvV}nv+$;SI)->~hL&?kMp^3U z6waW-uh>5>x0r63cw!85I1P3UhfwkZve>VS1I(6JI$udOey>RUXDDupaRvcTX|!uO z1j}X7tIqksc}uY2$`FVRw?l4>Dq?@WC9!#NXxedxY+~3a8!m%{@OSiz^ASIn{-C4m z!Yz{1$3ZPVzok88UZ4qk=0+gq<6OdzJ2dS>IR0`ztzOv%q2_v!Nm0PcQAy|w(glh9 zq!q~;J#*;JF?0_H@!`0z}vm7eZ3 z!&H5DFq|Ftc)TK^Ylciq<|B$)L&RDNUu62(ZS9I7-02qxVRv(J3L;)8;-bnA`pfyD zTSohFygCF@^~}#qki_O=hRo7ms5dFiPVk zWmuk}T|YQCxO6mn_+FM)d7930u4mw?4yK;E!RMlN^nCSk3gCJF?C!N>q~d~Km!Hrr zJN8;n;r!dg?POo951aSfIb*Yw87HSmLxVl-;%m?~qnnH~2FNQ!j~)ducZ;8~KDYU< zQER|F@3~|e#2n)7gOs9VhDG)JXum!?J=3+&meEH0Zph;PVKGd(Zbu3w~OqC4nMInN|-I-tXU5*AeXf<~vZPqd3lWKHnby@K3@ zhQm=I82UG~@S6Lm#m9W`{M=K@$X`HN&NFGFj3*lPnMED-oDAyB@Lf|1=c`rmc*cjQ+QrCeB>GO6DQPD0VZ!c_9M?{1=OIK~I<(Z>Bg?Lnx?a)5gF_7}q@& z-JJI^ovn+0+jz){pQqEDZMWin(=wlQ{;X$W{_!YiP4tDwC}rG`_oT}&chcoVD^x{{ zL1Q|zK<)q0u$_yM60C>piEX4H+)Adx6(lyQiFTR|(A}VF3Yub$X`_vhU89Q`Q}v;% zl!)mCt<)nUg=b%^vF>aS9TK(0TF$Tr2fLtg;T4)GwjM_JqUbgMEbVvVGpnN$LLbU8 z&o7nkh-<_8!AOKmFQwWaJ1|eFn(mf-pqVq7Q+?tYWjtdap@;#ySnQzjz=bxnilO7< zNeD@8B+UdP1e_Mb=p!?@bT z*AOW4eCe6K4J6-*BhT_YiC^Ko+~y~A=&&Q)J9&0D>lGFMafY1FO41OuM5QP1b-&D@ zN%6C}8?KKX(IqtT$#BSv?Sn|dI*8wt#lqi)Xq@grRg-ys&-XwtF$-K#84maF?3*3q ziK?;|y2@ELwK>0O|Ci-x-_L(OGYM?0h=%c59qdV4N88?5A=0s)p8i{e_cdimTJC@c zTljMvISLlvhw!~f9wzlc@G7*%1fx;hDK_AJ?GS94)I<*}0#TZ@1PTT+&=y{Un-1KW zv-QT@j8rOV5kk$^E;8lZ#J(8zkfmKC=Q-gp;k;n!pGaiw*FwUFtK{%&5gyrDV8%f+ zj0xIH)`i0mlh{W;-uUtS-SPj=X9e!rYF3WHtu)>v`J3a~fD#(cEk^|3!+ZGay?@1r zbH`&aMpGCLA|i;o&wj(Aao7-8Mvf8e6jv68`ARi>WDeb;qNjBI*mPXH!QICDYe`^4 z5fx{0*42sUwY+3P|P2P-`8tM%Y76IuKuNvd~HaNUyH@;etw)Ifw~tzsc_^s@;uC5%&TX~MrI;v z$2h?1lQ6b;AMn_a6$brBaqwGSK>bTmvG6Rv@0njw-0BYdMr-a>gri~I3#yjtqERjT zsC_Tb^_6w7m)Z6O4V-tc*2f9`b}ElBM&ev%zZXeClY3ydr@p0v;k)Q%+6<`82**xA zS@a*4V>k12YS`aTvqvT&^UX){qvfP%u8!3_8@zFSC=%42Fiv0@o_*&m&-rn9#5=st zTKZ_XnS$Isv6LIexr|fu$=Cf02|V_Pvo+^F2al1!6z`j3*NWh5q$7&Qa*t=JC!#&o zaV%#ieH+3Zlfhyt>KKJzmfU$scu68Fc!u5FN5;3~VGx&&=KOXV$!F}v3x{K?t0(p; z8sko{BJRFY#yLJ)Mn~{xu~Hq4dp}dLh%ef`RuG2rykp}M?3f*mnWr97_WlKU#(As- zYEisj=Naxd3l!}7LB2dgQ?u(M7tJl~Bjp{DGWR%NPUp_!JlL#aFO?T(DQbCM%5EYb zWjADScT6i<7#_plQO2$g%H_;Y3-5Sh*$@3=suM=N@x=0uWss= z-#-Sk*Kls##D;T7P1KVTjiW36(U^HvRKH3R`6`Ru8Xn_bIDqd^XDHT@bAlCO3iF1V)x8?rSEiobt@(F?(%c&9y-Om zj|jt0G>7kk>)VWQQ~feMmdv7-@D2R@4?+Cy8x+7G0doP5pYhxaAT8X^$l6Vl0HaqOtM$ zA9{5}0vhLd2D3v3Z?`?Bxu@Ncb43!py3CC$@PN0XBY~s(Y0^X~MVGegvHG_=dkUtqYMLpE)a+16k zf1{vdd+D{`2xxtmLm|&wRwewQ{B{v+zhi+MDSbTbU(d5|350ACr^H2iC|u2sZ8dp( zF`5X)kb`taHHq#?b9X)VCY|KjQV`!6l=K}C!*}tvgJPba6%-0;zOBNq%2&fP37T~AkR zn@D*=D9M#p+Gjq69#rq43!=;k3Sd6N`myj+aKr?a>r_8I0M-2Gs_iz1k6Zx> zbuepHW(qWBMIa}A3PkqI#-Xzn%ro|Z^HFnHtjQ&5p$1awaD*!}!#w4K(D>hQSna>f zXFN~*_;j51a;d=JQ9f1QH# z6tVKMG4|D2V8XcZ&@W=1=M*Dsn->Vthh|u{s(|u57Qp8B8rtj7O{c$FWBXb&Eat5J z$&3Q*DM&@arsI@S^@z4;F`wX*K3)uwflAE{{4ou~>9+yUONvL5Ju z>GFONY}2qkG(x2*soj9Y{gF>?J%3WN=DM$+2T9Uht&IOB;IWE%3$IdQ@!*0wechai!8?;M@|zC4o~!{T^JgJ+DwHO&1246V zwnQ4kV?hgzUB#@J%uZ@)5W;@d33%S^iVsKKa4jJb2`AU1TTB>^ZYxoBJPp00nU@{H z+&0r3iv9M1jGd;!AUOgilAVP6!E|0u6ip4X@La_+_L^Q2uTDgI;AAX+I~}twXfuoX zKMJkviAP^?WMB!gdqs+VZ)|cr+T!^r5!I4}uFNQKiNVx9h%e z*kO++o4paXx0D9LnMGxx1<5JTX;n1))?ZHJz5g!q9T|%j<`5UoVrOR0ASt|+LtN5y z4Bm3V0+*#2)K`Q3N@kz!+Da#DM4;+Dizc}RJj5I8_Z9ue5g9g~D!W7sxL!sMYsczrvaT0IYwivCdOaXzT=~Sd&{Y_20?^>V9XV;OQ zXo+5q!|WXlsb#mj5__Vvn3-2*hcB1-XQkXv^Z4_)XHE`Ku^RoCcz!y<5V7CIneFER z@hX2L;2On5eWF`aT+vI4D3!B@vG5~$%)7Z>Jz@OSlf#7z1C%FYiw@0~biVToDSQF- zU1Qf=PKPYSloq&6gwD*a}N@r6EBg5c06aECtTI zb5`Vzng-%(|D%_@kGQj42Bvl|NIf+MB3&zxFq5++I|^`a)+E#(u)xM&e6~O72wlH& ziZNRS|6QiI^6DsAj*G&e;wuXNv$6JSw+O`e{kuzD83ogHIUi+#Gja9f8Bx?uUeJ+Dx-0@iAeu*H=&5|hu6p0qgbScYI^_fc|dVHcv+Ws2{#!sp<_w3{Rl9oJ56mql^% z$YXLXV=t;1`^GclYwV*X@MV_*7JKpDv7GNCTQcCVi+!M-GN?Z+_jw zEu{~MZEHxF_vk}=CgJn^4%!owg}hDIC}f>7hW+7u)pT|asd4tlM;=<<({a{B3BnkQ zm+3rnTBwW_57{X&g}qF(crJf43%_nIMZAs}qL?EsyFnNO=cIX`@{pE^c;H5a279-e zDSFii?|$*zinGP%HW}mbB+mQr-7PbrozCX$qaM!3os^fu1KyEu^L@iTF)=*K(Lhs% zHl&W7Bb6ENsPOMFlvo;KJTnuYc`0MpxtH|tcN1j={G!%iKBqkzkKLF1=={y`CL8lK9Dcw>9fR@Y=~9>mCGR?8}AN@Lram5n~}9 zJ_`v3Mkt;3llnI~V1LXKQt;Qpf@6VrSHqnJ5na?|rQ_1x7qqKU1(l^!V9)bo)x#I) zKjv4ho<0>~{?nkmfV1-fEo9eKL>6m@qI;?~O1VdR$W#g5?d(HH3`BCg33^9xc8U1} zQQMih5MjaHbTQa`9|6VtF7SPSk{(_@Ouw5X@al6Wo(lY;F{4D_HW_4nM-}IP8{+Nl zR(i{GA<+`<^_Kmkb@tlm<1F8bWGASy_esEo=giC`IdD`RQ5%Ed<@1?74d=OVJ>QYt zPLREY2bqlZ#+}4b&|w#2O#d^=Tds=K^V49nH5Dh?CD7Wz&(2nLtX?${=Z=1&O?nQz z_a2JqGILyeHU{VB&%tcYpm}+-Uv$hU46ac|++Z!aA2LSj4eqY<`N`SX3yXVC)87Xf z7|dQytN)Xv$pxQj;HwVYg`MEl!ux7#ZCpxiqsBt!e;*Wq;VB(>ta(gTB?cJXoyi%| zHhR!&jjmhzoWuD@{|+cKyFdyNX^G6F_r*Q2Pn2V>0~c#uOxUT2g?o5zdeDo#CVZAp z+eFc^?0_p4!TYJ44ai}?jjudHm~Sg7HWZ7}%po#X6LKFv(Ve52WG$)>$vcTC3Xnj{ zO7>W8kjBF5UaH7GKr+IgNK;1`KdbhV+_Y{wxl0fS9t~28WE`1&TL{b7%GmjnbKuG% zwQ2A5(Hyc2eaEw@{)HK)pVEWOmmd1YjDCAn6I4guq77MMkX=5UjGI;=wxWcpC1oKs zVk-@~?}X6NYFKP@l2X;exreTZS##y_Q_=xT>fh0YwJPWcc}88Kqaju*j;}kU@Qia! zVrTfjy-@+_w$`XwX@-iq9rW%r^HQ>QQ->kERhuXuv z-UmUv%Wx`ZF5K`1_%is13OW0Gb=pQqOY?qV?I(&H9LJdwDXe=bi}?jYu;R~kxHF%} z-u@sB&dx>JH`ARLd@l|?Pq&*^(WN#sq{r&uPTfDMxy>xmSPSG<%0h;-v%43lV@~4* zdQi&zpF%HW`?_(C${nd~@|aZ^MrpBeFyLNaOM?#n%0D0tiPKc+IRd_GS7Y&hVeFh_ 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

S-8W(AGz@`7!kptgx#zjsL<=wJ~J+lBMQ~e;o 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 diff --git a/rwkv/rwkv_cpp_shared_library.py b/rwkv/rwkv_cpp_shared_library.py index 85ab0e65..9dc5da5b 100644 --- a/rwkv/rwkv_cpp_shared_library.py +++ b/rwkv/rwkv_cpp_shared_library.py @@ -192,13 +192,17 @@ def load_rwkv_shared_library() -> RWKVSharedLibrary: else: file_name = 'librwkv.so' + repo_root_dir: pathlib.Path = pathlib.Path(os.path.abspath(__file__)).parent.parent + paths = [ # If we are in "rwkv" directory f'../bin/Release/{file_name}', # If we are in repo root directory f'bin/Release/{file_name}', + # Search relative to this file + str(repo_root_dir / 'bin' / 'Release' / file_name), # Fallback - pathlib.Path(os.path.abspath(__file__)).parent.parent / file_name + str(repo_root_dir / file_name) ] for path in paths: From 85db23c7dec5ae4f9f8af53fa0ffb1f10db480b7 Mon Sep 17 00:00:00 2001 From: saharNooby Date: Sat, 8 Apr 2023 10:41:16 +0400 Subject: [PATCH 10/11] Add script that measures perplexity --- rwkv/measure_pexplexity.py | 100 +++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 rwkv/measure_pexplexity.py diff --git a/rwkv/measure_pexplexity.py b/rwkv/measure_pexplexity.py new file mode 100644 index 00000000..a2a0e2cd --- /dev/null +++ b/rwkv/measure_pexplexity.py @@ -0,0 +1,100 @@ +# Measures perplexity and per-token latency of an RWKV model on a given text file. +# Perplexity is defined here as exp() of average cross-entropy loss. +# Usage: python measure_pexplexity.py C:\rwkv.cpp-169M.bin C:\text.txt 1024 + +import os +import time +import pathlib +import argparse +import tokenizers +import torch +import rwkv_cpp_model +import rwkv_cpp_shared_library +from typing import List + +def parse_args(): + parser = argparse.ArgumentParser(description='Measure perplexity and per-token latency of an RWKV model on a given text file') + parser.add_argument('model_path', help='Path to model checkpoint file') + parser.add_argument('text_path', help='Path to text file in UTF-8 encoding') + parser.add_argument('ignore_first_n_tokens', help='How many tokens should be skipped before loss is measured', type=int, default=1024) + return parser.parse_args() + +args = parse_args() + +# --- + +print('Loading 20B tokenizer') +tokenizer_path: pathlib.Path = pathlib.Path(os.path.abspath(__file__)).parent / '20B_tokenizer.json' +tokenizer: tokenizers.Tokenizer = tokenizers.Tokenizer.from_file(str(tokenizer_path)) + +print('Loading text') +text: str = open(args.text_path, encoding='utf-8').read() +tokens: List[int] = tokenizer.encode(text).ids +token_count: int = len(tokens) +print(f'{token_count} tokens in the text') + +assert token_count - args.ignore_first_n_tokens > 1, 'Need at least 2 tokens for evaluation' + +# --- + +def format_loss(loss: torch.Tensor) -> str: + return str(['%.3f' % (loss[i].item(),) for i in range(len(loss))]).replace('\'', '')[1:-1] + +def format_loss_with_perplexity(loss: torch.Tensor) -> str: + return f'loss [{format_loss(loss)}], perplexity {"%.3f" % (torch.exp(loss[0]).item(),)}' + +# --- + +model: rwkv_cpp_model.RWKVModel = rwkv_cpp_model.RWKVModel( + rwkv_cpp_shared_library.load_rwkv_shared_library(), + args.model_path +) + +logits, state = None, None + +loss_sum: torch.Tensor = torch.tensor([0.0]) +loss_count: int = 0 + +start: float = time.time() + +run_count: int = token_count - 1 + +for i in range(run_count): + token: int = tokens[i] + target: int = tokens[i + 1] + + logits, state = model.eval(token, state, state, logits) + + if args.ignore_first_n_tokens == 0 or i + 1 >= args.ignore_first_n_tokens: + losses = torch.tensor([ + torch.nn.functional.cross_entropy(logits, torch.tensor(target, dtype=torch.long), reduction='none').item() + ]) + + loss_sum += losses + loss_count += 1 + + if i % 10 == 0: + avg_loss_so_far = loss_sum / loss_count + + duration: float = time.time() - start + duration_per_token: float = duration / (i + 1) + runs_remaining: int = run_count - i - 1 + duration_remaining: int = int(runs_remaining * duration_per_token) + + print(f'Token #{i}/{token_count}, ' + f'{int(100.0 * i / token_count)}%, ' + f'ETA {duration_remaining // 60} m {duration_remaining % 60} s', end='') + + if loss_count > 0: + print(f', averages so far: {format_loss_with_perplexity(avg_loss_so_far)}') + else: + print() + +print() +print(f'Average latency: {int((time.time() - start) * 1000 / run_count)} ms per token') + +print() +print(f'Model: {os.path.basename(args.model_path)}, ' + f'data: {os.path.basename(args.text_path)} with {token_count} tokens, ' + f'skipped {args.ignore_first_n_tokens} tokens, ' + f'averages: {format_loss_with_perplexity(loss_sum / loss_count)}') From 874826cb20d5d65045514dc091d6df0bd79fbb1c Mon Sep 17 00:00:00 2001 From: saharNooby Date: Sat, 8 Apr 2023 10:45:42 +0400 Subject: [PATCH 11/11] Update README.md --- README.md | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index a3ed3319..e709bd63 100644 --- a/README.md +++ b/README.md @@ -10,9 +10,10 @@ This project provides [a C library rwkv.h](rwkv.h) and [a convinient Python wrap **TODO (contributions welcome!)**: -1. Measure latency and perplexity of different model sizes (169M to 14B) and data types (FP32, FP16, Q4_0, Q4_1, Q4_1_O) -2. Test on Linux (including Colab) and MacOS -3. Make required memory calculation more robust (see #4) +1. Optimize AVX2 implementation of `Q4_1_O` matmul — currently, it is as slow as `FP32` +2. Measure latency and perplexity of different model sizes (169M to 14B) and data types (`FP32`, `FP16`, `Q4_0`, `Q4_1`, `Q4_1_O`) +3. Test on Linux (including Colab) and MacOS +4. Make required memory calculation more robust (see [#4](https://github.com/saharNooby/rwkv.cpp/issues/4)) ## How to use @@ -88,9 +89,9 @@ python rwkv/quantize.py ~/Downloads/rwkv.cpp-169M.bin ~/Downloads/rwkv.cpp-169M- Formats available: -- `4`: `Q4_1_O`, preserves outliers, best quality, very slow (as FP32). -- `3`: `Q4_1`, preserves range, poor quality, very fast (as FP16). -- `2`: `Q4_0`, worst quality, moderately fast (between FP16 and FP32). +- `4`: `Q4_1_O`, best quality, very slow (as `FP32`). +- `3`: `Q4_1`, poor quality, very fast (as `FP16`). +- `2`: `Q4_0`, worst quality, breaks larger models, moderately fast (between `FP16` and `FP32`). ### 4. Run the model