Was sind Safetensors und warum sind sie besser als .ckpt (PickleTensor)?

Kategorisiert in AI/ML, Open Source Verschlagwortet mit , , , , ,
Save and Share:

Safetensors ist ein bemerkenswertes Modellformat, das für die sichere Speicherung von Tensoren entwickelt wurde und im Vergleich zu vielen Alternativen in diesem Bereich eine beeindruckende Geschwindigkeit und Leistung bietet. Safetensors ist nicht nur unglaublich schnell, sondern wurde auch mit Blick auf Einfachheit und Sicherheit entwickelt, was es von vielen traditionellen Formaten im Bereich des maschinellen Lernens abhebt.

Warum Safetensors wählen?

Angesichts der Vielzahl von Formaten, die für maschinelles Lernen und Datenspeicherung zur Verfügung stehen, fragt man sich vielleicht, was Safetensors so besonders macht. Vergleichen wir doch einmal einige dieser Formate, um zu verstehen, wie Safetensors in Bezug auf wichtige Parameter abschneidet:

  • Sicherheit: Führt eine zufällig heruntergeladene Datei keinen beliebigen Code aus?
  • Zero-Copy: Benötigt das Lesen der Datei mehr Speicher als die Originaldatei?
  • Lazy Loading: Kann die Datei eingesehen werden, ohne alles zu laden? Und können nur einige Tensoren darin geladen werden, ohne die gesamte Datei zu scannen (wichtig in einer verteilten Umgebung)?
  • Layout-Kontrolle: Kann die Position von Tensoren innerhalb der Datei gesteuert werden, um einen schnellen Zugriff auf einzelne Tensoren zu gewährleisten?
  • Keine Dateigrößenbeschränkung: Gibt es eine Beschränkung der Dateigröße?
  • Flexibilität: Kann benutzerdefinierter Code im Format gespeichert und später ohne zusätzlichen Code verwendet werden?
  • Bfloat16: Unterstützt das Format natives Bfloat16, ohne dass seltsame Workarounds erforderlich sind?

Jedes Symbol ✔ steht für das Vorhandensein, ❌ für das Fehlen, ~ für teilweises Vorhandensein und ? für unbekanntes Vorhandensein eines Merkmals.

FormatSicherZero-CopyLazy LoadingKeine DateigrößenbeschränkungLayout-KontrolleFlexibilitätBfloat16
SafeTensors
Pickle (PyTorch)
H5 (Tensorflow)~~
SavedModel (Tensorflow)
MsgPack (Flax)
Protobuf (ONNX)
Cap’n’Proto~~
Numpy (npy,npz)??
Pdparams (Paddle)

Aus diesem Vergleich geht hervor, dass Safetensors die von anderen Modellformaten angebotenen Funktionen erfüllt oder übertrifft. Besonders hervorzuheben ist die Fähigkeit zur „Zero-Copy“-Datenmanipulation und zum Lazy Loading, was die Effizienz der Datenverarbeitung bei Aufgaben des maschinellen Lernens erheblich steigern kann.

Einige bemerkenswerte Vergleiche

Während alle Formate ihre jeweiligen Stärken haben, wollen wir untersuchen, wie Safetensors im Vergleich zu einigen der am häufigsten verwendeten abschneidet:

  • Pickle (PyTorch): Ein weit verbreitetes Format, aber Pickle hat einen wesentlichen Nachteil – es ist unsicher, da es die Ausführung von beliebigem Code ermöglicht.
  • H5 (Tensorflow): Obwohl sicher, unterstützt es kein Zero-Copy, eine Funktion, die für eine effiziente Datenmanipulation unerlässlich ist.
  • SavedModel (Tensorflow): Dieses Format ist spezifisch für Tensorflow und bietet keine Flexibilität für andere Anwendungen.
  • Numpy (npz): Obwohl beliebt, unterstützt dieses Format kein Bfloat16, ein zunehmend wichtiges Feature in der Welt des maschinellen Lernens.

Unter der Haube von Safetensors

Wenn wir etwas tiefer in Safetensors eintauchen, stellen wir fest, dass es sich nicht nur um ein Datenformat handelt, sondern um eine Kombination aus durchdachten Designentscheidungen, die Sicherheit, Effizienz und Nutzen erhöhen:

  • Zero-Copy: Das Design von Safetensors ermöglicht echtes Zero-Copy auf der CPU, wenn sich die Datei bereits im Cache befindet. Auf der GPU ist zwar immer eine Kopie erforderlich, da kein Festplatten-Cache vorhanden ist, aber das Design umgeht die Notwendigkeit, alle Tensoren zu einem bestimmten Zeitpunkt auf der CPU zu allozieren.
  • Endianness: Safetensors verwendet Little-Endian-Anordnung, eine beliebte Wahl bei der Datenspeicherung.
  • Reihenfolge: Es verwendet die Reihenfolge „C“ oder Row-Major. Diese Wahl stimmt mit dem vorherrschenden Standard in der Datenspeicherung überein.
  • Stride: Striding wird nicht unterstützt. Alle Tensoren müssen gepackt werden, bevor sie serialisiert werden. Diese Designentscheidung wurde auf der Grundlage aktueller Nutzungsmuster in serialisierten Formaten getroffen.

Das gewisse Extra

Safetensors ist nicht nur ein effizientes und sicheres Datenspeicherformat, sondern bietet auch einige zusätzliche Vorteile:

  • Verhindern von DOS-Angriffen: Das Design von Safetensors mildert die Möglichkeit, dass bösartige Dateien DOS-Angriffe verursachen. Es gibt eine Beschränkung der Größe des Headers, um das Parsen von extrem großem JSON zu verhindern, und es gibt eine Garantie, dass sich Adressen in der Datei nicht überschneiden, was bedeutet, dass das Laden einer Datei niemals die Dateigröße im Speicher überschreiten sollte.
  • Schnelleres Laden: Safetensors umgeht die zusätzliche CPU-Kopie in PyTorch und ermöglicht extrem schnelle CPU-Ladezeiten im Vergleich zu Pickle. Die GPU-Ladezeiten sind genauso schnell oder schneller als ihre PyTorch-Äquivalente.
  • Lazy Loading: In verteilten Umgebungen (Multi-Node oder Multi-GPU) ermöglicht Safetensors das Laden nur eines Teils der Tensoren, was die Modellladezeiten erheblich beschleunigt und die Entwicklungs-Feedbackschleifen verbessert.

In freier Wildbahn

Safetensors wird bereits von führenden KI-Unternehmen wie  Hugging FaceEleutherAI, und StabilityAI flächendeckend eingesetzt. Zu den wichtigsten Projekten, die Safetensors verwenden, gehören:

Zusammenfassend lässt sich sagen, dass Safetensors mit seinen einzigartigen Eigenschaften und Vorteilen das Potenzial hat, die Welt des maschinellen Lernens und der Datenspeicherung grundlegend zu verändern. Also, nur zu, probieren Sie es aus – die Zukunft der Modellformate erwartet Sie!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert