LLM-JP-3.1-13B-Instruct4 (iFairy Quantized)

このリポジトリは、LLM-JP-3.1-13b-instruct4モデルをOLMo-core形式に変換し、iFairy量子化技術(2ビット複素数量子化)を適用した量子化モデルです。

モデル概要

  • ベースモデル: llm-jp/llm-jp-3.1-13b-instruct4
  • 量子化手法: iFairy PhaseQuant(2ビット複素数量子化)
  • 量子化値: {±1, ±i}
  • 圧縮率: 約1/8(理論値)
  • モデルアーキテクチャ: Llama-based (13B parameters, 40 layers)

変換処理の詳細

このモデルは以下の手順で作成されました:

  1. HuggingFace形式からOLMo-core形式への変換

    • 元のHuggingFaceモデル(llm-jp/llm-jp-3.1-13b-instruct4)をOLMo-core(bolmo)形式に変換
    • 重みのマッピングとアーキテクチャの調整を実施
  2. iFairy量子化の適用

    • 2ビット複素数量子化(PhaseQuant)を適用
    • レイヤー単位量子化(layer-wise quantization)を使用してメモリ効率を最適化
    • キャリブレーションデータを使用した最適化
  3. HuggingFace形式での保存

    • 量子化済みモデルをHuggingFace互換形式で保存
    • トークナイザーと設定ファイルを含む完全な形式

使用方法

基本的な推論(HuggingFace形式)

このモデルはHuggingFace形式で保存されているため、標準のtransformersライブラリでロードできます:

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

# モデルとトークナイザーのロード
model_name = "kevineen/llm-jp-3.1-olmo-ifairy-quantizaion"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
    model_name,
    torch_dtype=torch.bfloat16,
    device_map="auto",
    trust_remote_code=True
)

# プロンプトの準備
prompt = "自然言語処理とは何か、簡潔に説明してください。"
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)

# テキスト生成
with torch.no_grad():
    outputs = model.generate(
        **inputs,
        max_new_tokens=256,
        temperature=0.7,
        do_sample=True,
        top_p=0.95,
        repetition_penalty=1.05,
        pad_token_id=tokenizer.pad_token_id
    )

# 結果のデコード
generated_text = tokenizer.decode(outputs[0], skip_special_tokens=True)
print(generated_text)

チャット形式での使用

LLM-JP-3.1モデルはチャットテンプレートをサポートしています:

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

model_name = "kevineen/llm-jp-3.1-olmo-ifairy-quantizaion"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
    model_name,
    torch_dtype=torch.bfloat16,
    device_map="auto",
    trust_remote_code=True
)

# チャット形式のメッセージ
chat = [
    {"role": "system", "content": "以下は、タスクを説明する指示です。要求を適切に満たす応答を書きなさい。"},
    {"role": "user", "content": "自然言語処理とは何か"},
]

# チャットテンプレートの適用
tokenized_input = tokenizer.apply_chat_template(
    chat,
    add_generation_prompt=True,
    tokenize=True,
    return_tensors="pt"
).to(model.device)

# テキスト生成
with torch.no_grad():
    output = model.generate(
        tokenized_input,
        max_new_tokens=100,
        do_sample=True,
        top_p=0.95,
        temperature=0.7,
        repetition_penalty=1.05,
    )[0]

# 結果のデコード
print(tokenizer.decode(output, skip_special_tokens=True))

OLMo-core形式での推論(推奨)

量子化モデルの完全な機能を使用するには、OLMo-core形式でロードすることを推奨します:

from olmo_core.nn.quantization.checkpoint_manager import QuantizedCheckpointManager
from transformers import AutoTokenizer
import torch

# OLMo-core形式のチェックポイントパス(ローカルまたはHuggingFace Hub)
checkpoint_path = "path/to/llm-jp-3-quantized"  # OLMo-core形式のディレクトリ

# 量子化モデルのロード
checkpoint_manager = QuantizedCheckpointManager()
model, metadata = checkpoint_manager.load_quantized_checkpoint(
    checkpoint_dir=checkpoint_path,
    device="cuda"  # または "cpu"
)

print(f"Model loaded successfully")
print(f"Quantization config: {metadata.quantization_config}")
print(f"Model size: {metadata.quantized_model_size_mb:.2f} MB")
print(f"Compression ratio: {metadata.compression_ratio:.2f}x")

# トークナイザーのロード
tokenizer = AutoTokenizer.from_pretrained("llm-jp/llm-jp-3.1-13b-instruct4")

# 推論
prompt = "自然言語処理とは何か"
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)

with torch.no_grad():
    outputs = model(inputs["input_ids"])
    logits = outputs

# 生成(簡易版)
# 実際の生成にはgenerateメソッドの実装が必要です

モデル詳細

アーキテクチャ

  • モデルタイプ: Transformer-based Language Model (Llama architecture)
  • パラメータ数: 13B
  • レイヤー数: 40
  • 隠れ層サイズ: 5120
  • アテンションヘッド数: 40
  • コンテキスト長: 4096
  • 語彙サイズ: 99,584

量子化詳細

  • 量子化ビット幅: 2ビット
  • 量子化タイプ: 複素数量子化(Complex Quantization)
  • 量子化値: {±1, ±i}
  • 量子化対象レイヤー: アテンション層とフィードフォワード層
  • 量子化手法: iFairy PhaseQuant

パフォーマンス

量子化により、モデルサイズは約1/8に削減されますが、推論性能は維持されます。

  • 元モデルサイズ: 約26GB (bfloat16)
  • 量子化後サイズ: 約3.3GB(理論値)

制限事項

  • このモデルは量子化されているため、元のモデルと比較して精度が若干低下する可能性があります
  • 推論速度はハードウェアと実装に依存します
  • 量子化モデルは主に推論用途に適しています(ファインチューニングには非推奨)

ライセンス

このモデルは元のLLM-JP-3.1-13b-instruct4モデルと同じApache License 2.0の下で公開されています。

引用

元のモデルを使用する場合は、以下のように引用してください:

@misc{llm-jp-3.1,
  title={LLM-JP-3.1: Instruction Pre-Training for Japanese Language Models},
  author={LLM-JP Team},
  year={2024},
  url={https://huggingface.co/llm-jp/llm-jp-3.1-13b-instruct4}
}

関連リンク

作成者

この量子化モデルは、convert-bolmoプロジェクトを使用して作成されました。

お問い合わせ

質問や問題がある場合は、以下のいずれかにお問い合わせください:

Downloads last month
3
Safetensors
Model size
14B params
Tensor type
BF16
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support