Safetensors adalah format model luar biasa yang dirancang untuk menyimpan tensor secara aman, serta menawarkan kecepatan dan performa mengesankan dibandingkan dengan banyak alternatif lain di bidang ini. Tidak hanya sangat cepat, Safetensors juga dirancang dengan kesederhanaan dan keamanan sebagai inti, yang membedakannya dari banyak format tradisional yang digunakan dalam machine learning.
Mengapa Memilih Safetensors?
Dengan banyaknya format yang tersedia untuk machine learning dan penyimpanan data, Anda mungkin bertanya-tanya apa yang membedakan Safetensors. Mari kita luangkan waktu sejenak untuk membandingkan beberapa format ini untuk memahami bagaimana Safetensors unggul dalam parameter-parameter utama:
- Aman: Apakah sebuah file yang diunduh secara acak tidak akan menjalankan kode arbitrer?
- Zero-copy: Apakah membaca file memerlukan memori lebih besar dari ukuran file aslinya?
- Lazy loading: Bisakah file diperiksa tanpa memuat semuanya? Dan bisakah hanya beberapa tensor di dalamnya dimuat tanpa memindai seluruh file (penting dalam pengaturan terdistribusi)?
- Kontrol tata letak: Bisakah lokasi tensor dalam file dikontrol untuk memastikan akses cepat ke tensor individual?
- Tanpa batas ukuran file: Apakah ada batasan untuk ukuran file?
- Fleksibilitas: Bisakah kode kustom disimpan dalam format dan digunakan nanti tanpa kode tambahan sama sekali?
- Bfloat16: Apakah format ini mendukung bfloat16 secara natif tanpa memerlukan solusi rumit?
Setiap simbol ✔ mewakili keberadaan fitur, ❌ ketidakberadaan, ~ keberadaan parsial, dan ? keberadaan yang tidak diketahui.
Format | Aman | Zero-copy | Lazy loading | Tanpa batas ukuran file | Kontrol tata letak | Fleksibilitas | Bfloat16 |
---|---|---|---|---|---|---|---|
SafeTensors | ✔ | ✔ | ✔ | ✔ | ✔ | ❌ | ✔ |
pickle (PyTorch) | ❌ | ❌ | ❌ | ✔ | ❌ | ✔ | ✔ |
H5 (Tensorflow) | ✔ | ❌ | ✔ | ✔ | ~ | ~ | ❌ |
SavedModel (Tensorflow) | ✔ | ❌ | ❌ | ✔ | ✔ | ❌ | ✔ |
MsgPack (flax) | ✔ | ✔ | ❌ | ✔ | ❌ | ❌ | ✔ |
Protobuf (ONNX) | ✔ | ❌ | ❌ | ❌ | ❌ | ❌ | ✔ |
Cap’n’Proto | ✔ | ✔ | ~ | ✔ | ✔ | ~ | ❌ |
Numpy (npy,npz) | ✔ | ? | ? | ❌ | ✔ | ❌ | ❌ |
pdparams (Paddle) | ❌ | ❌ | ❌ | ✔ | ❌ | ✔ | ✔ |
Dari perbandingan ini, Anda dapat melihat bahwa Safetensors memenuhi atau melampaui fitur-fitur yang ditawarkan oleh format model lain. Terutama penting untuk diperhatikan adalah kemampuannya untuk manipulasi data ‘zero-copy’ dan lazy loading, yang dapat secara signifikan meningkatkan efisiensi penanganan data dalam tugas-tugas machine learning.
Beberapa Perbandingan Penting
Meskipun semua format memiliki kekuatan uniknya masing-masing, mari kita periksa bagaimana Safetensors dibandingkan dengan beberapa format yang lebih umum digunakan:
- Pickle (PyTorch): Format yang banyak digunakan, tetapi pickle memiliki kelemahan signifikan – tidak aman karena memungkinkan eksekusi kode arbitrer.
- H5 (Tensorflow): Meskipun aman, format ini tidak mendukung zero-copy, fitur yang integral untuk manipulasi data yang efisien.
- SavedModel (Tensorflow): Format ini khusus untuk Tensorflow dan kurang fleksibel untuk aplikasi lain.
- Numpy (npz): Meskipun populer, format ini tidak mendukung bfloat16, fitur yang semakin penting dalam dunia ML.
Di Balik Layar Safetensors
Menyelami lebih dalam tentang Safetensors, kita menemukan bahwa ini bukan hanya format data, tetapi kombinasi dari pilihan desain yang dipikirkan matang-matang yang meningkatkan keamanan, efisiensi, dan kegunaan:
- Zero-copy: Desain Safetensors memungkinkan zero-copy sejati di CPU jika file sudah ada dalam cache. Di GPU, meskipun penyalinan selalu diperlukan karena tidak adanya disk cache, desain ini menghindari kebutuhan untuk mengalokasikan semua tensor di CPU pada titik waktu tertentu.
- Endianness: Safetensors menggunakan urutan little-endian, pilihan populer dalam penyimpanan data.
- Order: Format ini mengadopsi urutan ‘C’ atau row-major. Pilihan ini selaras dengan standar yang lazim dalam penyimpanan data.
- Stride: Striding tidak didukung. Semua tensor perlu dikemas sebelum diserialisasi. Keputusan desain ini dibuat berdasarkan pola penggunaan saat ini dalam format serial.
Lebih dari Sekadar Itu
Selain menjadi format penyimpanan data yang efisien dan aman, Safetensors juga membawa beberapa keuntungan tambahan:
- Mencegah Serangan DOS: Desain Safetensors mengurangi kemungkinan file berbahaya menyebabkan serangan DOS. Ada batasan ukuran header untuk mencegah parsing JSON yang sangat besar, dan ada jaminan bahwa alamat dalam file tidak tumpang tindih, yang berarti memuat file tidak akan pernah melebihi ukuran file dalam memori.
- Pemuatan Lebih Cepat: Safetensors melewati salinan CPU ekstra di PyTorch, memungkinkan waktu pemuatan CPU yang sangat cepat dibandingkan dengan pickle. Waktu pemuatan GPU sama cepatnya atau lebih cepat dari padanan PyTorch-nya.
- Lazy Loading: Dalam pengaturan terdistribusi (multi-node atau multi-gpu), Safetensors memungkinkan pemuatan hanya sebagian tensor, secara signifikan mempercepat waktu pemuatan model dan meningkatkan siklus umpan balik pengembangan.
Penggunaan Luas
Safetensors sudah banyak diadopsi di perusahaan-perusahaan AI terkemuka seperti Hugging Face, EleutherAI, dan StabilityAI. Beberapa proyek terkemuka yang menggunakan Safetensors meliputi:
- 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
Kesimpulannya, Safetensors, dengan serangkaian fitur dan manfaat uniknya, siap untuk menjadi pengubah permainan di dunia machine learning dan penyimpanan data. Jadi, silakan coba dan gunakan – masa depan format model menanti Anda!