Safetensorsは、テンソルを安全に保存するために設計された優れたモデル形式であり、この分野における多くの代替手段と比較して、驚くべき速度とパフォーマンスを誇っています。Safetensorsは非常に高速であるだけでなく、シンプルさと安全性を念頭に置いて設計されており、機械学習で使用される多くの従来の形式とは一線を画しています。
Safetensorsを選ぶ理由
機械学習やデータストレージに利用できる形式が多数ある中で、Safetensorsは何が違うのか疑問に思うかもしれません。Safetensorsが主要なパラメータでどのように優れているかを理解するために、いくつかの形式を比較してみましょう。
- 安全性:ランダムにダウンロードしたファイルが、勝手にコードを実行することがないか?
- ゼロコピー:ファイルの読み込みに、元のファイルよりも多くのメモリが必要にならないか?
- 遅延ロード:ファイル全体をロードせずに検査できるか? また、ファイル全体をスキャンせずに、一部のテンソルだけをロードできるか(分散環境では重要)?
- レイアウト制御:個々のテンソルへの高速アクセスを保証するために、ファイル内のテンソルの場所を制御できるか?
- ファイルサイズ制限なし:ファイルサイズに制限はあるか?
- 柔軟性:カスタムコードをフォーマットに保存し、追加のコードなしで後で使用できるか?
- Bfloat16:この形式は、奇妙な回避策を必要とせずに、ネイティブのbfloat16をサポートしているか?
各記号の意味は、✔ が機能の存在、❌ が機能の欠如、~ が部分的な存在、? が不明な存在を表しています。
形式 | 安全性 | ゼロコピー | 遅延ロード | ファイルサイズ制限なし | レイアウト制御 | 柔軟性 | Bfloat16 |
---|---|---|---|---|---|---|---|
SafeTensors | ✔ | ✔ | ✔ | ✔ | ✔ | ❌ | ✔ |
pickle (PyTorch) | ❌ | ❌ | ❌ | ✔ | ❌ | ✔ | ✔ |
H5 (Tensorflow) | ✔ | ❌ | ✔ | ✔ | ~ | ~ | ❌ |
SavedModel (Tensorflow) | ✔ | ❌ | ❌ | ✔ | ✔ | ❌ | ✔ |
MsgPack (flax) | ✔ | ✔ | ❌ | ✔ | ❌ | ❌ | ✔ |
Protobuf (ONNX) | ✔ | ❌ | ❌ | ❌ | ❌ | ❌ | ✔ |
Cap’n’Proto | ✔ | ✔ | ~ | ✔ | ✔ | ~ | ❌ |
Numpy (npy,npz) | ✔ | ? | ? | ❌ | ✔ | ❌ | ❌ |
pdparams (Paddle) | ❌ | ❌ | ❌ | ✔ | ❌ | ✔ | ✔ |
この比較から、Safetensorsは他のモデル形式が提供する機能を満たしているか、それ以上の機能を備えていることがわかります。特に、「ゼロコピー」データ操作と遅延ロードの機能は、機械学習タスクにおけるデータ処理の効率を大幅に向上させることができます。
注目すべき比較
すべての形式に独自の強みがありますが、Safetensorsがより一般的に使用されている形式と比べてどうなのかを見てみましょう。
- Pickle (PyTorch):広く使用されている形式ですが、pickleには重大な欠点があります。それは、任意のコードの実行を許可するため、安全ではありません。
- H5 (Tensorflow):安全ですが、効率的なデータ操作に不可欠な機能であるゼロコピーをサポートしていません。
- SavedModel (Tensorflow):この形式はTensorflowに特化しており、他のアプリケーションに対する柔軟性がありません。
- Numpy (npz):一般的な形式ですが、MLの世界でますます重要になっている機能であるbfloat16をサポートしていません。
Safetensorsの内部構造
Safetensorsをもう少し深く掘り下げてみると、単なるデータ形式ではなく、安全性、効率性、有用性を高める思慮深い設計の組み合わせであることがわかります。
- ゼロコピー:Safetensorsの設計により、ファイルがすでにキャッシュにある場合、CPU上で真のゼロコピーが可能です。GPUでは、ディスクキャッシュがないため常にコピーが必要ですが、この設計により、特定の時点でCPU上のすべてのテンソルを割り当てる必要がなくなります。
- エンディアン:Safetensorsは、データストレージで一般的な選択肢であるリトルエンディアンを使用します。
- 順序:’C’ または行優先順序を採用しています。この選択は、データストレージにおける一般的な標準と一致しています。
- ストライド:ストライドはサポートされていません。すべてのテンソルは、シリアライズされる前にパックする必要があります。この設計上の決定は、シリアライズされた形式での現在の使用パターンに基づいています。
さらなる利点
Safetensorsは、単に効率的で安全なデータストレージ形式であるだけでなく、いくつかの追加の利点ももたらします。
- DOS攻撃の防止:Safetensorsの設計は、悪意のあるファイルによるDOS攻撃の可能性を軽減します。非常に大きなJSONの解析を防ぐためにヘッダーのサイズに制限があり、ファイル内のアドレスが重複しないことが保証されています。つまり、ファイルのロードでファイルサイズを超えるメモリが使用されることはありません。
- 高速ロード:SafetensorsはPyTorchの追加のCPUコピーをバイパスするため、pickleと比較して非常に高速なCPUロード時間を実現できます。GPUのロード時間も、PyTorchと同等かそれ以上です。
- 遅延ロード:分散環境(マルチノードまたはマルチGPU)では、Safetensorsはテンソルの一部のみをロードできるため、モデルのロード時間を大幅に短縮し、開発フィードバックループを改善します。
実際の使用例
Safetensorsは、Hugging Face、EleutherAI、StabilityAIなどの主要なAI企業で既に広く採用されています。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は、その独自の機能と利点により、機械学習とデータストレージの世界でゲームチェンジャーになる準備ができています。さあ、試してみてください。モデル形式の未来があなたを待っています!