Το Safetensors είναι μια αξιοσημείωτη μορφή μοντέλου σχεδιασμένη για την ασφαλή αποθήκευση tensors, προσφέροντας εντυπωσιακή ταχύτητα και απόδοση σε σύγκριση με πολλές από τις εναλλακτικές λύσεις στον τομέα. Όχι μόνο είναι απίστευτα γρήγορο το Safetensors, αλλά έχει επίσης σχεδιαστεί με γνώμονα την απλότητα και την ασφάλεια, ξεχωρίζοντάς το από πολλές παραδοσιακές μορφές που χρησιμοποιούνται στην μηχανική μάθηση.
Γιατί να επιλέξετε το Safetensors;
Με μια πληθώρα μορφών διαθέσιμων για μηχανική μάθηση και αποθήκευση δεδομένων, ίσως αναρωτιέστε τι κάνει το Safetensors να ξεχωρίζει. Λοιπόν, ας αφιερώσουμε λίγο χρόνο για να συγκρίνουμε μερικές από αυτές τις μορφές για να κατανοήσουμε πώς το Safetensors ανταποκρίνεται σε βασικές παραμέτρους:
- Ασφαλές: Ένα αρχείο που έχει ληφθεί τυχαία δεν θα εκτελέσει αυθαίρετο κώδικα;
- Zero-copy: Η ανάγνωση του αρχείου απαιτεί περισσότερη μνήμη από το αρχικό αρχείο;
- Lazy loading: Μπορεί το αρχείο να επιθεωρηθεί χωρίς να φορτωθούν τα πάντα; Και μπορούν να φορτωθούν μόνο ορισμένοι tensors από αυτό χωρίς σάρωση ολόκληρου του αρχείου (σημαντικό σε ένα κατανεμημένο περιβάλλον);
- Έλεγχος διάταξης: Μπορεί να ελεγχθεί η θέση των tensors μέσα στο αρχείο για να διασφαλιστεί γρήγορη πρόσβαση σε μεμονωμένους tensors;
- Χωρίς όριο μεγέθους αρχείου: Υπάρχει όριο στο μέγεθος του αρχείου;
- Ευελιξία: Μπορεί προσαρμοσμένος κώδικας να αποθηκευτεί στη μορφή και να χρησιμοποιηθεί αργότερα χωρίς επιπλέον κώδικα;
- Bfloat16: Υποστηρίζει η μορφή native bfloat16 χωρίς την ανάγκη για περίεργες παρακάμψεις;
Κάθε σύμβολο ✔ αντιπροσωπεύει την παρουσία, ❌ την απουσία, ~ μερική παρουσία και ? άγνωστη παρουσία ενός χαρακτηριστικού.
Μορφή | Ασφαλές | Zero-copy | Lazy loading | Χωρίς όριο μεγέθους αρχείου | Έλεγχος διάταξης | Ευελιξία | Bfloat16 |
---|---|---|---|---|---|---|---|
SafeTensors | ✔ | ✔ | ✔ | ✔ | ✔ | ❌ | ✔ |
pickle (PyTorch) | ❌ | ❌ | ❌ | ✔ | ❌ | ✔ | ✔ |
H5 (Tensorflow) | ✔ | ❌ | ✔ | ✔ | ~ | ~ | ❌ |
SavedModel (Tensorflow) | ✔ | ❌ | ❌ | ✔ | ✔ | ❌ | ✔ |
MsgPack (flax) | ✔ | ✔ | ❌ | ✔ | ❌ | ❌ | ✔ |
Protobuf (ONNX) | ✔ | ❌ | ❌ | ❌ | ❌ | ❌ | ✔ |
Cap’n’Proto | ✔ | ✔ | ~ | ✔ | ✔ | ~ | ❌ |
Numpy (npy,npz) | ✔ | ? | ? | ❌ | ✔ | ❌ | ❌ |
pdparams (Paddle) | ❌ | ❌ | ❌ | ✔ | ❌ | ✔ | ✔ |
Από αυτή τη σύγκριση, μπορείτε να δείτε ότι το Safetensors πληροί ή υπερβαίνει τα χαρακτηριστικά που προσφέρουν άλλες μορφές μοντέλων. Είναι ιδιαίτερα αξιοσημείωτο για την ικανότητά του για χειρισμό δεδομένων ‘zero-copy’ και lazy loading, το οποίο μπορεί να ενισχύσει σημαντικά την αποδοτικότητα του χειρισμού δεδομένων σε εργασίες μηχανικής μάθησης.
Μερικές Αξιοσημείωτες Συγκρίσεις
Ενώ όλες οι μορφές έχουν τα μοναδικά τους πλεονεκτήματα, ας εξετάσουμε πώς το Safetensors τα πάει σε σύγκριση με μερικές από τις πιο συνηθισμένες:
- Pickle (PyTorch): Μια ευρέως χρησιμοποιούμενη μορφή, αλλά το pickle έρχεται με ένα σημαντικό μειονέκτημα – είναι μη ασφαλές καθώς επιτρέπει την εκτέλεση αυθαίρετου κώδικα.
- H5 (Tensorflow): Αν και ασφαλές, δεν υποστηρίζει zero-copy, ένα χαρακτηριστικό απαραίτητο για αποτελεσματικό χειρισμό δεδομένων.
- SavedModel (Tensorflow): Αυτή η μορφή είναι συγκεκριμένη για το Tensorflow και στερείται ευελιξίας για άλλες εφαρμογές.
- Numpy (npz): Αν και δημοφιλής, αυτή η μορφή δεν υποστηρίζει bfloat16, ένα ολοένα και πιο σημαντικό χαρακτηριστικό στον κόσμο της ML.
Κάτω από το Καπό του Safetensors
Εμβαθύνοντας λίγο περισσότερο στο Safetensors, διαπιστώνουμε ότι δεν είναι απλώς μια μορφή δεδομένων, αλλά ένας συνδυασμός προσεκτικών σχεδιαστικών επιλογών που ενισχύουν την ασφάλεια, την αποδοτικότητα και τη χρησιμότητα:
- Zero-copy: Ο σχεδιασμός του Safetensors επιτρέπει true zero-copy στην CPU εάν το αρχείο είναι ήδη στην cache. Στην GPU, παρόλο που ένα αντίγραφο είναι πάντα απαραίτητο λόγω της απουσίας cache δίσκου, ο σχεδιασμός παρακάμπτει την ανάγκη να δεσμεύονται όλοι οι tensors στην CPU σε οποιοδήποτε δεδομένο σημείο.
- Endianness: Το Safetensors χρησιμοποιεί little-endian ordering, μια δημοφιλής επιλογή στην αποθήκευση δεδομένων.
- Order: Υιοθετεί ‘C’ ή row-major ordering. Αυτή η επιλογή ευθυγραμμίζεται με το κυρίαρχο πρότυπο στην αποθήκευση δεδομένων.
- Stride: Το Striding δεν υποστηρίζεται. Όλοι οι tensors πρέπει να συσκευαστούν πριν σειριοποιηθούν. Αυτή η σχεδιαστική απόφαση λήφθηκε με βάση τα τρέχοντα πρότυπα χρήσης σε σειριοποιημένες μορφές.
Το Επιπλέον Μίλι
Πέρα από το να είναι απλώς μια αποτελεσματική και ασφαλής μορφή αποθήκευσης δεδομένων, το Safetensors φέρνει επίσης στο τραπέζι ορισμένα επιπλέον πλεονεκτήματα:
- Αποτροπή επιθέσεων DOS: Ο σχεδιασμός του Safetensors μετριάζει την πιθανότητα κακόβουλων αρχείων που προκαλούν επιθέσεις DOS. Υπάρχει ένα όριο στο μέγεθος της κεφαλίδας για την αποτροπή ανάλυσης εξαιρετικά μεγάλων JSON και υπάρχει εγγύηση ότι οι διευθύνσεις στο αρχείο δεν επικαλύπτονται, πράγμα που σημαίνει ότι η φόρτωση ενός αρχείου δεν πρέπει ποτέ να υπερβαίνει το μέγεθος του αρχείου στη μνήμη.
- Ταχύτερη Φόρτωση: Το Safetensors παρακάμπτει το επιπλέον αντίγραφο CPU στο PyTorch, επιτρέποντας εξαιρετικά γρήγορους χρόνους φόρτωσης CPU σε σύγκριση με το pickle. Οι χρόνοι φόρτωσης GPU είναι τόσο γρήγοροι ή ταχύτεροι από το αντίστοιχο του PyTorch.
- Lazy Loading: Σε κατανεμημένα περιβάλλοντα (multi-node ή multi-gpu), το Safetensors επιτρέπει τη φόρτωση μόνο μέρους των tensors, επιταχύνοντας σημαντικά τους χρόνους φόρτωσης μοντέλων και βελτιώνοντας τους βρόχους ανατροφοδότησης ανάπτυξης.
Στην Πράξη
Το Safetensors ήδη γνωρίζει ευρεία υιοθέτηση σε κορυφαίες επιχειρήσεις τεχνητής νοημοσύνης όπως οι Hugging Face, EleutherAI, και StabilityAI. Μερικά εξέχοντα έργα που χρησιμοποιούν το Safetensors περιλαμβάνουν:
- huggingface/transformers
- AUTOMATIC1111/stable-diffusion-webui
- Llama-cpp
- microsoft/TaskMatrix
- hpcaitech/ColossalAI
- huggingface/pytorch-image-models
- CivitAI
- huggingface/diffusers
- coreylowman/dfdx
- invoke-ai/InvokeAI
- oobabooga/text-generation-webui
- Sanster/lama-cleaner
- PaddlePaddle/PaddleNLP
- AIGC-Audio/AudioGPT
- brycedrennan/imaginAIry
- comfyanonymous/ComfyUI
- LianjiaTech/BELLE
Συμπερασματικά, το Safetensors, με το μοναδικό σύνολο χαρακτηριστικών και πλεονεκτημάτων του, είναι έτοιμο να γίνει σημείο καμπής στον κόσμο της μηχανικής μάθησης και της αποθήκευσης δεδομένων. Οπότε, προχωρήστε και δοκιμάστε το – το μέλλον των μορφών μοντέλων σας περιμένει!