見出し画像

Lavi-Bridgeの現在(2024/10)とllama2-7bのhfについて学んだこと@ComfyUI

Lavi-Bridgeについて

以前(2024/5)に記事にしたカスタムノードです。
今はFLUXとかテキストエンコーダーにLLMを使用するのが当たり前になっていましたが、数か月前はそうではなかったなーと思ったりしています。
久しぶりにサイトを覗きましたが、残念ながらsdxlの対応はされていません。SD1.5のままですね。
というか、エラーで最初は動きませんでした。。。。
使用した感じは、おそらくLavi-Bridgeは使わなくても良いかなーという感じかも知れませんが、なんとなく記事を書いたのでそのまま公開します。

GitHub - kijai/ComfyUI-LaVi-Bridge-Wrapper: ComfyUI wrapper node to test Lavi-Bridge

使用しているのは、上のリンクにある、ComfyUI用のノードを公開されているkijaiさんのものです。

エラーの原因は、diffusersのバージョンが問題のようです。
以下のバージョンだと問題なく動作しました。
※最新のバージョンだと0.30.3(2024/10)

!pip install diffusers==0.26.3

llama2-7b-hfについて

このLavi-Bridgeでは、llama2-7bを選択すると、modelsディレクトリに「llama2」というフォルダが作成され、「llama2-7b-hf」フォルダにファイルがダウンロードされます。
Localの場合は手動でダウンロードした方が早い可能性があります。
例えば以下のものから、ダウンロードして配置しても動きます。

WeiNyn/Llama2-7b-hf at main (huggingface.co)

ここで、llama2-7b-hfと記載していますが、huggingfaceでllama2-7bと調べると、hfがついてないものもたくさん出てきます。

その違いについてGPTさんに聞いたのが以下です。

<Llama2-7b とLlama2-7b -hfの違い>

Llama2-7b は、Meta が開発した大規模言語モデル「Llama」シリーズの一部で、7ビリオン(7B)パラメータを持つモデルです。このモデルは、高度な自然言語処理タスクを実行できるように設計されています。Meta は、このモデルを多くの言語理解タスクや生成タスクに活用できるように提供しています。一方で、Llama2-7b-hf というモデルもあります。
この「hf」は、「Hugging Face(ハギングフェイス)」というオープンソースの機械学習プラットフォームを指しています。Llama2-7b-hf は、Llama2-7b モデルを Hugging Face フォーマットに変換したものです。
具体的には、以下の違いがあります。

フォーマットの違い

Llama2-7b は、Meta が提供する独自の形式で保存されており、標準的な PyTorch や他のフレームワークでは直接利用できないことがあります。
Llama2-7b-hf は、Hugging Face 形式に変換されたもので、Hugging Face のライブラリ(Transformers や Diffusers など)を使って簡単にロードして利用できるようになっています。

互換性

Llama2-7b は、Meta の提供する特定の環境やツールで使用するためのものです。
Llama2-7b-hf は、Hugging Face のライブラリやコミュニティのエコシステムと互換性があり、例えば Transformers ライブラリを使うことで他のモデルと同じ方法で扱うことができます。

使いやすさ

Llama2-7b は、使うためにMeta の公式サポートやツールが必要ですが、Llama2-7b-hf は Hugging Face が提供する標準的な API を使って簡単にモデルをロードしたり、ファインチューニングしたりすることができます。

まとめ

要するに、Llama2-7b-hf は Llama2-7b を Hugging Face の形式に適合させたバージョンで、広く利用されている Hugging Face のツールを通じて、より簡単にアクセス・操作できるようにしたものだと理解すれば良いです。

Hugging Face フォーマットの罠

さて、huggingfaceで調べて見ると、hfがついているモデルより、hfがついていないモデルの数が多いです。これはどういうことなのか??

という事で、hfモデルの特徴をGPTさんに聞いてみると、hfモデルの特徴は、config.json、pytorch_model.bin、tokenizer.jsonなどのファイル構成があるもののようです。

hfと書いてなくても、hfフォーマットのものが大半ということが分かります。

一応、公式のモデルをhfフォーマットにするスクリプトがtransformerのgithubサイトにありますが、この場合は変換は必要ないということになります。
convert_llama_weights_to_hf.py」というやつです。
transformers/src/transformers/models/llama/convert_llama_weights_to_hf.py at main · huggingface/transformers (github.com)

当初は「hf」って書いてないなーと思って変換しようと検討しましたがエラーで進まなかったのですが、する必要がないことをやっていたようです。。。。

rishi-3bigs/llama2-7b-finetuned-unfiltered-20epochs at main (huggingface.co)

ということで、気を取り直して、上のリンクのものを代わりに使用してみました。
注意点としては「tokenizer.model」がサイト内に無いため、このままサイト内のものを全てダウンロードしても動作しません。
別なやつから拝借すると起動しました。
llama3-8bも試してみたのですが、メモリーが足りないとかで動きませんでした。

ワークフローを一応貼っておきます。

試した感じだと、プロンプトの反映度はそれほど高いとは言えない印象でした。解像度の問題もあるとは思いますが。。。

本家のサイトには、llama2の追加学習についての記載もありましたので、それをしないと良い感じにならないかもしれません。

ワークフローを見て感じたこととしては、この方法だとコントロールネットなど追加機能を付加するのは難しいことでしょうか。

ちょっとSD1.5を触ってみたい方は試してみるのも良いかと思いますが、別記事を作ってるWLLAの方が良いと思います。


いいなと思ったら応援しよう!