Minima-KV: περισσότερη μνήμη για long-context AI χωρίς διαγραφή του παλιού context

Το Minima-KV συμπιέζει την KV cache χωρίς διαγραφή παλιού context. Τι έδειξαν οι μετρήσεις μνήμης, ποιότητας και throughput στο long-context AI.

Отговор първо: Το Minima-KV προτείνει συμπίεση της KV cache χωρίς να διαγράφει τις παλιές σελίδες ενός ενεργού request: κρατά τις πρόσφατες και προστατευμένες σε FP8 και μεταφέρει τις υπόλοιπες σε TQ3. Η μελέτη δείχνει ουσιαστικό όφελος μνήμης, αλλά δεν αποδεικνύει ακόμη καθολική ισοδυναμία ποιότητας ή ταχύτητας.

Το Minima-KV συμπιέζει την KV cache χωρίς διαγραφή παλιού context. Τι έδειξαν οι μετρήσεις μνήμης, ποιότητας και throughput στο long-context AI.

Όσο μεγαλώνει το context window ενός μοντέλου, αυξάνεται και η μνήμη που χρειάζεται για να διατηρεί τα keys και values των προηγούμενων tokens. Η εργασία Minima-KV: Retention-Preserving KV Cache Compression with Mixed-Format Paged Attention προτείνει μια τριών επιπέδων αρχιτεκτονική που συμπιέζει το παλιότερο state χωρίς να το αφαιρεί από το ενεργό αίτημα.

Η ιδέα είναι σημαντική για εφαρμογές που επεξεργάζονται μεγάλα εταιρικά έγγραφα, εκτεταμένες βάσεις γνώσης, code repositories ή μακρές ακολουθίες ενεργειών. Δεν αρκεί όμως να διαβάσουμε έναν λόγο συμπίεσης και να τον μετατρέψουμε απευθείας σε υπόσχεση για περισσότερους χρήστες. Η μελέτη χωρίζει συνειδητά τα στοιχεία για μνήμη, ποιότητα, direct decode και prefix reuse σε διαφορετικά profiles.

Съдържание

Γιατί η KV cache γίνεται εμπόδιο στο long-context AI

Στην αυτοπαλίνδρομη παραγωγή, το μοντέλο κρατά τα keys και values των προηγούμενων tokens ώστε να μην υπολογίζει ξανά ολόκληρο το ιστορικό σε κάθε νέο βήμα. Η εξοικονόμηση υπολογισμού έχει κόστος μνήμης: το μέγεθος της KV cache αυξάνεται μαζί με το μήκος του context, το πλήθος των ενεργών requests, τα attention layers, τα KV heads και τη διάσταση κάθε head.

Στο Qwen3.6-27B της μελέτης, 16 από τα 64 language layers χρησιμοποιούν full attention και τα υπόλοιπα Gated DeltaNet. Ακόμη και σε αυτή την υβριδική αρχιτεκτονική, το attention KV payload υπολογίζεται σε 64 KiB ανά live token για BF16 και 32 KiB για FP8. Αυτό σημαίνει 2 GiB ή 1 GiB αντίστοιχα για ακολουθία 32K tokens, πριν προστεθούν weights, recurrent state, allocator reserve, scratch και άλλες απαιτήσεις του runtime.

Το PagedAttention μειώνει τον κατακερματισμό και επιτρέπει σε KV blocks να βρίσκονται σε μη συνεχόμενες φυσικές θέσεις, αλλά δεν συμπιέζει από μόνο του τα δεδομένα κάθε block. Η διαφορά έχει πρακτική σημασία: άλλο η καλύτερη διαχείριση του διαθέσιμου χώρου και άλλο η μείωση των bytes που καταλαμβάνει η ίδια πληροφορία. Για το γιατί το μεγάλο context δεν ισοδυναμεί αυτομάτως με αξιόπιστη ανάκληση, χρήσιμο συμπλήρωμα είναι η ανάλυση του PredicateLongBench.

Paging

Το PagedAttention οργανώνει την KV cache σε blocks και περιορίζει τη σπατάλη από κατακερματισμό και δεσμεύσεις μέγιστου μήκους.

LayoutAllocation

Compression

Το Minima-KV αλλάζει τη φυσική αναπαράσταση παλιότερων σελίδων από FP8 σε TQ3 ώστε να μειώσει τα bytes της ενεργής cache.

FP8TQ3

Eviction

Η διαγραφή κρατά μόνο επιλεγμένο state. Ελευθερώνει χώρο, αλλά μια σελίδα που απομακρύνθηκε δεν μπορεί να ανακτηθεί από την KV cache.

Sparse stateIrreversible

Recent, Anchor και Stale: η ιεραρχία του Minima-KV

Το Minima-KV χωρίζει τις ενεργές σελίδες σε τρία tiers. Οι Recent είναι οι πιο πρόσφατες και παραμένουν σε FP8 για να προστατεύεται το τρέχον μέρος της παραγωγής. Οι Anchor είναι παλιότερες αλλά κρίσιμες σελίδες, όπως system instructions, αρχικά attention sinks, ανακτημένα τεκμήρια ή identifiers που πρέπει να διατηρήσουν μεγαλύτερη πιστότητα.

Сайтът Stale σελίδες είναι παλιότερες και εκτός του προστατευμένου budget. Κωδικοποιούνται σε TQ3 με packed τριών bit αναπαράσταση, scales, norm corrections και metadata. Παραμένουν όμως addressable μέσα στο ενεργό request. Αν το controller κρίνει ότι μια Stale σελίδα έγινε ξανά σημαντική, μπορεί να την ανακατασκευάσει σε νέα FP8 σελίδα και να την προαγάγει στο Anchor tier.

Το paper περιγράφει attention scoring για τέτοιες αποφάσεις, αλλά ο μηχανισμός ήταν απενεργοποιημένος στα αξιολογημένα Qwen3.6 profiles. Επομένως είναι μέρος του σχεδιασμού του controller και όχι μετρημένο πλεονέκτημα των δημοσιευμένων αποτελεσμάτων.

Τέσσερα διαφορετικά στοιχεία

Οι αριθμοί δεν προέρχονται από ένα ενιαίο benchmark

Κάθε τιμή ανήκει στο δικό της configuration-bound profile και πρέπει να διαβάζεται μόνο μέσα σε αυτό το scope.

18,3 KiB/tokenOwner-reported deployment aggregate για attention KV ανά live token
3,50×Υπολογισμένη συμπίεση του aggregate έναντι BF16 attention KV
3,625×Active-KV συμπίεση σε ξεχωριστό direct-decode canary
0,9821×Throughput ratio του ίδιου μοναδικού direct pair έναντι control

Τι αλλάζει όταν η συμπίεση δεν διαγράφει το παλιό context

Η έννοια retention-preserving είναι ο πυρήνας της πρότασης. Sparse retention και eviction μπορούν να κρατήσουν μόνο τις θέσεις που θεωρούνται σημαντικές σε μια δεδομένη στιγμή. Αν όμως η προσοχή μετακινηθεί αργότερα σε περιοχή που είχε διαγραφεί, η αντίστοιχη KV πληροφορία δεν υπάρχει πλέον.

Το Minima-KV επιλέγει πιο συντηρητικό συμβιβασμό: για κάθε σελίδα ενός live request διατηρεί ακριβή ή προσεγγιστική αναπαράσταση. Αυτό ταιριάζει σε workloads όπου μια παλιότερη οδηγία, ρήτρα, συνάρτηση ή πηγή μπορεί να γίνει ξανά σημαντική χωρίς προειδοποίηση. Δεν σημαίνει ότι η TQ3 αναπαράσταση είναι ισοδύναμη με την πυκνή cache· σημαίνει ότι αποφεύγεται η μη αναστρέψιμη αφαίρεση της σελίδας.

Η επιλογή εξαρτάται από το failure cost. Σε μια χαμηλού ρίσκου περίληψη ίσως είναι αποδεκτό να αφαιρεθούν λεπτομέρειες. Σε εταιρικά έγγραφα, code analysis ή πολύβημα AI agent, η δυνατότητα επιστροφής σε παλιότερο evidence μπορεί να είναι πιο σημαντική από τη μέγιστη εξοικονόμηση. Η σχετική συζήτηση για μνήμη με provenance αναπτύσσεται και στο ECHO για μνήμη AI agents.

Πώς λειτουργεί το mixed-format attention

Η απλή συμπίεση δεν αρκεί αν κάθε decode πρέπει πρώτα να αποσυμπιέσει ολόκληρη την cache σε ένα πυκνό αντίγραφο. Το Minima-KV χρησιμοποιεί format-specific kernels: ένα branch διαβάζει FP8 σελίδες και ένα άλλο packed TQ3 σελίδες απευθείας καθώς φορτώνονται.

Κάθε branch υπολογίζει μερική κατάσταση attention — μέγιστο score, άθροισμα εκθετικών και κανονικοποιημένο output. Οι καταστάσεις συγχωνεύονται έπειτα με κοινή online-softmax κανονικοποίηση, διατηρώντας τη λογική σειρά των σελίδων και το causal mask. Στο direct canary, η dense shadow cache είχε αποδεσμευτεί, οπότε η συμπίεση δεν ήταν απλώς λογιστικό τέχνασμα πίσω από ένα πλήρες πυκνό αντίγραφο.

Η υλοποίηση χρησιμοποιεί TileLang kernels που μεταγλωττίζονται σε CUDA και καταγράφει route counters και fallbacks. Αυτή η παρατηρησιμότητα είναι ουσιώδης: ένα prompt που έμεινε ολόκληρο σε FP8 δεν θα έπρεπε να παρουσιάζεται ως απόδειξη ότι εκτελέστηκε το TQ3 path. Παρόμοια, ένα γρήγορο kernel microbenchmark χρειάζεται δοκιμή μέσα στο πραγματικό μοντέλο, όπως εξηγεί η ανάλυση για το LLM4LLM και τα end-to-end kernel tests.

Τι έδειξαν οι μετρήσεις μνήμης

Το deployment accounting αναφέρει 18,3 KiB attention KV ανά live token. Με βάση τα 64 KiB του BF16 και τα 32 KiB του FP8 για τη συγκεκριμένη αρχιτεκτονική, η τιμή αντιστοιχεί σε περίπου 3,497× μικρότερο footprint από BF16 και 1,749× από FP8. Στην αναλυτική προβολή για ένα εκατομμύριο live tokens, οι τιμές είναι 61,04 GiB για BF16, 30,52 GiB για FP8 και 17,45 GiB για το σενάριο των 18,3 KiB ανά token.

Οι προβολές δεν είναι ανεξάρτητες μετρήσεις σε κάθε μήκος context. Η διαθέσιμη καταγραφή δεν αναλύει πλήρως το aggregate σε Recent, Anchor και Stale bytes ούτε απομονώνει metadata, scratch, occupancy και context-dependent επιδράσεις. Για τον ίδιο λόγο, ο ιστορικός υπολογισμός 53 resident contexts των 32K με FP8 και 84 με ακριβές σενάριο 3,50× είναι memory ceiling, όχι SLO για 84 ταυτόχρονα decoding requests.

Κανόνας χωρητικότητας

Μην εξισώνετε τον λόγο συμπίεσης με ίσο πολλαπλασιασμό χρηστών

Μετρήστε χωριστά live KV bytes, συνολικό HBM, admission rate, queue time, TTFT, inter-token latency και ποιότητα. Τα weights, το recurrent state, το scratch, ο scheduler και το προσφερόμενο φορτίο παραμένουν ανεξάρτητοι περιορισμοί.

Ποιότητα: μικρές αποκλίσεις, όχι γενικό «χωρίς απώλειες»

Το quality profile χρησιμοποιεί dynamic retiering, κάνει materialization των TQ3 σελίδων πριν από το attention και έχει απενεργοποιημένο attention scoring. Στις οκτώ RULER needle-in-a-haystack εργασίες, με 32 παραδείγματα ανά task και μήκος, το Minima-KV ισοφάρισε το dense control στα 16K. Στα 8K βελτίωσε το task-macro score κατά 0,20 ποσοστιαίες μονάδες, ενώ στα 4K υποχώρησε κατά 0,90 μονάδες.

Στο LongBench v2, πάνω στο ίδιο σύνολο 503 ερωτήσεων, οι αποκλίσεις ήταν −0,80 ποσοστιαίες μονάδες στα 16K, −0,60 στα 32K και −0,40 στα 64K. Δεν δίνονται paired-bootstrap confidence intervals ούτε προκαθορισμένο non-inferiority margin. Το σωστό συμπέρασμα είναι ότι οι αποκλίσεις έμειναν μικρές στα συγκεκριμένα tests, όχι ότι η τεχνική είναι γενικά lossless.

Μια ομάδα παραγωγής χρειάζεται δικό της evaluation σε γλώσσες, έγγραφα και failure modes που αντιστοιχούν στην εφαρμογή της. Για εταιρικά συστήματα αναζήτησης, για παράδειγμα, η τελική μέτρηση πρέπει να περιλαμβάνει retrieval, grounded answer quality και behavior σε απομακρυσμένα σημεία του context — όχι μόνο ένα μέσο benchmark score. Το ίδιο κριτήριο workload-specific validation εμφανίζεται και στην ανάλυση για Semantic Compression Trees στο RAG.

Direct decode και prefix reuse είναι διαφορετικές δοκιμές

Το direct canary χρησιμοποίησε δύο ενεργά requests με prompt 59.008 tokens το καθένα, CUDA graph replay, στατικό μείγμα FP8/TQ3, απενεργοποιημένο dynamic retiering και χωρίς dense shadow. Κατέγραψε 29,270 tokens ανά δευτερόλεπτο έναντι 29,804 του control, throughput ratio 0,9821 και active-KV συμπίεση 3,625×. Και τα 16 full-attention layers ακολούθησαν το direct route, με μηδενικά fallbacks σε 32 request-layer instances.

Πρόκειται για ένα μόνο ζεύγος μετρήσεων. Δεν υπάρχουν επαναλήψεις, confidence intervals, TTFT ή percentiles inter-token latency, ενώ η καταγραφή δεν δεσμεύει τον KV dtype του dense control. Επομένως το 0,9821 δεν μπορεί να παρουσιαστεί ως γενική σύγκριση BF16 ή FP8.

Σε ξεχωριστό warm-prefix coordinate, με blocks 832 tokens και N=32, αναφέρονται 32/32 ακριβή passkey outputs, μηδενικά fallbacks, 4,342× physical KV compression και throughput ratio 1,021× έναντι dense FP8 automatic prefix caching. Αυτά τα αποτελέσματα τεκμηριώνουν prefix mechanics στη συγκεκριμένη ρύθμιση· δεν συγχωνεύονται με το quality profile ή το direct canary. Για διαφορετική τεχνική επαναχρησιμοποίησης κοινών τμημάτων context, δείτε και το KVBoost.

Τι σημαίνει για επιχειρησιακά συστήματα AI

Η πιθανή αξία δεν είναι ότι κάθε απάντηση θα γίνει αυτομάτως γρηγορότερη. Μικρότερη KV cache μπορεί να επιτρέψει περισσότερα resident contexts, μεγαλύτερα batches ή λιγότερα admission blocks όταν το σύστημα βρίσκεται υπό υψηλό φορτίο. Η συμπίεση μετά το prefill μπορεί ταυτόχρονα να προσθέσει conversion cost, άρα το service-observed όφελος πρέπει να μετρηθεί στην ουρά και στον scheduler.

Για e-commerce, customer support ή knowledge workflows, το κρίσιμο ερώτημα είναι αν το σύστημα διατηρεί τις παλιές οδηγίες και πηγές που επηρεάζουν την τελική απάντηση, μέσα στο latency και το κόστος που αντέχει η υπηρεσία. Η μνήμη GPU είναι μόνο ένα τμήμα του unit economics. Το AI ROI σε επίπεδο εργασίας χρειάζεται να συνυπολογίζει αποτυχίες, retries, human review και πραγματικό outcome.

Η τεχνική είναι περισσότερο σχετική για ομάδες που ελέγχουν το inference stack ή συνεργάζονται με πάροχο που εκθέτει αρκετή telemetry. Μια εφαρμογή που καλεί απλώς ένα κλειστό API δεν μπορεί να θεωρήσει ότι έχει το ίδιο memory profile. Για το πώς runtime, scheduler και προϊόν συνδέονται σε μία ενιαία αρχιτεκτονική, βοηθά η ανάλυση για το full-stack AI.

Πώς αξιολογείται μια τεχνική KV compression στην παραγωγή

Το ασφαλές pilot δεν ξεκινά από έναν headline ratio. Ξεκινά από αντιπροσωπευτικά traces και ένα dense control με κλειδωμένες εκδόσεις μοντέλου, tokenizer, runtime, kernels και scheduler. Μετά αλλάζει μόνο η πολιτική KV και καταγράφει τι συμβαίνει σε μνήμη, ποιότητα και latency.

Από το paper σε ελεγχόμενο production pilot

  1. Стъпка 1Ορίστε το πραγματικό long-context workload

    Συλλέξτε κατανομές prompt length, output length, concurrency, prefix reuse και τα σημεία του παλιού context που πρέπει να παραμένουν ανακτήσιμα.

  2. Стъпка 2Κλειδώστε ένα dense control

    Καταγράψτε model και tokenizer revision, KV dtype, engine commit, CUDA stack, kernels, scheduler policy και ακριβές hardware.

  3. Стъпка 3Μετρήστε φυσική και συνολική μνήμη χωριστά

    Παρακολουθήστε active KV bytes, metadata, scratch, allocator reserve, weights και peak HBM ώστε ο codec ratio να μη συγχέεται με τη μνήμη όλης της διεργασίας.

  4. Стъпка 4Δοκιμάστε τις κρίσιμες ανακλήσεις

    Χρησιμοποιήστε έγγραφα και συνομιλίες όπου μια παλιά οδηγία ή πηγή αλλάζει την ορθή απάντηση και συγκρίνετε ζευγαρωμένα outputs με το control.

  5. Стъпка 5Τρέξτε offered-load καμπύλες

    Μετρήστε admission rate, queue time, TTFT, inter-token latency percentiles, throughput και fallbacks σε χαμηλό και υψηλό φορτίο.

  6. Стъпка 6Ελέγξτε transitions και prefix ownership

    Δοκιμάστε retiering, copy-on-write, cancellation, cache eviction και concurrent readers για leaks, stale references και σιωπηλές επιστροφές σε dense path.

  7. Стъпка 7Ορίστε rollback με βάση SLO και ποιότητα

    Μην ενεργοποιήσετε καθολικά τη συμπίεση αν οι ουρές, τα tail latencies ή τα task-specific evals ξεπερνούν τα προκαθορισμένα όρια.

Αυτός ο έλεγχος συνδέει την υποδομή με τη συμπεριφορά του προϊόντος. Αν μια ομάδα θέλει να περάσει από demo σε λειτουργία παραγωγής, τα ίδια validation gates πρέπει να ενσωματωθούν στο ευρύτερο σχέδιο deployment, όπως περιγράφεται στα πέντε εμπόδια από AI agent demo σε παραγωγή.

Οι περιορισμοί που δεν πρέπει να χαθούν

Η αξιολόγηση αφορά το Qwen3.6-27B σε μία NVIDIA RTX PRO 6000 Blackwell 96 GB. Δεν καλύπτει tensor parallelism, multi-GPU serving, vision paths ή άλλες αρχιτεκτονικές. Επειδή το μοντέλο είναι υβριδικό, οι λόγοι συμπίεσης αφορούν το attention KV των 16 full-attention layers και όχι ολόκληρη τη μνήμη του process ή το Gated DeltaNet state.

Τα profiles ποιότητας, direct decode, deployment accounting και prefix reuse είναι διαφορετικές διαμορφώσεις. Δεν έχουν μετρηθεί conversion throughput, peak scratch, queue lag ή το ποσοστό μετατροπής που μπορεί να κρυφτεί πίσω από άλλο serving work. Το γρήγορο arithmetic profile παρουσίασε επίσης υποχώρηση σε τρία από τα οκτώ 16K RULER tasks, άρα το speed result δεν πρέπει να ενωθεί με τον ευρύτερο ισχυρισμό ποιότητας.

Τέλος, η υλοποίηση είναι proprietary και δεν διατίθεται μαζί με την εργασία. Οι συγγραφείς αναφέρουν ότι detailed manifests, telemetry και raw logs διατηρούνται εσωτερικά, αλλά δεν αποτελούν δημόσιο artifact. Αυτό περιορίζει την ανεξάρτητη αναπαραγωγή και κάνει ακόμη πιο σημαντική την profile-specific ανάγνωση.

Η ουσία: διαχείριση πιστότητας, όχι μόνο λιγότερα bits

Το πιο ενδιαφέρον στοιχείο του Minima-KV είναι η μετάβαση από μία ομοιόμορφη cache σε ιεραρχία πιστότητας. Οι πρόσφατες και προστατευμένες σελίδες παίρνουν περισσότερα bits, οι παλιότερες λιγότερα, αλλά όλες παραμένουν διαθέσιμες στο ενεργό request. Ο codec, τα mixed-format kernels, το global softmax merge, το ownership και τα route counters είναι μέρη του ίδιου συστήματος.

Τα διαθέσιμα αποτελέσματα δείχνουν μια τεχνικά ρεαλιστική κατεύθυνση: σημαντική μείωση attention KV, μικρές αποκλίσεις στα συγκεκριμένα quality tests και direct decode χωρίς dense shadow. Δεν αποτελούν όμως γενική εγγύηση για κάθε μοντέλο, GPU ή workload. Η επόμενη πειστική απόδειξη χρειάζεται δημόσια αναπαραγωγή, περισσότερα μοντέλα και επαναλαμβανόμενες offered-load μετρήσεις με tail latency και conversion overhead.

Για μια επιχείρηση, το πρακτικό συμπέρασμα είναι ότι το long-context AI δεν κλιμακώνεται μόνο με μεγαλύτερο context window. Χρειάζεται ελεγχόμενη διαχείριση state, σαφείς ανταλλαγές ανάμεσα σε μνήμη και πιστότητα και αξιολόγηση πάνω στη δική της εργασία.

AI υποδομή με μετρήσιμα όρια

Σχεδιάστε long-context workflows που αντέχουν στο πραγματικό φορτίο

Η TWO DOTS συνδέει AI αυτοματισμούς με workload-specific evals, telemetry, validation gates και human review, ώστε οι αποφάσεις για context, μνήμη και κόστος να βασίζονται στη δική σας λειτουργία.

Често задавани въпроси

Τι είναι η KV cache;

Είναι η αποθηκευμένη κατάσταση keys και values από προηγούμενα tokens, ώστε το μοντέλο να μην υπολογίζει ξανά ολόκληρο το ιστορικό σε κάθε βήμα παραγωγής.

Τι διαφορετικό κάνει το Minima-KV;

Χωρίζει τις σελίδες σε Recent, Anchor και Stale. Οι Recent και Anchor παραμένουν σε FP8, ενώ οι Stale συμπιέζονται σε TQ3 χωρίς να διαγράφονται από το ενεργό request.

Πόση συμπίεση αναφέρει η εργασία;

Το deployment aggregate των 18,3 KiB ανά live token αντιστοιχεί σε περίπου 3,50 φορές μικρότερο attention KV από BF16 και 1,75 φορές από FP8. Ξεχωριστό direct canary μέτρησε 3,625 φορές active-KV compression.

Διατηρείται πλήρως η ποιότητα;

Όχι ως γενικός ισχυρισμός. Υπήρξε ισοπαλία στο 16K RULER profile, μικρή βελτίωση στα 8K και υποχωρήσεις στα 4K και στο LongBench v2. Δεν παρέχονται confidence intervals για όλες τις συγκρίσεις.

Γίνεται το inference γρηγορότερο;

Δεν έχει αποδειχθεί καθολική επιτάχυνση. Στο μοναδικό direct pair το throughput ratio ήταν 0,9821 έναντι του control. Η πιθανή αξία βρίσκεται κυρίως στη μειωμένη μνήμη και στο admission capacity υπό φορτίο.

Το Minima-KV πετά παλιά tokens;

Όχι για ενεργά requests. Κρατά συμπιεσμένη αναπαράσταση των παλιών μη προστατευμένων σελίδων ώστε να παραμένουν addressable αν ξαναχρειαστούν.

Είναι έτοιμο για κάθε παραγωγικό σύστημα;

Όχι χωρίς επιπλέον validation. Τα αποτελέσματα αφορούν ένα μοντέλο και μία GPU, διαφορετικά evidence profiles και proprietary υλοποίηση που δεν έχει δημοσιευτεί.

Ποιο είναι το βασικό μάθημα για μια επιχείρηση;

Να μετρά χωριστά KV bytes, συνολικό HBM, ποιότητα, admission rate, queue time και latency υπό πραγματικό φορτίο. Ο λόγος συμπίεσης δεν μετατρέπεται αυτόματα σε ίδιο ποσοστό περισσότερων χρηστών.

Информационен бюлетин

Въведете имейл адреса си по-долу, за да се абонирате за нашия бюлетин