Εκπαιδεύοντας τοπικά μοντέλα ΤΝ

Το να έχουμε ένα μοντέλο ΤΝ (LLM) στον υπολογιστή μας σαφώς και είναι σπουδαίο πλεονέκτημα επειδή αφενός, δεν έχει τους περιορισμούς που έχουν τα μεγάλα διαδικτυακά μοντέλα και αφετέρου, μπορεί να εκπαιδευτεί ώστε να κάνουμε αυτά ακριβώς τα οποία πραγματικά θέλουμε.

Γιατί αξίζει ένα τοπικό LLM - τι hardware χρειάζεται

Ωστόσο, την παρούσα στιγμή, κάτι τέτοιο δεν είναι και τόσο εύκολο. Αρχικά, υπάρχουν περιορισμοί στο hardware επειδή για να δημιουργηθεί ένα μεγάλο μοντέλο χρειάζεται δυνατός υπολογιστής, μεγάλη ram και μια δυνατή (fck u) NVDIA κάρτα γραφικών. Με οποιοδήποτε άλλο hardware θα χρειαστεί να υπάρξουν αρκετοί συμβιβασμοί και περιορισμοί.

Δεδομένου ότι στη δουλειά αποκτήσαμε ένα πανάκριβο μηχάνημα πραγματικό κτήνος που πληροί με το παραπάνω τις προδιαγραφές για εκπαίδευση και χρήση τοπικών μοντέλων ΤΝ απέκτησα μια κάποια εμπειρία την οποία θα μοιραστώ για όσους τους ενδιαφέρει κάτι τέτοιο.

Τα μοντέλα που εκπαιδεύτηκαν (δεν έχει τελειώσει ακόμα πλήρως η εκπαίδευσή τους) είναι δυο.
Το ένα για διοικητικές και νομικές εργασίες, το άλλο για τεχνικές / μηχανικές.
Επωφελούμενος λοιπόν τον υπολογιστή εκπαιδεύω εδώ και μήνες ένα τρίτο μοντέλο σε κώδικα, Linux και τα σχετικά.

Ξεκίνησα με ένα προεκπαιδευμένο μοντέλο (το Qwen2.5-Coder 14B) στα βασικά ώστε να μην αρχίσω από το μηδέν. Είναι ένα εξ αυτών, των πολλών, που υπάρχουν στο Ollama.
Αυτά τα οποία θέλω να κάνει είναι να γράφει νέο κώδικα, να εξηγεί κώδικα, να βρίσκει bugs, να κάνει refactoring και να γράφει tests.
Δεν το λες κι εύκολη δουλειά καθώς όλα αυτά απαιτούν διαφορετικούς τύπους δεδομένων.

Πώς έκανα fine-tuning και γιατί τα repositories δεν αρκούν

Μη έχοντας, φυσικά, προηγούμενη εμπειρία στο σπορ ξεκίνησα βάσει λογικής (μου), βρίσκοντας πηγαίο κώδικα (Code Corpus) σε αποθετήρια όπως του GitHub, GitLab, Bitbucket, Stack Overflow και διάφορων open-source projects τα οποία (ορθώς) θεώρησα πως είναι η βάση αυτού που έχτιζα.
Και φυσικά, να του μάθω και γλώσσες όπως πχ: Python, C#, Java, C++, Rust, Go, JavaScript, TypeScript κλπ. Να του δώσω να διαβάσει documentations (API docs, README, επίσημα manuals, language specifications κλπ). Όπως επίσης να διαβάσει προγραμματιστικά forums, tutorials και όλα τα σχετικά.
Κατάλαβα όμως ότι τα διάφορα repos από μόνα τους δεν ήταν αρκετά επειδή δεν είχαν επεξηγήσεις όπως το γιατί γράφτηκε , τι ήταν λάθος, πώς έγινε η διόρθωση, ποια ήταν η απαίτηση. Εκεί προφανώς χρειαζόμουν instruction datasets. Και εκεί πελάγωσα καθώς μετά από 30-40 ημέρες, όλο αυτό αποδείχτηκε ιδιαίτερα κουραστικό και χρονοβόρο. Έτσι, κατάλαβα ότι έπρεπε να βρω άλλη λύση η οποία τόσο καιρό ήταν μπροστά στα μάτια μου. Και ήταν αυτό που λέγεται «knowledge distillation».
Με απλά λόγια, να βάλω ένα άλλο ισχυρό μοντέλο να το εκπαιδεύσει. Δεδομένου ότι έχουμε το Claude και συγκεκριμένα τις pro εκδόσεις (των μοντέλων έστω που, πλέον, επιτρέπει ο πορτοκαλί παράφρονας ) η διαδικασία έγινε απλούστερη και υπερβολικά ταχύτερη.
Δεν θα εξηγήσω αναλυτικά την διαδικασία ώστε να μη κουράσω αλλά σκεφτείτε ότι μέχρι τώρα του έχω δώσει σχεδόν 870.000 enterprise παραδείγματα για το για fine-tuning του μοντέλου μου. Και φυσικά, συνεχίζονται επειδή μιλάμε για εκατομμύρια ώστε να γίνει όσο το δυνατόν καλύτερη δουλειά.
Για να το σπάσω σε κέρματα αυτό, βάζω το Claude να δημιουργήσει ολόκληρα dataset. Του λέω πχ:

Δημιούργησε 10.000 προβλήματα Python διαφορετικής δυσκολίας.

Το Claude λοιπόν, παράγει προβλήματα, λύσεις καθώς και εναλλακτικές (λύσεις), σχολιασμούς, tests, συχνά λάθη και βελτιστοποιήσεις. Λειτουργεί δηλαδή, ως ένας δάσκαλος. Δίνοντας αυτά τα προβλήματα στον μαθητή (το τοπικό μοντέλο) αξιολογεί τις απαντήσεις του.
Και όπως είναι ευνόητο κρατούνται μόνο οι καλύτερες απαντήσεις για την εκπαίδευση.

Knowledge distillation και δημιουργία synthetic datasets

Όπως μου είπε το Claude οι τρόποι που βοηθάει στην εκπαίδευση είναι οι εξής (μεταφέρω αυτούσια την απάντησή του):

  • δημιουργία εκατομμυρίων prompts
  • δημιουργία λύσεων
  • δημιουργία bug-fix παραδειγμάτων
  • παραγωγή unit tests
  • παραγωγή code reviews
  • δημιουργία refactoring examples
  • δημιουργία edge cases
  • δημιουργία συνθετικών datasets υψηλής ποιότητας
  • αξιολόγηση και φιλτράρισμα παραγόμενων δεδομένων
  • μετατροπή υπαρχόντων repositories σε μορφή κατάλληλη για fine-tuning

Και επειδή το fine-tuning από μόνο του δεν ήταν αρκετό (αν τουλάχιστον, έχετε υψηλές απαιτήσεις) καταλήξαμε σε ένα τέτοιο σύστημα:

          User
            │
            ▼
     Local Qwen Coder
            │
    ┌───────┴────────┐
    │                │
Repository       Documentation
    │                │
    └───────┬────────┘
            ▼
      Vector Database
            │
            ▼
       Retrieved Files
            │
            ▼
       Τελική απάντηση

Με αυτόν τον τρόπο το μοντέλο δεν θα βασίζεται μόνο σε όσα έμαθε, αλλά θα διαβάζει κάθε φορά το repository, τα docs καθώς και το ιστορικό αλλαγών (RAG). Αυτό συνήθως βελτιώνει περισσότερο την ποιότητα από ένα πολύ μεγάλο fine-tuning (με LoRA/QLoRA αντί για πλήρη επανεκπαίδευση).

Επιγραμματικά, τα εργαλεία που χρησιμοποιήθηκαν για την εκπαίδευση είναι τα LlamaFactory (προσωπικά, το βρήκα το καλύτερο αν και δεν ξεκίνησα από αυτό).
Εξαιρετική δουλειά όμως, μπορούν να κάνουν τα Axolotl και Unsloth.
Αν και για να πω την αλήθεια, ως νουμπάς που είμαι στο όλο θέμα προτιμώ το H2O LLM Studio που είναι gui.

RAG, LoRA και τα τελικά αποτελέσματα

Δεν θα κουράσω περισσότερο, αλλά εν τάχει αν κάποιος θα ήθελε να ξεκινήσει τώρα θα πρότεινα τα εξής:

  • Ubuntu 24.04 LTS
  • Python + uv ή Conda
  • PyTorch
  • CUDA
  • HuggingFace
  • Unsloth
  • LlamaFactory
  • Ollama
  • Open WebUI

Και σαν σειρά εκμάθησης:

  1. Εγκατάσταση CUDA και PyTorch.
  2. Εκτέλεση ενός μικρού μοντέλου (π.χ. Qwen ή Gemma) με Ollama.
  3. Fine-tuning με Unsloth ή LlamaFactory σε ένα μικρό dataset.
  4. Εξαγωγή του μοντέλου και δοκιμή του μέσω Ollama ή llama.cpp.
  5. Προχωρημένες τεχνικές όπως RAG, function calling και agentic workflows.

Αποτελέσματα αυτής της εκπαίδευσης θα παρουσιάσω σε προσεχείς αναρτήσεις.
Το θέμα είναι ότι όλα και τα τρία εργαλεία που εκπαιδεύτηκαν (με αίμα, δάκρυα, ιδρώτα και πολύ ρεύμα) κάνουν πάρα πολύ καλή δουλειά και τελικά νομίζω ότι άξιζε ο κόπος και με το παραπάνω.

-Σχετικές δημοσίευσεις στο forum:

8 «Μου αρέσει»

Προσθέτω ορισμένες ακόμα πληροφορίες:

Αρχικά, έμαθα κάτι που δεν ήξερα. Και αυτό είναι ότι νοικιάζουμε CPU και GPU (ούτε καν που θυμόμουν ότι υπάρχουν πλατφόρμες που προσφέρουν κάτι τέτοιο).
Και ο λόγος είναι ότι όσο τέρας και να είναι το μηχάνημα και το δίκτυο υπολογιστών γενικότερα ΔΕΝ είναι αρκετό.
Από το τμήμα Πληροφορικής και από το Λογιστήριο έμαθα ότι νοικιάζουμε (H200) στο RunPod με κάπου 4.50 /ώρα. Λεπτομέρειες για τον τρόπο χρέωσης δεν έμαθα ακόμα αλλά όσο είδα μπορεί να πηγαίνει και ανά δευτερόλεπτο.

Βέβαια, κάτι τέτοιο είναι ασύμφορο οικονομικά για οικιακή εκπαίδευση και έτσι έψαξα λίγο περισσότερο και βρήκα τα εξής:

Vast.ai Είναι το πιο φτηνό, αλλά θέλει ψάξιμο για το μηχάνημα.
SaladCloud: Ενδιαφέρουσα περίπτωση επειδή χρησιμοποιεί distributed δίκτυο GPUs. Έχουν εμφανιστεί πολύ χαμηλές τιμές, π.χ. RTX 5090 κάτω από 1€/ώρα, ανάλογα με την προσφορά/διαθεσιμότητα.

ΣΗΜΑΝΤΙΚΟ: Οι τιμές αλλάζουν συνεχώς ανάλογα με τον provider, τη διαθεσιμότητα και με το αν είναι spot/interruptible instance. Επίσης, το ευρώ/δολάριο επίσης μεταβάλλεται καθημερινά.

Δίνω ένα παράδειγμα με τιμές (ας πούμε μια RTX 4090 με €0,70/ώρα):

  • 1 ώρα > €0,70
  • 10 ώρες > €7
  • 100 ώρες > €70
  • 24/7 για 30 μέρες > €504

Φυσικά, υπάρχουν και άλλες τέτοιες πλατφόρμες, οπότε όποιος ενδιαφέρεται μπορεί να ψάξει περισσότερο και να συγκρίνει.

Με υπηρεσίες όπως AWS/GCP/Azure δεν κοίταξα επειδή δεν τις γουστάρω.

Σε επόμενο post θα αναφέρω νεότερα, με πληροφορίες βέβαια, για την εκπαίδευση του μοντέλου και τι παραπάνω του μάθαμε.
Επί του παρόντος το εκπαιδεύουμε περισσότερο στα ελληνικά επειδή έχει θεματάκια.

2 «Μου αρέσει»

Επανέρχομαι για να αναφέρω κάποια σημαντικά που ξέχασα:

  1. Τα APIs των Claude, Gemini και ChatGPT που έπαιξαν ρόλο του μέντορα (από κάποιο σημείο και μετά) αγοράστηκαν. Αλλιώς δεν γίνεται. Γίνεται δηλαδή, λέγοντας στα mainstream μοντέλα τι θέλεις και να δίνουν τις ασκήσεις να τις μεταφέρεις στο μοντέλο σου αλλά είναι εξαντλητικό.

  2. Για να μιλήσουν τα μοντέλα μεταξύ τους χρειάζεται ένα (python) script. Υπάρχουν αρκετά διαθέσιμα αλλά εμείς χρειάστηκε να κάνουμε κάποιες επεμβάσεις. Κυρίως επειδή είναι αρκετά ψείρας ο boss του τμήματος Πληροφορικής.

  3. Αν και εμείς θέλουμε να διαθέσουμε δημόσια και δωρεάν αυτό το μοντέλο μας φρεναρε το Νομικό τμήμα λόγω των APIs που ανέφερα καθώς έχουν αυστηρούς όρους.
    Επί του παρόντος ούτε screenshots δεν επιτρέπεται να ανεβαστούν αλλά σύντομα θα γίνει και αυτό με τον έναν ή με τον άλλον τρόπο.

2 «Μου αρέσει»

Ενδιαφέρον θέμα η εκπαίδευση μοντέλων αλλά δαπανηρή, προτιμώ προς το παρόν meta learner (behavioral), όπου ανάλογα τι εγκέφαλο θα φέρει κάθε φορά θα μπορεί να φτιάξει καλύτερα πράγματα που διαρκώς εξελίσσονται.Μπορεί να χρησιμοποιηθεί και για το finetuning μικρότερων εξειδικευμένων μοντέλων.

1 «Μου αρέσει»