Agent Skills by ALSEL
Anthropic ClaudeLLM・AI開発⭐ リポ 0品質スコア 50/100

model-merging

複数のファインチューニング済みモデルをmergekitを使って統合し、再学習なしに各モデルの能力を組み合わせます。数学・コーディング・会話など異なるドメインの専門性をブレンドした特化モデルの作成、単一モデルを超える性能向上、モデルバリアントの高速な実験検証に活用できます。SLERP・TIES-Merging・DARE・Task Arithmetic・線形マージ、および本番環境へのデプロイ戦略まで幅広くカバーします。

description の原文を見る

Merge multiple fine-tuned models using mergekit to combine capabilities without retraining. Use when creating specialized models by blending domain-specific expertise (math + coding + chat), improving performance beyond single models, or experimenting rapidly with model variants. Covers SLERP, TIES-Merging, DARE, Task Arithmetic, linear merging, and production deployment strategies.

SKILL.md 本文

モデルマージング:事前学習済みモデルの統合

このスキルを使用する場合

モデルマージングを使用する場合:

  • 複数の微調整モデルからの機能を統合する(再学習なし)
  • ドメイン固有の専門知識(数学 + コーディング + チャット)をブレンドして、特化したモデルを作成する
  • 単一モデルを超えたパフォーマンスを改善する(ベンチマークで多くの場合 +5-10%)
  • 学習コストを削減する - GPU が不要で、CPU でマージを実行
  • 迅速に実験する - 数日ではなく数分で新しいモデルバリアントを作成
  • 複数のスキルを保持する - 壊滅的な忘却なしにマージ

成功事例:Marcoro14-7B-slerp(2024年02月の Open LLM Leaderboard で最高)、多くの HuggingFace トップモデルがマージングを使用

ツール:mergekit(Arcee AI)、LazyMergekit、Model Soup

インストール

# mergekit をインストール
git clone https://github.com/arcee-ai/mergekit.git
cd mergekit
pip install -e .

# または pip 経由
pip install mergekit

# オプション:Transformer ライブラリ
pip install transformers torch

クイックスタート

シンプルな線形マージ

# config.yml - 等しい重みで 2 つのモデルをマージ
merge_method: linear
models:
  - model: mistralai/Mistral-7B-v0.1
    parameters:
      weight: 0.5
  - model: teknium/OpenHermes-2.5-Mistral-7B
    parameters:
      weight: 0.5
dtype: bfloat16
# マージを実行
mergekit-yaml config.yml ./merged-model --cuda

# マージされたモデルを使用
python -m transformers.models.auto --model_name_or_path ./merged-model

SLERP マージ(2 つのモデルに最適)

# config.yml - 球面補間
merge_method: slerp
slices:
  - sources:
      - model: mistralai/Mistral-7B-v0.1
        layer_range: [0, 32]
      - model: teknium/OpenHermes-2.5-Mistral-7B
        layer_range: [0, 32]
parameters:
  t: 0.5  # 補間係数(0=モデル1、1=モデル2)
dtype: bfloat16

コアコンセプト

1. マージ方法

線形(Model Soup)

  • パラメータの単純な加重平均
  • 高速で、類似したモデルに適切に機能
  • 2 つ以上のモデルをマージ可能
merged_weights = w1 * model1_weights + w2 * model2_weights + w3 * model3_weights
# ここで w1 + w2 + w3 = 1

SLERP(球面線形補間)

  • 重み空間の球面に沿って補間
  • 重みベクトルの大きさを保持
  • 2 つのモデルのマージに最適
  • 線形より滑らか
# SLERP 公式
merged = (sin((1-t)*θ) / sin(θ)) * model1 + (sin(t*θ) / sin(θ)) * model2
# ここで θ = arccos(dot(model1, model2))
# t ∈ [0, 1]

タスク演算

  • 「タスクベクトル」を抽出(微調整 - ベース)
  • タスクベクトルを結合し、ベースに追加
  • 複数の専門化モデルのマージに適切
# タスクベクトル
task_vector = finetuned_model - base_model

# 複数のタスクベクトルをマージ
merged = base_model + α₁*task_vector₁ + α₂*task_vector₂

TIES マージング

  • タスク演算 + スパース化
  • パラメータの符号競合を解決
  • 多くのタスク固有モデルをマージするのに最適

DARE(Drop And REscale)

  • ランダムに微調整されたパラメータをドロップ
  • 残りのパラメータをリスケール
  • 冗長性を削減し、パフォーマンスを維持

2. 設定構造

# 基本構造
merge_method: <method>  # linear、slerp、ties、dare_ties、task_arithmetic
base_model: <path>      # オプション:タスク演算用のベースモデル

models:
  - model: <path/to/model1>
    parameters:
      weight: <float>   # マージ重み
      density: <float>  # TIES/DARE 用

  - model: <path/to/model2>
    parameters:
      weight: <float>

parameters:
  # メソッド固有のパラメータ

dtype: <dtype>  # bfloat16、float16、float32

# オプション
slices:  # レイヤー単位のマージング
tokenizer:  # トークナイザーの設定

マージ方法ガイド

線形マージ

最適な用途:シンプルなモデルの組み合わせ、等しい重み付け

merge_method: linear
models:
  - model: WizardLM/WizardMath-7B-V1.1
    parameters:
      weight: 0.4
  - model: teknium/OpenHermes-2.5-Mistral-7B
    parameters:
      weight: 0.3
  - model: NousResearch/Nous-Hermes-2-Mistral-7B-DPO
    parameters:
      weight: 0.3
dtype: bfloat16

SLERP マージ

最適な用途:2 つのモデル、滑らかな補間

merge_method: slerp
slices:
  - sources:
      - model: mistralai/Mistral-7B-v0.1
        layer_range: [0, 32]
      - model: teknium/OpenHermes-2.5-Mistral-7B
        layer_range: [0, 32]
parameters:
  t: 0.5  # 0.0 = 最初のモデル、1.0 = 2 番目のモデル
dtype: bfloat16

レイヤー固有の SLERP:

merge_method: slerp
slices:
  - sources:
      - model: model_a
        layer_range: [0, 32]
      - model: model_b
        layer_range: [0, 32]
parameters:
  t:
    - filter: self_attn    # 注意層
      value: 0.3
    - filter: mlp          # MLP 層
      value: 0.7
    - value: 0.5           # その他のレイヤーのデフォルト
dtype: bfloat16

タスク演算

最適な用途:特化したスキルの組み合わせ

merge_method: task_arithmetic
base_model: mistralai/Mistral-7B-v0.1
models:
  - model: WizardLM/WizardMath-7B-V1.1  # 数学
    parameters:
      weight: 0.5
  - model: teknium/OpenHermes-2.5-Mistral-7B  # チャット
    parameters:
      weight: 0.3
  - model: ajibawa-2023/Code-Mistral-7B  # コード
    parameters:
      weight: 0.2
dtype: bfloat16

TIES マージング

最適な用途:多くのモデル、競合の解決

merge_method: ties
base_model: mistralai/Mistral-7B-v0.1
models:
  - model: WizardLM/WizardMath-7B-V1.1
    parameters:
      density: 0.5  # パラメータの上位 50% を保持
      weight: 1.0
  - model: teknium/OpenHermes-2.5-Mistral-7B
    parameters:
      density: 0.5
      weight: 1.0
  - model: NousResearch/Nous-Hermes-2-Mistral-7B-DPO
    parameters:
      density: 0.5
      weight: 1.0
parameters:
  normalize: true
dtype: bfloat16

DARE マージ

最適な用途:冗長性の削減

merge_method: dare_ties
base_model: mistralai/Mistral-7B-v0.1
models:
  - model: WizardLM/WizardMath-7B-V1.1
    parameters:
      density: 0.5    # デルタの 50% をドロップ
      weight: 0.6
  - model: teknium/OpenHermes-2.5-Mistral-7B
    parameters:
      density: 0.5
      weight: 0.4
parameters:
  int8_mask: true  # マスクに int8 を使用(メモリ節約)
dtype: bfloat16

高度なパターン

レイヤー単位のマージング

# 異なるレイヤーに異なるモデルを使用
merge_method: passthrough
slices:
  - sources:
      - model: mistralai/Mistral-7B-v0.1
        layer_range: [0, 16]   # 前半
  - sources:
      - model: teknium/OpenHermes-2.5-Mistral-7B
        layer_range: [16, 32]  # 後半
dtype: bfloat16

マージされたモデルから MoE を作成

# Mixture of Experts を作成
merge_method: moe
base_model: mistralai/Mistral-7B-v0.1
experts:
  - source_model: WizardLM/WizardMath-7B-V1.1
    positive_prompts:
      - "math"
      - "calculate"
  - source_model: teknium/OpenHermes-2.5-Mistral-7B
    positive_prompts:
      - "chat"
      - "conversation"
  - source_model: ajibawa-2023/Code-Mistral-7B
    positive_prompts:
      - "code"
      - "python"
dtype: bfloat16

トークナイザーマージング

merge_method: linear
models:
  - model: mistralai/Mistral-7B-v0.1
  - model: custom/specialized-model

tokenizer:
  source: "union"  # 両モデルの語彙を結合
  tokens:
    <|special_token|>:
      source: "custom/specialized-model"

ベストプラクティス

1. モデルの互換性

# ✅ 良い:同じアーキテクチャ
models = [
    "mistralai/Mistral-7B-v0.1",
    "teknium/OpenHermes-2.5-Mistral-7B",  # どちらも Mistral 7B
]

# ❌ 悪い:異なるアーキテクチャ
models = [
    "meta-llama/Llama-2-7b-hf",  # Llama
    "mistralai/Mistral-7B-v0.1",  # Mistral(互換性なし!)
]

2. 重みの選択

# ✅ 良い:重みの合計が 1.0
models:
  - model: model_a
    parameters:
      weight: 0.6
  - model: model_b
    parameters:
      weight: 0.4  # 0.6 + 0.4 = 1.0

# ⚠️  許容可能:重みが 1.0 を合計しない(タスク演算用)
models:
  - model: model_a
    parameters:
      weight: 0.8
  - model: model_b
    parameters:
      weight: 0.8  # パフォーマンスをブースト可能

3. メソッド選択

# ユースケースに基づいてマージ方法を選択:

# 2 つのモデル、滑らかなブレンド → SLERP
merge_method = "slerp"

# 3 つ以上のモデル、単純な平均 → 線形
merge_method = "linear"

# 複数のタスク固有モデル → タスク演算または TIES
merge_method = "ties"

# 冗長性を削減したい → DARE
merge_method = "dare_ties"

4. 密度チューニング(TIES/DARE)

# 保守的に開始(より多くのパラメータを保持)
parameters:
  density: 0.8  # 80% を保持

# パフォーマンスが良い場合、スパース性を増加
parameters:
  density: 0.5  # 50% を保持

# パフォーマンスが低下する場合、スパース性を削減
parameters:
  density: 0.9  # 90% を保持

5. レイヤー固有のマージング

# ベースモデルの開始と終了を保持
merge_method: passthrough
slices:
  - sources:
      - model: base_model
        layer_range: [0, 2]     # 最初のレイヤーを保持
  - sources:
      - model: merged_middle    # 中間レイヤーをマージ
        layer_range: [2, 30]
  - sources:
      - model: base_model
        layer_range: [30, 32]   # 最後のレイヤーを保持

評価とテスト

マージされたモデルをベンチマーク

from transformers import AutoModelForCausalLM, AutoTokenizer

# マージされたモデルをロード
model = AutoModelForCausalLM.from_pretrained("./merged-model")
tokenizer = AutoTokenizer.from_pretrained("./merged-model")

# 様々なタスクでテスト
test_prompts = {
    "math": "Calculate: 25 * 17 =",
    "code": "Write a Python function to reverse a string:",
    "chat": "What is the capital of France?",
}

for task, prompt in test_prompts.items():
    inputs = tokenizer(prompt, return_tensors="pt")
    outputs = model.generate(**inputs, max_length=100)
    print(f"{task}: {tokenizer.decode(outputs[0])}")

一般的なベンチマーク

  • Open LLM Leaderboard:一般的な機能
  • MT-Bench:マルチターン会話
  • MMLU:マルチタスク精度
  • HumanEval:コード生成
  • GSM8K:数学推論

本番環境でのデプロイ

保存とアップロード

from transformers import AutoModelForCausalLM, AutoTokenizer

# マージされたモデルをロード
model = AutoModelForCausalLM.from_pretrained("./merged-model")
tokenizer = AutoTokenizer.from_pretrained("./merged-model")

# HuggingFace Hub にアップロード
model.push_to_hub("username/my-merged-model")
tokenizer.push_to_hub("username/my-merged-model")

マージされたモデルを量子化

# GGUF で量子化
python convert.py ./merged-model --outtype f16 --outfile merged-model.gguf

# GPTQ で量子化
python quantize_gptq.py ./merged-model --bits 4 --group_size 128

一般的な落とし穴

❌ 落とし穴 1:互換性のないモデルのマージング

# 間違い:異なるアーキテクチャ
models:
  - model: meta-llama/Llama-2-7b  # Llama アーキテクチャ
  - model: mistralai/Mistral-7B   # Mistral アーキテクチャ

修正:同じアーキテクチャのモデルのみをマージ

❌ 落とし穴 2:1 つのモデルに過度に重み付け

# 最適でない:1 つのモデルが支配的
models:
  - model: model_a
    parameters:
      weight: 0.95  # 高すぎる
  - model: model_b
    parameters:
      weight: 0.05  # 低すぎる

修正:より均衡した重みを使用(0.3-0.7 範囲)

❌ 落とし穴 3:評価を行わない

# 間違い:テストなしでマージしてデプロイ
mergekit-yaml config.yml ./merged-model
# すぐにデプロイ(リスク!)

修正:デプロイ前に必ずベンチマークを実施

リソース

関連項目

  • references/methods.md - マージアルゴリズムの詳細解説
  • references/examples.md - 実世界のマージ設定
  • references/evaluation.md - ベンチマークとテスト戦略

ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
davila7
リポジトリ
davila7/claude-code-templates
ライセンス
MIT
最終更新
不明

Source: https://github.com/davila7/claude-code-templates / ライセンス: MIT

関連スキル

OpenAILLM・AI開発⭐ リポ 6,054

agent-browser

AI エージェント向けのブラウザ自動化 CLI です。ウェブサイトとの対話が必要な場合に使用します。ページ遷移、フォーム入力、ボタンクリック、スクリーンショット取得、データ抽出、ウェブアプリのテスト、ブラウザ操作の自動化など、あらゆるブラウザタスクに対応できます。「ウェブサイトを開く」「フォームに記入する」「ボタンをクリックする」「スクリーンショットを取得する」「ページからデータを抽出する」「このウェブアプリをテストする」「サイトにログインする」「ブラウザ操作を自動化する」といった要求や、プログラマティックなウェブ操作が必要なタスクで起動します。

by JimmyLv
汎用LLM・AI開発⭐ リポ 1,982

anyskill

AnySkill — あなたのプライベート・スキルクラウド。GitHubを基盤としたリポジトリからエージェントスキルを管理、同期、動的にロードできます。自然言語でクラウドスキルを検索し、オンデマンドでプロンプトを自動ロード、カスタムスキルのアップロードと共有、スキルバンドルの一括インストールが可能です。OpenClaw、Antigravity、Claude Code、Cursorに対応しています。

by LeoYeAI
汎用LLM・AI開発⭐ リポ 1,982

engram

AIエージェント向けの永続的なメモリシステムです。バグ修正、意思決定、発見、設定変更の後はmem_saveを使用してください。ユーザーが「覚えている」「記憶している」と言及した場合、または以前のセッションと重複する作業を開始する際はmem_searchを使用します。セッション終了前にmem_session_summaryを使用して、コンテキストを保持してください。

by LeoYeAI
汎用LLM・AI開発⭐ リポ 21,584

skyvern

AI駆動のブラウザ自動化により、任意のウェブサイトを自動化できます。フォーム入力、データ抽出、ファイルダウンロード、ログイン、複数ステップのワークフロー実行など、ユーザーがウェブサイトと連携する必要があるときに使用します。Skyvernは、LLMとコンピュータビジョンを活用して、未知のサイトも自動操作可能です。Python SDK、TypeScript SDK、REST API、MCPサーバー、またはCLIを通じて統合できます。

by Skyvern-AI
汎用LLM・AI開発⭐ リポ 1,149

pinchbench

PinchBenchベンチマークを実行して、OpenClawエージェントの実世界タスクにおけるパフォーマンスを評価できます。モデルの機能テスト、モデル間の比較、ベンチマーク結果のリーダーボード提出、またはOpenClawのセットアップがカレンダー、メール、リサーチ、コーディング、複数ステップのワークフローにどの程度対応しているかを確認する際に使用します。

by pinchbench
汎用LLM・AI開発⭐ リポ 4,693

openui

OpenUIとOpenUI Langを使用してジェネレーティブUIアプリを構築できます。これらはLLM生成インターフェースのためのトークン効率的なオープン標準です。OpenUI、@openuidev、ジェネレーティブUI、LLMからのストリーミングUI、AI向けコンポーネントライブラリ、またはjson-render/A2UIの置き換えについて述べる際に使用します。スキャフォルディング、defineComponent、システムプロンプト、Renderer、およびOpenUI Lang出力のデバッグに対応しています。

by thesysdev
本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: davila7 · davila7/claude-code-templates · ライセンス: MIT