mergekitはモデル作成に使えるオープンソースです。
モデルのパラメーターの重みをベースに割合加算してくっつけることができます。
手順
Installationセクションの通り、クローンしてpip install -e .するだけで使えます。
インストールが終わったら直下でmergekit-yaml path/to/your/config.yml ./output-model-directory [–cuda] [–lazy-unpickle] [–allow-crimes] [… other options]で動かせます。
サンプルyamlはexamples直下にあります。使いやすそうだったのでbio-merge.ymlを使いました。
models:
- model: Elizezen/LewdSniffyOtter-7B
parameters:
density: 0.6
weight: 0.6
- model: Local-Novel-LLM-project/Vecteus-v1
parameters:
density: 0.4
weight: 0.4
merge_method: ties
base_model: Local-Novel-LLM-project/Ninja-V3
parameters:
normalize: false
int8_mask: true
dtype: float16
今回はNinja-V3をベースに適当に探してくっつけてみました。
アーキテクチャが違っていてもできるようですが、無難にそろえたほうがいいかと思います。
見ればわかりますがmodelにはhugginfaceのモデル名を入れてください。(この場合はswdq/Ninja-V3-nsfw-enhance)
アーキテクチャはconfig.jsonを見ればわかるようになっています。今回はMistralForCausalLMで揃えました。
スクリプトが終われば指定ディレクトリにhuggigfaceにそのまま上げれる形で出てきます。
今回の結果は以下の通りです。
まとめ
アーキテクチャさえ同じであればモデルマージで微調整を簡単にできるようになりました。
汎用モデルにコーディング専用モデルをくっつけたり、nsfwモデルをくっつけたり、などが気軽に試せるのは利点ですね。割とコンテキスト長がちょうどいいモデル帯がなぜかあまりないので3万コンテキスト長あたりのモデルにくっつけてファインチューニング用基礎モデルを作ってみようかなーとか考えてます。