JP / EN

広告

HuggingFaceモデルをローカルに落とす・シンボリックリンクを無効にする

タグ:linux machine_learning

HuggingFaceは言語処理や画像認識のためのTransofrmerモデルが多く入っているライブラリだ。 モデルの重みファイルも実行時に自動的にインターネット上のHuggingFace用のファイルサーバ (モデルハブなどと呼ばれる)から落としてきてくれるため、 使いやすい。
ところがこのモデルダウンロード機能が却って問題となるユースケースもある。 学習・推論環境にインターネットがない場合だ。 セキュリティのためにインターネットに繋がらない環境で学習を行わなければいけない場合・ または組み込みデバイスなどインターネットから切り離された機器にモデルをデプロイするとき などがこれに該当する。
このようなときは
  • 事前にモデルファイルをネットのある環境で落として配置しておく
  • 使うコードでモデルダウンロードをoffにする
  • 事前に落としたファイルを参照先として設定する
というようにすればよい。

モデルのダウンロードのためにはダウンロードツールhuggingface_hubを pip install huggingface-hubでインストールしておいてから、 Pythonで次のようなコードを実行する。
    import huggingface_hub

    model_id = "CompVis/stable-diffusion-v1-4"  # 落とすモデル名
    local_dir = "./sd_local"  # 保存先フォルダ名
    huggingface_hub.snapshot_download(model_id, local_dir=local_dir, loca_dir_use_symlinks=False)
  

これでディレクトリsd_local内にREADMEやmodel_index.json、そのほか モデルの事態が配置されるはずだ。

重要なポイントはloca_dir_use_symlinks=Falseでシンボリックリンク 無効を設定することだ。 HuggingFaceのファイルは実はgit lfsでバージョン管理されている。このため 各スナップショットはデフォルトだとgitオブジェクトへのシンボリックリンク となっている。
シンボリックリンクを残したまま使うこともできるが、コピーして移動したりtgzに固めたりしたときに リンクがおかしくなることがあるので、シンボリックリンクでなく実体を つくるようにしておけば安心である。(ただしスナップショットごとに同じファイルをコピーしてしまったりも するので、ディスク容量的にはこの方が無駄が増えてしまうことにも留意する。)

おすすめ記事

PIL, NumPy, PyTorchのデータ相互変換早見表

NumPyのarray.sizeに相当するのはPytorchのTensor.numel()

PyTorch Tensorを確実にNumpy Arrayに変換する



このエントリーをはてなブックマークに追加

https://wonderhorn.net/