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

Το να έχουμε ένα μοντέλο ΤΝ (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:

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