HuggingFace Diffusers 0.12 : 使用方法 : safetensors (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 03/06/2023 (v0.13.1)
* 本ページは、HuggingFace Diffusers の以下のドキュメントを翻訳した上で適宜、補足説明したものです:
* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
- 人工知能研究開発支援
- 人工知能研修サービス(経営者層向けオンサイト研修)
- テクニカルコンサルティングサービス
- 実証実験(プロトタイプ構築)
- アプリケーションへの実装
- 人工知能研修サービス
- PoC(概念実証)を失敗させないための支援
- お住まいの地域に関係なく Web ブラウザからご参加頂けます。事前登録 が必要ですのでご注意ください。
◆ お問合せ : 本件に関するお問い合わせ先は下記までお願いいたします。
- 株式会社クラスキャット セールス・マーケティング本部 セールス・インフォメーション
- sales-info@classcat.com ; Web: www.classcat.com ; ClassCatJP
HuggingFace Diffusers 0.12 : 使用方法 : 推論のためのパイプライン – safetensors
What is safetensors ?
safetensors は pickle を使用する PyTorch を使用する従来の .bin とは異なる形式です。それは単なるモデル重み (tensor) である、正確に同じデータを含みます。
Pickle は任意の悪意あるファイルが任意のコードを実行することを可能にし、悪名高く安全ではありません。ハブ自体はそれから問題を防ごうとしていますが、それは銀の弾丸ではありません。
safetensors の第一の最優先の目標は、貴方のコンピュータの奪取が成されないという意味で、機械学習モデルのロードを安全にすることです。
Hence the name.
Why use safetensors ?
安全性 は一つの理由になり得ます、良く知られていないモデルを使用しようとする場合や、ファイルのソースがはっきりしない場合です。
そして 2 番目の理由は、ロードのスピード です。safetensor は通常の pickle ファイルよりも遥かに速くモデルをロードできます。モデルを切り替えるのに多くの時間を消費する場合、これは大きな時間の節約ができます。
Numbers taken AMD EPYC 7742 64-Core Processor
from diffusers import StableDiffusionPipeline
pipe = StableDiffusionPipeline.from_pretrained("stabilityai/stable-diffusion-2-1")
# Loaded in safetensors 0:00:02.033658
# Loaded in Pytorch 0:00:02.663379
This is for the entire loading time, the actual weights loading time to load 500MB:
Safetensors: 3.4873ms PyTorch: 172.7537ms
パフォーマンスは一般に一筋縄ではいかないもので、理解すべき幾つかのことがあります :
- 初めてモデルをハブから使用している場合、重みをダウンロードする必要があります。それはどのようなローディング手法よりも遙かに遅い可能性が極めて高いので、どのような違いも見られないでしょう。
- 初めてモデルをロードしている場合 (例えば再起動後)、貴方のマシンは実際にはディスクを読む必要があります。両方の場合で同じように遅くなる可能性があります。再び、スピードの違いは明らかではないかもしれません (これはハードウェアと実際のモデルに依存します)。
- 最善のパフォーマンス恩恵は、モデルが前に既にコンピュータにロードされていて、一つのモデルから別のものに切り替えているときです。貴方の OS はディスクから極力読まないようにしていて、これは遅いからですが、それはファイルを RAM 内に保持し、遙かに高速に再度それをロードするようにします。safetensors はテンソルのゼロコピーを行いますので、リロードは pytorch よりも高速です、それは少なくとも 1 度の余分なコピーを行うからです。
How to use safetensors ?
safetensors をインストールして、すべての重みが safetensors 形式で利用可能であれば、pytorch 重みの代わりにデフォルトでそれを使用します。
貴方がこれに本当にこだわるのであれば、究極の武器は torch.load を無効にすることです :
import torch
def _raise():
raise RuntimeError("I don't want to use pickle")
torch.load = lambda *args, **kwargs: _raise()
モデル X を利用したくても、safetensors 重みがない場合
Just go to this space. これはその重みで新しい PR を作成します, let’s say refs/pr/22.
このスペースは pickled バージョンをダウンロードし、変換し、そしてそれを PR としてハブにアップロードします。ファイルに何か悪いものが含まれていても、問題を得るのは Huggingface で、貴方自身のコンピュータではありません。そして私たちはそれに対処するための装備をしています。
Then in order to use the model, even before the branch gets accepted by the original author you can do:
from diffusers import StableDiffusionPipeline
pipe = StableDiffusionPipeline.from_pretrained("stabilityai/stable-diffusion-2-1", revision="refs/pr/22")
or you can test it directly online with this space.
And that’s it !
Anything unclear, concerns, or found a bugs ? Open an issue
以上