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)
変換処理の詳細
このモデルは以下の手順で作成されました:
HuggingFace形式からOLMo-core形式への変換
- 元のHuggingFaceモデル(
llm-jp/llm-jp-3.1-13b-instruct4)をOLMo-core(bolmo)形式に変換 - 重みのマッピングとアーキテクチャの調整を実施
- 元のHuggingFaceモデル(
iFairy量子化の適用
- 2ビット複素数量子化(PhaseQuant)を適用
- レイヤー単位量子化(layer-wise quantization)を使用してメモリ効率を最適化
- キャリブレーションデータを使用した最適化
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プロジェクトを使用して作成されました。
お問い合わせ
質問や問題がある場合は、以下のいずれかにお問い合わせください:
- 元モデルに関する質問: llm-jp(at)nii.ac.jp
- 量子化技術に関する質問: OLMo-core GitHub Issues
- Downloads last month
- 3