HuggingFace Diffusers 0.12 : 使用方法 : safetensors

HuggingFace Diffusers 0.12 : 使用方法 : safetensors (翻訳/解説)

翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 03/06/2023 (v0.13.1)

* 本ページは、HuggingFace Diffusers の以下のドキュメントを翻訳した上で適宜、補足説明したものです:

* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。

 

クラスキャット 人工知能 研究開発支援サービス

クラスキャット は人工知能・テレワークに関する各種サービスを提供しています。お気軽にご相談ください :

◆ 人工知能とビジネスをテーマに WEB セミナーを定期的に開催しています。スケジュール
  • お住まいの地域に関係なく 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

 

以上